DTMF processing errors

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.

Sergey V. Efimoff risky at mail.ru
Mon Sep 7 16:37:31 UTC 2009


Hello All,

While testing DTMF facilities of OpenBSС I've discovered a couple of  
bugs.

The first bug is generic to GSM TS 04.08, minor and is connected with  
gsm0408_cc_msg_names variable
(gsm_04_08_utils.c). I've found that message names order is wrong: in  
original source it is enumerated as

...
"unknown 0x3b",
"STATUS",
"unknown 0x3c"
"NOTIFY"
...

while it should be

...
"unknown 0x3b"
"unknown 0x3c"
"STATUS"
"NOTIFY"
...

thus faling to identify GSM 04.08 STATUS messages.

The second problem is connected with DTMF message sequence. According  
to the GSM TS 04.08, DTMF
message flow is the following:

MS -----> START_DTMF
MNCC_START_DTMF_IND ----> MNCC
MNCC_START_DTMF_RSP <---- MNCC
MS <---- START_DTMF_ACK
MS ----> STOP_DTMF
MNCC_STOP_DTMF_IND ----> MNCC
MNCC_STOP_DTMF_RSP <---- MNCC
MS <---- STOP_DTMF_ACK

This is correct, but some mobile equipment (for example, my iPhone and  
Nokia 6150) do not reply with
STOP_DTMF message; instead of this, they reply with STATUS message  
(type 0x3D). This type of messages is
not processed within OpenBSC. Message is left unhandled in this state  
and further DTMF transactions
become impossible because MNCC does not receive DTMF_STOP.

GSM standard says that STATUS message reports about some errors  
occurred during transaction, but I
did not explore the message still, though, I can do that if it is  
interesting for developers. I have no ideas why
some of my mobile phones behave wrong, while others work correctly.

I still don't know how to deal with STATUS messages properly, so I've  
simply added processing entry to the
datastatelist[] variable in gsm_04_08.c which describes a call to  
gsm48_cc_rx_stop_dtmf when received a
STATUS message.

It is incorrect, I know, but, however, temporary helps to process DTMF  
messages with MS equipment which
have wrong DTMF sequence flow. Now it looks like this:

MS -----> START_DTMF
MNCC_START_DTMF_IND ----> MNCC
MNCC_START_DTMF_RSP <---- MNCC
MS <---- START_DTMF_ACK
MS ----> STATUS
MNCC_STOP_DTMF_IND ----> MNCC
MNCC_STOP_DTMF_RSP <---- MNCC
MS <---- STOP_DTMF_ACK


Sergey.





More information about the OpenBSC mailing list