]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
backport fix from trunk for bug #6934, ensuring that RTP mark bit is changed when...
authorKevin P. Fleming <kpfleming@digium.com>
Thu, 11 May 2006 09:05:22 +0000 (09:05 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Thu, 11 May 2006 09:05:22 +0000 (09:05 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@26773 65c4cc65-6c06-0410-ace0-fbb531ad65f3

rtp.c

diff --git a/rtp.c b/rtp.c
index 0c475ed980bf178b513784e73e43ddab294866f0..5312443f775583be525bb982049b061505b34e71 100644 (file)
--- a/rtp.c
+++ b/rtp.c
@@ -90,6 +90,7 @@ struct ast_rtp {
        unsigned char rawdata[8192 + AST_FRIENDLY_OFFSET];
        /*! Synchronization source, RFC 3550, page 10. */
        unsigned int ssrc;
+       unsigned int rxssrc;
        unsigned int lastts;
        unsigned int lastdigitts;
        unsigned int lastrxts;
@@ -436,6 +437,7 @@ struct ast_frame *ast_rtp_read(struct ast_rtp *rtp)
        int ext;
        int x;
        char iabuf[INET_ADDRSTRLEN];
+       unsigned int ssrc;
        unsigned int timestamp;
        unsigned int *rtpheader;
        static struct ast_frame *f, null_frame = { AST_FRAME_NULL, };
@@ -492,6 +494,14 @@ struct ast_frame *ast_rtp_read(struct ast_rtp *rtp)
        ext = seqno & (1 << 28);
        seqno &= 0xffff;
        timestamp = ntohl(rtpheader[1]);
+       ssrc = ntohl(rtpheader[2]);
+       
+       if (!mark && rtp->rxssrc && rtp->rxssrc != ssrc) {
+               ast_log(LOG_WARNING, "Forcing Marker bit, because SSRC has changed\n");
+               mark = 1;
+       }
+
+       rtp->rxssrc = ssrc;
        
        if (padding) {
                /* Remove padding bytes */