[asterisk-commits] dvossel: branch 1.6.0 r221745 - in /branches/1.6.0: ./ channels/chan_sip.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Thu Oct 1 16:04:35 CDT 2009


Author: dvossel
Date: Thu Oct  1 16:04:30 2009
New Revision: 221745

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=221745
Log:
Merged revisions 221697 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/trunk

........
  r221697 | dvossel | 2009-10-01 14:33:33 -0500 (Thu, 01 Oct 2009) | 9 lines
  
  outbound tls connections were not defaulting to port 5061
  
  (closes issue #15854)
  Reported by: dvossel
  Patches:
        sip_port_config_trunk.diff uploaded by dvossel (license 671)
  Tested by: dvossel
........

Modified:
    branches/1.6.0/   (props changed)
    branches/1.6.0/channels/chan_sip.c

Propchange: branches/1.6.0/
------------------------------------------------------------------------------
Binary property 'trunk-merged' - no diff available.

Modified: branches/1.6.0/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.6.0/channels/chan_sip.c?view=diff&rev=221745&r1=221744&r2=221745
==============================================================================
--- branches/1.6.0/channels/chan_sip.c (original)
+++ branches/1.6.0/channels/chan_sip.c Thu Oct  1 16:04:30 2009
@@ -21297,6 +21297,7 @@
 	struct ast_ha *oldha = NULL;
 	int found = 0;
 	int firstpass = 1;
+	uint16_t port = 0;
 	int format = 0;		/* Ama flags */
 	time_t regseconds = 0;
 	struct ast_flags peerflags[2] = {{(0)}};
@@ -21432,16 +21433,14 @@
 						/* Initialize stuff if this is a new peer, or if it used to
 						 * not be dynamic before the reload. */
 						memset(&peer->addr.sin_addr, 0, 4);
-						if (peer->addr.sin_port) {
-							/* If we've already got a port, make it the default rather than absolute */
-							peer->defaddr.sin_port = peer->addr.sin_port;
-							peer->addr.sin_port = 0;
-						}
+						peer->addr.sin_port = 0;
 					}
 					peer->host_dynamic = TRUE;
 				} else {
 					/* Non-dynamic.  Make sure we become that way if we're not */
 					AST_SCHED_DEL(sched, peer->expire);
+					/* the port will either be set to a default value or a config specified value once all option parsing is complete */
+					peer->addr.sin_port = 0;
 					peer->host_dynamic = FALSE;
 					srvlookup = v->value;
 					if (global_dynamic_exclude_static) {
@@ -21471,10 +21470,8 @@
 				}
 			} else if (!strcasecmp(v->name, "port")) {
 				peer->portinuri = 1;
-				if (!realtime && peer->host_dynamic) {
-					peer->defaddr.sin_port = htons(atoi(v->value));
-				} else {
-					peer->addr.sin_port = htons(atoi(v->value));
+				if (!(port = port_str2int(v->value, 0))) {
+					ast_log(LOG_WARNING, "Invalid peer port configuration at line %d : %s\n", v->lineno, v->value);
 				}
 			} else if (!strcasecmp(v->name, "callingpres")) {
 				peer->callingpres = ast_parse_caller_presentation(v->value);
@@ -21770,6 +21767,12 @@
 		set_socket_transport(&peer->socket, peer->default_outbound_transport);
 	}
 
+	if (port && !realtime && peer->host_dynamic) {
+		peer->defaddr.sin_port = htons(port);
+	} else if (port) {
+		peer->addr.sin_port = htons(port);
+	}
+
 	if (ast_str_strlen(fullcontact)) {
 		ast_copy_string(peer->fullcontact, fullcontact->str, sizeof(peer->fullcontact));
 		peer->rt_fromcontact = TRUE;
@@ -21799,6 +21802,16 @@
 		}
 
 		ast_copy_string(peer->tohost, srvlookup, sizeof(peer->tohost));
+	}
+
+	if (!peer->addr.sin_port) {
+		peer->addr.sin_port = htons(((peer->socket.type & SIP_TRANSPORT_TLS) ? STANDARD_TLS_PORT : STANDARD_SIP_PORT));
+	}
+	if (!peer->defaddr.sin_port) {
+		peer->defaddr.sin_port = htons(((peer->socket.type & SIP_TRANSPORT_TLS) ? STANDARD_TLS_PORT : STANDARD_SIP_PORT));
+	}
+	if (!peer->socket.port) {
+		peer->socket.port = htons(((peer->socket.type & SIP_TRANSPORT_TLS) ? STANDARD_TLS_PORT : STANDARD_SIP_PORT));
 	}
 
 	if (!sip_cfg.ignore_regexpire && peer->host_dynamic && realtime) {




More information about the asterisk-commits mailing list