[asterisk-commits] russell: branch group/security_events r275030 - in /team/group/security_event...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Jul 9 11:08:43 CDT 2010


Author: russell
Date: Fri Jul  9 11:08:36 2010
New Revision: 275030

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=275030
Log:
resolve, reset

Added:
    team/group/security_events/include/asterisk/netsock2.h
      - copied unchanged from r275028, trunk/include/asterisk/netsock2.h
    team/group/security_events/main/netsock2.c
      - copied unchanged from r275028, trunk/main/netsock2.c
Modified:
    team/group/security_events/   (props changed)
    team/group/security_events/CHANGES
    team/group/security_events/addons/chan_ooh323.c
    team/group/security_events/apps/app_dial.c
    team/group/security_events/apps/app_externalivr.c
    team/group/security_events/cdr/cdr_csv.c
    team/group/security_events/channels/chan_gtalk.c
    team/group/security_events/channels/chan_h323.c
    team/group/security_events/channels/chan_iax2.c
    team/group/security_events/channels/chan_jingle.c
    team/group/security_events/channels/chan_mgcp.c
    team/group/security_events/channels/chan_multicast_rtp.c
    team/group/security_events/channels/chan_sip.c
    team/group/security_events/channels/chan_skinny.c
    team/group/security_events/channels/chan_unistim.c
    team/group/security_events/channels/sip/dialplan_functions.c
    team/group/security_events/channels/sip/include/dialog.h
    team/group/security_events/channels/sip/include/globals.h
    team/group/security_events/channels/sip/include/reqresp_parser.h
    team/group/security_events/channels/sip/include/sip.h
    team/group/security_events/channels/sip/reqresp_parser.c
    team/group/security_events/configs/cdr.conf.sample
    team/group/security_events/configs/sip.conf.sample
    team/group/security_events/include/asterisk/acl.h
    team/group/security_events/include/asterisk/config.h
    team/group/security_events/include/asterisk/dnsmgr.h
    team/group/security_events/include/asterisk/indications.h
    team/group/security_events/include/asterisk/rtp_engine.h
    team/group/security_events/include/asterisk/tcptls.h
    team/group/security_events/include/asterisk/test.h
    team/group/security_events/main/acl.c
    team/group/security_events/main/app.c
    team/group/security_events/main/channel.c
    team/group/security_events/main/config.c
    team/group/security_events/main/dnsmgr.c
    team/group/security_events/main/http.c
    team/group/security_events/main/manager.c
    team/group/security_events/main/rtp_engine.c
    team/group/security_events/main/tcptls.c
    team/group/security_events/main/test.c
    team/group/security_events/res/res_rtp_asterisk.c
    team/group/security_events/res/res_rtp_multicast.c

Propchange: team/group/security_events/
------------------------------------------------------------------------------
    automerge = *

Propchange: team/group/security_events/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.

Propchange: team/group/security_events/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jul  9 11:08:36 2010
@@ -1,1 +1,2 @@
 /be/branches/C.3:256426
+/trunk:270974

Propchange: team/group/security_events/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Fri Jul  9 11:08:36 2010
@@ -1,1 +1,1 @@
-/trunk:1-274778
+/trunk:1-275029

Modified: team/group/security_events/CHANGES
URL: http://svnview.digium.com/svn/asterisk/team/group/security_events/CHANGES?view=diff&rev=275030&r1=275029&r2=275030
==============================================================================
--- team/group/security_events/CHANGES (original)
+++ team/group/security_events/CHANGES Fri Jul  9 11:08:36 2010
@@ -69,6 +69,8 @@
    Charge messages to snom phones.
  * Added support for G.719 media streams.
  * Added support for 16khz signed linear media streams.
+ * SIP is now able to bind to and communicate with IPv6 addresses. In addition,
+   RTP has been outfitted with the same abilities.
 
 IAX2 Changes
 -----------

Modified: team/group/security_events/addons/chan_ooh323.c
URL: http://svnview.digium.com/svn/asterisk/team/group/security_events/addons/chan_ooh323.c?view=diff&rev=275030&r1=275029&r2=275030
==============================================================================
--- team/group/security_events/addons/chan_ooh323.c (original)
+++ team/group/security_events/addons/chan_ooh323.c Fri Jul  9 11:08:36 2010
@@ -460,6 +460,7 @@
 {
 	struct ooh323_pvt *pvt = NULL;
 	struct sockaddr_in ouraddr;
+	struct ast_sockaddr tmp;
 	struct in_addr ipAddr;
 	if (gH323Debug)
 		ast_verbose("---   ooh323_alloc\n");
@@ -481,8 +482,10 @@
 		return NULL;
 	}
 
+	ouraddr.sin_family = AF_INET;
 	ouraddr.sin_addr = ipAddr;
-	if (!(pvt->rtp = ast_rtp_instance_new("asterisk", sched, &ouraddr, NULL))) {
+	ast_sockaddr_from_sin(&tmp, &ouraddr);
+	if (!(pvt->rtp = ast_rtp_instance_new("asterisk", sched, &tmp, NULL))) {
 		ast_log(LOG_WARNING, "Unable to create RTP session: %s\n", 
 				  strerror(errno));
 		ast_mutex_unlock(&pvt->lock);
@@ -3803,6 +3806,7 @@
 	struct ooh323_pvt *p;
 	struct sockaddr_in them;
 	struct sockaddr_in us;
+	struct ast_sockaddr tmp;
 	int mode;
 
 	if (gH323Debug)
@@ -3818,8 +3822,10 @@
 		ast_log(LOG_ERROR, "No Private Structure, this is bad\n");
 		return -1;
 	}
-	ast_rtp_instance_get_remote_address(rtp, &them);
-	ast_rtp_instance_get_local_address(rtp, &us);
+	ast_rtp_instance_get_remote_address(rtp, &tmp);
+	ast_sockaddr_to_sin(&tmp, &them);
+	ast_rtp_instance_get_local_address(rtp, &tmp);
+	ast_sockaddr_to_sin(&tmp, &us);
 	return 0;
 }
 
@@ -3829,6 +3835,7 @@
 int configure_local_rtp(struct ooh323_pvt *p, ooCallData *call)
 {
 	struct sockaddr_in us;
+	struct ast_sockaddr tmp;
 	ooMediaInfo mediaInfo;
 	int x;
 	format_t format = 0;
@@ -3849,7 +3856,8 @@
 				 p->rtp, p->dtmfcodec, "audio", "cisco-telephone-event", 0);
 		}
 		/* figure out our local RTP port and tell the H.323 stack about it*/
