[asterisk-commits] file: trunk r50469 - in /trunk: ./
channels/chan_sip.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Wed Jan 10 22:54:15 MST 2007
Author: file
Date: Wed Jan 10 23:54:14 2007
New Revision: 50469
URL: http://svn.digium.com/view/asterisk?view=rev&rev=50469
Log:
Merged revisions 50468 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r50468 | file | 2007-01-11 00:53:09 -0500 (Thu, 11 Jan 2007) | 2 lines
Remove check for channel state as it can definitely be something other then ring, and also clean up the code a bit. This should solve the parking issues and maybe some attended transfer issues people have been seeing.
........
Modified:
trunk/ (props changed)
trunk/channels/chan_sip.c
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-1.4-merged' - no diff available.
Modified: trunk/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_sip.c?view=diff&rev=50469&r1=50468&r2=50469
==============================================================================
--- trunk/channels/chan_sip.c (original)
+++ trunk/channels/chan_sip.c Wed Jan 10 23:54:14 2007
@@ -13765,7 +13765,6 @@
/* Chan 2: Call from Asterisk to target */
int res = 0;
struct sip_pvt *targetcall_pvt;
- int error = 0;
/* Check if the call ID of the replaces header does exist locally */
if (!(targetcall_pvt = get_sip_pvt_byid_locked(transferer->refer->replaces_callid, transferer->refer->replaces_callid_totag,
@@ -13793,37 +13792,31 @@
if (!targetcall_pvt->owner) { /* No active channel */
if (option_debug > 3)
ast_log(LOG_DEBUG, "SIP attended transfer: Error: No owner of target call\n");
- error = 1;
- }
- /* We have a channel, find the bridge */
- target.chan1 = targetcall_pvt->owner; /* Transferer to Asterisk */
-
- if (!error) {
- target.chan2 = ast_bridged_channel(targetcall_pvt->owner); /* Asterisk to target */
-
- if (!target.chan2 || !(target.chan2->_state == AST_STATE_UP || target.chan2->_state == AST_STATE_RINGING) ) {
- /* Wrong state of new channel */
- if (option_debug > 3) {
- if (target.chan2)
- ast_log(LOG_DEBUG, "SIP attended transfer: Error: Wrong state of target call: %s\n", ast_state2str(target.chan2->_state));
- else if (target.chan1->_state != AST_STATE_RING)
- ast_log(LOG_DEBUG, "SIP attended transfer: Error: No target channel\n");
- else
- ast_log(LOG_DEBUG, "SIP attended transfer: Attempting transfer in ringing state\n");
- }
- if (target.chan1->_state != AST_STATE_RING)
- error = 1;
- }
- }
- if (error) { /* Cancel transfer */
+ /* Cancel transfer */
transmit_notify_with_sipfrag(transferer, seqno, "503 Service Unavailable", TRUE);
append_history(transferer, "Xfer", "Refer failed");
- ast_clear_flag(&transferer->flags[0], SIP_GOTREFER);
+ ast_clear_flag(&transferer->flags[0], SIP_GOTREFER);
transferer->refer->status = REFER_FAILED;
sip_pvt_unlock(targetcall_pvt);
ast_channel_unlock(current->chan1);
- ast_channel_unlock(target.chan1);
+ ast_channel_unlock(targetcall_pvt->owner);
return -1;
+ }
+
+ /* We have a channel, find the bridge */
+ target.chan1 = targetcall_pvt->owner; /* Transferer to Asterisk */
+ target.chan2 = ast_bridged_channel(targetcall_pvt->owner); /* Asterisk to target */
+
+ if (!target.chan2 || !(target.chan2->_state == AST_STATE_UP || target.chan2->_state == AST_STATE_RINGING) ) {
+ /* Wrong state of new channel */
+ if (option_debug > 3) {
+ if (target.chan2)
+ ast_log(LOG_DEBUG, "SIP attended transfer: Error: Wrong state of target call: %s\n", ast_state2str(target.chan2->_state));
+ else if (target.chan1->_state != AST_STATE_RING)
+ ast_log(LOG_DEBUG, "SIP attended transfer: Error: No target channel\n");
+ else
+ ast_log(LOG_DEBUG, "SIP attended transfer: Attempting transfer in ringing state\n");
+ }
}
/* Transfer */
More information about the asterisk-commits
mailing list