Lines Matching refs:parser

43 void Curl_h1_req_parse_init(struct h1_req_parser *parser, size_t max_line_len)  in Curl_h1_req_parse_init()  argument
45 memset(parser, 0, sizeof(*parser)); in Curl_h1_req_parse_init()
46 parser->max_line_len = max_line_len; in Curl_h1_req_parse_init()
47 Curl_dyn_init(&parser->scratch, max_line_len); in Curl_h1_req_parse_init()
50 void Curl_h1_req_parse_free(struct h1_req_parser *parser) in Curl_h1_req_parse_free() argument
52 if(parser) { in Curl_h1_req_parse_free()
53 Curl_http_req_free(parser->req); in Curl_h1_req_parse_free()
54 Curl_dyn_free(&parser->scratch); in Curl_h1_req_parse_free()
55 parser->req = NULL; in Curl_h1_req_parse_free()
56 parser->done = FALSE; in Curl_h1_req_parse_free()
60 static CURLcode trim_line(struct h1_req_parser *parser, int options) in trim_line() argument
62 DEBUGASSERT(parser->line); in trim_line()
63 if(parser->line_len) { in trim_line()
64 if(parser->line[parser->line_len - 1] == '\n') in trim_line()
65 --parser->line_len; in trim_line()
66 if(parser->line_len) { in trim_line()
67 if(parser->line[parser->line_len - 1] == '\r') in trim_line()
68 --parser->line_len; in trim_line()
78 if(parser->line_len > parser->max_line_len) { in trim_line()
84 static ssize_t detect_line(struct h1_req_parser *parser, in detect_line() argument
90 DEBUGASSERT(!parser->line); in detect_line()
96 parser->line = buf; in detect_line()
97 parser->line_len = line_end - buf + 1; in detect_line()
99 return (ssize_t)parser->line_len; in detect_line()
102 static ssize_t next_line(struct h1_req_parser *parser, in next_line() argument
108 if(parser->line) { in next_line()
109 parser->line = NULL; in next_line()
110 parser->line_len = 0; in next_line()
111 Curl_dyn_reset(&parser->scratch); in next_line()
114 nread = detect_line(parser, buf, buflen, err); in next_line()
116 if(Curl_dyn_len(&parser->scratch)) { in next_line()
118 *err = Curl_dyn_addn(&parser->scratch, parser->line, parser->line_len); in next_line()
121 parser->line = Curl_dyn_ptr(&parser->scratch); in next_line()
122 parser->line_len = Curl_dyn_len(&parser->scratch); in next_line()
124 *err = trim_line(parser, options); in next_line()
130 *err = Curl_dyn_addn(&parser->scratch, (const unsigned char *)buf, buflen); in next_line()
136 static CURLcode start_req(struct h1_req_parser *parser, in start_req() argument
145 DEBUGASSERT(!parser->req); in start_req()
147 p = memchr(parser->line, ' ', parser->line_len); in start_req()
148 if(!p || p == parser->line) in start_req()
151 m = parser->line; in start_req()
152 m_len = p - parser->line; in start_req()
158 for(i = parser->line_len; i > m_len; --i) { in start_req()
159 if(parser->line[i] == ' ') { in start_req()
160 hv = &parser->line[i + 1]; in start_req()
161 hv_len = parser->line_len - i; in start_req()
245 result = Curl_http_req_make2(&parser->req, m, m_len, url, scheme_default); in start_req()
252 result = Curl_http_req_make(&parser->req, m, m_len, scheme, scheme_len, in start_req()
261 ssize_t Curl_h1_req_parse_read(struct h1_req_parser *parser, in Curl_h1_req_parse_read() argument
269 while(!parser->done) { in Curl_h1_req_parse_read()
270 n = next_line(parser, buf, buflen, options, err); in Curl_h1_req_parse_read()
284 if(!parser->line) { in Curl_h1_req_parse_read()
289 else if(!parser->req) { in Curl_h1_req_parse_read()
290 *err = start_req(parser, scheme_default, options); in Curl_h1_req_parse_read()
296 else if(parser->line_len == 0) { in Curl_h1_req_parse_read()
298 if(!parser->req) { in Curl_h1_req_parse_read()
303 parser->done = TRUE; in Curl_h1_req_parse_read()
304 Curl_dyn_reset(&parser->scratch); in Curl_h1_req_parse_read()
308 *err = Curl_dynhds_h1_add_line(&parser->req->headers, in Curl_h1_req_parse_read()
309 parser->line, parser->line_len); in Curl_h1_req_parse_read()