-		ast_rtp_instance_get_local_address(p->rtp, &us);
+		ast_rtp_instance_get_local_address(p->rtp, &tmp);
+		ast_sockaddr_to_sin(&tmp, &us);
 
 		if (p->rtptimeout) {
 			ast_rtp_instance_set_timeout(p->rtp, p->rtptimeout);
@@ -3913,6 +3921,7 @@
 {
 	struct ooh323_pvt *p = NULL;
 	struct sockaddr_in them;
+	struct ast_sockaddr tmp;
 
 	if (gH323Debug)
 		ast_verbose("---   setup_rtp_connection %s:%d\n", remoteIp, remotePort);
@@ -3928,7 +3937,8 @@
 	them.sin_family = AF_INET;
 	them.sin_addr.s_addr = inet_addr(remoteIp); /* only works for IPv4 */
 	them.sin_port = htons(remotePort);
-	ast_rtp_instance_set_remote_address(p->rtp, &them);
+	ast_sockaddr_from_sin(&tmp, &them);
+	ast_rtp_instance_set_remote_address(p->rtp, &tmp);
 
 	if (p->writeformat & AST_FORMAT_G726_AAL2) 
                 ast_rtp_codecs_payloads_set_rtpmap_type(ast_rtp_instance_get_codecs(p->rtp), p->rtp, 2,

Modified: team/group/security_events/apps/app_dial.c
URL: http://svnview.digium.com/svn/asterisk/team/group/security_events/apps/app_dial.c?view=diff&rev=275030&r1=275029&r2=275030
==============================================================================
--- team/group/security_events/apps/app_dial.c (original)
+++ team/group/security_events/apps/app_dial.c Fri Jul  9 11:08:36 2010
@@ -2350,6 +2350,11 @@
 		}
 
 		if (chan && peer && ast_test_flag64(&opts, OPT_GOTO) && !ast_strlen_zero(opt_args[OPT_ARG_GOTO])) {
+			/* chan and peer are going into the PBX, they both
+			 * should probably get CDR records. */
+			ast_clear_flag(chan->cdr, AST_CDR_FLAG_DIALED);
+			ast_clear_flag(peer->cdr, AST_CDR_FLAG_DIALED);
+
 			replace_macro_delimiter(opt_args[OPT_ARG_GOTO]);
 			ast_parseable_goto(chan, opt_args[OPT_ARG_GOTO]);
 			/* peer goes to the same context and extension as chan, so just copy info from chan*/

Modified: team/group/security_events/apps/app_externalivr.c
URL: http://svnview.digium.com/svn/asterisk/team/group/security_events/apps/app_externalivr.c?view=diff&rev=275030&r1=275029&r2=275030
==============================================================================
--- team/group/security_events/apps/app_externalivr.c (original)
+++ team/group/security_events/apps/app_externalivr.c Fri Jul  9 11:08:36 2010
@@ -492,6 +492,7 @@
 			.name = "IVR",
 		};
 		struct ast_hostent hp;
+		struct sockaddr_in remote_address_tmp;
 
 		/*communicate through socket to server*/
 		ast_debug(1, "Parsing hostname:port for socket connect from \"%s\"\n", app_args[0]);
@@ -506,9 +507,10 @@
 		}
 
 		ast_gethostbyname(hostname, &hp);
-		ivr_desc.remote_address.sin_family = AF_INET;
-		ivr_desc.remote_address.sin_port = htons(port);
-		memcpy(&ivr_desc.remote_address.sin_addr.s_addr, hp.hp.h_addr, sizeof(hp.hp.h_addr));
+		remote_address_tmp.sin_family = AF_INET;
+		remote_address_tmp.sin_port = htons(port);
+		memcpy(&remote_address_tmp.sin_addr.s_addr, hp.hp.h_addr, sizeof(hp.hp.h_addr));
+		ast_sockaddr_from_sin(&ivr_desc.remote_address, &remote_address_tmp);
 		if (!(ser = ast_tcptls_client_create(&ivr_desc)) || !(ser = ast_tcptls_client_start(ser))) {
 			goto exit;
 		}

Modified: team/group/security_events/cdr/cdr_csv.c
URL: http://svnview.digium.com/svn/asterisk/team/group/security_events/cdr/cdr_csv.c?view=diff&rev=275030&r1=275029&r2=275030
==============================================================================
--- team/group/security_events/cdr/cdr_csv.c (original)
+++ team/group/security_events/cdr/cdr_csv.c Fri Jul  9 11:08:36 2010
@@ -46,6 +46,7 @@
 #define DATE_FORMAT "%Y-%m-%d %T"
 
 static int usegmtime = 0;
+static int accountlogs;
 static int loguniqueid = 0;
 static int loguserfield = 0;
 static int loaded = 0;
@@ -100,6 +101,7 @@
 	} else if (cfg == CONFIG_STATUS_FILEUNCHANGED)
 		return 1;
 
+	accountlogs = 1;
 	usegmtime = 0;
 	loguniqueid = 0;
 	loguserfield = 0;
@@ -114,6 +116,14 @@
 		if (usegmtime)
 			ast_debug(1, "logging time in GMT\n");
 	}
+
+	/* Turn on/off separate files per accountcode. Default is on (as before) */
+	if ((tmp = ast_variable_retrieve(cfg, "csv", "accountlogs"))) {
+ 		accountlogs = ast_true(tmp);
+ 		if (accountlogs) {
+			ast_debug(1, "logging in separate files per accountcode\n");
+ 		}
+ 	}
 
 	if ((tmp = ast_variable_retrieve(cfg, "csv", "loguniqueid"))) {
 		loguniqueid = ast_true(tmp);
@@ -304,7 +314,7 @@
 		ast_log(LOG_ERROR, "Unable to re-open master file %s : %s\n", csvmaster, strerror(errno));
 	}
 
