Module: kamailio
Branch: master
Commit: 57e7b28bd811971f16154cee08acc2d2024dee76
URL:
https://github.com/kamailio/kamailio/commit/57e7b28bd811971f16154cee08acc2d…
Author: Daniel-Constantin Mierla <miconda(a)gmail.com>
Committer: Daniel-Constantin Mierla <miconda(a)gmail.com>
Date: 2016-01-11T22:24:28+01:00
siptrace: use SREV_NET_DATA_RECV event for incoming traffic with trace_mode=1
---
Modified: modules/siptrace/siptrace.c
---
Diff:
https://github.com/kamailio/kamailio/commit/57e7b28bd811971f16154cee08acc2d…
Patch:
https://github.com/kamailio/kamailio/commit/57e7b28bd811971f16154cee08acc2d…
---
diff --git a/modules/siptrace/siptrace.c b/modules/siptrace/siptrace.c
index 7c689c3..613ea31 100644
--- a/modules/siptrace/siptrace.c
+++ b/modules/siptrace/siptrace.c
@@ -107,6 +107,7 @@ 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_recv(void *data);
int siptrace_net_data_send(void *data);
static int _siptrace_mode = 0;
@@ -454,6 +455,7 @@ static int mod_init(void)
}
if(_siptrace_mode==1) {
+ sr_event_register_cb(SREV_NET_DATA_RECV, siptrace_net_data_recv);
sr_event_register_cb(SREV_NET_DATA_SEND, siptrace_net_data_send);
}
return 0;
@@ -1914,6 +1916,48 @@ static int pipport2su (char *pipport, union sockaddr_union *tmp_su,
unsigned int
return -1;
}
+
+/**
+ *
+ */
+int siptrace_net_data_recv(void *data)
+{
+ sr_net_info_t *nd;
+ struct _siptrace_data sto;
+
+ if(data==0)
+ return -1;
+
+ nd = (sr_net_info_t*)data;
+ if(nd->rcv==NULL || nd->data.s==NULL || nd->data.len<=0)
+ return -1;
+
+ memset(&sto, 0, sizeof(struct _siptrace_data));
+
+ sto.body.s = nd->data.s;
+ sto.body.len = nd->data.len;
+
+ siptrace_copy_proto(nd->rcv->proto, sto.fromip_buff);
+ strcat(sto.fromip_buff, ip_addr2a(&nd->rcv->src_ip));
+ strcat(sto.fromip_buff,":");
+ strcat(sto.fromip_buff, int2str(nd->rcv->src_port, NULL));
+ sto.fromip.s = sto.fromip_buff;
+ sto.fromip.len = strlen(sto.fromip_buff);
+
+ siptrace_copy_proto(nd->rcv->proto, sto.toip_buff);
+ strcat(sto.toip_buff, ip_addr2a(&nd->rcv->dst_ip));
+ strcat(sto.toip_buff,":");
+ strcat(sto.toip_buff, int2str(nd->rcv->dst_port, NULL));
+ sto.toip.s = sto.toip_buff;
+ sto.toip.len = strlen(sto.toip_buff);
+
+ sto.dir = "in";
+
+ trace_send_hep_duplicate(&sto.body, &sto.fromip, &sto.toip, NULL);
+ return 0;
+
+}
+
/**
*
*/