| 78 | } // end anonymous namespace |
| 79 | |
| 80 | void |
| 81 | normalize_accept_encoding(TSHttpTxn /* txnp ATS_UNUSED */, TSMBuffer reqp, TSMLoc hdr_loc) |
| 82 | { |
| 83 | TSMLoc field = TSMimeHdrFieldFind(reqp, hdr_loc, TS_MIME_FIELD_ACCEPT_ENCODING, TS_MIME_LEN_ACCEPT_ENCODING); |
| 84 | bool deflate = false; |
| 85 | bool gzip = false; |
| 86 | bool br = false; |
| 87 | // remove the accept encoding field(s), |
| 88 | // while finding out if gzip or deflate is supported. |
| 89 | while (field) { |
| 90 | int val_len; |
| 91 | const char *values_ = TSMimeHdrFieldValueStringGet(reqp, hdr_loc, field, -1, &val_len); |
| 92 | if (values_ && val_len) { |
| 93 | swoc::TextView values(values_, val_len); |
| 94 | while (values) { |
| 95 | swoc::TextView next{values.take_prefix_at(',')}; |
| 96 | strip_ae_value(next); |
| 97 | if (strcasecmp("gzip", next) == 0) { |
| 98 | gzip = true; |
| 99 | } else if (strcasecmp("br", next) == 0) { |
| 100 | br = true; |
| 101 | } else if (strcasecmp("deflate", next) == 0) { |
| 102 | deflate = true; |
| 103 | } |
| 104 | } |
| 105 | } |
| 106 | |
| 107 | TSMLoc tmp = TSMimeHdrFieldNextDup(reqp, hdr_loc, field); |
| 108 | TSMimeHdrFieldDestroy(reqp, hdr_loc, field); // catch retval? |
| 109 | TSHandleMLocRelease(reqp, hdr_loc, field); |
| 110 | field = tmp; |
| 111 | } |
| 112 | |
| 113 | // append a new accept-encoding field in the header |
| 114 | if (deflate || gzip || br) { |
| 115 | TSMimeHdrFieldCreate(reqp, hdr_loc, &field); |
| 116 | TSMimeHdrFieldNameSet(reqp, hdr_loc, field, TS_MIME_FIELD_ACCEPT_ENCODING, TS_MIME_LEN_ACCEPT_ENCODING); |
| 117 | if (br) { |
| 118 | TSMimeHdrFieldValueStringInsert(reqp, hdr_loc, field, -1, "br", strlen("br")); |
| 119 | info("normalized accept encoding to br"); |
| 120 | } |
| 121 | if (gzip) { |
| 122 | TSMimeHdrFieldValueStringInsert(reqp, hdr_loc, field, -1, "gzip", strlen("gzip")); |
| 123 | info("normalized accept encoding to gzip"); |
| 124 | } else if (deflate) { |
| 125 | TSMimeHdrFieldValueStringInsert(reqp, hdr_loc, field, -1, "deflate", strlen("deflate")); |
| 126 | info("normalized accept encoding to deflate"); |
| 127 | } |
| 128 | |
| 129 | TSMimeHdrFieldAppend(reqp, hdr_loc, field); |
| 130 | TSHandleMLocRelease(reqp, hdr_loc, field); |
| 131 | } |
| 132 | } |
| 133 | |
| 134 | void |
| 135 | hide_accept_encoding(TSHttpTxn /* txnp ATS_UNUSED */, TSMBuffer reqp, TSMLoc hdr_loc, const char *hidden_header_name) |
no test coverage detected