/* just handy in parsing: resets and returns false */ int httpHeaderReset(HttpHeader * hdr) { http_hdr_owner_type ho = hdr->owner; assert(hdr); ho = hdr->owner; httpHeaderClean(hdr); httpHeaderInit(hdr, ho); return 0; }
static void httpReplyInit(HttpReply * rep) { assert(rep); rep->hdr_sz = 0; rep->pstate = psReadyToParseStartLine; httpBodyInit(&rep->body); httpHeaderInit(&rep->header, hoReply); httpReplyHdrCacheInit(rep); httpStatusLineInit(&rep->sline); }
/* * parses a given string then packs compiled headers and compares the result * with the original, reports discrepancies */ void httpHeaderTestParser(const char *hstr) { static int bug_count = 0; int hstr_len; int parse_success; HttpHeader hdr; int pos; Packer p; MemBuf mb; assert(hstr); /* skip start line if any */ if (!strncasecmp(hstr, "HTTP/", 5)) { const char *p = strchr(hstr, '\n'); if (p) hstr = p + 1; } /* skip invalid first line if any */ if (xisspace(*hstr)) { const char *p = strchr(hstr, '\n'); if (p) hstr = p + 1; } hstr_len = strlen(hstr); /* skip terminator if any */ if (strstr(hstr, "\n\r\n")) hstr_len -= 2; else if (strstr(hstr, "\n\n")) hstr_len -= 1; httpHeaderInit(&hdr, hoReply); /* debugLevels[55] = 8; */ parse_success = httpHeaderParse(&hdr, hstr, hstr + hstr_len); /* debugLevels[55] = 2; */ if (!parse_success) { debug(66, 2) ("TEST (%d): failed to parsed a header: {\n%s}\n", bug_count, hstr); return; } /* we think that we parsed it, veryfy */ memBufDefInit(&mb); packerToMemInit(&p, &mb); httpHeaderPackInto(&hdr, &p); if ((pos = abs(httpHeaderStrCmp(hstr, mb.buf, hstr_len)))) { bug_count++; debug(66, 2) ("TEST (%d): hdr parsing bug (pos: %d near '%s'): expected: {\n%s} got: {\n%s}\n", bug_count, pos, hstr + pos, hstr, mb.buf); } httpHeaderClean(&hdr); packerClean(&p); memBufClean(&mb); }
request_t * requestCreate(method_t method, protocol_t protocol, const char *urlpath) { request_t *req = memAllocate(MEM_REQUEST_T); req->method = method; req->protocol = protocol; if (urlpath) stringReset(&req->urlpath, urlpath); req->max_forwards = -1; req->lastmod = -1; req->client_addr = no_addr; req->my_addr = no_addr; httpHeaderInit(&req->header, hoRequest); return req; }