From bb0812be955bb3e598a149f69b3ed6dbf48950e7 Mon Sep 17 00:00:00 2001 From: "Kevin P. Fleming" Date: Thu, 11 May 2006 09:05:22 +0000 Subject: [PATCH] backport fix from trunk for bug #6934, ensuring that RTP mark bit is changed when SSRC changes git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@26773 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- rtp.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/rtp.c b/rtp.c index 0c475ed980..5312443f77 100644 --- 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 */