[sr-dev] git:master: tcp: fix connection alias replacing

Andrei Pelinescu-Onciul andrei at iptel.org
Wed Oct 10 10:18:48 CEST 2012


Module: sip-router
Branch: master
Commit: e71435b0276c89ef756fecf1bbd5e339b80e804c
URL:    http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=e71435b0276c89ef756fecf1bbd5e339b80e804c

Author: Andrei Pelinescu-Onciul <andrei at iptel.org>
Committer: Andrei Pelinescu-Onciul <andrei at iptel.org>
Date:   Wed Oct 10 10:02:00 2012 +0200

tcp: fix connection alias replacing

When the TCP_ALIAS_REPLACE is set and an alias has to be added to
a connection that had 0 aliases (it can happen due to
TCP_ALIAS_REPLACE flag), the connection aliases count was wrongly
forced to 1.
For more details see:
http://lists.sip-router.org/pipermail/sr-users/2012-October/074932.html

Patch-by Jijo

---

 tcp_main.c |   11 +++++++----
 1 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/tcp_main.c b/tcp_main.c
index 2c4bf82..9d3359e 100644
--- a/tcp_main.c
+++ b/tcp_main.c
@@ -1339,11 +1339,14 @@ int tcpconn_finish_connect( struct tcp_connection* c,
 			/* remove all the aliases except the first one and re-add them
 			 * (there shouldn't be more then the 3 default aliases at this 
 			 * stage) */
-			for (r=1; r<c->aliases; r++){
-				a=&c->con_aliases[r];
-				tcpconn_listrm(tcpconn_aliases_hash[a->hash], a, next, prev);
+			if (c->aliases > 1) {
+				for (r=1; r<c->aliases; r++){
+					a=&c->con_aliases[r];
+					tcpconn_listrm(tcpconn_aliases_hash[a->hash],
+									a, next, prev);
+				}
+				c->aliases=1;
 			}
-			c->aliases=1;
 			/* add the local_ip:0 and local_ip:local_port aliases */
 			_tcpconn_add_alias_unsafe(c, c->rcv.src_port, &c->rcv.dst_ip,
 												0, new_conn_alias_flags);




More information about the sr-dev mailing list