int httpRequestParseHeader(request_t * req, const char *parse_start) { const char *blk_start, *blk_end; if (!httpMsgIsolateHeaders(&parse_start, &blk_start, &blk_end)) return 0; return httpHeaderParse(&req->header, blk_start, blk_end); }
/* * parses a 0-terminating buffer into HttpReply. * Returns: * +1 -- success * 0 -- need more data (partial parse) * -1 -- parse error */ static int httpReplyParseStep(HttpReply * rep, const char *buf, int atEnd) { const char *parse_start = buf; const char *blk_start, *blk_end; const char **parse_end_ptr = &blk_end; assert(rep); assert(parse_start); assert(rep->pstate < psParsed); *parse_end_ptr = parse_start; if (rep->pstate == psReadyToParseStartLine) { if (!httpReplyIsolateStart(&parse_start, &blk_start, &blk_end)) return 0; if (!httpStatusLineParse(&rep->sline, blk_start, blk_end)) return httpReplyParseError(rep); *parse_end_ptr = parse_start; rep->hdr_sz = *parse_end_ptr - buf; rep->pstate++; } if (rep->pstate == psReadyToParseHeaders) { if (!httpMsgIsolateHeaders(&parse_start, &blk_start, &blk_end)) { if (atEnd) blk_start = parse_start, blk_end = blk_start + strlen(blk_start); else return 0; } if (!httpHeaderParse(&rep->header, blk_start, blk_end)) return httpReplyParseError(rep); httpReplyHdrCacheInit(rep); *parse_end_ptr = parse_start; rep->hdr_sz = *parse_end_ptr - buf; rep->pstate++; } return 1; }