Lines Matching refs:parser

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