Browse Source

sipdump: made the received info available via the faked message in event route

Daniel-Constantin Mierla 4 days ago
parent
commit
c6c25e43c8
1 changed files with 15 additions and 3 deletions
  1. 15 3
      src/modules/topos/topos_mod.c

+ 15 - 3
src/modules/topos/topos_mod.c

@@ -687,12 +687,13 @@ int tps_get_branch_expire(void)
 static int tps_execute_event_route(sip_msg_t *msg, sr_event_param_t *evp,
 static int tps_execute_event_route(sip_msg_t *msg, sr_event_param_t *evp,
 		int evtype, int evidx, str *evname)
 		int evtype, int evidx, str *evname)
 {
 {
-	struct sip_msg *fmsg;
+	sip_msg_t *fmsg = NULL;
 	struct run_act_ctx ctx;
 	struct run_act_ctx ctx;
 	int rtb;
 	int rtb;
 	sr_kemi_eng_t *keng = NULL;
 	sr_kemi_eng_t *keng = NULL;
 	onsend_info_t onsnd_info = {0};
 	onsend_info_t onsnd_info = {0};
-	onsend_info_t *p_onsend_bak;
+	onsend_info_t *p_onsend_bak = 0;
+	receive_info_t fmsg_rcv_bak = {0};
 
 
 	if(!(_tps_eventrt_mode & evtype)) {
 	if(!(_tps_eventrt_mode & evtype)) {
 		return 0;
 		return 0;
@@ -717,7 +718,6 @@ static int tps_execute_event_route(sip_msg_t *msg, sr_event_param_t *evp,
 
 
 	LM_DBG("executing event_route[topos:%.*s] (%d)\n", evname->len, evname->s,
 	LM_DBG("executing event_route[topos:%.*s] (%d)\n", evname->len, evname->s,
 			evidx);
 			evidx);
-	fmsg = faked_msg_next();
 
 
 	if(evp->dst) {
 	if(evp->dst) {
 		onsnd_info.to = &evp->dst->to;
 		onsnd_info.to = &evp->dst->to;
@@ -728,6 +728,11 @@ static int tps_execute_event_route(sip_msg_t *msg, sr_event_param_t *evp,
 		onsnd_info.len = msg->len;
 		onsnd_info.len = msg->len;
 		onsnd_info.msg = msg;
 		onsnd_info.msg = msg;
 	} else {
 	} else {
+		fmsg = faked_msg_next();
+		fmsg_rcv_bak = fmsg->rcv;
+		if(evp->rcv != NULL) {
+			fmsg->rcv = *evp->rcv;
+		}
 		onsnd_info.buf = fmsg->buf;
 		onsnd_info.buf = fmsg->buf;
 		onsnd_info.len = fmsg->len;
 		onsnd_info.len = fmsg->len;
 		onsnd_info.msg = fmsg;
 		onsnd_info.msg = fmsg;
@@ -746,10 +751,17 @@ static int tps_execute_event_route(sip_msg_t *msg, sr_event_param_t *evp,
 					< 0) {
 					< 0) {
 				LM_ERR("error running event route kemi callback\n");
 				LM_ERR("error running event route kemi callback\n");
 				p_onsend = p_onsend_bak;
 				p_onsend = p_onsend_bak;
+				if(fmsg != NULL && evp->rcv != NULL) {
+					fmsg->rcv = fmsg_rcv_bak;
+				}
 				return -1;
 				return -1;
 			}
 			}
 		}
 		}
 	}
 	}
+	if(fmsg != NULL && evp->rcv != NULL) {
+		fmsg->rcv = fmsg_rcv_bak;
+	}
+
 	set_route_type(rtb);
 	set_route_type(rtb);
 	if(ctx.run_flags & DROP_R_F) {
 	if(ctx.run_flags & DROP_R_F) {
 		LM_DBG("exit due to 'drop' in event route\n");
 		LM_DBG("exit due to 'drop' in event route\n");