Summary:ASTERISK-17236: Hangup on communication stage due to GSM or iLBC codec.
Reporter:Jacob LIpstein (jacobli)Labels:
Date Opened:2011-01-12 17:59:42.000-0600Date Closed:
Versions:Frequency of
Description:The issue exists in any 1.8 version but is not existing in any earlier version.
The issue takes place if:
two asterisks are connected via AIX protocol and are using GSM and probably iLBC codec on it; and you are calling from cell phone to an access number (incoming land line) supported by one asterisk (version is not important: tested with some 1.6 and 1.8), entered number of cell phone supported by other asterisk (1.8 or higher) via it's outgoing land lines. Getting hangup just after the called number is transferred to the target asterisk 1.8


Log at the target asterisk:
[Jan 10 21:44:14] DEBUG[29308] sig_analog.c: analog_available 1
[Jan 10 21:44:14] DEBUG[29308] sig_analog.c: analog_request 1
[Jan 10 21:44:14] DEBUG[29308] sig_analog.c: CALLING CID_NAME: EXADEL INC CID_NUM:: 19253686773
[Jan 10 21:44:14] DEBUG[29308] sig_analog.c: Dialing '2334442'
[Jan 10 21:44:14] WARNING[29308] chan_dahdi.c: Cannot handle frames in gsm format
[Jan 10 21:44:14] WARNING[29308] app_dial.c: Unable to forward voice or dtmf
[Jan 10 21:44:14] DEBUG[29308] sig_analog.c: analog_hangup 1
The hangup is due the part of code in the chan_dahdi.c file:

       if ((frame->subclass.codec != AST_FORMAT_SLINEAR) &&
               (frame->subclass.codec != AST_FORMAT_ULAW) &&
               (frame->subclass.codec != AST_FORMAT_ALAW)) {
               ast_log(LOG_WARNING, "Cannot handle frames in %s format\n", ast_getformatname(frame->subclass.codec));
               return -1;

The asterisk versions prior to 1.8 contains the same code but for some reason it never happens you run into the code with GSM or iLBC codec. But it happens with 1.8 and higher (with different versions of duhdi) in circumstances described above. I have just modified the code to

       if ((frame->subclass.codec != AST_FORMAT_SLINEAR) &&
               (frame->subclass.codec != AST_FORMAT_GSM) &&
               (frame->subclass.codec != AST_FORMAT_ILBC) &&
               (frame->subclass.codec != AST_FORMAT_ULAW) &&
               (frame->subclass.codec != AST_FORMAT_ALAW)) {
               ast_log(LOG_WARNING, "Cannot handle frames in %s format\n", ast_getformatname(frame->subclass.codec));
               return -1;

and the issue is gone. But I didn't investigate the problem thoroughly.

More info:
Target asterisk runs on openSUSE 11.3 (i586) - I don't think it makes sense.
Card: WCTDM/4 "Wildcard TDM400P REV I Board 5"
dahdi-linux-complete-2.3... or 2.4....

Comments:By: Jacob LIpstein (jacobli) 2011-03-03 11:45:10.000-0600

see issue ASTERISK-1799242