From 1edb4298ca5b890c40f9d7df5f29199a90b0c4fd Mon Sep 17 00:00:00 2001 From: Dmitri Savolainen Date: Mon, 27 Jun 2016 12:50:19 +0300 Subject: [PATCH 1/2] nathelper: set via branch according to "z9hG4bK..." format (instead of "branch=0") --- modules/nathelper/sip_pinger.h | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/modules/nathelper/sip_pinger.h b/modules/nathelper/sip_pinger.h index 7cd5e0cedd0..5166a750b34 100644 --- a/modules/nathelper/sip_pinger.h +++ b/modules/nathelper/sip_pinger.h @@ -116,6 +116,9 @@ static inline char* build_sipping(str *curi, struct socket_info* s, str *path, str *ruid, unsigned int aorhash, int *len_p) { #define s_len(_s) (sizeof(_s)-1) +#define MAX_BRANCHID 9999999 +#define MIN_BRANCHID 1000000 +#define LEN_BRANCHID 7 /* NOTE: this must be sync with the MX and MIN values !! */ static char buf[MAX_SIPPING_SIZE]; char *p; int len; @@ -135,7 +138,7 @@ static inline char* build_sipping(str *curi, struct socket_info* s, str *path, if ( sipping_method.len + 1 + curi->len + s_len(" SIP/2.0"CRLF) + s_len("Via: SIP/2.0/UDP ") + vaddr.len + ((s->address.af==AF_INET6)?2:0) + - 1 + vport.len + s_len(";branch=0") + + 1 + vport.len + s_len(";branch=z9hG4bK") + LEN_BRANCHID + (path->len ? (s_len(CRLF"Route: ") + path->len) : 0) + s_len(CRLF"From: ") + sipping_from.len + s_len(";tag=") + ruid->len + 1 + 8 + 1 + 8 + @@ -164,13 +167,16 @@ static inline char* build_sipping(str *curi, struct socket_info* s, str *path, } *(p++) = ':'; append_str( p, vport.s, vport.len); + append_fix( p, ";branch=z9hG4bK"); + int2bstr( + (long)(rand()/(float)RAND_MAX * (MAX_BRANCHID-MIN_BRANCHID) + MIN_BRANCHID), + p+LEN_BRANCHID-INT2STR_MAX_LEN+1, NULL); + p += LEN_BRANCHID; if (path->len) { - append_fix( p, ";branch=0"CRLF"Route: "); + append_fix( p, CRLF"Route: "); append_str( p, path->s, path->len); - append_fix( p, CRLF"From: "); - } else { - append_fix( p, ";branch=0"CRLF"From: "); } + append_fix( p, CRLF"From: "); append_str( p, sipping_from.s, sipping_from.len); append_fix( p, ";tag="); append_str( p, ruid->s, ruid->len); From 5261c1d0723a5b59edd231c93e42d1c963eb6375 Mon Sep 17 00:00:00 2001 From: Dmitri Savolainen Date: Mon, 27 Jun 2016 12:53:01 +0300 Subject: [PATCH 2/2] nat_traversal: set via branch according to "z9hG4bK..." format (instead of "branch=0") --- modules/nat_traversal/nat_traversal.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/nat_traversal/nat_traversal.c b/modules/nat_traversal/nat_traversal.c index 0acdd1725d1..fb1dd307376 100644 --- a/modules/nat_traversal/nat_traversal.c +++ b/modules/nat_traversal/nat_traversal.c @@ -1508,6 +1508,8 @@ ClientNatTest(struct sip_msg *msg, unsigned int tests) #define FROM_PREFIX "sip:keepalive@" +#define MAX_BRANCHID 9999999 +#define MIN_BRANCHID 1000000 static void send_keepalive(NAT_Contact *contact) @@ -1536,7 +1538,7 @@ send_keepalive(NAT_Contact *contact) len = snprintf(buffer, sizeof(buffer), "%s %s SIP/2.0\r\n" - "Via: SIP/2.0/UDP %.*s:%d;branch=0\r\n" + "Via: SIP/2.0/UDP %.*s:%d;branch=z9hG4bK%ld\r\n" "From: %s;tag=%x\r\n" "To: %s\r\n" "Call-ID: %s-%x-%x@%.*s\r\n" @@ -1546,6 +1548,7 @@ send_keepalive(NAT_Contact *contact) keepalive_params.method, contact->uri, contact->socket->address_str.len, contact->socket->address_str.s, contact->socket->port_no, + (long)(rand()/(float)RAND_MAX * (MAX_BRANCHID-MIN_BRANCHID) + MIN_BRANCHID), from_uri, keepalive_params.from_tag++, contact->uri, keepalive_params.callid_prefix, keepalive_params.callid_counter++, get_ticks(),