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