-	if (!ast_strlen_zero(cdr->accountcode)) {
+	if (accountlogs && !ast_strlen_zero(cdr->accountcode)) {
 		if (writefile(buf, cdr->accountcode))
 			ast_log(LOG_WARNING, "Unable to write CSV record to account file '%s' : %s\n", cdr->accountcode, strerror(errno));
 	}

Modified: team/group/security_events/channels/chan_gtalk.c
URL: http://svnview.digium.com/svn/asterisk/team/group/security_events/channels/chan_gtalk.c?view=diff&rev=275030&r1=275029&r2=275030
==============================================================================
--- team/group/security_events/channels/chan_gtalk.c (original)
+++ team/group/security_events/channels/chan_gtalk.c Fri Jul  9 11:08:36 2010
@@ -774,8 +774,10 @@
 	struct aji_client *c = client->connection;
 	struct gtalk_candidate *ours1 = NULL, *ours2 = NULL;
 	struct sockaddr_in sin = { 0, };
+	struct ast_sockaddr sin_tmp;
+	struct ast_sockaddr bindaddr_tmp;
 	struct sockaddr_in dest;
-	struct in_addr us;
+	struct ast_sockaddr us;
 	iks *iq, *gtalk, *candidate, *transport;
 	char user[17], pass[17], preference[5], port[7];
 	char *lowerfrom = NULL;
@@ -809,9 +811,11 @@
 		goto safeout;
 	}
 
