[svn-commits] kharwell: trunk r408731 - in /trunk: ./ main/rtp_engine.c
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Fri Feb 21 12:37:27 CST 2014
Author: kharwell
Date: Fri Feb 21 12:37:24 2014
New Revision: 408731
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=408731
Log:
rtp_engine: Dynamic payload change in rtp mapping not supported
Asterisk didn't support the dynamic payload change in rtp mapping in the 200
OK response.
Scenario:
Asterisk sends the INVITE proposing alaw and telephone-event, it proposes
rtpmap:101 for telephone-event. Peer responds with 2xx, it answers with
alaw and telephone-event also, but it proposes a different rtpmap number
(rtpmap:103) for telephone-event.
Expected Behaviour:
Asterisk should honour the rtpmapping in the response and send DTMF packets
using 103 as payload type for DTMF.
Actual Behaviour: Asterisk sends DTMF packets using payload type 101.
With this patch asterisk now supports changes that can occur in the rtp mapping
in the response.
(closes issue ASTERISK-23279)
Reported by: NITESH BANSAL
Review: https://reviewboard.asterisk.org/r/3225/
Patches:
dynamic_payload_change.patch uploaded by nbansal (license 6418)
........
Merged revisions 408729 from http://svn.asterisk.org/svn/asterisk/branches/11
........
Merged revisions 408730 from http://svn.asterisk.org/svn/asterisk/branches/12
Modified:
trunk/ (props changed)
trunk/main/rtp_engine.c
Propchange: trunk/
------------------------------------------------------------------------------
Binary property 'branch-12-merged' - no diff available.
Modified: trunk/main/rtp_engine.c
URL: http://svnview.digium.com/svn/asterisk/trunk/main/rtp_engine.c?view=diff&rev=408731&r1=408730&r2=408731
==============================================================================
--- trunk/main/rtp_engine.c (original)
+++ trunk/main/rtp_engine.c Fri Feb 21 12:37:24 2014
@@ -839,6 +839,14 @@
return (type->asterisk_format && (ast_format_cmp(&type->format, format) != AST_FORMAT_CMP_NOT_EQUAL)) ? CMP_MATCH | CMP_STOP : 0;
}
+static int rtp_payload_type_find_nonast_format(void *obj, void *arg, int flags)
+{
+ struct ast_rtp_payload_type *type = obj;
+ int *rtp_code = arg;
+
+ return ((!type->asterisk_format && (type->rtp_code == *rtp_code)) ? CMP_MATCH | CMP_STOP : 0);
+}
+
int ast_rtp_codecs_payload_code(struct ast_rtp_codecs *codecs, int asterisk_format, const struct ast_format *format, int code)
{
struct ast_rtp_payload_type *type;
@@ -848,7 +856,7 @@
res = type->payload;
ao2_ref(type, -1);
return res;
- } else if (!asterisk_format && (type = ao2_find(codecs->payloads, &code, OBJ_NOLOCK | OBJ_KEY))) {
+ } else if (!asterisk_format && (type = ao2_callback(codecs->payloads, OBJ_NOLOCK, rtp_payload_type_find_nonast_format, (void*)&code))) {
res = type->payload;
ao2_ref(type, -1);
return res;
More information about the svn-commits
mailing list