Repository: trafficserver Updated Branches: refs/heads/master 702324236 -> 0e419b47c
TS-4230: support matrix style parameter in ts_lua plugin. This closes #499 Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/0e419b47 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/0e419b47 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/0e419b47 Branch: refs/heads/master Commit: 0e419b47cc2a652dab6d4812418ecb5b4fa22bf4 Parents: 7023242 Author: Kit Chan <[email protected]> Authored: Sun Mar 13 13:23:45 2016 -0700 Committer: Kit Chan <[email protected]> Committed: Sun Mar 13 13:23:45 2016 -0700 ---------------------------------------------------------------------- doc/admin-guide/plugins/ts_lua.en.rst | 83 ++++++++++++++++++++ .../experimental/ts_lua/ts_lua_client_request.c | 51 ++++++++++++ .../experimental/ts_lua/ts_lua_server_request.c | 56 +++++++++++++ 3 files changed, 190 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/0e419b47/doc/admin-guide/plugins/ts_lua.en.rst ---------------------------------------------------------------------- diff --git a/doc/admin-guide/plugins/ts_lua.en.rst b/doc/admin-guide/plugins/ts_lua.en.rst index 8c1f9c8..caad94f 100644 --- a/doc/admin-guide/plugins/ts_lua.en.rst +++ b/doc/admin-guide/plugins/ts_lua.en.rst @@ -580,6 +580,45 @@ ts.client_request.set_uri_args `TOP <#ts-lua-plugin>`_ +ts.client_request.get_uri_params +-------------------------------- +**syntax:** *ts.client_request.get_uri_params()* + +**context:** do_remap or do_global_* or later + +**description:** This function can be used to retrieve the client request's parameter string. + +Here is an example: + +:: + + function do_remap() + local query = ts.client_request.get_uri_params() + print(query) + end + +Then ``GET /st;a=1`` will yield the output: + +``a=1`` + + +`TOP <#ts-lua-plugin>`_ + +ts.client_request.set_uri_params +-------------------------------- +**syntax:** *ts.client_request.set_uri_params(PARAMETER_STRING)* + +**context:** do_remap or do_global_* + +**description:** This function can be used to override the client request's parameter string. + +:: + + ts.client_request.set_uri_params('n=6') + + +`TOP <#ts-lua-plugin>`_ + ts.client_request.get_url ------------------------- **syntax:** *ts.client_request.get_url()* @@ -1212,6 +1251,50 @@ ts.server_request.set_uri_args `TOP <#ts-lua-plugin>`_ +ts.server_request.get_uri_params +-------------------------------- +**syntax:** *ts.server_request.get_uri_params()* + +**context:** function @ TS_LUA_HOOK_SEND_REQUEST_HDR hook point or later + +**description:** This function can be used to retrieve the server request's parameter string. + +Here is an example: + +:: + + function send_request() + local query = ts.server_request.get_uri_params() + print(query) + end + + function do_remap() + ts.hook(TS_LUA_HOOK_SEND_REQUEST_HDR, send_request) + return 0 + end + +Then ``GET /st;a=1`` will yield the output: + +``a=1`` + + +`TOP <#ts-lua-plugin>`_ + +ts.server_request.set_uri_params +-------------------------------- +**syntax:** *ts.server_request.set_uri_params(PARAMETER_STRING)* + +**context:** function @ TS_LUA_HOOK_SEND_REQUEST_HDR hook point + +**description:** This function can be used to override the server request's parameter string. + +:: + + ts.server_request.set_uri_params('n=6') + + +`TOP <#ts-lua-plugin>`_ + ts.server_request.header.HEADER ------------------------------- **syntax:** *ts.server_request.header.HEADER = VALUE* http://git-wip-us.apache.org/repos/asf/trafficserver/blob/0e419b47/plugins/experimental/ts_lua/ts_lua_client_request.c ---------------------------------------------------------------------- diff --git a/plugins/experimental/ts_lua/ts_lua_client_request.c b/plugins/experimental/ts_lua/ts_lua_client_request.c index 7a729ab..a90fb71 100644 --- a/plugins/experimental/ts_lua/ts_lua_client_request.c +++ b/plugins/experimental/ts_lua/ts_lua_client_request.c @@ -40,6 +40,8 @@ static int ts_lua_client_request_get_uri(lua_State *L); static int ts_lua_client_request_set_uri(lua_State *L); static int ts_lua_client_request_set_uri_args(lua_State *L); static int ts_lua_client_request_get_uri_args(lua_State *L); +static int ts_lua_client_request_set_uri_params(lua_State *L); +static int ts_lua_client_request_get_uri_params(lua_State *L); static int ts_lua_client_request_get_method(lua_State *L); static int ts_lua_client_request_set_method(lua_State *L); static int ts_lua_client_request_get_version(lua_State *L); @@ -54,6 +56,7 @@ static void ts_lua_inject_client_request_headers_api(lua_State *L); static void ts_lua_inject_client_request_url_api(lua_State *L); static void ts_lua_inject_client_request_uri_api(lua_State *L); static void ts_lua_inject_client_request_args_api(lua_State *L); +static void ts_lua_inject_client_request_params_api(lua_State *L); static void ts_lua_inject_client_request_method_api(lua_State *L); static void ts_lua_inject_client_request_version_api(lua_State *L); static void ts_lua_inject_client_request_body_size_api(lua_State *L); @@ -76,6 +79,7 @@ ts_lua_inject_client_request_api(lua_State *L) ts_lua_inject_client_request_url_api(L); ts_lua_inject_client_request_uri_api(L); ts_lua_inject_client_request_args_api(L); + ts_lua_inject_client_request_params_api(L); ts_lua_inject_client_request_method_api(L); ts_lua_inject_client_request_version_api(L); ts_lua_inject_client_request_body_size_api(L); @@ -568,6 +572,53 @@ ts_lua_client_request_set_uri_args(lua_State *L) return 0; } +static void +ts_lua_inject_client_request_params_api(lua_State *L) +{ + lua_pushcfunction(L, ts_lua_client_request_set_uri_params); + lua_setfield(L, -2, "set_uri_params"); + + lua_pushcfunction(L, ts_lua_client_request_get_uri_params); + lua_setfield(L, -2, "get_uri_params"); +} + +static int +ts_lua_client_request_get_uri_params(lua_State *L) +{ + const char *param; + int param_len; + + ts_lua_http_ctx *http_ctx; + + GET_HTTP_CONTEXT(http_ctx, L); + + param = TSUrlHttpParamsGet(http_ctx->client_request_bufp, http_ctx->client_request_url, ¶m_len); + + if (param && param_len > 0) { + lua_pushlstring(L, param, param_len); + } else { + lua_pushnil(L); + } + + return 1; +} + +static int +ts_lua_client_request_set_uri_params(lua_State *L) +{ + const char *param; + size_t param_len; + + ts_lua_http_ctx *http_ctx; + + GET_HTTP_CONTEXT(http_ctx, L); + + param = luaL_checklstring(L, 1, ¶m_len); + TSUrlHttpParamsSet(http_ctx->client_request_bufp, http_ctx->client_request_url, param, param_len); + + return 0; +} + static int ts_lua_client_request_client_addr_get_ip(lua_State *L) { http://git-wip-us.apache.org/repos/asf/trafficserver/blob/0e419b47/plugins/experimental/ts_lua/ts_lua_server_request.c ---------------------------------------------------------------------- diff --git a/plugins/experimental/ts_lua/ts_lua_server_request.c b/plugins/experimental/ts_lua/ts_lua_server_request.c index 326d266..83d05a4 100644 --- a/plugins/experimental/ts_lua/ts_lua_server_request.c +++ b/plugins/experimental/ts_lua/ts_lua_server_request.c @@ -50,6 +50,7 @@ static void ts_lua_inject_server_request_get_header_size_api(lua_State *L); static void ts_lua_inject_server_request_get_body_size_api(lua_State *L); static void ts_lua_inject_server_request_uri_api(lua_State *L); static void ts_lua_inject_server_request_uri_args_api(lua_State *L); +static void ts_lua_inject_server_request_uri_params_api(lua_State *L); static int ts_lua_server_request_header_get(lua_State *L); static int ts_lua_server_request_header_set(lua_State *L); @@ -60,6 +61,8 @@ static int ts_lua_server_request_get_uri(lua_State *L); static int ts_lua_server_request_set_uri(lua_State *L); static int ts_lua_server_request_set_uri_args(lua_State *L); static int ts_lua_server_request_get_uri_args(lua_State *L); +static int ts_lua_server_request_set_uri_params(lua_State *L); +static int ts_lua_server_request_get_uri_params(lua_State *L); static int ts_lua_server_request_server_addr_get_ip(lua_State *L); static int ts_lua_server_request_server_addr_get_port(lua_State *L); @@ -79,6 +82,7 @@ ts_lua_inject_server_request_api(lua_State *L) ts_lua_inject_server_request_uri_api(L); ts_lua_inject_server_request_uri_args_api(L); + ts_lua_inject_server_request_uri_params_api(L); lua_setfield(L, -2, "server_request"); } @@ -424,6 +428,58 @@ ts_lua_server_request_get_uri_args(lua_State *L) return 1; } +static void +ts_lua_inject_server_request_uri_params_api(lua_State *L) +{ + lua_pushcfunction(L, ts_lua_server_request_set_uri_params); + lua_setfield(L, -2, "set_uri_params"); + + lua_pushcfunction(L, ts_lua_server_request_get_uri_params); + lua_setfield(L, -2, "get_uri_params"); +} + +static int +ts_lua_server_request_set_uri_params(lua_State *L) +{ + const char *param; + size_t param_len; + + ts_lua_http_ctx *http_ctx; + + GET_HTTP_CONTEXT(http_ctx, L); + + TS_LUA_CHECK_SERVER_REQUEST_URL(http_ctx); + + param = luaL_checklstring(L, 1, ¶m_len); + TSUrlHttpParamsSet(http_ctx->server_request_bufp, http_ctx->server_request_url, param, param_len); + + return 0; +} + +static int +ts_lua_server_request_get_uri_params(lua_State *L) +{ + const char *param; + int param_len; + + ts_lua_http_ctx *http_ctx; + + GET_HTTP_CONTEXT(http_ctx, L); + + TS_LUA_CHECK_SERVER_REQUEST_URL(http_ctx); + + param = TSUrlHttpParamsGet(http_ctx->server_request_bufp, http_ctx->server_request_url, ¶m_len); + + if (param && param_len > 0) { + lua_pushlstring(L, param, param_len); + + } else { + lua_pushnil(L); + } + + return 1; +} + static int ts_lua_server_request_server_addr_get_ip(lua_State *L) {
