I had the same problem, i.e. there was a conflict between ID_DTMF_INVALID and
ID_DTMF_0. I also simply removed ID_DTMF_INVALID from the enumeration
definition.
Regards,
DanĂel
Alexey Trizno wrote:
When remote party send DTMF, local party receive SIPX_MEDIA_INFO with _numeric_
toneId (0x02 for '2', 0x0A for '*', 0x0B for '#', etc.), but SIPX_TONE_ID
structure describes ID_DTMF_2 = '2' (char) for 2.
ID_DTMF_INVALID = 0, /**< Invalid/Uninitialized DMTF Id */
ID_DTMF_0 = '0', /**< DMTF 0 */
ID_DTMF_1 = '1', /**< DMTF 1 */
ID_DTMF_2 = '2', /**< DMTF 2 */
ID_DTMF_3 = '3', /**< DMTF 3 */
ID_DTMF_4 = '4', /**< DMTF 4 */
ID_DTMF_5 = '5', /**< DMTF 5 */
ID_DTMF_6 = '6', /**< DMTF 6 */
ID_DTMF_7 = '7', /**< DMTF 7 */
ID_DTMF_8 = '8', /**< DMTF 8 */
ID_DTMF_9 = '9', /**< DMTF 9 */
ID_DTMF_STAR = '*', /**< DMTF * */
ID_DTMF_POUND = '#', /**< DMTF # */
ID_DTMF_FLASH = '!', /**< DTMF Flash */
Thus when remote party send 0, we receive toneId = ID_DTMF_INVALID
These Ids are used for sending DTMF in sipxtapi.
These Ids make their way into dtmflib.cpp into void
MpToneGen_startTone(MpToneGenPtr p, int toneID) case '1': case 1 : pNew =
&(p->key1); break;
case '2': case 2 : pNew = &(p->key2); break;
case '3': case 3 : pNew = &(p->key3); break;
case 'a': case 'A': pNew = &(p->keya); break;
case '4': case 4 : pNew = &(p->key4); break;
case '5': case 5 : pNew = &(p->key5); break;
case '6': case 6 : pNew = &(p->key6); break;
case 'b': case 'B': pNew = &(p->keyb); break;
case '7': case 7 : pNew = &(p->key7); break;
case '8': case 8 : pNew = &(p->key8); break;
case '9': case 9 : pNew = &(p->key9); break;
case 'c': case 'C': pNew = &(p->keyc); break;
case '*': pNew = &(p->keystar); break;
case '0': case 0 : pNew = &(p->key0); break;
case '#': pNew = &(p->keysharp); break;
case 'd': case 'D': pNew = &(p->keyd); break;
As you can see, the code can handle both '1' and 1 when sending. But when
firing the event io sipxtapi upon dtmf reception, the ID is not converted to
internal sipxtapi ID properly. In sipxtapi there is function
sipxTranslateToneId when sending DTMF, maybe a similar function could be used
to do reverse translation.
I found out why I didn't receive DTMF via INFO in sipxtapi, my voip provider
doesn't support it it seems, it responds with 415 Unsupported media type :(
when I use sjphone.
The solution could be to get rid of ID_DTMF_INVALID (visual assist says its not
used anywhere), and replace all '1' etc with their codes: 0--9
0--9
* 10
# 11
A--D 12--15
Flash 16
in SIPX_TONE_ID
Also clean up the switch in MpToneGen_startTone to get rid of '1' etc and leave
the numbers only. After these changes we could get rid of sipxTranslateToneId
in sipxtapiinternal.cpp as with VOICE_ENGINE we would use the same IDs. But
alexander chemeris or dan petrie must agree with this solution.
Jaroslav Libak
_________________________________________________________________
Explore the seven wonders of the world
http://search.msn.com/results.aspx?q=7+wonders+world&mkt=en-US&form=QBRE_______________________________________________
sipxtapi-dev mailing list
[email protected]
List Archive: http://list.sipfoundry.org/archive/sipxtapi-dev/