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

zwoop pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/trafficserver.git

commit 058ac2f8de3e270c99e03e97c6c209c4f04b6734
Author: David Calavera <[email protected]>
AuthorDate: Wed Oct 9 21:57:47 2019 -0700

    Promote server_push_preload plugin.
    
    Move this plugin out of experimental at the same time that the API is
    promoted.
    
    Signed-off-by: David Calavera <[email protected]>
    (cherry picked from commit 11a7f1d1333876a3909c578fd12f92be1da1bed9)
---
 plugins/Makefile.am                                |  2 +-
 plugins/experimental/server_push_preload/README.md |  3 --
 .../server_push_preload/Makefile.inc               | 10 ++--
 plugins/server_push_preload/README.md              | 17 +++++++
 .../server_push_preload/server_push_preload.cc     | 53 ++++++++++++++++++----
 5 files changed, 67 insertions(+), 18 deletions(-)

diff --git a/plugins/Makefile.am b/plugins/Makefile.am
index 5af6494..ff92a3d 100644
--- a/plugins/Makefile.am
+++ b/plugins/Makefile.am
@@ -50,6 +50,7 @@ include regex_remap/Makefile.inc
 include regex_revalidate/Makefile.inc
 include remap_purge/Makefile.inc
 include s3_auth/Makefile.inc
+include server_push_preload/Makefile.inc
 include stats_over_http/Makefile.inc
 include tcpinfo/Makefile.inc
 include xdebug/Makefile.inc
@@ -72,7 +73,6 @@ include experimental/metalink/Makefile.inc
 include experimental/money_trace/Makefile.inc
 include experimental/mp4/Makefile.inc
 include experimental/remap_stats/Makefile.inc
-include experimental/server_push_preload/Makefile.inc
 include experimental/slice/Makefile.inc
 include experimental/sslheaders/Makefile.inc
 include experimental/stream_editor/Makefile.inc
diff --git a/plugins/experimental/server_push_preload/README.md 
b/plugins/experimental/server_push_preload/README.md
deleted file mode 100644
index 296794c..0000000
--- a/plugins/experimental/server_push_preload/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-Parse origin response Link headers and use H2 Server Push to initiate push 
requests of assets that have the preload keyword.
-
-https://www.w3.org/TR/preload/
diff --git a/plugins/experimental/server_push_preload/Makefile.inc 
b/plugins/server_push_preload/Makefile.inc
similarity index 71%
rename from plugins/experimental/server_push_preload/Makefile.inc
rename to plugins/server_push_preload/Makefile.inc
index 5a04108..518d71c 100644
--- a/plugins/experimental/server_push_preload/Makefile.inc
+++ b/plugins/server_push_preload/Makefile.inc
@@ -14,14 +14,14 @@
 #  See the License for the specific language governing permissions and
 #  limitations under the License.
 
-pkglib_LTLIBRARIES += experimental/server_push_preload/server_push_preload.la
+pkglib_LTLIBRARIES += server_push_preload/server_push_preload.la
 
-experimental_server_push_preload_server_push_preload_la_SOURCES = \
-  experimental/server_push_preload/server_push_preload.cc
+server_push_preload_server_push_preload_la_SOURCES = \
+  server_push_preload/server_push_preload.cc
 
-experimental_server_push_preload_server_push_preload_la_LDFLAGS = \
+server_push_preload_server_push_preload_la_LDFLAGS = \
   $(AM_LDFLAGS)
 
-experimental_server_push_preload_server_push_preload_la_LIBADD = \
+server_push_preload_server_push_preload_la_LIBADD = \
   $(top_builddir)/src/tscpp/api/libtscppapi.la
 
