On May 20, 2014, at 9:59 PM, kic...@apache.org wrote: > Repository: trafficserver > Updated Branches: > refs/heads/master 90f44b522 -> 2ba2baaa6 > > > TS-2555: add more hook support for ts_lua plugin
I still think that declaring global functions for hooks is ugly and not Lua-like. Automatically re-enabling the transaction is also problem, since a very common pattern is to hook the transaction and reenable it later after doing some other work. > > > Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo > Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/2ba2baaa > Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/2ba2baaa > Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/2ba2baaa > > Branch: refs/heads/master > Commit: 2ba2baaa69c2bb99dfa95c783a79ec0165690c31 > Parents: 90f44b5 > Author: Kit Chan <kic...@apache.org> > Authored: Tue May 20 21:50:49 2014 -0700 > Committer: Kit Chan <kic...@apache.org> > Committed: Tue May 20 21:50:49 2014 -0700 > > ---------------------------------------------------------------------- > doc/reference/plugins/ts_lua.en.rst | 60 +++++++---- > .../ts_lua/example/test_global_hook.lua | 88 ++++++++++++++++ > .../ts_lua/example/test_txn_hook.lua | 100 +++++++++++++++++++ > plugins/experimental/ts_lua/ts_lua.c | 81 ++++++++++++++- > plugins/experimental/ts_lua/ts_lua_common.h | 16 +++ > plugins/experimental/ts_lua/ts_lua_hook.c | 64 ++++++++++++ > plugins/experimental/ts_lua/ts_lua_util.c | 84 ++++++++++++++++ > 7 files changed, 472 insertions(+), 21 deletions(-) > ---------------------------------------------------------------------- > > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/2ba2baaa/doc/reference/plugins/ts_lua.en.rst > ---------------------------------------------------------------------- > diff --git a/doc/reference/plugins/ts_lua.en.rst > b/doc/reference/plugins/ts_lua.en.rst > index ebcb88c..8049a53 100644 > --- a/doc/reference/plugins/ts_lua.en.rst > +++ b/doc/reference/plugins/ts_lua.en.rst > @@ -261,21 +261,34 @@ Description > =========== > > This module embeds Lua, into Apache Traffic Server. This module acts as remap > plugin of Traffic Server. In this case we > -should provide **'do_remap'** function in each lua script. We can write this > in remap.config::: > +should provide **'do_remap'** function in each lua script. We can write this > in remap.config:: > > - map http://a.tbcdn.cn/ http://inner.tbcdn.cn/ > @plugin=/usr/lib64/trafficserver/plugins/tslua.so > -@pparam=/etc/trafficserver/script/test_hdr.lua > + map http://a.tbcdn.cn/ http://inner.tbcdn.cn/ > @plugin=/usr/lib64/trafficserver/plugins/tslua.so \ > + @pparam=/etc/trafficserver/script/test_hdr.lua > > Sometimes we want to receive parameters and process them in the script, we > should realize **'\__init__'** function in > -the lua script(sethost.lua is a reference), and we can write this in > remap.config::: > +the lua script(sethost.lua is a reference), and we can write this in > remap.config:: > > - map http://a.tbcdn.cn/ http://inner.tbcdn.cn/ > @plugin=/usr/lib64/trafficserver/plugins/tslua.so > -@pparam=/etc/trafficserver/script/sethost.lua @pparam=img03.tbcdn.cn > + map http://a.tbcdn.cn/ http://inner.tbcdn.cn/ > @plugin=/usr/lib64/trafficserver/plugins/tslua.so \ > + @pparam=/etc/trafficserver/script/sethost.lua @pparam=img03.tbcdn.cn > > -This module can also act as a global plugin of Traffic Server. In this case > we should provide one of these functions > -(**'do_global_read_request'**, **'do_global_send_request'**, > **'do_global_read_response'**, > -**'do_global_send_response'**, **'do_global_cache_lookup_complete'**) in > each lua script. We can write this in > -plugin.config::: > +This module can also act as a global plugin of Traffic Server. In this case > we should provide one of these functions in > +each lua script: > + > +- **'do_global_txn_start'** > +- **'do_global_txn_close'** > +- **'do_global_os_dns'** > +- **'do_global_pre_remap'** > +- **'do_global_post_remap'** > +- **'do_global_read_request'** > +- **'do_global_send_request'** > +- **'do_global_read_response'** > +- **'do_global_send_response'** > +- **'do_global_cache_lookup_complete'** > +- **'do_global_read_cache'** > +- **'do_global_select_alt'** > + > +We can write this in plugin.config:: > > tslua.so /etc/trafficserver/script/test_global_hdr.lua > > @@ -350,12 +363,19 @@ Hook point constants > -------------------- > **context**: do_remap/do_global_*/later > > - TS_LUA_HOOK_CACHE_LOOKUP_COMPLETE > - TS_LUA_HOOK_SEND_REQUEST_HDR > - TS_LUA_HOOK_READ_RESPONSE_HDR > - TS_LUA_HOOK_SEND_RESPONSE_HDR > - TS_LUA_REQUEST_TRANSFORM > - TS_LUA_RESPONSE_TRANSFORM > +- TS_LUA_HOOK_OS_DNS > +- TS_LUA_HOOK_PRE_REMAP > +- TS_LUA_HOOK_POST_REMAP > +- TS_LUA_HOOK_READ_CACHE_HDR > +- TS_LUA_HOOK_SELECT_ALT > +- TS_LUA_HOOK_TXN_CLOSE > +- TS_LUA_HOOK_CACHE_LOOKUP_COMPLETE > +- TS_LUA_HOOK_READ_REQUEST_HDR > +- TS_LUA_HOOK_SEND_REQUEST_HDR > +- TS_LUA_HOOK_READ_RESPONSE_HDR > +- TS_LUA_HOOK_SEND_RESPONSE_HDR > +- TS_LUA_REQUEST_TRANSFORM > +- TS_LUA_RESPONSE_TRANSFORM > > These constants are usually used in ts.hook method call. > > @@ -417,10 +437,10 @@ Http cache lookup status constants > ---------------------------------- > **context**: global > > - TS_LUA_CACHE_LOOKUP_MISS (0) > - TS_LUA_CACHE_LOOKUP_HIT_STALE (1) > - TS_LUA_CACHE_LOOKUP_HIT_FRESH (2) > - TS_LUA_CACHE_LOOKUP_SKIPPED (3) > +- TS_LUA_CACHE_LOOKUP_MISS (0) > +- TS_LUA_CACHE_LOOKUP_HIT_STALE (1) > +- TS_LUA_CACHE_LOOKUP_HIT_FRESH (2) > +- TS_LUA_CACHE_LOOKUP_SKIPPED (3) > > > ts.http.set_cache_url > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/2ba2baaa/plugins/experimental/ts_lua/example/test_global_hook.lua > ---------------------------------------------------------------------- > diff --git a/plugins/experimental/ts_lua/example/test_global_hook.lua > b/plugins/experimental/ts_lua/example/test_global_hook.lua > new file mode 100644 > index 0000000..bf71f0c > --- /dev/null > +++ b/plugins/experimental/ts_lua/example/test_global_hook.lua > @@ -0,0 +1,88 @@ > +-- 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. > + > +function do_global_txn_start() > + ts.debug('txn_start') > + > + return 0 > +end > + > +function do_global_read_request() > + ts.debug('read_request') > + > + return 0 > +end > + > +function do_global_send_request() > + ts.debug('send_request') > + > + return 0 > +end > + > +function do_global_read_response() > + ts.debug('read_response') > + > + return 0 > +end > + > +function do_global_send_response() > + ts.debug('send_response') > + > + return 0 > +end > + > +function do_global_post_remap() > + ts.debug('post_remap') > + > + return 0 > +end > + > +function do_global_pre_remap() > + ts.debug('pre_remap') > + > + return 0 > +end > + > +function do_global_os_dns() > + ts.debug('os_dns') > + > + return 0 > +end > + > +function do_global_cache_lookup_complete() > + ts.debug('cache_lookup_complete') > + > + return 0 > +end > + > +function do_global_select_alt() > + ts.debug('select_alt') > + > + return 0 > +end > + > +function do_global_read_cache() > + ts.debug('read_cache') > + > + return 0 > +end > + > +function do_global_txn_close() > + ts.debug('txn_close') > + > + return 0 > +end > + > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/2ba2baaa/plugins/experimental/ts_lua/example/test_txn_hook.lua > ---------------------------------------------------------------------- > diff --git a/plugins/experimental/ts_lua/example/test_txn_hook.lua > b/plugins/experimental/ts_lua/example/test_txn_hook.lua > new file mode 100644 > index 0000000..e95a4df > --- /dev/null > +++ b/plugins/experimental/ts_lua/example/test_txn_hook.lua > @@ -0,0 +1,100 @@ > +-- 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. > + > +function do_global_txn_start() > + ts.debug('global_txn_start') > + > + ts.hook(TS_LUA_HOOK_READ_REQUEST_HDR, read_request) > + ts.hook(TS_LUA_HOOK_SEND_REQUEST_HDR, send_request) > + ts.hook(TS_LUA_HOOK_SEND_RESPONSE_HDR, send_response) > + ts.hook(TS_LUA_HOOK_READ_RESPONSE_HDR, read_response) > + ts.hook(TS_LUA_HOOK_CACHE_LOOKUP_COMPLETE, cache_lookup) > + ts.hook(TS_LUA_HOOK_PRE_REMAP, pre_remap) > + ts.hook(TS_LUA_HOOK_POST_REMAP, post_remap) > + ts.hook(TS_LUA_HOOK_SELECT_ALT, select_alt) > + ts.hook(TS_LUA_HOOK_OS_DNS, os_dns) > + ts.hook(TS_LUA_HOOK_READ_CACHE_HDR, read_cache) > + ts.hook(TS_LUA_HOOK_TXN_CLOSE, txn_close) > + > + return 0 > +end > + > +function read_request() > + ts.debug('read_request') > + > + return 0 > +end > + > +function send_request() > + ts.debug('send_request') > + > + return 0 > +end > + > +function read_response() > + ts.debug('read_response') > + > + return 0 > +end > + > +function send_response() > + ts.debug('send_response') > + > + return 0 > +end > + > +function post_remap() > + ts.debug('post_remap') > + > + return 0 > +end > + > +function pre_remap() > + ts.debug('pre_remap') > + > + return 0 > +end > + > +function os_dns() > + ts.debug('os_dns') > + > + return 0 > +end > + > +function cache_lookup() > + ts.debug('cache_lookup_complete') > + > + return 0 > +end > + > +function select_alt() > + ts.debug('select_alt') > + > + return 0 > +end > + > +function read_cache() > + ts.debug('read_cache') > + > + return 0 > +end > + > +function txn_close() > + ts.debug('txn_close') > + > + return 0 > +end > + > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/2ba2baaa/plugins/experimental/ts_lua/ts_lua.c > ---------------------------------------------------------------------- > diff --git a/plugins/experimental/ts_lua/ts_lua.c > b/plugins/experimental/ts_lua/ts_lua.c > index b23783e..51703b7 100644 > --- a/plugins/experimental/ts_lua/ts_lua.c > +++ b/plugins/experimental/ts_lua/ts_lua.c > @@ -202,6 +202,34 @@ globalHookHandler(TSCont contp, TSEvent event, void > *edata) > lua_getglobal(l, TS_LUA_FUNCTION_G_CACHE_LOOKUP_COMPLETE); > break; > > + case TS_EVENT_HTTP_TXN_START: > + lua_getglobal(l, TS_LUA_FUNCTION_G_TXN_START); > + break; > + > + case TS_EVENT_HTTP_PRE_REMAP: > + lua_getglobal(l, TS_LUA_FUNCTION_G_PRE_REMAP); > + break; > + > + case TS_EVENT_HTTP_POST_REMAP: > + lua_getglobal(l, TS_LUA_FUNCTION_G_POST_REMAP); > + break; > + > + case TS_EVENT_HTTP_SELECT_ALT: > + lua_getglobal(l, TS_LUA_FUNCTION_G_SELECT_ALT); > + break; > + > + case TS_EVENT_HTTP_OS_DNS: > + lua_getglobal(l, TS_LUA_FUNCTION_G_OS_DNS); > + break; > + > + case TS_EVENT_HTTP_READ_CACHE_HDR: > + lua_getglobal(l, TS_LUA_FUNCTION_G_READ_CACHE); > + break; > + > + case TS_EVENT_HTTP_TXN_CLOSE: > + lua_getglobal(l, TS_LUA_FUNCTION_G_TXN_CLOSE); > + break; > + > default: > TSHttpTxnReenable(txnp, TS_EVENT_HTTP_CONTINUE); > return 0; > @@ -252,7 +280,6 @@ transactionStartHookHandler(TSCont contp, TSEvent event > ATS_UNUSED, void *edata) > txn_contp = TSContCreate(ts_lua_http_cont_handler, NULL); > TSContDataSet(txn_contp, http_ctx); > http_ctx->main_contp = txn_contp; > - TSHttpTxnHookAdd(txnp, TS_HTTP_TXN_CLOSE_HOOK, txn_contp); > > global_contp = TSContCreate(globalHookHandler, NULL); > TSContDataSet(global_contp, http_ctx); > @@ -295,6 +322,58 @@ transactionStartHookHandler(TSCont contp, TSEvent event > ATS_UNUSED, void *edata) > } > lua_pop(l, 1); > > + lua_getglobal(l, TS_LUA_FUNCTION_G_TXN_START); > + if (lua_type(l, -1) == LUA_TFUNCTION) { > + TSHttpTxnHookAdd(txnp, TS_HTTP_TXN_START_HOOK, global_contp); > + TSDebug(TS_LUA_DEBUG_TAG, "txn_start_hook added"); > + } > + lua_pop(l, 1); > + > + lua_getglobal(l, TS_LUA_FUNCTION_G_PRE_REMAP); > + if (lua_type(l, -1) == LUA_TFUNCTION) { > + TSHttpTxnHookAdd(txnp, TS_HTTP_PRE_REMAP_HOOK, global_contp); > + TSDebug(TS_LUA_DEBUG_TAG, "pre_remap_hook added"); > + } > + lua_pop(l, 1); > + > + lua_getglobal(l, TS_LUA_FUNCTION_G_POST_REMAP); > + if (lua_type(l, -1) == LUA_TFUNCTION) { > + TSHttpTxnHookAdd(txnp, TS_HTTP_POST_REMAP_HOOK, global_contp); > + TSDebug(TS_LUA_DEBUG_TAG, "post_remap_hook added"); > + } > + lua_pop(l, 1); > + > + lua_getglobal(l, TS_LUA_FUNCTION_G_SELECT_ALT); > + if (lua_type(l, -1) == LUA_TFUNCTION) { > + TSHttpTxnHookAdd(txnp, TS_HTTP_SELECT_ALT_HOOK, global_contp); > + TSDebug(TS_LUA_DEBUG_TAG, "select_alt_hook added"); > + } > + lua_pop(l, 1); > + > + lua_getglobal(l, TS_LUA_FUNCTION_G_OS_DNS); > + if (lua_type(l, -1) == LUA_TFUNCTION) { > + TSHttpTxnHookAdd(txnp, TS_HTTP_OS_DNS_HOOK, global_contp); > + TSDebug(TS_LUA_DEBUG_TAG, "os_dns_hook added"); > + } > + lua_pop(l, 1); > + > + lua_getglobal(l, TS_LUA_FUNCTION_G_READ_CACHE); > + if (lua_type(l, -1) == LUA_TFUNCTION) { > + TSHttpTxnHookAdd(txnp, TS_HTTP_READ_CACHE_HDR_HOOK, global_contp); > + TSDebug(TS_LUA_DEBUG_TAG, "read_cache_hdr_hook added"); > + } > + lua_pop(l, 1); > + > + lua_getglobal(l, TS_LUA_FUNCTION_G_TXN_CLOSE); > + if (lua_type(l, -1) == LUA_TFUNCTION) { > + TSHttpTxnHookAdd(txnp, TS_HTTP_TXN_CLOSE_HOOK, global_contp); > + TSDebug(TS_LUA_DEBUG_TAG, "txn_close_hook added"); > + } > + lua_pop(l, 1); > + > + // add a hook to release resources for context > + TSHttpTxnHookAdd(txnp, TS_HTTP_TXN_CLOSE_HOOK, txn_contp); > + > TSMutexUnlock(main_ctx->mutexp); > > TSHttpTxnReenable(txnp, TS_EVENT_HTTP_CONTINUE); > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/2ba2baaa/plugins/experimental/ts_lua/ts_lua_common.h > ---------------------------------------------------------------------- > diff --git a/plugins/experimental/ts_lua/ts_lua_common.h > b/plugins/experimental/ts_lua/ts_lua_common.h > index c4a32b0..c96f36a 100644 > --- a/plugins/experimental/ts_lua/ts_lua_common.h > +++ b/plugins/experimental/ts_lua/ts_lua_common.h > @@ -40,12 +40,28 @@ > #define TS_LUA_FUNCTION_SEND_REQUEST "do_send_request" > #define TS_LUA_FUNCTION_READ_RESPONSE "do_read_response" > #define TS_LUA_FUNCTION_SEND_RESPONSE "do_send_response" > +#define TS_LUA_FUNCTION_READ_REQUEST "do_read_request" > +#define TS_LUA_FUNCTION_TXN_START "do_txn_start" > +#define TS_LUA_FUNCTION_PRE_REMAP "do_pre_remap" > +#define TS_LUA_FUNCTION_POST_REMAP "do_post_remap" > +#define TS_LUA_FUNCTION_OS_DNS "do_os_dns" > +#define TS_LUA_FUNCTION_SELECT_ALT "do_select_alt" > +#define TS_LUA_FUNCTION_READ_CACHE "do_read_cache" > +#define TS_LUA_FUNCTION_TXN_CLOSE "do_txn_close" > > #define TS_LUA_FUNCTION_G_SEND_REQUEST "do_global_send_request" > #define TS_LUA_FUNCTION_G_READ_REQUEST "do_global_read_request" > #define TS_LUA_FUNCTION_G_SEND_RESPONSE "do_global_send_response" > #define TS_LUA_FUNCTION_G_READ_RESPONSE "do_global_read_response" > #define TS_LUA_FUNCTION_G_CACHE_LOOKUP_COMPLETE > "do_global_cache_lookup_complete" > +#define TS_LUA_FUNCTION_G_TXN_START "do_global_txn_start" > +#define TS_LUA_FUNCTION_G_PRE_REMAP "do_global_pre_remap" > +#define TS_LUA_FUNCTION_G_POST_REMAP "do_global_post_remap" > +#define TS_LUA_FUNCTION_G_OS_DNS "do_global_os_dns" > +#define TS_LUA_FUNCTION_G_SELECT_ALT "do_global_select_alt" > +#define TS_LUA_FUNCTION_G_READ_CACHE "do_global_read_cache" > +#define TS_LUA_FUNCTION_G_TXN_CLOSE "do_global_txn_close" > + > > #define TS_LUA_MAX_SCRIPT_FNAME_LENGTH 1024 > #define TS_LUA_MAX_URL_LENGTH 2048 > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/2ba2baaa/plugins/experimental/ts_lua/ts_lua_hook.c > ---------------------------------------------------------------------- > diff --git a/plugins/experimental/ts_lua/ts_lua_hook.c > b/plugins/experimental/ts_lua/ts_lua_hook.c > index 79f6ea7..e70312c 100644 > --- a/plugins/experimental/ts_lua/ts_lua_hook.c > +++ b/plugins/experimental/ts_lua/ts_lua_hook.c > @@ -29,6 +29,14 @@ typedef enum > TS_LUA_HOOK_SEND_REQUEST_HDR, > TS_LUA_HOOK_READ_RESPONSE_HDR, > TS_LUA_HOOK_SEND_RESPONSE_HDR, > + TS_LUA_HOOK_READ_REQUEST_HDR, > + TS_LUA_HOOK_TXN_START, > + TS_LUA_HOOK_PRE_REMAP, > + TS_LUA_HOOK_POST_REMAP, > + TS_LUA_HOOK_OS_DNS, > + TS_LUA_HOOK_SELECT_ALT, > + TS_LUA_HOOK_READ_CACHE_HDR, > + TS_LUA_HOOK_TXN_CLOSE, > TS_LUA_REQUEST_TRANSFORM, > TS_LUA_RESPONSE_TRANSFORM, > TS_LUA_HOOK_LAST > @@ -41,6 +49,14 @@ char *ts_lua_hook_id_string[] = { > "TS_LUA_HOOK_SEND_REQUEST_HDR", > "TS_LUA_HOOK_READ_RESPONSE_HDR", > "TS_LUA_HOOK_SEND_RESPONSE_HDR", > + "TS_LUA_HOOK_READ_REQUEST_HDR", > + "TS_LUA_HOOK_TXN_START", > + "TS_LUA_HOOK_PRE_REMAP", > + "TS_LUA_HOOK_POST_REMAP", > + "TS_LUA_HOOK_OS_DNS", > + "TS_LUA_HOOK_SELECT_ALT", > + "TS_LUA_HOOK_READ_CACHE_HDR", > + "TS_LUA_HOOK_TXN_CLOSE", > "TS_LUA_REQUEST_TRANSFORM", > "TS_LUA_RESPONSE_TRANSFORM", > "TS_LUA_HOOK_LAST" > @@ -115,6 +131,54 @@ ts_lua_add_hook(lua_State * L) > lua_setglobal(L, TS_LUA_FUNCTION_SEND_RESPONSE); > break; > > + case TS_LUA_HOOK_READ_REQUEST_HDR: > + TSHttpTxnHookAdd(http_ctx->txnp, TS_HTTP_READ_REQUEST_HDR_HOOK, > http_ctx->main_contp); > + lua_pushvalue(L, 2); > + lua_setglobal(L, TS_LUA_FUNCTION_READ_REQUEST); > + break; > + > + case TS_LUA_HOOK_TXN_START: > + TSHttpTxnHookAdd(http_ctx->txnp, TS_HTTP_TXN_START_HOOK, > http_ctx->main_contp); > + lua_pushvalue(L, 2); > + lua_setglobal(L, TS_LUA_FUNCTION_TXN_START); > + break; > + > + case TS_LUA_HOOK_PRE_REMAP: > + TSHttpTxnHookAdd(http_ctx->txnp, TS_HTTP_PRE_REMAP_HOOK, > http_ctx->main_contp); > + lua_pushvalue(L, 2); > + lua_setglobal(L, TS_LUA_FUNCTION_PRE_REMAP); > + break; > + > + case TS_LUA_HOOK_POST_REMAP: > + TSHttpTxnHookAdd(http_ctx->txnp, TS_HTTP_POST_REMAP_HOOK, > http_ctx->main_contp); > + lua_pushvalue(L, 2); > + lua_setglobal(L, TS_LUA_FUNCTION_POST_REMAP); > + break; > + > + case TS_LUA_HOOK_OS_DNS: > + TSHttpTxnHookAdd(http_ctx->txnp, TS_HTTP_OS_DNS_HOOK, > http_ctx->main_contp); > + lua_pushvalue(L, 2); > + lua_setglobal(L, TS_LUA_FUNCTION_OS_DNS); > + break; > + > + case TS_LUA_HOOK_SELECT_ALT: > + TSHttpTxnHookAdd(http_ctx->txnp, TS_HTTP_SELECT_ALT_HOOK, > http_ctx->main_contp); > + lua_pushvalue(L, 2); > + lua_setglobal(L, TS_LUA_FUNCTION_SELECT_ALT); > + break; > + > + case TS_LUA_HOOK_READ_CACHE_HDR: > + TSHttpTxnHookAdd(http_ctx->txnp, TS_HTTP_READ_CACHE_HDR_HOOK, > http_ctx->main_contp); > + lua_pushvalue(L, 2); > + lua_setglobal(L, TS_LUA_FUNCTION_READ_CACHE); > + break; > + > + case TS_LUA_HOOK_TXN_CLOSE: > + // we don't need to add a hook because we already have added one by > default > + lua_pushvalue(L, 2); > + lua_setglobal(L, TS_LUA_FUNCTION_TXN_CLOSE); > + break; > + > case TS_LUA_REQUEST_TRANSFORM: > case TS_LUA_RESPONSE_TRANSFORM: > transform_ctx = (ts_lua_transform_ctx *) > TSmalloc(sizeof(ts_lua_transform_ctx)); > > http://git-wip-us.apache.org/repos/asf/trafficserver/blob/2ba2baaa/plugins/experimental/ts_lua/ts_lua_util.c > ---------------------------------------------------------------------- > diff --git a/plugins/experimental/ts_lua/ts_lua_util.c > b/plugins/experimental/ts_lua/ts_lua_util.c > index 0d0a0ec..010a31d 100644 > --- a/plugins/experimental/ts_lua/ts_lua_util.c > +++ b/plugins/experimental/ts_lua/ts_lua_util.c > @@ -444,7 +444,91 @@ ts_lua_http_cont_handler(TSCont contp, TSEvent event, > void *edata) > > break; > > + case TS_EVENT_HTTP_READ_REQUEST_HDR: > + > + lua_getglobal(l, TS_LUA_FUNCTION_READ_REQUEST); > + if (lua_type(l, -1) == LUA_TFUNCTION) { > + if (lua_pcall(l, 0, 1, 0)) { > + fprintf(stderr, "lua_pcall failed: %s\n", lua_tostring(l, -1)); > + } > + } > + > + break; > + > + case TS_EVENT_HTTP_TXN_START: > + > + lua_getglobal(l, TS_LUA_FUNCTION_TXN_START); > + if (lua_type(l, -1) == LUA_TFUNCTION) { > + if (lua_pcall(l, 0, 1, 0)) { > + fprintf(stderr, "lua_pcall failed: %s\n", lua_tostring(l, -1)); > + } > + } > + > + break; > + > + case TS_EVENT_HTTP_PRE_REMAP: > + > + lua_getglobal(l, TS_LUA_FUNCTION_PRE_REMAP); > + if (lua_type(l, -1) == LUA_TFUNCTION) { > + if (lua_pcall(l, 0, 1, 0)) { > + fprintf(stderr, "lua_pcall failed: %s\n", lua_tostring(l, -1)); > + } > + } > + > + break; > + > + case TS_EVENT_HTTP_POST_REMAP: > + > + lua_getglobal(l, TS_LUA_FUNCTION_POST_REMAP); > + if (lua_type(l, -1) == LUA_TFUNCTION) { > + if (lua_pcall(l, 0, 1, 0)) { > + fprintf(stderr, "lua_pcall failed: %s\n", lua_tostring(l, -1)); > + } > + } > + > + break; > + > + case TS_EVENT_HTTP_OS_DNS: > + > + lua_getglobal(l, TS_LUA_FUNCTION_OS_DNS); > + if (lua_type(l, -1) == LUA_TFUNCTION) { > + if (lua_pcall(l, 0, 1, 0)) { > + fprintf(stderr, "lua_pcall failed: %s\n", lua_tostring(l, -1)); > + } > + } > + > + break; > + > + case TS_EVENT_HTTP_SELECT_ALT: > + > + lua_getglobal(l, TS_LUA_FUNCTION_SELECT_ALT); > + if (lua_type(l, -1) == LUA_TFUNCTION) { > + if (lua_pcall(l, 0, 1, 0)) { > + fprintf(stderr, "lua_pcall failed: %s\n", lua_tostring(l, -1)); > + } > + } > + > + break; > + > + case TS_EVENT_HTTP_READ_CACHE_HDR: > + > + lua_getglobal(l, TS_LUA_FUNCTION_READ_CACHE); > + if (lua_type(l, -1) == LUA_TFUNCTION) { > + if (lua_pcall(l, 0, 1, 0)) { > + fprintf(stderr, "lua_pcall failed: %s\n", lua_tostring(l, -1)); > + } > + } > + > + break; > + > case TS_EVENT_HTTP_TXN_CLOSE: > + lua_getglobal(l, TS_LUA_FUNCTION_TXN_CLOSE); > + if (lua_type(l, -1) == LUA_TFUNCTION) { > + if (lua_pcall(l, 0, 1, 0)) { > + fprintf(stderr, "lua_pcall failed: %s\n", lua_tostring(l, -1)); > + } > + } > + > ts_lua_destroy_http_ctx(http_ctx); > TSContDestroy(contp); > break; >