[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