[sr-dev] git:master:a2b8e829: tm: new parameter event_callback_lres_sent

Daniel-Constantin Mierla miconda at gmail.com
Tue Aug 27 13:22:46 CEST 2019


Module: kamailio
Branch: master
Commit: a2b8e8296f3a56b9ba96f043e3297e4e65d95a58
URL: https://github.com/kamailio/kamailio/commit/a2b8e8296f3a56b9ba96f043e3297e4e65d95a58

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2019-08-27T13:22:24+02:00

tm: new parameter event_callback_lres_sent

- set the name of callback function to be executed in KEMI scripts for
event_route[tm:local-response]

---

Modified: src/modules/tm/t_reply.c
Modified: src/modules/tm/tm.c

---

Diff:  https://github.com/kamailio/kamailio/commit/a2b8e8296f3a56b9ba96f043e3297e4e65d95a58.diff
Patch: https://github.com/kamailio/kamailio/commit/a2b8e8296f3a56b9ba96f043e3297e4e65d95a58.patch

---

diff --git a/src/modules/tm/t_reply.c b/src/modules/tm/t_reply.c
index 25ece75fa6..350be35bdd 100644
--- a/src/modules/tm/t_reply.c
+++ b/src/modules/tm/t_reply.c
@@ -98,6 +98,8 @@ static int goto_on_reply=0;
 int goto_on_sl_reply=0;
 extern str on_sl_reply_name;
 
+extern str _tm_event_callback_lres_sent;
+
 /* remap 503 response code to 500 */
 extern int tm_remap_503_500;
 /* send path and flags in 3xx class reply */
@@ -454,7 +456,10 @@ static int _reply_light( struct cell *trans, char* buf, unsigned int len,
 	struct tmcb_params onsend_params;
 	int rt, backup_rt;
 	struct run_act_ctx ctx;
+	struct run_act_ctx *bctx;
 	struct sip_msg pmsg;
+	sr_kemi_eng_t *keng = NULL;
+	str evname = str_init("tm:local-response-sent");
 
 	init_cancel_info(&cancel_data);
 	if (!buf)
@@ -558,17 +563,20 @@ static int _reply_light( struct cell *trans, char* buf, unsigned int len,
 						&onsend_params);
 			}
 
-			if(_tm_local_response_sent_lookup == 0) {
-				rt = route_lookup(&event_rt, "tm:local-response");
-				_tm_local_response_sent_lookup = 1;
-			} else {
-				rt = -1;
+			if(_tm_event_callback_lres_sent.len>0
+					&& _tm_event_callback_lres_sent.s!=NULL) {
+				keng = sr_kemi_eng_get();
+			}
+			rt = -1;
+			if(likely(keng==NULL)) {
+				if(_tm_local_response_sent_lookup == 0) {
+					rt = route_lookup(&event_rt, "tm:local-response");
+					_tm_local_response_sent_lookup = 1;
+				}
 			}
-			if (unlikely(rt >= 0 && event_rt.rlist[rt] != NULL))
-			{
+			if ((rt >= 0 && event_rt.rlist[rt] != NULL) || (keng != NULL)) {
 				if (likely(build_sip_msg_from_buf(&pmsg, buf, len,
-								inc_msg_no()) == 0))
-				{
+								inc_msg_no()) == 0)) {
 					struct onsend_info onsnd_info;
 
 					onsnd_info.to=&(trans->uas.response.dst.to);
@@ -580,11 +588,21 @@ static int _reply_light( struct cell *trans, char* buf, unsigned int len,
 					backup_rt = get_route_type();
 					set_route_type(LOCAL_ROUTE);
 					init_run_actions_ctx(&ctx);
-					run_top_route(event_rt.rlist[rt], &pmsg, 0);
+					if(keng == NULL) {
+						run_top_route(event_rt.rlist[rt], &pmsg, 0);
+					} else {
+						bctx = sr_kemi_act_ctx_get();
+						sr_kemi_act_ctx_set(&ctx);
+						sr_kemi_route(keng, &pmsg, EVENT_ROUTE,
+							&_tm_event_callback_lres_sent, &evname);
+						sr_kemi_act_ctx_set(bctx);
+					}
 					set_route_type(backup_rt);
 					p_onsend=0;
 
 					free_sip_msg(&pmsg);
+				} else {
+					LM_ERR("failed to build sip msg structure\n");
 				}
 			}
 
diff --git a/src/modules/tm/tm.c b/src/modules/tm/tm.c
index 99e20afcd3..6cbdaf1776 100644
--- a/src/modules/tm/tm.c
+++ b/src/modules/tm/tm.c
@@ -218,6 +218,7 @@ str contact_flows_avp = {0, 0};
 str ulattrs_xavp_name = {NULL, 0};
 str on_sl_reply_name = {NULL, 0};
 int tm_remap_503_500 = 1;
+str _tm_event_callback_lres_sent = {NULL, 0};
 
 int tm_failure_exec_mode = 0;
 
@@ -469,6 +470,7 @@ static param_export_t params[]={
 	{"event_callback",      PARAM_STR, &tm_event_callback                    },
 	{"relay_100",           PARAM_INT, &default_tm_cfg.relay_100             },
 	{"rich_redirect" ,      PARAM_INT, &tm_rich_redirect                     },
+	{"event_callback_lres_sent", PARAM_STR, &_tm_event_callback_lres_sent    },
 	{0,0,0}
 };
 




More information about the sr-dev mailing list