}
int smtp_command_parse_next(struct smtp_command_parser *parser,
+ bool only_finish_previous,
const char **cmd_name_r, const char **cmd_params_r,
enum smtp_command_parse_error *error_code_r,
const char **error_r)
parser->state.state == SMTP_COMMAND_PARSE_STATE_ERROR);
parser->auth_response = FALSE;
+ *cmd_name_r = NULL;
+ *cmd_params_r = NULL;
*error_code_r = parser->error_code = SMTP_COMMAND_PARSE_ERROR_NONE;
*error_r = NULL;
return ret;
}
+ if (only_finish_previous)
+ return 1;
+
ret = smtp_command_parse(parser);
if (ret <= 0) {
if (ret < 0) {
parser = smtp_command_parser_init(input, &test->limits);
while ((ret = smtp_command_parse_next(
- parser, &cmd_name, &cmd_params,
- &error_code, &error)) > 0);
+ parser, FALSE, &cmd_name, &cmd_params,
+ &error_code, &error)) > 0);
test_out_reason("parse success [buffer]", ret == -2,
(ret == -2 ? NULL : error));
for (pos = 0; pos <= command_text_len && ret == 0; pos++) {
test_istream_set_size(input, pos);
ret = smtp_command_parse_next(
- parser, &cmd_name, &cmd_params,
+ parser, FALSE, &cmd_name, &cmd_params,
&error_code, &error);
}
test_istream_set_size(input, command_text_len);
if (ret >= 0) {
while ((ret = smtp_command_parse_next(
- parser, &cmd_name, &cmd_params,
- &error_code, &error)) > 0);
+ parser, FALSE, &cmd_name, &cmd_params,
+ &error_code, &error)) > 0);
}
test_out_reason("parse success [stream]", ret == -2,
command_text_len);
parser = smtp_command_parser_init(input, &test->limits);
- ret = smtp_command_parse_next(parser, &cmd_name, &cmd_params,
+ ret = smtp_command_parse_next(parser, FALSE,
+ &cmd_name, &cmd_params,
&error_code, &error);
i_assert(ret != 0);
for (pos = 0; pos <= command_text_len && ret == 0; pos++) {
test_istream_set_size(input, pos);
- ret = smtp_command_parse_next(
- parser, &cmd_name, &cmd_params,
- &error_code, &error);
+ ret = smtp_command_parse_next(parser, FALSE,
+ &cmd_name, &cmd_params,
+ &error_code, &error);
}
test_istream_set_size(input, command_text_len);
if (ret == 0) {
- ret = smtp_command_parse_next(
- parser, &cmd_name, &cmd_params,
- &error_code, &error);
+ ret = smtp_command_parse_next(parser, FALSE,
+ &cmd_name, &cmd_params,
+ &error_code, &error);
i_assert(ret != 0);
}