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

Function maskOsCacheHeaders

plugins/esi/esi.cc:1203–1259  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1201}
1202
1203static void
1204maskOsCacheHeaders(TSHttpTxn txnp)
1205{
1206 TSMBuffer bufp;
1207 TSMLoc hdr_loc;
1208 if (TSHttpTxnServerRespGet(txnp, &bufp, &hdr_loc) != TS_SUCCESS) {
1209 TSError("[esi][%s] Couldn't get server response from txn", __FUNCTION__);
1210 return;
1211 }
1212 int n_mime_headers = TSMimeHdrFieldsCount(bufp, hdr_loc);
1213 TSMLoc field_loc;
1214 const char *name, *value;
1215 int name_len, value_len, n_field_values;
1216 bool os_response_cacheable, mask_header;
1217 string masked_name;
1218 os_response_cacheable = true;
1219 for (int i = 0; i < n_mime_headers; ++i) {
1220 field_loc = TSMimeHdrFieldGet(bufp, hdr_loc, i);
1221 if (!field_loc) {
1222 Dbg(dbg_ctl_local, "[%s] Error while obtaining header field #%d", __FUNCTION__, i);
1223 continue;
1224 }
1225 name = TSMimeHdrFieldNameGet(bufp, hdr_loc, field_loc, &name_len);
1226 if (name) {
1227 mask_header = false;
1228 n_field_values = TSMimeHdrFieldValuesCount(bufp, hdr_loc, field_loc);
1229 for (int j = 0; j < n_field_values; ++j) {
1230 value = TSMimeHdrFieldValueStringGet(bufp, hdr_loc, field_loc, j, &value_len);
1231 if (nullptr == value || !value_len) {
1232 Dbg(dbg_ctl_local, "[%s] Error while getting value #%d of header [%.*s]", __FUNCTION__, j, name_len, name);
1233 } else {
1234 bool is_cache_header = checkForCacheHeader(name, name_len, value, value_len, os_response_cacheable);
1235 if (!os_response_cacheable) {
1236 break;
1237 }
1238 if (is_cache_header) {
1239 Dbg(dbg_ctl_local, "[%s] Masking OS cache header [%.*s] with value [%.*s]. ", __FUNCTION__, name_len, name, value_len,
1240 value);
1241 mask_header = true;
1242 }
1243 } // end if got value string
1244 } // end value iteration
1245 if (mask_header) {
1246 masked_name.assign(HEADER_MASK_PREFIX);
1247 masked_name.append(name, name_len);
1248 if (TSMimeHdrFieldNameSet(bufp, hdr_loc, field_loc, masked_name.data(), masked_name.size()) != TS_SUCCESS) {
1249 TSError("[esi][%s] Couldn't rename header [%.*s]", __FUNCTION__, name_len, name);
1250 }
1251 }
1252 } // end if got header name
1253 TSHandleMLocRelease(bufp, hdr_loc, field_loc);
1254 if (!os_response_cacheable) {
1255 break;
1256 }
1257 } // end header iteration
1258 TSHandleMLocRelease(bufp, TS_NULL_MLOC, hdr_loc);
1259}
1260

Callers 1

globalHookHandlerFunction · 0.85

Calls 14

TSHttpTxnServerRespGetFunction · 0.85
TSMimeHdrFieldsCountFunction · 0.85
TSMimeHdrFieldGetFunction · 0.85
TSMimeHdrFieldNameGetFunction · 0.85
checkForCacheHeaderFunction · 0.85
TSMimeHdrFieldNameSetFunction · 0.85
TSHandleMLocReleaseFunction · 0.85
TSErrorFunction · 0.50
assignMethod · 0.45
appendMethod · 0.45

Tested by

no test coverage detected