Repository: trafficserver Updated Branches: refs/heads/master 08e27ba98 -> 318305816
TS-3972: support getting incoming port in ts_lua Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/31830581 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/31830581 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/31830581 Branch: refs/heads/master Commit: 31830581618a5e9a6e76235dc6e1cb1e142eb2b1 Parents: 08e27ba Author: Kit Chan <[email protected]> Authored: Sat Oct 17 00:14:42 2015 -0700 Committer: Kit Chan <[email protected]> Committed: Sat Oct 17 00:14:42 2015 -0700 ---------------------------------------------------------------------- doc/reference/plugins/ts_lua.en.rst | 21 +++++++++++++ .../experimental/ts_lua/ts_lua_client_request.c | 32 +++++++++++++++++++- 2 files changed, 52 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/31830581/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 f39cbf1..a76a7ae 100644 --- a/doc/reference/plugins/ts_lua.en.rst +++ b/doc/reference/plugins/ts_lua.en.rst @@ -636,6 +636,27 @@ Here is an example: `TOP <#ts-lua-plugin>`_ +ts.client_request.client_addr.get_incoming_port +----------------------------------------------- +**syntax:** *ts.client_request.client_addr.get_incoming_port()* + +**context:** do_remap or do_global_* or later + +**description**: This function can be used to get incoming port of the request. + +The ts.client_request.client_addr.get_incoming_port function returns incoming port as number. + +Here is an example: + +:: + + function do_global_read_request() + port = ts.client_request.client_addr.get_incoming_port() + print(port) -- 80 + end + +`TOP <#ts-lua-plugin>`_ + ts.client_request.get_url_host ------------------------------ **syntax:** *host = ts.client_request.get_url_host()* http://git-wip-us.apache.org/repos/asf/trafficserver/blob/31830581/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 7639a62..7151971 100644 --- a/plugins/experimental/ts_lua/ts_lua_client_request.c +++ b/plugins/experimental/ts_lua/ts_lua_client_request.c @@ -63,7 +63,7 @@ static void ts_lua_inject_client_request_header_size_api(lua_State *L); static int ts_lua_client_request_client_addr_get_ip(lua_State *L); static int ts_lua_client_request_client_addr_get_port(lua_State *L); static int ts_lua_client_request_client_addr_get_addr(lua_State *L); - +static int ts_lua_client_request_client_addr_get_incoming_port(lua_State *L); void ts_lua_inject_client_request_api(lua_State *L) @@ -105,6 +105,9 @@ ts_lua_inject_client_request_client_addr_api(lua_State *L) lua_pushcfunction(L, ts_lua_client_request_client_addr_get_addr); lua_setfield(L, -2, "get_addr"); + lua_pushcfunction(L, ts_lua_client_request_client_addr_get_incoming_port); + lua_setfield(L, -2, "get_incoming_port"); + lua_setfield(L, -2, "client_addr"); } @@ -620,6 +623,33 @@ ts_lua_client_request_client_addr_get_port(lua_State *L) } static int +ts_lua_client_request_client_addr_get_incoming_port(lua_State *L) +{ + struct sockaddr const *incoming_addr; + ts_lua_http_ctx *http_ctx; + int port; + + http_ctx = ts_lua_get_http_ctx(L); + + incoming_addr = TSHttpTxnIncomingAddrGet(http_ctx->txnp); + + if (incoming_addr == NULL) { + lua_pushnil(L); + + } else { + if (incoming_addr->sa_family == AF_INET) { + port = ((struct sockaddr_in *)incoming_addr)->sin_port; + } else { + port = ((struct sockaddr_in6 *)incoming_addr)->sin6_port; + } + + lua_pushnumber(L, ntohs(port)); + } + + return 1; +} + +static int ts_lua_client_request_client_addr_get_addr(lua_State *L) { struct sockaddr const *client_ip;
