[Asterisk-cvs] asterisk/channels chan_sip.c,1.887,1.888

russell russell
Thu Oct 13 16:22:43 CDT 2005


Update of /usr/cvsroot/asterisk/channels
In directory mongoose.digium.com:/tmp/cvs-serv21628/channels

Modified Files:
	chan_sip.c 
Log Message:
re-bind the socket if the bindaddr option is changed during reload (issue #5435)


Index: chan_sip.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channels/chan_sip.c,v
retrieving revision 1.887
retrieving revision 1.888
diff -u -d -r1.887 -r1.888
--- chan_sip.c	13 Oct 2005 20:04:38 -0000	1.887
+++ chan_sip.c	13 Oct 2005 20:17:21 -0000	1.888
@@ -851,7 +851,7 @@
 static int sipsock  = -1;
 
 
-static struct sockaddr_in bindaddr;
+static struct sockaddr_in bindaddr = { 0, };
 static struct sockaddr_in externip;
 static char externhost[MAXHOSTNAMELEN] = "";
 static time_t externexpire = 0;
@@ -12079,12 +12079,11 @@
 	char *utype;
 	struct hostent *hp;
 	int format;
-	int oldport = ntohs(bindaddr.sin_port);
 	char iabuf[INET_ADDRSTRLEN];
 	struct ast_flags dummy;
 	int auto_sip_domains = 0;
+	struct sockaddr_in old_bindaddr = bindaddr;
 
-	
 	cfg = ast_config_load(config);
 
 	/* We *must* have a config file otherwise stop immediately */
@@ -12389,7 +12388,7 @@
 		bindaddr.sin_port = ntohs(DEFAULT_SIP_PORT);
 	bindaddr.sin_family = AF_INET;
 	ast_mutex_lock(&netlock);
-	if ((sipsock > -1) && (ntohs(bindaddr.sin_port) != oldport)) {
+	if ((sipsock > -1) && (memcmp(&old_bindaddr, &bindaddr, sizeof(struct sockaddr_in)))) {
 		close(sipsock);
 		sipsock = -1;
 	}
@@ -12406,8 +12405,8 @@
 
 			if (bind(sipsock, (struct sockaddr *)&bindaddr, sizeof(bindaddr)) < 0) {
 				ast_log(LOG_WARNING, "Failed to bind to %s:%d: %s\n",
-						ast_inet_ntoa(iabuf, sizeof(iabuf), bindaddr.sin_addr), ntohs(bindaddr.sin_port),
-							strerror(errno));
+				ast_inet_ntoa(iabuf, sizeof(iabuf), bindaddr.sin_addr), ntohs(bindaddr.sin_port),
+				strerror(errno));
 				close(sipsock);
 				sipsock = -1;
 			} else {




More information about the svn-commits mailing list