diff --git a/plugins/server_push_preload/README.md 
b/plugins/server_push_preload/README.md
new file mode 100644
index 0000000..4079c89
--- /dev/null
+++ b/plugins/server_push_preload/README.md
@@ -0,0 +1,17 @@
+Parse origin response Link headers and use H2 Server Push to initiate push 
requests of assets that have the preload keyword.
+
+https://www.w3.org/TR/preload/
+
+This plugin can be used as a global plugin or a remap plugin.
+
+To use it as a global plugin for all your remaps, add this line to your 
`plugins.config` file:
+
+```
+server_push_preload.so
+```
+
+To use it as a remap plugin add it to one of your remaps in the `remap.config` 
file:
+
+```
+map https://foo.cow.com/ https://bar.cow.com @plugin=server_push_preload.so
+```
\ No newline at end of file
diff --git a/plugins/experimental/server_push_preload/server_push_preload.cc 
b/plugins/server_push_preload/server_push_preload.cc
similarity index 74%
rename from plugins/experimental/server_push_preload/server_push_preload.cc
rename to plugins/server_push_preload/server_push_preload.cc
index def21cc..68c4410 100644
--- a/plugins/experimental/server_push_preload/server_push_preload.cc
+++ b/plugins/server_push_preload/server_push_preload.cc
@@ -26,9 +26,9 @@
 #include <set>
 #include <sstream>
 #include <ts/ts.h>
-#include <ts/experimental.h>
 #include "tscpp/api/GlobalPlugin.h"
-#include "tscpp/api/utils.h"
+#include "tscpp/api/RemapPlugin.h"
+#include "tscpp/api/TransactionPlugin.h"
 
 #define PLUGIN_NAME "server_push_preload"
 #define PRELOAD_PARAM "rel=preload"
@@ -41,16 +41,16 @@ static regex linkRegexp("<([^>]+)>;(.+)");
 
 namespace
 {
-GlobalPlugin *plugin;
-}
+GlobalPlugin *globalPlugin;
+RemapPlugin *remapPlugin;
+} // namespace
 
-class LinkServerPushPlugin : public GlobalPlugin
+class ServerPushTransaction : public TransactionPlugin
 {
 public:
-  LinkServerPushPlugin()
+  explicit ServerPushTransaction(Transaction &transaction) : 
TransactionPlugin(transaction)
   {
-    TSDebug(PLUGIN_NAME, "registering transaction hooks");
-    LinkServerPushPlugin::registerHook(HOOK_SEND_RESPONSE_HEADERS);
+    TransactionPlugin::registerHook(HOOK_SEND_RESPONSE_HEADERS);
   }
 
   void
@@ -134,6 +134,32 @@ public:
   }
 };
 
+class ServerPushRemap : public RemapPlugin
+{
+public:
+  explicit ServerPushRemap(void **instance_handle) : 
RemapPlugin(instance_handle) {}
+
+  Result
+  doRemap(const Url &map_from_url, const Url &map_to_url, Transaction 
&transaction, bool &redirect) override
+  {
+    transaction.addPlugin(new ServerPushTransaction(transaction));
+    return RESULT_DID_REMAP;
+  }
+};
+
+class ServerPushGlobal : public GlobalPlugin
+{
+public:
+  ServerPushGlobal() { 
GlobalPlugin::registerHook(HOOK_READ_REQUEST_HEADERS_PRE_REMAP); }
+
+  void
+  handleReadRequestHeadersPreRemap(Transaction &transaction) override
+  {
+    transaction.addPlugin(new ServerPushTransaction(transaction));
+    transaction.resume();
+  }
+};
+
 void
 TSPluginInit(int argc ATSCPPAPI_UNUSED, const char *argv[] ATSCPPAPI_UNUSED)
 {
@@ -141,5 +167,14 @@ TSPluginInit(int argc ATSCPPAPI_UNUSED, const char *argv[] 
ATSCPPAPI_UNUSED)
   if (!RegisterGlobalPlugin("ServerPushPreloadPlugin", PLUGIN_NAME, 
"[email protected]")) {
     return;
   }
-  plugin = new LinkServerPushPlugin();
+  globalPlugin = new ServerPushGlobal();
 }
+
+TSReturnCode
+TSRemapNewInstance(int argc ATSCPPAPI_UNUSED, char *argv[] ATSCPPAPI_UNUSED, 
void **instance_handle, char *errbuf ATSCPPAPI_UNUSED,
+                   int errbuf_size ATSCPPAPI_UNUSED)
+{
+  TSDebug(PLUGIN_NAME, "New Instance");
+  remapPlugin = new ServerPushRemap(instance_handle);
+  return TS_SUCCESS;
+}
\ No newline at end of file

Reply via email to