From dda130c334e15f62ac5a5601f51059a7a9dfd2f3 Mon Sep 17 00:00:00 2001
From: Mark Spencer <markster@digium.com>
Date: Thu, 11 May 2006 08:47:37 +0000
Subject: [PATCH] Set "MARK" whenever SSRC changes (bug #6934)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@26759 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 rtp.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/rtp.c b/rtp.c
index d0d84453df..208e582871 100644
--- a/rtp.c
+++ b/rtp.c
@@ -93,6 +93,7 @@ struct ast_rtp {
 	struct ast_frame f;
 	unsigned char rawdata[8192 + AST_FRIENDLY_OFFSET];
 	unsigned int ssrc;		/*!< Synchronization source, RFC 3550, page 10. */
+	unsigned int rxssrc;
 	unsigned int lastts;
 	unsigned int lastdigitts;
 	unsigned int lastrxts;
@@ -430,6 +431,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;
 	struct rtpPayloadType rtpPT;
@@ -485,6 +487,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 */
-- 
GitLab