Summary:ASTERISK-07679: channel.c set_format() exits prematurely under some circumstances.
Reporter:Tony Mountifield (softins)Labels:
Date Opened:2006-09-05 10:19:38Date Closed:2006-09-09 15:26:16
Versions:Frequency of
Description:The optimisations to set_format() in channel.c that were introduced to the 1.2 branch in revision 38310 and revised in revision 38347 appear to exit from set_format() in at least one situation where it should continue.

If I use a call file to originate a call to a SIP channel and then send that call into a MeetMe room, no audio is heard, and the log file fills up with the message:

chan_sip.c:2561 sip_write: Asked to transmit frame type 64, while native formats is 8 (read/write = 64/64)

The situation can be reproduced easily, as follows (I have SIP phones on 2000 and 2002).

Extract from extensions.conf:

exten => _20XX,1,Dial(SIP/${EXTEN})

exten => 4007,1,Answer
exten => 4007,2,Wait(1)
exten => 4007,3,MeetMe(2222|)
exten => 4007,4,Hangup

On my 2000 phone I dialled 4007 and entered the conference. On my 2002 phone I also dialled 4007 and entered the conference successfully, with audio being heard. I then hung up 2002 and copied the following call file to /var/spool/asterisk/outgoing:

Channel: Local/2002@local-extensions-novm
Extension: 4007
Context: other-extensions
Priority: 1

As soon as this call enters MeetMe, the sip_write messages start, and continue until the phone is hung up.

Reverting the 38347 and 38310 changes corrects the problem. This involved removing these lines:

   if ((*rawformat == native) && (*format == fmt)) {
       /* the channel is already in these formats, so nothing to do */
       return 0;
Comments:By: Tony Mountifield (softins) 2006-09-05 11:07:46

Apologies, this appears to be a duplicate of bug ASTERISK-7599. Hope the information provided is useful anyway.

By: Joshua C. Colp (jcolp) 2006-09-09 15:26:15

Fixed in 1.2 as of revision 42600 and trunk as of revision 42601.