void httpHeaderEntryPackInto(const HttpHeaderEntry * e, Packer * p) { assert(e && p); packerAppend(p, strBuf(e->name), strLen(e->name)); packerAppend(p, ": ", 2); packerAppend(p, strBuf(e->value), strLen(e->value)); packerAppend(p, "\r\n", 2); }
void httpBodyPackInto(const HttpBody * body, Packer * p) { assert(body && p); if (body->mb.size) packerAppend(p, body->mb.buf, body->mb.size); }
void httpReplyPackInto(const HttpReply * rep, Packer * p) { assert(rep); httpStatusLinePackInto(&rep->sline, p); httpHeaderPackInto(&rep->header, p); packerAppend(p, "\r\n", 2); httpBodyPackInto(&rep->body, p); }
/* packs request-line and headers, appends <crlf> terminator */ static void httpRequestPack(const request_t * req, Packer * p) { assert(req && p); /* pack request-line */ packerPrintf(p, "%s %s HTTP/1.0\r\n", RequestMethodStr[req->method], strBuf(req->urlpath)); /* headers */ httpHeaderPackInto(&req->header, p); /* trailer */ packerAppend(p, "\r\n", 2); }
void httpHdrRangePackInto(const HttpHdrRange * range, Packer * p) { HttpHdrRangePos pos = HttpHdrRangeInitPos; const HttpHdrRangeSpec *spec; assert(range); while ((spec = httpHdrRangeGetSpec(range, &pos))) { if (pos != HttpHdrRangeInitPos) packerAppend(p, ",", 1); httpHdrRangeSpecPackInto(spec, p); } }
/* packs debug info, canonical request-line and headers, appends <crlf> terminator */ void httpRequestPackDebug(request_t * req, Packer * p) { assert(req && p); /* Client info */ packerPrintf(p, "Client: %s ", inet_ntoa(req->client_addr)); packerPrintf(p, "http_port: %s:%d", inet_ntoa(req->my_addr), req->my_port); if (req->auth_user_request && authenticateUserRequestUsername(req->auth_user_request)) packerPrintf(p, "user: %s", authenticateUserRequestUsername(req->auth_user_request)); packerPrintf(p, "\n"); /* pack request-line */ packerPrintf(p, "%s %s HTTP/%d.%d\r\n", RequestMethodStr[req->method], urlCanonical(req), req->http_ver.major, req->http_ver.minor); /* headers */ httpHeaderPackInto(&req->header, p); /* trailer */ packerAppend(p, "\r\n", 2); }