[Home]

Summary:ASTERISK-11641: [patch] RFC2833 DTMF relaying error when using p2p bridging
Reporter:Andriy I Pylypenko (bamby)Labels:
Date Opened:2008-03-14 09:30:31Date Closed:2008-04-01 13:04:29
Priority:MajorRegression?No
Status:Closed/CompleteComponents:Core/RTP
Versions:Frequency of
Occurrence
Related
Issues:
Environment:Attachments:( 0) rtp_dtmf.diff
Description:I'm using Asterisk in SIP relaying mode with RTP relaying too as DTMFs coming through have to be monitored during the call. The DTMFs are in RFC2833 mode only.

After having upgraded asterisk 1.2 to asterisk 1.4.18 I noticed that remote IVRs stopped to recognize DTMFs coming from the calling SIP UA.

I've analyzed the RTP stream and discovered that DTMFs are coming with timestamps and sequence numbers completely different from audio timestamps. And RFC2833, section 3.1 says:

  DTMF digits and named telephone events are carried as part of the
  audio stream, and MUST use the same sequence number and time-stamp
  base as the regular audio channel to simplify the generation of audio
  waveforms at a gateway.

I've looked through the asterisk's code and found out that this behavior is caused by introduction of packet-to-packet bridging mode. In my case the DTMFs are extracted from RTP and then reinjected into RTP stream but audio packets are sent using p2p code, so not changing neither timestamp nor sequence number of audio packets.

I've made a quick fix that ensures the RTP stream is fully reconstructed if the DTMFs should be monitored by Asterisk during the bridging. After this remote IVRs started to recognize DTMFs again.
Comments:By: Digium Subversion (svnbot) 2008-04-01 12:57:59

Repository: asterisk
Revision: 112209

U   branches/1.4/main/rtp.c

------------------------------------------------------------------------
r112209 | file | 2008-04-01 12:57:58 -0500 (Tue, 01 Apr 2008) | 4 lines

Disable Packet2Packet bridging when we need to feed DTMF frames into the core. Some implementations do not like how we switch between things.
(closes issue ASTERISK-11641)
Reported by: bamby

------------------------------------------------------------------------

http://svn.digium.com/view/asterisk?view=rev&revision=112209

By: Digium Subversion (svnbot) 2008-04-01 13:01:39

Repository: asterisk
Revision: 112210

_U  trunk/
U   trunk/main/rtp.c

------------------------------------------------------------------------
r112210 | file | 2008-04-01 13:01:39 -0500 (Tue, 01 Apr 2008) | 12 lines

Merged revisions 112209 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r112209 | file | 2008-04-01 15:02:43 -0300 (Tue, 01 Apr 2008) | 4 lines

Disable Packet2Packet bridging when we need to feed DTMF frames into the core. Some implementations do not like how we switch between things.
(closes issue ASTERISK-11641)
Reported by: bamby

........

------------------------------------------------------------------------

http://svn.digium.com/view/asterisk?view=rev&revision=112210

By: Digium Subversion (svnbot) 2008-04-01 13:04:29

Repository: asterisk
Revision: 112211

_U  branches/1.6.0/
U   branches/1.6.0/main/rtp.c

------------------------------------------------------------------------
r112211 | file | 2008-04-01 13:04:29 -0500 (Tue, 01 Apr 2008) | 20 lines

Merged revisions 112210 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk

................
r112210 | file | 2008-04-01 15:06:13 -0300 (Tue, 01 Apr 2008) | 12 lines

Merged revisions 112209 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r112209 | file | 2008-04-01 15:02:43 -0300 (Tue, 01 Apr 2008) | 4 lines

Disable Packet2Packet bridging when we need to feed DTMF frames into the core. Some implementations do not like how we switch between things.
(closes issue ASTERISK-11641)
Reported by: bamby

........

................

------------------------------------------------------------------------

http://svn.digium.com/view/asterisk?view=rev&revision=112211