[asterisk-dev] DTMF detection and generation code
Dan Evans
devans at invores.com
Sun Apr 23 10:30:49 MST 2006
Steve Underwood wrote:
...
>
> Adding duration to IAX2 DTMF messges is a bad idea. RFC2833 is brain
> dead for having it (actually RFC2833 is just rather brain dead). The
> length of DTMF has no relevance, as long as it meet the minimum required
> length for the DTMF specs. I think the problem in some parts of the
> system is the minimum is not being enforced.
>
> Many many things in the telephone network - cellular systems, key
> systems, many large PBXes with digital telephones - change the length of
> DTMF so what is sent is completely unrelated to what it pressed.
> Anything which cares about the length of a DTMF digit, other than
> meeting the requred minimum, is badly broken.
>
>> a nice tool would be cheops-like packet recogniser tool that could
>> poke a sip product and determine how it sent/received rfc2833 to feed
>> back into settings in sip.conf
>>
>> I can contribute access to test server that's on the internet that can
>> run a packet sniffer full time and have a few other resources to bring
>> to bear, but (like most) not a lot of time to spare.
>
>
> Regards,
> Steve
RFC2833 is just trying to reproduce the key press without making
assumptions, and in particular it is NOT asumming that length has no
relevance. In my experience, Asterisk's 'normalization' of RFC2833
input when it relays DTMF's reduces the robustness of the input and in
effect, adds to the probability of dropped DTMF key presses. Asterisk
now relays a six packet sequence of RCF2833 events for each DTMF
received (it used to send even fewer), regardless of the number of input
events. I have captured a lot of relayed DTMF events, and when events
are dropped, most often they are the leading events in the sequence. If
the leading three are dropped, the DTMF key is effectively dropped. If
Asterisk simply relayed all the events it received, it would at least
not be a contributer to the reduction in reliability.
Of course, the situation is different when Asterisk needs to originate
the event; still, if possible, I think it should try to replicate the
duration. But in the relay situation, it should definitely send what it
receives.
Dan Evans
More information about the asterisk-dev
mailing list