[svn-commits] file: trunk r163579 - in /trunk: channels/chan_sip.c main/channel.c
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Fri Dec 12 10:55:15 CST 2008
Author: file
Date: Fri Dec 12 10:55:15 2008
New Revision: 163579
URL: http://svn.digium.com/view/asterisk?view=rev&rev=163579
Log:
Since chan_sip is callback devicestate driven do not pass in actual states, pass in unknown so we get asked. Additionally do not pass in an actual device state value in ast_setstate since the channel may be callback driven.
(closes issue #13525)
Reported by: pj
Modified:
trunk/channels/chan_sip.c
trunk/main/channel.c
Modified: trunk/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_sip.c?view=diff&rev=163579&r1=163578&r2=163579
==============================================================================
--- trunk/channels/chan_sip.c (original)
+++ trunk/channels/chan_sip.c Fri Dec 12 10:55:15 2008
@@ -10863,7 +10863,7 @@
manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "ChannelType: SIP\r\nPeer: SIP/%s\r\nPeerStatus: Unregistered\r\nCause: Expired\r\n", peer->name);
register_peer_exten(peer, FALSE); /* Remove regexten */
- ast_devstate_changed(AST_DEVICE_UNAVAILABLE, "SIP/%s", peer->name);
+ ast_devstate_changed(AST_DEVICE_UNKNOWN, "SIP/%s", peer->name);
/* Do we need to release this peer from memory?
Only for realtime peers and autocreated peers
@@ -11552,7 +11552,7 @@
ast_atomic_fetchadd_int(&peer->onHold, (hold ? +1 : -1));
/* Request device state update */
- ast_devstate_changed(hold ? AST_DEVICE_ONHOLD : AST_DEVICE_INUSE, "SIP/%s", peer->name);
+ ast_devstate_changed(AST_DEVICE_UNKNOWN, "SIP/%s", peer->name);
unref_peer(peer, "sip_peer_hold: from find_peer operation");
return;
@@ -16730,7 +16730,7 @@
ast_log(LOG_NOTICE, "Peer '%s' is now %s. (%dms / %dms)\n",
peer->name, s, pingtime, peer->maxms);
- ast_devstate_changed(is_reachable ? AST_DEVICE_NOT_INUSE : AST_DEVICE_UNAVAILABLE, "SIP/%s", peer->name);
+ ast_devstate_changed(AST_DEVICE_UNKNOWN, "SIP/%s", peer->name);
manager_event(EVENT_FLAG_SYSTEM, "PeerStatus",
"ChannelType: SIP\r\nPeer: SIP/%s\r\nPeerStatus: %s\r\nTime: %d\r\n",
peer->name, s, pingtime);
@@ -21055,7 +21055,7 @@
}
peer->lastms = -1;
- ast_devstate_changed(AST_DEVICE_UNAVAILABLE, "SIP/%s", peer->name);
+ ast_devstate_changed(AST_DEVICE_UNKNOWN, "SIP/%s", peer->name);
/* Try again quickly */
AST_SCHED_REPLACE_UNREF(peer->pokeexpire, sched,
Modified: trunk/main/channel.c
URL: http://svn.digium.com/view/asterisk/trunk/main/channel.c?view=diff&rev=163579&r1=163578&r2=163579
==============================================================================
--- trunk/main/channel.c (original)
+++ trunk/main/channel.c Fri Dec 12 10:55:15 2008
@@ -4170,7 +4170,12 @@
}
chan->_state = state;
- ast_devstate_changed_literal(ast_state_chan2dev(state), name);
+
+ /* We have to pass AST_DEVICE_UNKNOWN here because it is entirely possible that the channel driver
+ * for this channel is using the callback method for device state. If we pass in an actual state here
+ * we override what they are saying the state is and things go amuck. */
+ ast_devstate_changed_literal(AST_DEVICE_UNKNOWN, name);
+
/* setstate used to conditionally report Newchannel; this is no more */
manager_event(EVENT_FLAG_CALL,
"Newstate",
More information about the svn-commits
mailing list