MCPcopy Create free account
hub / github.com/apache/trafficserver / fillPostHeader

Method fillPostHeader

plugins/esi/esi.cc:393–457  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

391}
392
393void
394ContData::fillPostHeader(TSMBuffer bufp, TSMLoc hdr_loc)
395{
396 int n_mime_headers = TSMimeHdrFieldsCount(bufp, hdr_loc);
397 TSMLoc field_loc;
398 const char *name, *value;
399 int name_len, value_len;
400 string header;
401 for (int i = 0; i < n_mime_headers; ++i) {
402 field_loc = TSMimeHdrFieldGet(bufp, hdr_loc, i);
403 if (!field_loc) {
404 Dbg(dbg_ctl_local, "[%s] Error while obtaining header field #%d", __FUNCTION__, i);
405 continue;
406 }
407 name = TSMimeHdrFieldNameGet(bufp, hdr_loc, field_loc, &name_len);
408 if (name) {
409 if (Utils::areEqual(name, name_len, TS_MIME_FIELD_TRANSFER_ENCODING, TS_MIME_LEN_TRANSFER_ENCODING)) {
410 Dbg(dbg_ctl_local, "[%s] Not retaining transfer encoding header", __FUNCTION__);
411 } else if (Utils::areEqual(name, name_len, MIME_FIELD_XESI, MIME_FIELD_XESI_LEN)) {
412 Dbg(dbg_ctl_local, "[%s] Not retaining 'X-Esi' header", __FUNCTION__);
413 } else if (Utils::areEqual(name, name_len, TS_MIME_FIELD_CONTENT_LENGTH, TS_MIME_LEN_CONTENT_LENGTH)) {
414 Dbg(dbg_ctl_local, "[%s] Not retaining 'Content-length' header", __FUNCTION__);
415 } else {
416 header.assign(name, name_len);
417 header.append(": ");
418 int n_field_values = TSMimeHdrFieldValuesCount(bufp, hdr_loc, field_loc);
419 for (int j = 0; j < n_field_values; ++j) {
420 value = TSMimeHdrFieldValueStringGet(bufp, hdr_loc, field_loc, j, &value_len);
421 if (nullptr == value || !value_len) {
422 Dbg(dbg_ctl_local, "[%s] Error while getting value #%d of header [%.*s]", __FUNCTION__, j, name_len, name);
423 } else {
424 if (Utils::areEqual(name, name_len, TS_MIME_FIELD_VARY, TS_MIME_LEN_VARY) &&
425 Utils::areEqual(value, value_len, TS_MIME_FIELD_ACCEPT_ENCODING, TS_MIME_LEN_ACCEPT_ENCODING)) {
426 Dbg(dbg_ctl_local, "[%s] Not retaining 'vary: accept-encoding' header", __FUNCTION__);
427 } else if (Utils::areEqual(name, name_len, TS_MIME_FIELD_CONTENT_ENCODING, TS_MIME_LEN_CONTENT_ENCODING) &&
428 Utils::areEqual(value, value_len, TS_HTTP_VALUE_GZIP, TS_HTTP_LEN_GZIP)) {
429 Dbg(dbg_ctl_local, "[%s] Not retaining 'content-encoding: gzip' header", __FUNCTION__);
430 } else {
431 if (header[header.size() - 2] != ':') {
432 header.append(", ");
433 }
434 header.append(value, value_len);
435 checkForCacheHeader(name, name_len, value, value_len, os_response_cacheable);
436 if (!os_response_cacheable) {
437 Dbg(dbg_ctl_local, "[%s] Header [%.*s] with value [%.*s] is a no-cache header", __FUNCTION__, name_len, name,
438 value_len, value);
439 break;
440 }
441 }
442 } // end if got value string
443 } // end value iteration
444
445 if (static_cast<int>(header.size()) > (name_len + 2 /* for ': ' */)) {
446 header.append("\r\n");
447 post_headers.push_back(header);
448 }
449 } // end if processable header
450 } // end if got header name

Callers

nothing calls this directly

Calls 13

TSMimeHdrFieldsCountFunction · 0.85
TSMimeHdrFieldGetFunction · 0.85
TSMimeHdrFieldNameGetFunction · 0.85
areEqualFunction · 0.85
checkForCacheHeaderFunction · 0.85
TSHandleMLocReleaseFunction · 0.85
assignMethod · 0.45
appendMethod · 0.45
sizeMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected