Lines Matching refs:parser
6 #include "smtp-parser.h"
19 struct smtp_parser parser;
27 smtp_parser_init(&parser, pool_datastack_create(), string);
29 if ((ret=smtp_parser_parse_string(&parser, value_r)) < 0) {
31 *error_r = parser.error;
34 if (parser.cur < parser.end) {
86 struct smtp_parser parser;
97 smtp_parser_init(&parser, pool_datastack_create(), xtext);
99 if ((ret=smtp_parser_parse_xtext(&parser, value)) < 0) {
101 *error_r = parser.error;
104 if (parser.cur < parser.end) {
148 struct smtp_parser parser;
151 smtp_parser_init(&parser, pool_datastack_create(), helo);
153 if ((ret=smtp_parser_parse_domain(&parser, domain_r)) == 0) {
155 ret = smtp_parser_parse_address_literal(&parser, domain_r, NULL);
158 if (ret <= 0 || (parser.cur < parser.end && *parser.cur != ' '))
168 static int smtp_parse_ehlo_line(struct smtp_parser *parser,
171 const unsigned char *pbegin = parser->cur;
186 if (parser->cur >= parser->end || !i_isalnum(*parser->cur)) {
187 parser->error = "Unexpected character in EHLO keyword";
190 parser->cur++;
192 while (parser->cur < parser->end &&
193 (i_isalnum(*parser->cur) || *parser->cur == '-'))
194 parser->cur++;
197 *key_r = p_strdup_until(parser->pool, pbegin, parser->cur);
199 if (parser->cur >= parser->end) {
201 *params_r = p_new(parser->pool, const char *, 1);
204 if (*parser->cur != ' ') {
205 parser->error = "Unexpected character in EHLO keyword";
208 parser->cur++;
210 pbegin = parser->cur;
212 p_array_init(¶ms, parser->pool, 32);
213 while (parser->cur < parser->end) {
214 if (*parser->cur == ' ') {
215 if (parser->cur+1 >= parser->end || *(parser->cur+1) == ' ') {
216 parser->error = "Missing EHLO parameter after ' '";
220 param = p_strdup_until(parser->pool, pbegin, parser->cur);
223 pbegin = parser->cur + 1;
224 } else if (!smtp_char_is_ehlo_param(*parser->cur)) {
225 parser->error = "Unexpected character in EHLO parameter";
228 parser->cur++;
241 struct smtp_parser parser;
250 smtp_parser_init(&parser, pool_datastack_create(), ehlo_line);
252 if ((ret=smtp_parse_ehlo_line(&parser, key_r, params_r)) <= 0) {
254 *error_r = parser.error;