瀏覽代碼

tm: rpc commands for sending requests without automatic ack

Daniel-Constantin Mierla 5 月之前
父節點
當前提交
466d3ad386
共有 3 個文件被更改,包括 60 次插入4 次删除
  1. 29 4
      src/modules/tm/rpc_uac.c
  2. 4 0
      src/modules/tm/rpc_uac.h
  3. 27 0
      src/modules/tm/tm.c

+ 29 - 4
src/modules/tm/rpc_uac.c

@@ -632,7 +632,7 @@ static void rpc_uac_block_callback(
  *                     an rpc reply (see above). If 2 blocking wait until
  *                     final response for the transaction arrives.
  */
-static void rpc_t_uac(rpc_t *rpc, void *c, int reply_wait)
+static void rpc_t_uac(rpc_t *rpc, void *c, int reply_wait, int cbflags)
 {
 	/* rpc params */
 	str method, ruri, nexthop, send_socket, headers, body;
@@ -794,6 +794,7 @@ static void rpc_t_uac(rpc_t *rpc, void *c, int reply_wait)
 		uac_req.cbp = ruid;
 		uac_req.cb_flags = TMCB_LOCAL_COMPLETED;
 	}
+	uac_req.cb_flags |= cbflags;
 
 	ret = t_uac(&uac_req);
 
@@ -852,7 +853,7 @@ error:
  */
 void rpc_t_uac_start(rpc_t *rpc, void *c)
 {
-	rpc_t_uac(rpc, c, 0);
+	rpc_t_uac(rpc, c, 0, 0);
 }
 
 /** t_uac with reply waiting.
@@ -860,7 +861,7 @@ void rpc_t_uac_start(rpc_t *rpc, void *c)
  */
 void rpc_t_uac_wait(rpc_t *rpc, void *c)
 {
-	rpc_t_uac(rpc, c, 1);
+	rpc_t_uac(rpc, c, 1, 0);
 }
 
 /** t_uac with blocking for reply waiting.
@@ -868,7 +869,31 @@ void rpc_t_uac_wait(rpc_t *rpc, void *c)
  */
 void rpc_t_uac_wait_block(rpc_t *rpc, void *c)
 {
-	rpc_t_uac(rpc, c, 2);
+	rpc_t_uac(rpc, c, 2, 0);
+}
+
+/** t_uac with no reply waiting and no ack.
+ * @see rpc_t_uac.
+ */
+void rpc_t_uac_start_noack(rpc_t *rpc, void *c)
+{
+	rpc_t_uac(rpc, c, 0, TMCB_DONT_ACK);
+}
+
+/** t_uac with reply waiting and no ack.
+ * @see rpc_t_uac.
+ */
+void rpc_t_uac_wait_noack(rpc_t *rpc, void *c)
+{
+	rpc_t_uac(rpc, c, 1, TMCB_DONT_ACK);
+}
+
+/** t_uac with blocking for reply waiting and no ack.
+ * @see rpc_t_uac.
+ */
+void rpc_t_uac_wait_block_noack(rpc_t *rpc, void *c)
+{
+	rpc_t_uac(rpc, c, 2, TMCB_DONT_ACK);
 }
 
 

+ 4 - 0
src/modules/tm/rpc_uac.h

@@ -28,6 +28,10 @@ void rpc_t_uac_start(rpc_t *rpc, void *c);
 void rpc_t_uac_wait(rpc_t *rpc, void *c);
 void rpc_t_uac_wait_block(rpc_t *rpc, void *c);
 
+void rpc_t_uac_start_noack(rpc_t *rpc, void *c);
+void rpc_t_uac_wait_noack(rpc_t *rpc, void *c);
+void rpc_t_uac_wait_block_noack(rpc_t *rpc, void *c);
+
 int t_uac_send(str *method, str *ruri, str *nexthop, str *send_socket,
 		str *headers, str *body);
 

+ 27 - 0
src/modules/tm/tm.c

@@ -2901,6 +2901,27 @@ static const char *rpc_t_uac_wait_block_doc[2] = {
 	0
 };
 
+static const char *rpc_t_uac_start_noack_doc[2] = {
+	"starts a tm uac using a list of string parameters: method, ruri, "
+	"dst_uri, send_sock, headers (CRLF separated) and body (optional), "
+	"without sending ACK for local INVITE",
+	0
+};
+
+static const char *rpc_t_uac_wait_noack_doc[2] = {
+	"starts a tm uac and waits for the final reply, using a list of string "
+	"parameters: method, ruri, dst_uri send_sock, headers (CRLF separated)"
+	" and body (optional), without sending ACK for local INVITE",
+	0
+};
+
+static const char *rpc_t_uac_wait_block_noack_doc[2] = {
+	"starts a tm uac and waits for the final reply in blocking mode, using a"
+	" list of string parameters: method, ruri, dst_uri send_sock, headers "
+	"(CRLF separated) and body (optional), without sending ACK for local INVITE",
+	0
+};
+
 static const char *tm_rpc_list_doc[2] = {
 	"List transactions.",
 	0
@@ -2922,6 +2943,12 @@ static rpc_export_t tm_rpc[] = {
 	{"tm.t_uac_start", rpc_t_uac_start, rpc_t_uac_start_doc, 0},
 	{"tm.t_uac_wait", rpc_t_uac_wait, rpc_t_uac_wait_doc, RET_ARRAY},
 	{"tm.t_uac_wait_block", rpc_t_uac_wait_block, rpc_t_uac_wait_block_doc, 0},
+	{"tm.t_uac_start_noack", rpc_t_uac_start_noack,
+		rpc_t_uac_start_noack_doc, 0},
+	{"tm.t_uac_wait_noack", rpc_t_uac_wait_noack,
+		rpc_t_uac_wait_noack_doc, RET_ARRAY},
+	{"tm.t_uac_wait_block_noack", rpc_t_uac_wait_block_noack,
+		rpc_t_uac_wait_block_noack_doc, 0},
 	{"tm.list", tm_rpc_list, tm_rpc_list_doc, RET_ARRAY},
 	{"tm.clean", tm_rpc_clean, tm_rpc_clean_doc, 0},
 	{0, 0, 0, 0}