summaryrefslogtreecommitdiff
path: root/res/res_pjsip_sdp_rtp.c
diff options
context:
space:
mode:
authorMatthew Jordan <mjordan@digium.com>2014-02-27 12:29:56 +0000
committerMatthew Jordan <mjordan@digium.com>2014-02-27 12:29:56 +0000
commit83b2063ea5dff86348d63980a8016fd5090b126d (patch)
treea6ec6a679784ba4c4150b4d8670f80dd6879d6d8 /res/res_pjsip_sdp_rtp.c
parentf8dd49ab4d1431fc9d1993882ddc256fd24a40fa (diff)
res_pjsip_sdp_rtp: Apply packetization rules on inbound SDP handling
The setting 'use_ptime' is supposed to tell Asterisk to honour the ptime attribute in an offer, preferring it to whatever packetization preferences have been set internally. Currently, however, something rather quirky will happen: (1) The SDP answer will be constructed in create_outgoing_sdp_stream. This will use the preferences from the endpoint, such that the 200 OK response will add the packetization preferences from the endpoint, and not what was offered. (2) When the 200 response is issued, apply_negotiated_sdp_stream is called. This will call apply_packetization, which will use the ptime attribute from the offer internally. We end up telling the offerer to use the internal ptime attribute, but we end up using the offered ptime attribute. Hilarity ensues. This patch modifies the behaviour by calling apply_packetization from negotiate_incoming_sdp_stream, which is called prior to create_outgoing_sdp_stream. This causes the format preferences on the session's media object to be set to the inbound ptime value (if 'use_ptime' is enabled), such that the construction of the answer gets the right value immediately. Review: https://reviewboard.asterisk.org/r/3244/ ........ Merged revisions 408999 from http://svn.asterisk.org/svn/asterisk/branches/12 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@409000 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'res/res_pjsip_sdp_rtp.c')
-rw-r--r--res/res_pjsip_sdp_rtp.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/res/res_pjsip_sdp_rtp.c b/res/res_pjsip_sdp_rtp.c
index 345967bce..17aa746c9 100644
--- a/res/res_pjsip_sdp_rtp.c
+++ b/res/res_pjsip_sdp_rtp.c
@@ -258,7 +258,7 @@ static int set_caps(struct ast_sip_session *session, struct ast_sip_session_medi
}
ast_rtp_codecs_payloads_destroy(&codecs);
- return 1;
+ return 0;
}
static pjmedia_sdp_attr* generate_rtpmap_attr(pjmedia_sdp_media *media, pj_pool_t *pool, int rtp_code,
@@ -733,7 +733,15 @@ static int negotiate_incoming_sdp_stream(struct ast_sip_session *session, struct
return -1;
}
- return set_caps(session, session_media, stream);
+ if (set_caps(session, session_media, stream)) {
+ return -1;
+ }
+
+ if (media_type == AST_FORMAT_TYPE_AUDIO) {
+ apply_packetization(session, session_media, stream);
+ }
+
+ return 1;
}
static int add_crypto_to_stream(struct ast_sip_session *session,
@@ -1052,7 +1060,7 @@ static int apply_negotiated_sdp_stream(struct ast_sip_session *session, struct a
ast_sockaddr_set_port(addrs, remote_stream->desc.port);
ast_rtp_instance_set_remote_address(session_media->rtp, addrs);
- if (set_caps(session, session_media, local_stream) < 1) {
+ if (set_caps(session, session_media, local_stream)) {
return -1;
}