[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