]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: lua: txn: object "txn" provides two objects "channel"
authorThierry FOURNIER <tfournier@haproxy.com>
Tue, 17 Feb 2015 13:59:53 +0000 (14:59 +0100)
committerWilly Tarreau <w@1wt.eu>
Sat, 28 Feb 2015 22:12:36 +0000 (23:12 +0100)
This patch adds two functions that creates and returns channel
object from a txn object.

src/hlua.c

index b3ed8e2a5ee45992390f65091774003227be89f1..465b94bb0258d03aefbe02220840c2a94d8beac2 100644 (file)
@@ -2253,6 +2253,38 @@ static int hlua_txn_new(lua_State *L, struct session *s, struct proxy *p, void *
        return 1;
 }
 
+/* This function returns a channel object associated
+ * with the request channel. This function never fails,
+ * however if the stack is full, it throws an error.
+ */
+__LJMP static int hlua_txn_req_channel(lua_State *L)
+{
+       MAY_LJMP(check_args(L, 1, "req_channel"));
+
+       struct hlua_txn *s = MAY_LJMP(hlua_checktxn(L, 1));
+
+       if (!hlua_channel_new(L, s->s->req))
+               WILL_LJMP(luaL_error(L, "full stack"));
+
+       return 1;
+}
+
+/* This function returns a channel object associated
+ * with the response channel. This function never fails,
+ * however if the stack is full, it throws an error.
+ */
+__LJMP static int hlua_txn_res_channel(lua_State *L)
+{
+       MAY_LJMP(check_args(L, 1, "req_channel"));
+
+       struct hlua_txn *s = MAY_LJMP(hlua_checktxn(L, 1));
+
+       if (!hlua_channel_new(L, s->s->rep))
+               WILL_LJMP(luaL_error(L, "full stack"));
+
+       return 1;
+}
+
 /* This function is an LUA binding. It is called with each sample-fetch.
  * It uses closure argument to store the associated sample-fetch. It
  * returns only one argument or throws an error. An error is throwed
@@ -3371,6 +3403,8 @@ void hlua_init(void)
        hlua_class_function(gL.T, "get_headers", hlua_session_getheaders);
        hlua_class_function(gL.T, "set_priv",    hlua_setpriv);
        hlua_class_function(gL.T, "get_priv",    hlua_getpriv);
+       hlua_class_function(gL.T, "req_channel", hlua_txn_req_channel);
+       hlua_class_function(gL.T, "res_channel", hlua_txn_res_channel);
 
        lua_settable(gL.T, -3);