You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by ki...@apache.org on 2018/02/09 04:40:55 UTC

[trafficserver] branch master updated: to only fix the SELCT_ALT hook

This is an automated email from the ASF dual-hosted git repository.

kichan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficserver.git


The following commit(s) were added to refs/heads/master by this push:
     new ec3ed32  to only fix the SELCT_ALT hook
ec3ed32 is described below

commit ec3ed32c9b5928bdcd16791b36f19fe87c74cf43
Author: Christopher Hassell <ch...@comcast.com>
AuthorDate: Thu Oct 26 12:36:17 2017 -0600

    to only fix the SELCT_ALT hook
---
 lib/cppapi/GlobalPlugin.cc             |  9 ++++++++-
 lib/cppapi/include/atscppapi/Plugin.h  |  7 ++-----
 lib/cppapi/include/atscppapi/Request.h |  6 ++++++
 lib/cppapi/include/utils_internal.h    |  1 +
 lib/cppapi/utils_internal.cc           | 25 +++++++++++++++++++++----
 5 files changed, 38 insertions(+), 10 deletions(-)

diff --git a/lib/cppapi/GlobalPlugin.cc b/lib/cppapi/GlobalPlugin.cc
index e8a2df8..151dbf1 100644
--- a/lib/cppapi/GlobalPlugin.cc
+++ b/lib/cppapi/GlobalPlugin.cc
@@ -48,8 +48,15 @@ namespace
 static int
 handleGlobalPluginEvents(TSCont cont, TSEvent event, void *edata)
 {
-  TSHttpTxn txn            = static_cast<TSHttpTxn>(edata);
   GlobalPluginState *state = static_cast<GlobalPluginState *>(TSContDataGet(cont));
+
+  if (event == TS_EVENT_HTTP_SELECT_ALT) {
+    TSHttpAltInfo alt = static_cast<TSHttpAltInfo>(edata);
+    utils::internal::invokePluginForEvent(state->global_plugin_, alt, event);
+    return 0;
+  }
+
+  TSHttpTxn txn = static_cast<TSHttpTxn>(edata);
   if (state->ignore_internal_transactions_ && TSHttpTxnIsInternal(txn)) {
     LOG_DEBUG("Ignoring event %d on internal transaction %p for global plugin %p", event, txn, state->global_plugin_);
     TSHttpTxnReenable(txn, TS_EVENT_HTTP_CONTINUE);
diff --git a/lib/cppapi/include/atscppapi/Plugin.h b/lib/cppapi/include/atscppapi/Plugin.h
index 22cd377..8d596a4 100644
--- a/lib/cppapi/include/atscppapi/Plugin.h
+++ b/lib/cppapi/include/atscppapi/Plugin.h
@@ -27,6 +27,7 @@
 #ifndef ATSCPPAPI_PLUGIN_H_
 #define ATSCPPAPI_PLUGIN_H_
 
+#include <atscppapi/Request.h>
 #include <atscppapi/Transaction.h>
 #include <atscppapi/noncopyable.h>
 
@@ -146,11 +147,7 @@ public:
   /**
    * This method must be implemented when you hook HOOK_SELECT_ALT
    */
-  virtual void
-  handleSelectAlt(Transaction &transaction)
-  {
-    transaction.resume();
-  };
+  virtual void handleSelectAlt(const Request &clientReq, const Request &cachedReq, const Response &cachedResp){};
 
   virtual ~Plugin(){};
 
diff --git a/lib/cppapi/include/atscppapi/Request.h b/lib/cppapi/include/atscppapi/Request.h
index 37990ee..1d9e49e 100644
--- a/lib/cppapi/include/atscppapi/Request.h
+++ b/lib/cppapi/include/atscppapi/Request.h
@@ -31,6 +31,11 @@
 
 namespace atscppapi
 {
+namespace utils
+{
+  class internal;
+}
+
 class Transaction;
 struct RequestState;
 
@@ -80,6 +85,7 @@ private:
   void reset();
   friend class Transaction;
   friend class ClientRequest;
+  friend class utils::internal;
 };
 }
 
diff --git a/lib/cppapi/include/utils_internal.h b/lib/cppapi/include/utils_internal.h
index 4e67587..67a076b 100644
--- a/lib/cppapi/include/utils_internal.h
+++ b/lib/cppapi/include/utils_internal.h
@@ -53,6 +53,7 @@ namespace utils
     static TSHttpHookID convertInternalTransformationTypeToTsHook(TransformationPlugin::Type type);
     static void invokePluginForEvent(TransactionPlugin *, TSHttpTxn, TSEvent);
     static void invokePluginForEvent(GlobalPlugin *, TSHttpTxn, TSEvent);
+    static void invokePluginForEvent(GlobalPlugin *, TSHttpAltInfo, TSEvent);
     static HttpVersion getHttpVersion(TSMBuffer hdr_buf, TSMLoc hdr_loc);
     static void initTransactionManagement();
     static std::string consumeFromTSIOBufferReader(TSIOBufferReader);
diff --git a/lib/cppapi/utils_internal.cc b/lib/cppapi/utils_internal.cc
index 953f401..c0165c5 100644
--- a/lib/cppapi/utils_internal.cc
+++ b/lib/cppapi/utils_internal.cc
@@ -141,10 +141,6 @@ void inline invokePluginForEvent(Plugin *plugin, TSHttpTxn ats_txn_handle, TSEve
   case TS_EVENT_HTTP_CACHE_LOOKUP_COMPLETE:
     plugin->handleReadCacheLookupComplete(transaction);
     break;
-  case TS_EVENT_HTTP_SELECT_ALT:
-    plugin->handleSelectAlt(transaction);
-    break;
-
   default:
     assert(false); /* we should never get here */
     break;
@@ -232,6 +228,27 @@ utils::internal::invokePluginForEvent(GlobalPlugin *plugin, TSHttpTxn ats_txn_ha
   ::invokePluginForEvent(static_cast<Plugin *>(plugin), ats_txn_handle, event);
 }
 
+void
+utils::internal::invokePluginForEvent(GlobalPlugin *plugin, TSHttpAltInfo altinfo_handle, TSEvent event)
+{
+  TSMBuffer hdr_buf;
+  TSMLoc hdr_loc;
+
+  assert(event == TS_EVENT_HTTP_SELECT_ALT);
+
+  TSHttpAltInfoClientReqGet(altinfo_handle, &hdr_buf, &hdr_loc);
+  const Request clientReq(hdr_buf, hdr_loc); // no MLocRelease needed
+
+  TSHttpAltInfoCachedReqGet(altinfo_handle, &hdr_buf, &hdr_loc);
+  const Request cachedReq(hdr_buf, hdr_loc); // no MLocRelease needed
+
+  TSHttpAltInfoCachedRespGet(altinfo_handle, &hdr_buf, &hdr_loc);
+  Response cachedResp;
+  cachedResp.init(hdr_buf, hdr_loc); // no MLocRelease needed
+
+  plugin->handleSelectAlt(clientReq, cachedReq, cachedResp);
+}
+
 std::string
 utils::internal::consumeFromTSIOBufferReader(TSIOBufferReader reader)
 {

-- 
To stop receiving notification emails like this one, please contact
kichan@apache.org.