summaryrefslogtreecommitdiff
path: root/res/res_rtp_asterisk.c
diff options
context:
space:
mode:
authorMichael L. Young <elgueromexicano@gmail.com>2013-05-09 04:11:59 +0000
committerMichael L. Young <elgueromexicano@gmail.com>2013-05-09 04:11:59 +0000
commitf758885546e9d7860c971c887d4cae1e8d1117bf (patch)
treeadd4be66bc091261f3bf215f6040d223ee285530 /res/res_rtp_asterisk.c
parentbb52414990e302b794b4b82d86df3bfa35d38e1f (diff)
Fix The Payload Being Set On CN Packets And Do Not Set Marker Bit
When we send out a CN packet (for instance, in the case of using rtpkeepalives), we are not setting the payload code properly. Also, we are setting the marker bit when we shouldn't be according to RFC 3389, section 4. AST_RTP_CN is not defined by AST_FORMAT codes. Therefore, we should be using ast_rtp_codecs_payload_code() rather than ast_rtp_codecs_payload_lookup(). 11 and trunk already use the appropriate function. * In 1.8, use ast_rtp_codecs_payload_code() * Remove the setting of the marker bit * Fix the debug message by incrementing the seqno after the debug message is set in order to display the correct seqno that was sent out (closes issue ASTERISK-21246) Reported by: Peter Katzmann Tested by: Peter Katzmann, Michael L. Young Patches: asterisk-21246-rtp-cng-payload-error_1.8_v2.diff uploaded by Michael L. Young (license 5026) Review: https://reviewboard.asterisk.org/r/2500/ ........ Merged revisions 388111 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 388112 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@388113 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'res/res_rtp_asterisk.c')
-rw-r--r--res/res_rtp_asterisk.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c
index ed91eaec8..3f19dbdeb 100644
--- a/res/res_rtp_asterisk.c
+++ b/res/res_rtp_asterisk.c
@@ -4184,8 +4184,7 @@ static int ast_rtp_sendcng(struct ast_rtp_instance *instance, int level)
{
unsigned int *rtpheader;
int hdrlen = 12;
- int res;
- int payload;
+ int res, payload = 0;
char data[256];
struct ast_rtp *rtp = ast_rtp_instance_get_data(instance);
struct ast_sockaddr remote_address = { {0,} };
@@ -4205,7 +4204,7 @@ static int ast_rtp_sendcng(struct ast_rtp_instance *instance, int level)
/* Get a pointer to the header */
rtpheader = (unsigned int *)data;
- rtpheader[0] = htonl((2 << 30) | (1 << 23) | (payload << 16) | (rtp->seqno++));
+ rtpheader[0] = htonl((2 << 30) | (payload << 16) | (rtp->seqno));
rtpheader[1] = htonl(rtp->lastts);
rtpheader[2] = htonl(rtp->ssrc);
data[12] = level;
@@ -4226,6 +4225,8 @@ static int ast_rtp_sendcng(struct ast_rtp_instance *instance, int level)
AST_RTP_CN, rtp->seqno, rtp->lastdigitts, res - hdrlen);
}
+ rtp->seqno++;
+
return res;
}