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.