[sr-dev] git:master:a70f9739: htable: implementation of kemi callback for event routes

Daniel-Constantin Mierla miconda at gmail.com
Mon Nov 14 10:56:02 CET 2016


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

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2016-11-14T10:44:11+01:00

htable: implementation of kemi callback for event routes

- done for event htable:mod-init
- new parameter 'event_callback' - set the name of the function from
  kemi embedded scripting language to be executed on event. The function
  receives a string parameter with event name

---

Modified: modules/htable/htable.c

---

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

---

diff --git a/modules/htable/htable.c b/modules/htable/htable.c
index dd29cb7..424a8e7 100644
--- a/modules/htable/htable.c
+++ b/modules/htable/htable.c
@@ -55,6 +55,8 @@ int  ht_db_expires_flag = 0;
 int  ht_enable_dmq = 0;
 int  ht_timer_procs = 0;
 
+str ht_event_callback = STR_NULL;
+
 static int htable_init_rpc(void);
 
 /** module functions */
@@ -148,6 +150,7 @@ static param_export_t params[]={
 	{"db_expires",         INT_PARAM, &ht_db_expires_flag},
 	{"enable_dmq",         INT_PARAM, &ht_enable_dmq},
 	{"timer_procs",        PARAM_INT, &ht_timer_procs},
+	{"event_callback",     PARAM_STR, &ht_event_callback},
 	{0,0,0}
 };
 
@@ -234,6 +237,8 @@ static int child_init(int rank)
 	struct run_act_ctx ctx;
 	int rtb, rt;
 	int i;
+	sr_kemi_eng_t *keng = NULL;
+	str evname = str_init("htable:mod-init");
 
 	LM_DBG("rank is (%d)\n", rank);
 
@@ -252,24 +257,49 @@ static int child_init(int rank)
 	if (rank!=PROC_INIT)
 		return 0;
 
+
+	rt = -1;
+	if(ht_event_callback.s==NULL || ht_event_callback.len<=0) {
+		rt = route_lookup(&event_rt, evname.s);
+		if(rt<0 || event_rt.rlist[rt]==NULL) {
+			rt = -1;
+		}
+	} else {
+		keng = sr_kemi_eng_get();
+		if(keng==NULL) {
+			LM_DBG("event callback (%s) set, but no cfg engine\n",
+					ht_event_callback.s);
+			goto done;
+		}
+	}
 	rt = route_get(&event_rt, "htable:mod-init");
-	if(rt>=0 && event_rt.rlist[rt]!=NULL) {
-		LM_DBG("executing event_route[htable:mod-init] (%d)\n", rt);
+	if(rt>=0 || ht_event_callback.len>0) {
+		LM_DBG("executing event_route[%s] (%d)\n", evname.s, rt);
 		if(faked_msg_init()<0)
 			return -1;
 		fmsg = faked_msg_next();
 		rtb = get_route_type();
 		set_route_type(REQUEST_ROUTE);
 		init_run_actions_ctx(&ctx);
-		run_top_route(event_rt.rlist[rt], fmsg, &ctx);
-		if(ctx.run_flags&DROP_R_F)
-		{
+		if(rt>0) {
+			run_top_route(event_rt.rlist[rt], fmsg, &ctx);
+		} else {
+			if(keng!=NULL) {
+				if(keng->froute(fmsg, EVENT_ROUTE,
+							&ht_event_callback, &evname)<0) {
+					LM_ERR("error running event route kemi callback\n");
+					return -1;
+				}
+			}
+		}
+		if(ctx.run_flags&DROP_R_F) {
 			LM_ERR("exit due to 'drop' in event route\n");
 			return -1;
 		}
 		set_route_type(rtb);
 	}
 
+done:
 	return 0;
 }
 




More information about the sr-dev mailing list