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;

Reply via email to