static void httpHdrRangeRespSpecPackInto(const HttpHdrRangeSpec * spec, Packer * p) { if (!known_spec(spec->offset) || !known_spec(spec->length)) packerPrintf(p, "*"); else packerPrintf(p, "bytes %" PRINTF_OFF_T "-%" PRINTF_OFF_T "", spec->offset, spec->offset + spec->length - 1); }
void httpHdrContRangePackInto(const HttpHdrContRange * range, Packer * p) { assert(range && p); httpHdrRangeRespSpecPackInto(&range->spec, p); if (!known_spec(range->elength)) packerPrintf(p, "/*"); else packerPrintf(p, "/%ld", (long int) range->elength); }
static void httpHdrRangeSpecPackInto(const HttpHdrRangeSpec * spec, Packer * p) { if (!known_spec(spec->offset)) /* suffix */ packerPrintf(p, "-%d", spec->length); else if (!known_spec(spec->length)) /* trailer */ packerPrintf(p, "%d-", spec->offset); else /* range */ packerPrintf(p, "%d-%d", spec->offset, spec->offset + spec->length - 1); }
/* 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); }
/* parse a 0-terminating buffer and fill internal structures; returns true on success */ void httpStatusLinePackInto(const HttpStatusLine * sline, Packer * p) { assert(sline && p); debug(57, 9) ("packing sline %p using %p:\n", sline, p); debug(57, 9) (HttpStatusLineFormat, sline->version, sline->status, sline->reason ? sline->reason : httpStatusString(sline->status)); packerPrintf(p, HttpStatusLineFormat, sline->version, sline->status, httpStatusLineReason(sline)); }
/* 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); }