From b910673ebab5997173ed89765976aa85a12e6edf Mon Sep 17 00:00:00 2001
From: Vincent Lucas <chenzo@jitsi.org>
Date: Tue, 11 Sep 2012 08:50:52 +0000
Subject: [PATCH] Corrects writing DTMF payload (RFC4733) for RTP packets, when
 the RTP packet length is greater then the fixed header (i.e. with CSRC
 identifiers).

---
 .../impl/neomedia/transform/dtmf/DtmfRawPacket.java    | 10 +++-------
 .../neomedia/transform/dtmf/DtmfTransformEngine.java   |  7 +++++--
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/src/org/jitsi/impl/neomedia/transform/dtmf/DtmfRawPacket.java b/src/org/jitsi/impl/neomedia/transform/dtmf/DtmfRawPacket.java
index f3d1fb91..8ddcfe7b 100644
--- a/src/org/jitsi/impl/neomedia/transform/dtmf/DtmfRawPacket.java
+++ b/src/org/jitsi/impl/neomedia/transform/dtmf/DtmfRawPacket.java
@@ -28,11 +28,6 @@ public class DtmfRawPacket
     private static final Logger logger
         = Logger.getLogger(DtmfRawPacket.class);
 
-    /**
-     * The fixed size of a DTMF packet.
-     */
-    public static final int DTMF_PACKET_SIZE = 16;
-
     /**
      * The event code to send.
      */
@@ -54,12 +49,13 @@ public class DtmfRawPacket
      * @param buffer the <tt>byte</tt> array that we should use to store packet
      * content
      * @param offset the index where we should start using the <tt>buffer</tt>.
+     * @param length Length of the packet's data.
      * @param payload the payload that has been negotiated for telephone events
      * by our signaling modules.
      */
-    public DtmfRawPacket(byte[] buffer, int offset, byte payload)
+    public DtmfRawPacket(byte[] buffer, int offset, int length, byte payload)
     {
-        super (buffer, offset, DTMF_PACKET_SIZE);
+        super (buffer, offset, length);
 
         setPayload(payload);
     }
diff --git a/src/org/jitsi/impl/neomedia/transform/dtmf/DtmfTransformEngine.java b/src/org/jitsi/impl/neomedia/transform/dtmf/DtmfTransformEngine.java
index 54d5f062..d732e15b 100644
--- a/src/org/jitsi/impl/neomedia/transform/dtmf/DtmfTransformEngine.java
+++ b/src/org/jitsi/impl/neomedia/transform/dtmf/DtmfTransformEngine.java
@@ -236,8 +236,11 @@ public RawPacket transform(RawPacket pkt)
             throw new IllegalStateException("Can't send DTMF when no payload "
                             +"type has been negotiated for DTMF events.");
 
-        DtmfRawPacket dtmfPkt = new DtmfRawPacket(pkt.getBuffer(),
-                        pkt.getOffset(), currentDtmfPayload);
+        DtmfRawPacket dtmfPkt = new DtmfRawPacket(
+                pkt.getBuffer(),
+                pkt.getOffset(),
+                pkt.getLength(),
+                currentDtmfPayload);
 
         long audioPacketTimestamp = dtmfPkt.getTimestamp();
         boolean pktEnd = false;
-- 
GitLab