You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2019/07/22 14:38:55 UTC
[trafficserver] 03/07: Removes the header_normalize plugin. See
#5395
This is an automated email from the ASF dual-hosted git repository.
zwoop pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git
commit d36a75ec5e610dd5a7c51a7c76f2dd6e6c954c2b
Author: Leif Hedstrom <zw...@apache.org>
AuthorDate: Fri Jul 19 13:39:07 2019 -0600
Removes the header_normalize plugin. See #5395
---
plugins/Makefile.am | 1 -
plugins/experimental/header_normalize/Makefile.inc | 20 --
.../header_normalize/header_normalize.cc | 265 ---------------------
3 files changed, 286 deletions(-)
diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index 89cbdb2..1cc1467 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -65,7 +65,6 @@ include experimental/custom_redirect/Makefile.inc
include experimental/fq_pacing/Makefile.inc
include experimental/geoip_acl/Makefile.inc
include experimental/header_freq/Makefile.inc
-include experimental/header_normalize/Makefile.inc
include experimental/hipes/Makefile.inc
include experimental/hook-trace/Makefile.inc
include experimental/inliner/Makefile.inc
diff --git a/plugins/experimental/header_normalize/Makefile.inc b/plugins/experimental/header_normalize/Makefile.inc
deleted file mode 100644
index 2224fa0..0000000
--- a/plugins/experimental/header_normalize/Makefile.inc
+++ /dev/null
@@ -1,20 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-pkglib_LTLIBRARIES += experimental/header_normalize/header_normalize.la
-
-experimental_header_normalize_header_normalize_la_SOURCES = \
- experimental/header_normalize/header_normalize.cc
diff --git a/plugins/experimental/header_normalize/header_normalize.cc b/plugins/experimental/header_normalize/header_normalize.cc
deleted file mode 100644
index d408ed5..0000000
--- a/plugins/experimental/header_normalize/header_normalize.cc
+++ /dev/null
@@ -1,265 +0,0 @@
-/** @file
-
- Plugin to perform background fetches of certain content that would
- otherwise not be cached. For example, Range: requests / responses.
-
- @section license License
-
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-*/
-
-////////////////////////////////////////////////////////////////////////////////
-// header_normalize::
-//
-// ATS plugin to convert headers into camel-case. It may be useful to solve
-// interworking issues with legacy origins not supporting lower case headers
-// required by protocols such as http2 etc.
-//
-// Note that the plugin currently uses READ_REQUEST_HDR_HOOK to camel-case
-// the headers. As an optimization, it can be changed to SEND_REQUEST_HDR_HOOK
-// so that it only converts, if/when the request is being sent to the origin.
-//
-// This plugin supports both global mode as well as per-remap mode activation
-//////////////////////////////////////////////////////////////////////////////////
-
-#define UNUSED __attribute__((unused))
-static char UNUSED rcsId__header_normalize_cc[] =
- "@(#) $Id: header_normalize.cc 218 2014-11-11 01:29:16Z sudheerv $ built on " __DATE__ " " __TIME__;
-
-#include <sys/time.h>
-#include <ts/ts.h>
-#include <ts/remap.h>
-#include <set>
-#include <string>
-#include <cstring>
-#include <cstdlib>
-#include <cstdint>
-#include <cstdio>
-#include <netdb.h>
-#include <map>
-
-using namespace std;
-///////////////////////////////////////////////////////////////////////////////
-// Some constants.
-//
-const char *PLUGIN_NAME = "header_normalize";
-
-std::map<std::string, std::string, std::less<std::string>> hdrMap;
-
-static void
-buildHdrMap()
-{
- hdrMap["accept"] = "Accept";
- hdrMap["accept-charset"] = "Accept-Charset";
- hdrMap["accept-encoding"] = "Accept-Encoding";
- hdrMap["accept-language"] = "Accept-Language";
- hdrMap["accept-ranges"] = "Accept-Ranges";
- hdrMap["age"] = "Age";
- hdrMap["allow"] = "Allow";
- hdrMap["approved"] = "Approved";
- hdrMap["bytes"] = "Bytes";
- hdrMap["cache-control"] = "Cache-Control";
- hdrMap["client-ip"] = "Client-Ip";
- hdrMap["connection"] = "Connection";
- hdrMap["content-base"] = "Content-Base";
- hdrMap["content-encoding"] = "Content-Encoding";
- hdrMap["content-language"] = "Content-Language";
- hdrMap["content-length"] = "Content-Length";
- hdrMap["content-location"] = "Content-Location";
- hdrMap["content-md5"] = "Content-MD5";
- hdrMap["content-range"] = "Content-Range";
- hdrMap["content-type"] = "Content-Type";
- hdrMap["control"] = "Control";
- hdrMap["cookie"] = "Cookie";
- hdrMap["date"] = "Date";
- hdrMap["distribution"] = "Distribution";
- hdrMap["etag"] = "Etag";
- hdrMap["expect"] = "Expect";
- hdrMap["expires"] = "Expires";
- hdrMap["followup-to"] = "Followup-To";
- hdrMap["from"] = "From";
- hdrMap["host"] = "Host";
- hdrMap["if-match"] = "If-Match";
- hdrMap["if-modified-since"] = "If-Modified-Since";
- hdrMap["if-none-match"] = "If-None-Match";
- hdrMap["if-range"] = "If-Range";
- hdrMap["if-unmodified-since"] = "If-Unmodified-Since";
- hdrMap["keep-alive"] = "Keep-Alive";
- hdrMap["keywords"] = "Keywords";
- hdrMap["last-modified"] = "Last-Modified";
- hdrMap["lines"] = "Lines";
- hdrMap["location"] = "Location";
- hdrMap["max-forwards"] = "Max-Forwards";
- hdrMap["message-id"] = "Message-Id";
- hdrMap["newsgroups"] = "Newsgroups";
- hdrMap["organization"] = "Organization";
- hdrMap["path"] = "Path";
- hdrMap["pragma"] = "Pragma";
- hdrMap["proxy-authenticate"] = "Proxy-Authenticate";
- hdrMap["proxy-authorization"] = "Proxy-Authorization";
- hdrMap["proxy-connection"] = "Proxy-Connection";
- hdrMap["public"] = "Public";
- hdrMap["range"] = "Range";
- hdrMap["references"] = "References";
- hdrMap["referer"] = "Referer";
- hdrMap["reply-to"] = "Reply-To";
- hdrMap["retry-after"] = "Retry-After";
- hdrMap["sender"] = "Sender";
- hdrMap["server"] = "Server";
- hdrMap["set-cookie"] = "Set-Cookie";
- hdrMap["strict-transport-security"] = "Strict-Transport-Security";
- hdrMap["subject"] = "Subject";
- hdrMap["summary"] = "Summary";
- hdrMap["te"] = "Te";
- hdrMap["transfer-encoding"] = "Transfer-Encoding";
- hdrMap["upgrade"] = "Upgrade";
- hdrMap["user-agent"] = "User-Agent";
- hdrMap["vary"] = "Vary";
- hdrMap["via"] = "Via";
- hdrMap["warning"] = "Warning";
- hdrMap["www-authenticate"] = "Www-Authenticate";
- hdrMap["xref"] = "Xref";
- hdrMap["x-id"] = "X-ID";
- hdrMap["x-forwarded-for"] = "X-Forwarded-For";
- hdrMap["forwarded"] = "Forwarded";
- hdrMap["sec-websocket-key"] = "Sec-WebSocket-Key";
- hdrMap["sec-websocket-version"] = "Sec-WebSocket-Version";
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Initialize the plugin.
-//
-//
-//
-TSReturnCode
-TSRemapInit(TSRemapInterface *api_info, char *errbuf, int errbuf_size)
-{
- if (!api_info) {
- strncpy(errbuf, "[tsremap_init] - Invalid TSREMAP_INTERFACE argument", errbuf_size - 1);
- return TS_ERROR;
- }
- if (api_info->tsremap_version < TSREMAP_VERSION) {
- snprintf(errbuf, errbuf_size, "[tsremap_init] - Incorrect API version %ld.%ld", api_info->tsremap_version >> 16,
- (api_info->tsremap_version & 0xffff));
- return TS_ERROR;
- }
- buildHdrMap();
- TSDebug(PLUGIN_NAME, "plugin is successfully initialized");
- return TS_SUCCESS;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// One instance per remap.config invocation.
-//
-TSReturnCode
-TSRemapNewInstance(int /* argc */, char * /* argv[] */, void ** /* ih */, char * /* errbuf */, int /* errbuf_size */)
-{
- return TS_SUCCESS;
-}
-
-void
-TSRemapDeleteInstance(void * /* ih */)
-{
-}
-
-static int
-read_request_hook(TSCont /* contp */, TSEvent /* event */, void *edata)
-{
- TSHttpTxn rh = (TSHttpTxn)edata;
-
- TSMLoc hdr, next_hdr;
- TSMBuffer hdr_bufp;
- TSMLoc req_hdrs;
-
- if (TSHttpTxnClientReqGet(rh, &hdr_bufp, &req_hdrs) == TS_SUCCESS) {
- hdr = TSMimeHdrFieldGet(hdr_bufp, req_hdrs, 0);
- int n_mime_headers = TSMimeHdrFieldsCount(hdr_bufp, req_hdrs);
-
- TSDebug(PLUGIN_NAME, "*** Camel Casing %u hdrs in the request", n_mime_headers);
-
- for (int i = 0; i < n_mime_headers; ++i) {
- if (hdr == nullptr) {
- break;
- }
- next_hdr = TSMimeHdrFieldNext(hdr_bufp, req_hdrs, hdr);
- int old_hdr_len;
- const char *old_hdr_name = TSMimeHdrFieldNameGet(hdr_bufp, req_hdrs, hdr, &old_hdr_len);
-
- // TSMimeHdrFieldNameGet returns the MIME_FIELD_NAME
- // for all MIME hdrs, which is always in Camel Case
- if (islower(old_hdr_name[0])) {
- TSDebug(PLUGIN_NAME, "*** non MIME Hdr %s, leaving it for now", old_hdr_name);
-
- TSHandleMLocRelease(hdr_bufp, req_hdrs, hdr);
- hdr = next_hdr;
- continue;
- }
-
- int hdr_value_len = 0;
- const char *hdr_value = TSMimeHdrFieldValueStringGet(hdr_bufp, req_hdrs, hdr, 0, &hdr_value_len);
-
- // hdr returned by TSMimeHdrFieldNameGet is already
- // in camel case, just destroy the lowercase h2 header
- // and replace it with TSMimeHdrFieldNameGet
- char *new_hdr_name = (char *)old_hdr_name;
- if (new_hdr_name) {
- TSMLoc new_hdr_loc;
- TSReturnCode rval = TSMimeHdrFieldCreateNamed(hdr_bufp, req_hdrs, new_hdr_name, old_hdr_len, &new_hdr_loc);
-
- if (rval == TS_SUCCESS) {
- TSDebug(PLUGIN_NAME, "*** hdr convert %s to %s", old_hdr_name, new_hdr_name);
- TSMimeHdrFieldValueStringSet(hdr_bufp, req_hdrs, new_hdr_loc, -1, hdr_value, hdr_value_len);
- TSMimeHdrFieldAppend(hdr_bufp, req_hdrs, new_hdr_loc);
- TSHandleMLocRelease(hdr_bufp, req_hdrs, new_hdr_loc);
- }
-
- TSMimeHdrFieldDestroy(hdr_bufp, req_hdrs, hdr);
- } else {
- TSDebug(PLUGIN_NAME, "*** can't find hdr %s in hdrMap", old_hdr_name);
- }
-
- TSHandleMLocRelease(hdr_bufp, req_hdrs, hdr);
- hdr = next_hdr;
- }
-
- TSHandleMLocRelease(hdr_bufp, TS_NULL_MLOC, req_hdrs);
- }
-
- TSHttpTxnReenable(rh, TS_EVENT_HTTP_CONTINUE);
-
- return 0;
-}
-
-void
-TSPluginInit(int /* argc */, const char * /* argv[] */)
-{
- TSDebug(PLUGIN_NAME, "initializing plugin");
- TSCont contp;
- buildHdrMap();
- contp = TSContCreate(read_request_hook, nullptr);
- TSHttpHookAdd(TS_HTTP_READ_REQUEST_HDR_HOOK, contp);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// This is the main "entry" point for the plugin, called for every request.
-//
-TSRemapStatus
-TSRemapDoRemap(void * /* ih */, TSHttpTxn rh, TSRemapRequestInfo * /* rri */)
-{
- read_request_hook(nullptr, TS_EVENT_HTTP_READ_REQUEST_HDR, rh);
- return TSREMAP_DID_REMAP;
-}