-	ast_rtp_instance_get_local_address(p->rtp, &sin);
-	ast_find_ourip(&us, bindaddr);
-	if (!strcmp(ast_inet_ntoa(us), "127.0.0.1")) {
+	ast_rtp_instance_get_local_address(p->rtp, &sin_tmp);
+	ast_sockaddr_to_sin(&sin_tmp, &sin);
+	ast_sockaddr_from_sin(&bindaddr_tmp, &bindaddr);
+	ast_find_ourip(&us, &bindaddr_tmp);
+	if (!strcmp(ast_sockaddr_stringify_addr(&us), "127.0.0.1")) {
 		ast_log(LOG_WARNING, "Found a loopback IP on the system, check your network configuration or set the bindaddr attribute.");
 	}
 
@@ -823,7 +827,8 @@
 	snprintf(pass, sizeof(pass), "%08lx%08lx", ast_random(), ast_random());
 	ast_copy_string(ours1->username, user, sizeof(ours1->username));
 	ast_copy_string(ours1->password, pass, sizeof(ours1->password));
-	ast_copy_string(ours1->ip, ast_inet_ntoa(us), sizeof(ours1->ip));
+	ast_copy_string(ours1->ip, ast_sockaddr_stringify_addr(&us),
+			sizeof(ours1->ip));
 	ours1->protocol = AJI_PROTOCOL_UDP;
 	ours1->type = AJI_CONNECT_LOCAL;
 	ours1->generation = 0;
@@ -911,6 +916,7 @@
 	struct aji_buddy *buddy;
 	char idroster[200];
 	char *data, *exten = NULL;
+	struct ast_sockaddr bindaddr_tmp;
 
 	ast_debug(1, "The client is %s for alloc\n", client->name);
 	if (!sid && !strchr(them, '/')) {	/* I started call! */
@@ -950,7 +956,8 @@
 		tmp->initiator = 1;
 	}
 	/* clear codecs */
-	if (!(tmp->rtp = ast_rtp_instance_new("asterisk", sched, &bindaddr, NULL))) {
+	ast_sockaddr_from_sin(&bindaddr_tmp, &bindaddr);
+	if (!(tmp->rtp = ast_rtp_instance_new("asterisk", sched, &bindaddr_tmp, NULL))) {
 	  ast_log(LOG_ERROR, "Failed to create a new RTP instance (possibly an invalid bindaddr?)\n");
 	  ast_free(tmp);
 	  return NULL;
@@ -1263,6 +1270,8 @@
 	struct ast_hostent ahp;
 	struct sockaddr_in sin = { 0, };
 	struct sockaddr_in aux = { 0, };
+	struct ast_sockaddr sin_tmp;
+	struct ast_sockaddr aux_tmp;
 
 	if (time(NULL) == p->laststun)
 		return 0;
@@ -1281,16 +1290,17 @@
 			 p->ourcandidates->username);
 		
 		/* Find out the result of the STUN */
-		ast_rtp_instance_get_remote_address(p->rtp, &aux);
+		ast_rtp_instance_get_remote_address(p->rtp, &aux_tmp);
+		ast_sockaddr_to_sin(&aux_tmp, &aux);
 
 		/* If the STUN result is different from the IP of the hostname,
 			lock on the stun IP of the hostname advertised by the
 			remote client */
 		if (aux.sin_addr.s_addr && 
 		    aux.sin_addr.s_addr != sin.sin_addr.s_addr)
-			ast_rtp_instance_stun_request(p->rtp, &aux, username);
+			ast_rtp_instance_stun_request(p->rtp, &aux_tmp, username);
 		else 
-			ast_rtp_instance_stun_request(p->rtp, &sin, username);
+			ast_rtp_instance_stun_request(p->rtp, &sin_tmp, username);
 		
 		if (aux.sin_addr.s_addr) {
 			ast_debug(4, "Receiving RTP traffic from IP %s, matches with remote candidate's IP %s\n", ast_inet_ntoa(aux.sin_addr), tmp->ip);
@@ -2057,6 +2067,9 @@
 /*! \brief Load module into PBX, register channel */
 static int load_module(void)
 {
+	struct ast_sockaddr bindaddr_tmp;
+	struct ast_sockaddr ourip_tmp;
+
 	char *jabber_loaded = ast_module_helper("", "res_jabber.so", 0, 0, 0, 0);
 	free(jabber_loaded);
 	if (!jabber_loaded) {
@@ -2083,10 +2096,12 @@
 	if (!io) 
 		ast_log(LOG_WARNING, "Unable to create I/O context\n");
 
-	if (ast_find_ourip(&__ourip, bindaddr)) {
+	ast_sockaddr_from_sin(&bindaddr_tmp, &bindaddr);
+	if (ast_find_ourip(&ourip_tmp, &bindaddr_tmp)) {
 		ast_log(LOG_WARNING, "Unable to get own IP address, Gtalk disabled\n");
 		return 0;
 	}
+	__ourip.s_addr = htonl(ast_sockaddr_ipv4(&ourip_tmp));
 
 	ast_rtp_glue_register(&gtalk_rtp_glue);
 	ast_cli_register_multiple(gtalk_cli, ARRAY_LEN(gtalk_cli));

Modified: team/group/security_events/channels/chan_h323.c
URL: http://svnview.digium.com/svn/asterisk/team/group/security_events/channels/chan_h323.c?view=diff&rev=275030&r1=275029&r2=275030
==============================================================================
--- team/group/security_events/channels/chan_h323.c (original)
+++ team/group/security_events/channels/chan_h323.c Fri Jul  9 11:08:36 2010
@@ -954,15 +954,20 @@
 
 static int __oh323_rtp_create(struct oh323_pvt *pvt)
 {
-	struct sockaddr_in our_addr;
+	struct ast_sockaddr our_addr;
 
 	if (pvt->rtp)
 		return 0;
 
-	if (ast_find_ourip(&our_addr.sin_addr, bindaddr)) {
-		ast_mutex_unlock(&pvt->lock);
-		ast_log(LOG_ERROR, "Unable to locate local IP address for RTP stream\n");
-		return -1;
+	{
+		struct ast_sockaddr tmp;
+
+		ast_sockaddr_from_sin(&tmp, &bindaddr);
+		if (ast_find_ourip(&our_addr, &tmp)) {
+			ast_mutex_unlock(&pvt->lock);
+			ast_log(LOG_ERROR, "Unable to locate local IP address for RTP stream\n");
+			return -1;
+		}
 	}
 	pvt->rtp = ast_rtp_instance_new("asterisk", sched, &our_addr, NULL);
 	if (!pvt->rtp) {
@@ -1408,9 +1413,14 @@
 				ast_log(LOG_ERROR, "A dynamic host on a type=user does not make any sense\n");
 				ASTOBJ_UNREF(user, oh323_destroy_user);
 				return NULL;
-			} else if (ast_get_ip(&user->addr, v->value)) {
-				ASTOBJ_UNREF(user, oh323_destroy_user);
-				return NULL;
+			} else {
+				struct ast_sockaddr tmp;
+
+				if (ast_get_ip(&tmp, v->value)) {
+					ASTOBJ_UNREF(user, oh323_destroy_user);
+					return NULL;
+				}
+				ast_sockaddr_to_sin(&tmp, &user->addr);
 			}
 			/* Let us know we need to use ip authentication */
 			user->host = 1;
@@ -1522,10 +1532,15 @@
 				ASTOBJ_UNREF(peer, oh323_destroy_peer);
 				return NULL;
 			}
-			if (ast_get_ip(&peer->addr, v->value)) {
-				ast_log(LOG_ERROR, "Could not determine IP for %s\n", v->value);
-				ASTOBJ_UNREF(peer, oh323_destroy_peer);
-				return NULL;
+			{
+				struct ast_sockaddr tmp;
+
+				if (ast_get_ip(&tmp, v->value)) {
+					ast_log(LOG_ERROR, "Could not determine IP for %s\n", v->value);
+					ASTOBJ_UNREF(peer, oh323_destroy_peer);
+					return NULL;
+				}
+				ast_sockaddr_to_sin(&tmp, &peer->addr);
 			}
 		} else if (!strcasecmp(v->name, "port")) {
 			peer->addr.sin_port = htons(atoi(v->value));
@@ -1922,7 +1937,12 @@
 		return NULL;
 	}
 	/* figure out our local RTP port and tell the H.323 stack about it */
-	ast_rtp_instance_get_local_address(pvt->rtp, &us);
+	{
+		struct ast_sockaddr tmp;
+
+		ast_rtp_instance_get_local_address(pvt->rtp, &tmp);
+		ast_sockaddr_to_sin(&tmp, &us);
+	}
 	ast_mutex_unlock(&pvt->lock);
 
 	ast_copy_string(info->addr, ast_inet_ntoa(us.sin_addr), sizeof(info->addr));
@@ -1971,7 +1991,12 @@
 	them.sin_port = htons(remotePort);
 
 	if (them.sin_addr.s_addr) {
-		ast_rtp_instance_set_remote_address(pvt->rtp, &them);
+		{
+			struct ast_sockaddr tmp;
+
+			ast_sockaddr_from_sin(&tmp, &them);
+			ast_rtp_instance_set_remote_address(pvt->rtp, &tmp);
+		}
 		if (pvt->recvonly) {
 			pvt->recvonly = 0;
 			rtp_change = NEED_UNHOLD;
@@ -3204,8 +3229,14 @@
 		ast_log(LOG_ERROR, "No Private Structure, this is bad\n");
 		return -1;
 	}
-	ast_rtp_instance_get_remote_address(rtp, &them);
-	ast_rtp_instance_get_local_address(rtp, &us);
+	{
+		struct ast_sockaddr tmp;
+
+		ast_rtp_instance_get_remote_address(rtp, &tmp);
+		ast_sockaddr_to_sin(&tmp, &them);
+		ast_rtp_instance_get_local_address(rtp, &tmp);
+		ast_sockaddr_to_sin(&tmp, &us);
+	}
 #if 0	/* Native bridge still isn't ready */
 	h323_native_bridge(pvt->cd.call_token, ast_inet_ntoa(them.sin_addr), mode);
 #endif

Modified: team/group/security_events/channels/chan_iax2.c
URL: http://svnview.digium.com/svn/asterisk/team/group/security_events/channels/chan_iax2.c?view=diff&rev=275030&r1=275029&r2=275030
==============================================================================
--- team/group/security_events/channels/chan_iax2.c (original)
+++ team/group/security_events/channels/chan_iax2.c Fri Jul  9 11:08:36 2010
@@ -4441,11 +4441,15 @@
 	sin->sin_family = AF_INET;
 
 	if (!(peer = find_peer(peername, 1))) {
+		struct ast_sockaddr sin_tmp;
+
 		cai->found = 0;
-		if (ast_get_ip_or_srv(sin, peername, srvlookup ? "_iax._udp" : NULL)) {
+		sin_tmp.ss.ss_family = AF_INET;
+		if (ast_get_ip_or_srv(&sin_tmp, peername, srvlookup ? "_iax._udp" : NULL)) {
 			ast_log(LOG_WARNING, "No such host: %s\n", peername);
 			return -1;
 		}
+		ast_sockaddr_to_sin(&sin_tmp, sin);
 		sin->sin_port = htons(IAX_DEFAULT_PORTNO);
 		/* use global iax prefs for unknown peer/user */
 		/* But move the calling channel's native codec to the top of the preference list */
@@ -8312,14 +8316,18 @@
 	const char *secret, const char *porta)
 {
 	struct iax2_registry *reg;
+	struct ast_sockaddr reg_addr_tmp;
 
 	if (!(reg = ast_calloc(1, sizeof(*reg))))
 		return -1;
 
-	if (ast_dnsmgr_lookup(hostname, &reg->addr, &reg->dnsmgr, srvlookup ? "_iax._udp" : NULL) < 0) {
+	reg->addr.sin_family = AF_INET;
+	ast_sockaddr_from_sin(&reg_addr_tmp, &reg->addr);
+	if (ast_dnsmgr_lookup(hostname, &reg_addr_tmp, &reg->dnsmgr, srvlookup ? "_iax._udp" : NULL) < 0) {
 		ast_free(reg);
 		return -1;
 	}
+	ast_sockaddr_to_sin(&reg_addr_tmp, &reg->addr);
 
 	ast_copy_string(reg->username, username, sizeof(reg->username));
 
@@ -11991,6 +11999,7 @@
 static int peer_set_srcaddr(struct iax2_peer *peer, const char *srcaddr)
 {
 	struct sockaddr_in sin;
+	struct ast_sockaddr sin_tmp;
 	int nonlocal = 1;
 	int port = IAX_DEFAULT_PORTNO;
 	int sockfd = defaultsockfd;
@@ -12010,10 +12019,11 @@
 			port = IAX_DEFAULT_PORTNO;
 	}
 	
-	if (!ast_get_ip(&sin, addr)) {
+	if (!ast_get_ip(&sin_tmp, addr)) {
 		struct ast_netsock *sock;
 		int res;
 
+		ast_sockaddr_to_sin(&sin_tmp, &sin);
 		sin.sin_port = 0;
 		sin.sin_family = AF_INET;
 		res = check_srcaddr((struct sockaddr *) &sin, sizeof(sin));
@@ -12212,19 +12222,29 @@
 						}
 					}
 				} else {
+					struct ast_sockaddr peer_addr_tmp;
+
 					/* Non-dynamic.  Make sure we become that way if we're not */
 					ast_sched_thread_del(sched, peer->expire);
 					ast_clear_flag64(peer, IAX_DYNAMIC);
-					if (ast_dnsmgr_lookup(v->value, &peer->addr, &peer->dnsmgr, srvlookup ? "_iax._udp" : NULL))
+					peer_addr_tmp.ss.ss_family = AF_INET;
+					if (ast_dnsmgr_lookup(v->value, &peer_addr_tmp, &peer->dnsmgr, srvlookup ? "_iax._udp" : NULL))
 						return peer_unref(peer);
+					ast_sockaddr_to_sin(&peer_addr_tmp,
+							    &peer->addr);
 					if (!peer->addr.sin_port)
 						peer->addr.sin_port = htons(IAX_DEFAULT_PORTNO);
 				}
 				if (!maskfound)
 					inet_aton("255.255.255.255", &peer->mask);
 			} else if (!strcasecmp(v->name, "defaultip")) {
-				if (ast_get_ip(&peer->defaddr, v->value))
+				struct ast_sockaddr peer_defaddr_tmp;
+
+				if (ast_get_ip(&peer_defaddr_tmp, v->value)) {
 					return peer_unref(peer);
+				}
+				ast_sockaddr_to_sin(&peer_defaddr_tmp,
+						    &peer->defaddr);
 			} else if (!strcasecmp(v->name, "sourceaddress")) {
 				peer_set_srcaddr(peer, v->value);
 			} else if (!strcasecmp(v->name, "permit") ||

Modified: team/group/security_events/channels/chan_jingle.c
URL: http://svnview.digium.com/svn/asterisk/team/group/security_events/channels/chan_jingle.c?view=diff&rev=275030&r1=275029&r2=275030
==============================================================================
--- team/group/security_events/channels/chan_jingle.c (original)
+++ team/group/security_events/channels/chan_jingle.c Fri Jul  9 11:08:36 2010
@@ -581,6 +581,9 @@
 	struct aji_client *c = client->connection;
 	struct jingle_candidate *ours1 = NULL, *ours2 = NULL;
 	struct sockaddr_in sin = { 0, };
+	struct ast_sockaddr sin_tmp;
+	struct ast_sockaddr us_tmp;
+	struct ast_sockaddr bindaddr_tmp;
 	struct sockaddr_in dest;
 	struct in_addr us;
 	struct in_addr externaddr;
@@ -617,8 +620,11 @@
 		goto safeout;
 	}
 
-	ast_rtp_instance_get_local_address(p->rtp, &sin);
-	ast_find_ourip(&us, bindaddr);
+	ast_rtp_instance_get_local_address(p->rtp, &sin_tmp);
+	ast_sockaddr_to_sin(&sin_tmp, &sin);
+	ast_sockaddr_from_sin(&bindaddr_tmp, &bindaddr);
+	ast_find_ourip(&us_tmp, &bindaddr_tmp);
+	us.s_addr = htonl(ast_sockaddr_ipv4(&us_tmp));
 
 	/* Setup our first jingle candidate */
 	ours1->component = 1;
@@ -739,6 +745,7 @@
 	struct aji_resource *resources = NULL;
 	struct aji_buddy *buddy;
 	char idroster[200];
+	struct ast_sockaddr bindaddr_tmp;
 
 	ast_debug(1, "The client is %s for alloc\n", client->name);
 	if (!sid && !strchr(from, '/')) {	/* I started call! */
@@ -775,7 +782,8 @@
 		ast_copy_string(tmp->them, idroster, sizeof(tmp->them));
 		tmp->initiator = 1;
 	}
-	tmp->rtp = ast_rtp_instance_new("asterisk", sched, &bindaddr, NULL);
+	ast_sockaddr_from_sin(&bindaddr_tmp, &bindaddr);
+	tmp->rtp = ast_rtp_instance_new("asterisk", sched, &bindaddr_tmp, NULL);
 	tmp->parent = client;
 	if (!tmp->rtp) {
 		ast_log(LOG_WARNING, "Out of RTP sessions?\n");
@@ -1061,6 +1069,7 @@
 	struct hostent *hp;
 	struct ast_hostent ahp;
 	struct sockaddr_in sin;
+	struct ast_sockaddr sin_tmp;
 
 	if (time(NULL) == p->laststun)
 		return 0;
@@ -1075,7 +1084,8 @@
 		sin.sin_port = htons(tmp->port);
 		snprintf(username, sizeof(username), "%s:%s", tmp->ufrag, p->ourcandidates->ufrag);
 
-		ast_rtp_instance_stun_request(p->rtp, &sin, username);
+		ast_sockaddr_from_sin(&sin_tmp, &sin);
+		ast_rtp_instance_stun_request(p->rtp, &sin_tmp, username);
 		tmp = tmp->next;
 	}
 	return 1;
@@ -1867,6 +1877,9 @@
 /*! \brief Load module into PBX, register channel */
 static int load_module(void)
 {
+	struct ast_sockaddr ourip_tmp;
+	struct ast_sockaddr bindaddr_tmp;
+
 	char *jabber_loaded = ast_module_helper("", "res_jabber.so", 0, 0, 0, 0);
 	free(jabber_loaded);
 	if (!jabber_loaded) {
@@ -1893,10 +1906,12 @@
 	if (!io) 
 		ast_log(LOG_WARNING, "Unable to create I/O context\n");
 
-	if (ast_find_ourip(&__ourip, bindaddr)) {
+	ast_sockaddr_from_sin(&bindaddr_tmp, &bindaddr);
+	if (ast_find_ourip(&ourip_tmp, &bindaddr_tmp)) {
 		ast_log(LOG_WARNING, "Unable to get own IP address, Jingle disabled\n");
 		return 0;
 	}
+	__ourip.s_addr = htonl(ast_sockaddr_ipv4(&ourip_tmp));
 
 	ast_rtp_glue_register(&jingle_rtp_glue);
 	ast_cli_register_multiple(jingle_cli, ARRAY_LEN(jingle_cli));

Modified: team/group/security_events/channels/chan_mgcp.c
URL: http://svnview.digium.com/svn/asterisk/team/group/security_events/channels/chan_mgcp.c?view=diff&rev=275030&r1=275029&r2=275030
==============================================================================
--- team/group/security_events/channels/chan_mgcp.c (original)
+++ team/group/security_events/channels/chan_mgcp.c Fri Jul  9 11:08:36 2010
@@ -1769,8 +1769,19 @@
 				if ((g->addr.sin_addr.s_addr != sin->sin_addr.s_addr) ||
 					(g->addr.sin_port != sin->sin_port)) {
 					memcpy(&g->addr, sin, sizeof(g->addr));
-					if (ast_ouraddrfor(&g->addr.sin_addr, &g->ourip))
-						memcpy(&g->ourip, &__ourip, sizeof(g->ourip));
+					{
+						struct ast_sockaddr tmp1, tmp2;
+						struct sockaddr_in tmp3 = {0,};
+
+						tmp3.sin_addr = g->ourip;
+						ast_sockaddr_from_sin(&tmp1, &g->addr);
+						ast_sockaddr_from_sin(&tmp2, &tmp3);
+						if (ast_ouraddrfor(&tmp1, &tmp2)) {
+							memcpy(&g->ourip, &__ourip, sizeof(g->ourip));
+						}
+						ast_sockaddr_to_sin(&tmp2, &tmp3);
+						g->ourip = tmp3.sin_addr;
+					}
 					ast_verb(3, "Registered MGCP gateway '%s' at %s port %d\n", g->name, ast_inet_ntoa(g->addr.sin_addr), ntohs(g->addr.sin_port));
 				}
 			/* not dynamic, check if the name matches */
@@ -1934,6 +1945,7 @@
 	format_t peercapability;
 	int peerNonCodecCapability;
 	struct sockaddr_in sin;
+	struct ast_sockaddr sin_tmp;
 	char *codecs;
 	struct ast_hostent ahp; struct hostent *hp;
 	int codec, codec_count=0;
@@ -1965,7 +1977,8 @@
 	sin.sin_family = AF_INET;
 	memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
 	sin.sin_port = htons(portno);
-	ast_rtp_instance_set_remote_address(sub->rtp, &sin);
+	ast_sockaddr_from_sin(&sin_tmp, &sin);
+	ast_rtp_instance_set_remote_address(sub->rtp, &sin_tmp);
 	ast_debug(3, "Peer RTP is at port %s:%d\n", ast_inet_ntoa(sin.sin_addr), ntohs(sin.sin_port));
 	/* Scan through the RTP payload types specified in a "m=" line: */
 	ast_rtp_codecs_payloads_clear(ast_rtp_instance_get_codecs(sub->rtp), sub->rtp);
@@ -2148,6 +2161,7 @@
 	int codec;
 	char costr[80];
 	struct sockaddr_in sin;
+	struct ast_sockaddr sin_tmp;
 	char v[256];
 	char s[256];
 	char o[256];
@@ -2157,6 +2171,7 @@
 	char a[1024] = "";
 	format_t x;
 	struct sockaddr_in dest = { 0, };
+	struct ast_sockaddr dest_tmp;
 	struct mgcp_endpoint *p = sub->parent;
 	/* XXX We break with the "recommendation" and send our IP, in order that our
 	       peer doesn't have to ast_gethostbyname() us XXX */
@@ -2165,9 +2180,11 @@
 		ast_log(LOG_WARNING, "No way to add SDP without an RTP structure\n");
 		return -1;
 	}
-	ast_rtp_instance_get_local_address(sub->rtp, &sin);
+	ast_rtp_instance_get_local_address(sub->rtp, &sin_tmp);
+	ast_sockaddr_to_sin(&sin_tmp, &sin);
 	if (rtp) {
-		ast_rtp_instance_get_remote_address(sub->rtp, &dest);
+		ast_rtp_instance_get_remote_address(sub->rtp, &dest_tmp);
+		ast_sockaddr_to_sin(&dest_tmp, &dest);
 	} else {
 		if (sub->tmpdest.sin_addr.s_addr) {
 			dest.sin_addr = sub->tmpdest.sin_addr;
@@ -2240,11 +2257,13 @@
 	char tmp[80];
 	struct mgcp_endpoint *p = sub->parent;
 	format_t x;
+	struct ast_sockaddr sub_tmpdest_tmp;
 
 	if (ast_strlen_zero(sub->cxident) && rtp) {
 		/* We don't have a CXident yet, store the destination and
 		   wait a bit */
-		ast_rtp_instance_get_remote_address(rtp, &sub->tmpdest);
+		ast_rtp_instance_get_remote_address(rtp, &sub_tmpdest_tmp);
+		ast_sockaddr_to_sin(&sub_tmpdest_tmp, &sub->tmpdest);
 		return 0;
 	}
 	ast_copy_string(local, "e:on, s:off, p:20", sizeof(local));
@@ -2876,6 +2895,8 @@
 
 static void start_rtp(struct mgcp_subchannel *sub)
 {
+	struct ast_sockaddr bindaddr_tmp;
+
 	ast_mutex_lock(&sub->lock);
 	/* check again to be on the safe side */
 	if (sub->rtp) {
@@ -2883,7 +2904,8 @@
 		sub->rtp = NULL;
 	}
 	/* Allocate the RTP now */
-	sub->rtp = ast_rtp_instance_new("asterisk", sched, &bindaddr, NULL);
+	ast_sockaddr_from_sin(&bindaddr_tmp, &bindaddr);
+	sub->rtp = ast_rtp_instance_new("asterisk", sched, &bindaddr_tmp, NULL);
 	if (sub->rtp && sub->owner)
 		ast_channel_set_fd(sub->owner, 0, ast_rtp_instance_fd(sub->rtp, 0));
 	if (sub->rtp) {
@@ -3967,22 +3989,32 @@
 				/* Non-dynamic.  Make sure we become that way if we're not */
 				AST_SCHED_DEL(sched, gw->expire);
 				gw->dynamic = 0;
-				if (ast_get_ip(&gw->addr, v->value)) {
-					if (!gw_reload) {
-						ast_mutex_destroy(&gw->msgs_lock);
-						ast_free(gw);
+				{
+					struct ast_sockaddr tmp;
+
+					ast_sockaddr_from_sin(&tmp, &gw->addr);
+					if (ast_get_ip(&tmp, v->value)) {
+						if (!gw_reload) {
+							ast_mutex_destroy(&gw->msgs_lock);
+							ast_free(gw);
+						}
+						return NULL;
 					}
-					return NULL;
+					ast_sockaddr_to_sin(&tmp, &gw->addr);
 				}
 			}
 		} else if (!strcasecmp(v->name, "defaultip")) {
-			if (ast_get_ip(&gw->defaddr, v->value)) {
+			struct ast_sockaddr tmp;
+
+			ast_sockaddr_from_sin(&tmp, &gw->defaddr);
+			if (ast_get_ip(&tmp, v->value)) {
 				if (!gw_reload) {
 					ast_mutex_destroy(&gw->msgs_lock);
 					ast_free(gw);
 				}
 				return NULL;
 			}
+			ast_sockaddr_to_sin(&tmp, &gw->defaddr);
 		} else if (!strcasecmp(v->name, "permit") ||
 			!strcasecmp(v->name, "deny")) {
 			gw->ha = ast_append_ha(v->name, v->value, gw->ha, NULL);
@@ -4325,8 +4357,19 @@
 		if (gw->addr.sin_addr.s_addr && !ntohs(gw->addr.sin_port)) {
 			gw->addr.sin_port = htons(DEFAULT_MGCP_GW_PORT);
 		}
-		if (gw->addr.sin_addr.s_addr && ast_ouraddrfor(&gw->addr.sin_addr, &gw->ourip)) {
-			memcpy(&gw->ourip, &__ourip, sizeof(gw->ourip));
+		{
+			struct ast_sockaddr tmp1, tmp2;
+			struct sockaddr_in tmp3 = {0,};
+
+			tmp3.sin_addr = gw->ourip;
+			ast_sockaddr_from_sin(&tmp1, &gw->addr);
+			ast_sockaddr_from_sin(&tmp2, &tmp3);
+			if (gw->addr.sin_addr.s_addr && ast_ouraddrfor(&tmp1, &tmp2)) {
+				memcpy(&gw->ourip, &__ourip, sizeof(gw->ourip));
+			} else {
+				ast_sockaddr_to_sin(&tmp2, &tmp3);
+				gw->ourip = tmp3.sin_addr;
+			}
 		}
 	}
 

Modified: team/group/security_events/channels/chan_multicast_rtp.c
URL: http://svnview.digium.com/svn/asterisk/team/group/security_events/channels/chan_multicast_rtp.c?view=diff&rev=275030&r1=275029&r2=275030
==============================================================================
--- team/group/security_events/channels/chan_multicast_rtp.c (original)
+++ team/group/security_events/channels/chan_multicast_rtp.c Fri Jul  9 11:08:36 2010
@@ -111,7 +111,8 @@
 {
 	char *tmp = ast_strdupa(data), *multicast_type = tmp, *destination, *control;
 	struct ast_rtp_instance *instance;
-	struct sockaddr_in control_address = { .sin_family = AF_INET, }, destination_address = { .sin_family = AF_INET, };
+	struct ast_sockaddr control_address;
+	struct ast_sockaddr destination_address;
 	struct ast_channel *chan;
 	format_t fmt = ast_best_codec(format);
 
@@ -125,13 +126,15 @@
 	}
 	*destination++ = '\0';
 
-	if (ast_parse_arg(destination, PARSE_INADDR | PARSE_PORT_REQUIRE, &destination_address)) {
+	if (!ast_sockaddr_parse(&destination_address, destination,
+				PARSE_PORT_REQUIRE)) {
 		goto failure;
 	}
 
 	if ((control = strchr(destination, '/'))) {
 		*control++ = '\0';
-		if (ast_parse_arg(control, PARSE_INADDR | PARSE_PORT_REQUIRE, &control_address)) {
+		if (!ast_sockaddr_parse(&control_address, control,
+					PARSE_PORT_REQUIRE)) {
 			goto failure;
 		}
 	}

Modified: team/group/security_events/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/group/security_events/channels/chan_sip.c?view=diff&rev=275030&r1=275029&r2=275030
==============================================================================
--- team/group/security_events/channels/chan_sip.c (original)
+++ team/group/security_events/channels/chan_sip.c Fri Jul  9 11:08:36 2010
@@ -313,7 +313,7 @@
 #include "asterisk/dnsmgr.h"
 #include "asterisk/devicestate.h"
 #include "asterisk/monitor.h"
-#include "asterisk/netsock.h"
+#include "asterisk/netsock2.h"
 #include "asterisk/localtime.h"
 #include "asterisk/abstract_jb.h"
 #include "asterisk/threadstorage.h"
@@ -1180,7 +1180,7 @@
  */
 static int sipsock  = -1;
 
-struct sockaddr_in bindaddr;	/*!< UDP: The address we bind to */
+struct ast_sockaddr bindaddr;	/*!< UDP: The address we bind to */
 
 /*! \brief our (internal) default address/port to put in SIP/SDP messages
  *  internip is initialized picking a suitable address from one of the
@@ -1188,7 +1188,7 @@
  * default address/port in SIP messages, and as the default address
  * (but not port) in SDP messages.
  */
-static struct sockaddr_in internip;
+static struct ast_sockaddr internip;
 
 /*! \brief our external IP address/port for SIP sessions.
  * externip.sin_addr is only set when we know we might be behind
@@ -1208,8 +1208,8 @@
  * Other variables (externhost, externexpire, externrefresh) are used
  * to support the above functions.
  */
-static struct sockaddr_in externip;       /*!< External IP address if we are behind NAT */
-static struct sockaddr_in media_address;  /*!< External RTP IP address if we are behind NAT */
+static struct ast_sockaddr externip;      /*!< External IP address if we are behind NAT */
+static struct ast_sockaddr media_address; /*!< External RTP IP address if we are behind NAT */
 
 static char externhost[MAXHOSTNAMELEN];   /*!< External host name */
 static time_t externexpire;             /*!< Expiration counter for re-resolving external host name in dynamic DNS */
@@ -1228,7 +1228,7 @@
 
 static int ourport_tcp;             /*!< The port used for TCP connections */
 static int ourport_tls;             /*!< The port used for TCP/TLS connections */
-static struct sockaddr_in debugaddr;
+static struct ast_sockaddr debugaddr;
 
 static struct ast_config *notify_types = NULL;    /*!< The list of manual NOTIFY types we know how to send */
 
@@ -1264,9 +1264,10 @@
 static int sip_queryoption(struct ast_channel *chan, int option, void *data, int *datalen);
 static const char *sip_get_callid(struct ast_channel *chan);
 
-static int handle_request_do(struct sip_request *req, struct sockaddr_in *sin);
+static int handle_request_do(struct sip_request *req, struct ast_sockaddr *addr);
 static int sip_standard_port(enum sip_transport type, int port);
 static int sip_prepare_socket(struct sip_pvt *p);
+static int get_address_family_filter(const struct ast_sockaddr *addr);
 
 /*--- Transmitting responses and requests */
 static int sipsock_read(int *id, int fd, short events, void *ignore);
@@ -1275,7 +1276,7 @@
 static void add_cc_call_info_to_response(struct sip_pvt *p, struct sip_request *resp);
 static int __transmit_response(struct sip_pvt *p, const char *msg, const struct sip_request *req, enum xmittype reliable);
 static int retrans_pkt(const void *data);
-static int transmit_response_using_temp(ast_string_field callid, struct sockaddr_in *sin, int useglobal_nat, const int intended_method, const struct sip_request *req, const char *msg);
+static int transmit_response_using_temp(ast_string_field callid, struct ast_sockaddr *addr, int useglobal_nat, const int intended_method, const struct sip_request *req, const char *msg);
 static int transmit_response(struct sip_pvt *p, const char *msg, const struct sip_request *req);
 static int transmit_response_reliable(struct sip_pvt *p, const char *msg, const struct sip_request *req);
 static int transmit_response_with_date(struct sip_pvt *p, const char *msg, const struct sip_request *req);
@@ -1311,11 +1312,11 @@
 static void *registry_unref(struct sip_registry *reg, char *tag);
 static int update_call_counter(struct sip_pvt *fup, int event);
 static int auto_congest(const void *arg);
-static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin, const int intended_method);
+static struct sip_pvt *find_call(struct sip_request *req, struct ast_sockaddr *addr, const int intended_method);
 static void free_old_route(struct sip_route *route);
 static void list_route(struct sip_route *route);
 static void build_route(struct sip_pvt *p, struct sip_request *req, int backwards);
-static enum check_auth_result register_verify(struct sip_pvt *p, struct sockaddr_in *sin,
+static enum check_auth_result register_verify(struct sip_pvt *p, struct ast_sockaddr *addr,
 					      struct sip_request *req, const char *uri);
 static struct sip_pvt *get_sip_pvt_byid_locked(const char *callid, const char *totag, const char *fromtag);
 static void check_pendings(struct sip_pvt *p);
@@ -1331,7 +1332,7 @@
 static int find_sdp(struct sip_request *req);
 static int process_sdp(struct sip_pvt *p, struct sip_request *req, int t38action);
 static int process_sdp_o(const char *o, struct sip_pvt *p);
-static int process_sdp_c(const char *c, struct ast_hostent *hp);
+static int process_sdp_c(const char *c, struct ast_sockaddr *addr);
 static int process_sdp_a_sendonly(const char *a, int *sendonly);
 static int process_sdp_a_audio(const char *a, struct sip_pvt *p, struct ast_rtp_codecs *newaudiortp, int *last_rtpmap_codec);
 static int process_sdp_a_video(const char *a, struct sip_pvt *p, struct ast_rtp_codecs *newvideortp, int *last_rtpmap_codec);
@@ -1355,8 +1356,8 @@
 					 const char *uri, enum xmittype reliable, int ignore);
 static enum check_auth_result check_user_full(struct sip_pvt *p, struct sip_request *req,
 					      int sipmethod, const char *uri, enum xmittype reliable,
-					      struct sockaddr_in *sin, struct sip_peer **authpeer);
-static int check_user(struct sip_pvt *p, struct sip_request *req, int sipmethod, const char *uri, enum xmittype reliable, struct sockaddr_in *sin);
+					      struct ast_sockaddr *addr, struct sip_peer **authpeer);
+static int check_user(struct sip_pvt *p, struct sip_request *req, int sipmethod, const char *uri, enum xmittype reliable, struct ast_sockaddr *addr);
 
 /*--- Domain handling */
 static int check_sip_domain(const char *domain, char *context, size_t len); /* Check if domain is one of our local domains */
@@ -1446,13 +1447,17 @@
 static int sip_addheader(struct ast_channel *chan, const char *data);
 static int sip_do_reload(enum channelreloadreason reason);
 static char *sip_reload(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a);
+static int ast_sockaddr_resolve_first_af(struct ast_sockaddr *addr,
+				      const char *name, int flag, int family);
+static int ast_sockaddr_resolve_first(struct ast_sockaddr *addr,
+				      const char *name, int flag);
 
 /*--- Debugging

[... 8009 lines stripped ...]



More information about the asterisk-commits mailing list