| 391 | } |
| 392 | |
| 393 | void |
| 394 | ContData::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 |
nothing calls this directly
no test coverage detected