[svn-commits] branch 1.2 r34159 - /branches/1.2/channels/chan_iax2.c

svn-commits at lists.digium.com svn-commits at lists.digium.com
Wed Jun 14 15:17:38 MST 2006


Author: kpfleming
Date: Wed Jun 14 17:17:37 2006
New Revision: 34159

URL: http://svn.digium.com/view/asterisk?rev=34159&view=rev
Log:
use existing dial string parser for strings supplied to iax2_devicestate, because they can be complete dial strings, not just device names

Modified:
    branches/1.2/channels/chan_iax2.c

Modified: branches/1.2/channels/chan_iax2.c
URL: http://svn.digium.com/view/asterisk/branches/1.2/channels/chan_iax2.c?rev=34159&r1=34158&r2=34159&view=diff
==============================================================================
--- branches/1.2/channels/chan_iax2.c (original)
+++ branches/1.2/channels/chan_iax2.c Wed Jun 14 17:17:37 2006
@@ -9330,51 +9330,39 @@
 /*--- iax2_devicestate: Part of the device state notification system ---*/
 static int iax2_devicestate(void *data) 
 {
-	char *dest = (char *) data;
+	struct parsed_dial_string pds;
+	char *tmp = ast_strdupa(data);
 	struct iax2_peer *p;
-	int found = 0;
-	char *ext, *host;
-	char tmp[256];
 	int res = AST_DEVICE_INVALID;
 
-	ast_copy_string(tmp, dest, sizeof(tmp));
-	host = strchr(tmp, '@');
-	if (host) {
-		*host = '\0';
-		host++;
-		ext = tmp;
-	} else {
-		host = tmp;
-		ext = NULL;
-	}
-
+	parse_dial_string(tmp, &pds);
+	if (!pds.peer || ast_strlen_zero(pds.peer))
+		return res;
+	
 	if (option_debug > 2)
-		ast_log(LOG_DEBUG, "Checking device state for device %s\n", dest);
+		ast_log(LOG_DEBUG, "Checking device state for device %s\n", pds.peer);
 
 	/* SLD: FIXME: second call to find_peer during registration */
-	p = find_peer(host, 1);
-	if (p) {
-		found++;
-		res = AST_DEVICE_UNAVAILABLE;
-		if (option_debug > 2) 
-			ast_log(LOG_DEBUG, "iax2_devicestate(%s): Found peer. What's device state of %s? addr=%d, defaddr=%d maxms=%d, lastms=%d\n",
-				host, dest, p->addr.sin_addr.s_addr, p->defaddr.sin_addr.s_addr, p->maxms, p->lastms);
-
-		if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
-		    (!p->maxms || ((p->lastms > -1) && (p->historicms <= p->maxms)))) {
-			/* Peer is registered, or have default IP address
-			   and a valid registration */
-			if (p->historicms == 0 || p->historicms <= p->maxms)
-				/* let the core figure out whether it is in use or not */
-				res = AST_DEVICE_UNKNOWN;	
-		}
-	} else {
-		if (option_debug > 2) 
-			ast_log(LOG_DEBUG, "Devicestate: Can't find peer %s.\n", host);
-	}
+	if (!(p = find_peer(pds.peer, 1)))
+		return res;
+
+	res = AST_DEVICE_UNAVAILABLE;
+	if (option_debug > 2) 
+		ast_log(LOG_DEBUG, "iax2_devicestate: Found peer. What's device state of %s? addr=%d, defaddr=%d maxms=%d, lastms=%d\n",
+			pds.peer, p->addr.sin_addr.s_addr, p->defaddr.sin_addr.s_addr, p->maxms, p->lastms);
 	
-	if (p && ast_test_flag(p, IAX_TEMPONLY))
+	if ((p->addr.sin_addr.s_addr || p->defaddr.sin_addr.s_addr) &&
+	    (!p->maxms || ((p->lastms > -1) && (p->historicms <= p->maxms)))) {
+		/* Peer is registered, or have default IP address
+		   and a valid registration */
+		if (p->historicms == 0 || p->historicms <= p->maxms)
+			/* let the core figure out whether it is in use or not */
+			res = AST_DEVICE_UNKNOWN;	
+	}
+
+	if (ast_test_flag(p, IAX_TEMPONLY))
 		destroy_peer(p);
+
 	return res;
 }
 



More information about the svn-commits mailing list