From: Kevin P. Fleming Date: Wed, 14 Jun 2006 22:17:37 +0000 (+0000) Subject: use existing dial string parser for strings supplied to iax2_devicestate, because... X-Git-Tag: 1.2.10~49 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b9e587a361a9a8b6041b10d2e3408b4aab3c8fc2;p=thirdparty%2Fasterisk.git use existing dial string parser for strings supplied to iax2_devicestate, because they can be complete dial strings, not just device names git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@34159 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 1f66bbc263..8b24167621 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -9330,51 +9330,39 @@ struct ast_custom_function iaxpeer_function = { /*--- 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; }