Richard wrote:

> Without looking into the code, queueing a busy frame to wake up the read 
> thread and look at the call-forward string seems wrong.  The null frame 
> should be queued instead.

This is the code from branch 11 SVN (branch 12 seems to be the same).  Whilst 
it is done as a drop through, part of the logic may be to provide and 
appropriate behaviour if redirects have been disabled at a higher level.  
change_redirecting_information eventually sets the field containing the address 
information that Dial uses to detect the redirection.

                                case 302: /* Moved temporarily */
                                case 305: /* Use Proxy */
                                        if (p->owner) {
                                                struct ast_party_redirecting 
redirecting;
                                                struct 
ast_set_party_redirecting update_redirecting;

                                                
ast_party_redirecting_init(&redirecting);
                                                memset(&update_redirecting, 0, 
sizeof(update_redirecting));
                                                
change_redirecting_information(p, req, &redirecting,
                                                        &update_redirecting, 
TRUE);
                                                
ast_channel_set_redirecting(p->owner, &redirecting,
                                                        &update_redirecting);
                                                
ast_party_redirecting_free(&redirecting);
                                        }
                                        /* Fall through */
                                case 486: /* Busy here */
                                case 600: /* Busy everywhere */
                                case 603: /* Decline */
                                        if (p->owner) {
                                                sip_handle_cc(p, req, 
AST_CC_CCBS);
                                                ast_queue_control(p->owner, 
AST_CONTROL_BUSY);

One point of detail.  It is actually the write to the alertpipe, within 
ast_queue_control that does the wakeup.

-- 
David Woolley
BTS Holdings Plc
Tel: +44 (0)20 8401 9000 Fax: +44 (0)20 8401 9100
http://www.bts.co.uk 

BTS Holdings PLC - Registered office: BTS House, Manor Road, Wallington, SM6 
0DD - Registered in England: 1517630

-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to