static void check_smtp_parser_init(smtp_parser *sp, void *data) { sp->data = data; sp->hello_reply_code = 0; sp->domain = domain; sp->greeting_text = greeting_text; sp->reply_code = reply_code; sp->reply_text = reply_text; sp->smtp_done = smtp_done; smtp_parser_init(sp); }
int smtp_helo_domain_parse(const char *helo, bool allow_literal, const char **domain_r) { struct smtp_parser parser; int ret; smtp_parser_init(&parser, pool_datastack_create(), helo); if ((ret=smtp_parser_parse_domain(&parser, domain_r)) == 0) { if (allow_literal) ret = smtp_parser_parse_address_literal(&parser, domain_r, NULL); } if (ret <= 0 || (parser.cur < parser.end && *parser.cur != ' ')) return -1; return 0; }
int smtp_ehlo_line_parse(const char *ehlo_line, const char **key_r, const char *const **params_r, const char **error_r) { struct smtp_parser parser; int ret; if (ehlo_line == NULL || *ehlo_line == '\0') { if (error_r != NULL) *error_r = "Parameter is empty"; return -1; } smtp_parser_init(&parser, pool_datastack_create(), ehlo_line); if ((ret=smtp_parse_ehlo_line(&parser, key_r, params_r)) <= 0) { if (error_r != NULL) *error_r = parser.error; return -1; } return 1; }
int smtp_xtext_parse(const char *xtext, const char **value_r, const char **error_r) { struct smtp_parser parser; string_t *value = NULL; int ret; if (xtext == NULL || *xtext == '\0') { *value_r = ""; return 1; } if (value_r != NULL) value = t_str_new(256); smtp_parser_init(&parser, pool_datastack_create(), xtext); if ((ret=smtp_parser_parse_xtext(&parser, value)) < 0) { if (error_r != NULL) *error_r = parser.error; return -1; } if (parser.cur < parser.end) { *error_r = "Invalid character in xtext"; return -1; } if (value_r != NULL) { *value_r = str_c(value); if (strlen(*value_r) != str_len(value)) { if (*error_r != NULL) *error_r = "Encountered NUL character in xtext"; return -1; } } return 1; }
int smtp_string_parse(const char *string, const char **value_r, const char **error_r) { struct smtp_parser parser; int ret; if (string == NULL || *string == '\0') { *value_r = ""; return 1; } smtp_parser_init(&parser, pool_datastack_create(), string); if ((ret=smtp_parser_parse_string(&parser, value_r)) < 0) { if (error_r != NULL) *error_r = parser.error; return -1; } if (parser.cur < parser.end) { *error_r = "Invalid character in string"; return -1; } return 1; }