Module: kamailio Branch: master Commit: 9fb15e2ef93a0d606fa4c6d695a2f13a4b0a8031 URL: https://github.com/kamailio/kamailio/commit/9fb15e2ef93a0d606fa4c6d695a2f13a4b0a8031
Author: Daniel-Constantin Mierla <mico...@gmail.com> Committer: Daniel-Constantin Mierla <mico...@gmail.com> Date: 2024-10-09T19:51:27+02:00 siptrace: use advertise address if set for trace mode 1 callbacks --- Modified: src/modules/siptrace/siptrace.c --- Diff: https://github.com/kamailio/kamailio/commit/9fb15e2ef93a0d606fa4c6d695a2f13a4b0a8031.diff Patch: https://github.com/kamailio/kamailio/commit/9fb15e2ef93a0d606fa4c6d695a2f13a4b0a8031.patch --- diff --git a/src/modules/siptrace/siptrace.c b/src/modules/siptrace/siptrace.c index 208718adf0d..31609821682 100644 --- a/src/modules/siptrace/siptrace.c +++ b/src/modules/siptrace/siptrace.c @@ -2308,15 +2308,26 @@ int siptrace_net_data_recv(sr_event_param_t *evp) sto.fromip.s = sto.fromip_buff; } - sto.toip.len = snprintf(sto.toip_buff, SIPTRACE_ADDR_MAX, "%s:%s:%d", - siptrace_proto_name(nd->rcv->proto), ip_addr2strz(&nd->rcv->dst_ip), - (int)nd->rcv->dst_port); - if(sto.toip.len < 0 || sto.toip.len >= SIPTRACE_ADDR_MAX) { - LM_ERR("failed to format toip buffer (%d)\n", sto.toip.len); - sto.toip.s = SIPTRACE_ANYADDR; - sto.toip.len = SIPTRACE_ANYADDR_LEN; - } else { + if(nd->rcv->bind_address != NULL + && nd->rcv->bind_address->useinfo.sock_str.len > 0 + && (nd->rcv->bind_address->useinfo.sock_str.len + < SIPTRACE_ADDR_MAX - 1)) { + sto.toip.len = nd->rcv->bind_address->useinfo.sock_str.len; + memcpy(sto.toip_buff, nd->rcv->bind_address->useinfo.sock_str.s, + sto.toip.len); + sto.toip_buff[sto.toip.len] = '\0'; sto.toip.s = sto.toip_buff; + } else { + sto.toip.len = snprintf(sto.toip_buff, SIPTRACE_ADDR_MAX, "%s:%s:%d", + siptrace_proto_name(nd->rcv->proto), + ip_addr2strz(&nd->rcv->dst_ip), (int)nd->rcv->dst_port); + if(sto.toip.len < 0 || sto.toip.len >= SIPTRACE_ADDR_MAX) { + LM_ERR("failed to format toip buffer (%d)\n", sto.toip.len); + sto.toip.s = SIPTRACE_ANYADDR; + sto.toip.len = SIPTRACE_ANYADDR_LEN; + } else { + sto.toip.s = sto.toip_buff; + } } sto.dir = "in"; @@ -2408,6 +2419,7 @@ int siptrace_net_data_sent(sr_event_param_t *evp) int proto; int evcb_ret; int ret = 0; + str vsock; if(evp->data == 0) return -1; @@ -2437,14 +2449,18 @@ int siptrace_net_data_sent(sr_event_param_t *evp) sto.fromip.len = SIPTRACE_ANYADDR_LEN; proto = PROTO_UDP; } else { - if(new_dst.send_sock->sock_str.len >= SIPTRACE_ADDR_MAX - 1) { - LM_ERR("socket string is too large: %d\n", - new_dst.send_sock->sock_str.len); + if(new_dst.send_sock->useinfo.sock_str.len > 0) { + vsock = new_dst.send_sock->useinfo.sock_str; + } else { + vsock = new_dst.send_sock->sock_str; + } + if(vsock.len >= SIPTRACE_ADDR_MAX - 1) { + LM_ERR("socket string is too large: %d\n", vsock.len); return -1; } - strncpy(sto.fromip_buff, new_dst.send_sock->sock_str.s, - new_dst.send_sock->sock_str.len); - sto.fromip.len = new_dst.send_sock->sock_str.len; + memcpy(sto.fromip_buff, vsock.s, vsock.len); + sto.fromip.len = vsock.len; + sto.fromip_buff[sto.fromip.len] = '\0'; proto = new_dst.send_sock->proto; } sto.fromip.s = sto.fromip_buff; _______________________________________________ Kamailio (SER) - Development Mailing List To unsubscribe send an email to sr-dev-le...@lists.kamailio.org