[sr-dev] git:master:1771f7e4: siptrace: new parameter trace_mode

Daniel-Constantin Mierla miconda at gmail.com
Mon Jan 11 12:43:30 CET 2016


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

Author: Daniel-Constantin Mierla <miconda at gmail.com>
Committer: Daniel-Constantin Mierla <miconda at gmail.com>
Date: 2016-01-11T12:41:48+01:00

siptrace: new parameter trace_mode

- if set to 1, is using the SREV_NET_DATA_SEND event for sending HEP
  packets to sipcapture server for packets sent to the network

---

Modified: modules/siptrace/siptrace.c

---

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

---

diff --git a/modules/siptrace/siptrace.c b/modules/siptrace/siptrace.c
index 158d2f1..7c689c3 100644
--- a/modules/siptrace/siptrace.c
+++ b/modules/siptrace/siptrace.c
@@ -50,6 +50,7 @@
 #include "../../modules/sl/sl.h"
 #include "../../str.h"
 #include "../../onsend.h"
+#include "../../events.h"
 
 #include "../../modules/sipcapture/hep.h"
 
@@ -106,6 +107,9 @@ static void trace_sl_ack_in(sl_cbp_t *slcb);
 static int trace_send_hep_duplicate(str *body, str *from, str *to, struct dest_info*);
 static int pipport2su (char *pipport, union sockaddr_union *tmp_su, unsigned int *proto);
 
+int siptrace_net_data_send(void *data);
+static int _siptrace_mode = 0;
+
 
 static struct mi_root* sip_trace_mi(struct mi_root* cmd, void* param );
 
@@ -211,6 +215,7 @@ static param_export_t params[] = {
 	{"hep_version",        INT_PARAM, &hep_version          },
 	{"hep_capture_id",     INT_PARAM, &hep_capture_id       },	        
 	{"trace_delayed",      INT_PARAM, &trace_delayed        },
+	{"trace_mode",         PARAM_INT, &_siptrace_mode       },
 	{0, 0, 0}
 };
 
@@ -448,6 +453,9 @@ static int mod_init(void)
 		trace_table_avp_type = 0;
 	}
 
+	if(_siptrace_mode==1) {
+		sr_event_register_cb(SREV_NET_DATA_SEND, siptrace_net_data_send);
+	}
 	return 0;
 }
 
@@ -1906,6 +1914,53 @@ static int pipport2su (char *pipport, union sockaddr_union *tmp_su, unsigned int
 	return -1;
 }
 
+/**
+ *
+ */
+int siptrace_net_data_send(void *data)
+{
+	sr_net_info_t *nd;
+	struct dest_info new_dst;
+	struct _siptrace_data sto;
+
+	if(data==0)
+		return -1;
+
+	nd = (sr_net_info_t*)data;
+	if(nd->dst==NULL || nd->data.s==NULL || nd->data.len<=0)
+		return -1;
+
+	new_dst=*nd->dst;
+	new_dst.send_sock=get_send_socket(0, &nd->dst->to, nd->dst->proto);
+
+	memset(&sto, 0, sizeof(struct _siptrace_data));
+
+	sto.body.s   = nd->data.s;
+	sto.body.len = nd->data.len;
+
+	if (unlikely(new_dst.send_sock==0)) {
+		LM_WARN("no sending socket found\n");
+		strcpy(sto.fromip_buff, "any:255.255.255.255:5060");
+	} else {
+		strncpy(sto.fromip_buff, new_dst.send_sock->sock_str.s,
+			new_dst.send_sock->sock_str.len);
+	}
+	sto.fromip.s = sto.fromip_buff;
+	sto.fromip.len = strlen(sto.fromip_buff);
+
+	siptrace_copy_proto(new_dst.send_sock->proto, sto.toip_buff);
+	strcat(sto.toip_buff, suip2a(&new_dst.to, sizeof(new_dst.to)));
+	strcat(sto.toip_buff,":");
+	strcat(sto.toip_buff, int2str((int)su_getport(&new_dst.to), NULL));
+	sto.toip.s = sto.toip_buff;
+	sto.toip.len = strlen(sto.toip_buff);
+
+	sto.dir = "out";
+
+	trace_send_hep_duplicate(&sto.body, &sto.fromip, &sto.toip, NULL);
+	return 0;
+}
+
 static void siptrace_rpc_status (rpc_t* rpc, void* c) {
 	str status = {0, 0};
 
@@ -1956,4 +2011,3 @@ static int siptrace_init_rpc(void)
 	}
 	return 0;
 }
-




More information about the sr-dev mailing list