From b0288cc8ad0ccbbb0684bbc91f6c2f6cfb51d195 Mon Sep 17 00:00:00 2001 From: Kevin Harwell Date: Fri, 25 Oct 2013 16:05:55 +0000 Subject: [PATCH] chan_sip: Allow a sip peer to accept both AVP and AVPF calls Adapts the behaviour of avpf to only impact the format of outgoing calls. For inbound calls, both AVP and AVPF calls will be accepted regardless of the value of avpf in the configuration. (closes issue ASTERISK-22005) Reported by: Torrey Searle Patches: optional_avpf_trunk.patch uploaded by tsearle (license 5334) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@401884 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 43 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 72e1b11704..c736b67e88 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -10110,11 +10110,26 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req, int t38action } if ((!strcmp(protocol, "RTP/SAVPF") || !strcmp(protocol, "UDP/TLS/RTP/SAVPF")) && !ast_test_flag(&p->flags[2], SIP_PAGE3_USE_AVPF)) { - ast_log(LOG_WARNING, "Received SAVPF profle in audio offer but AVPF is not enabled: %s\n", m); - continue; + if (req->method != SIP_RESPONSE) { + ast_log(LOG_NOTICE, "Received SAVPF profle in audio offer but AVPF is not enabled, enabling: %s\n", m); + secure_audio = 1; + ast_set_flag(&p->flags[2], SIP_PAGE3_USE_AVPF); + } + else { + + ast_log(LOG_WARNING, "Received SAVPF profle in audio answer but AVPF is not enabled: %s\n", m); + continue; + } } else if ((!strcmp(protocol, "RTP/SAVP") || !strcmp(protocol, "UDP/TLS/RTP/SAVP")) && ast_test_flag(&p->flags[2], SIP_PAGE3_USE_AVPF)) { - ast_log(LOG_WARNING, "Received SAVP profile in audio offer but AVPF is enabled: %s\n", m); - continue; + if (req->method != SIP_RESPONSE) { + ast_log(LOG_NOTICE, "Received SAVP profle in audio offer but AVPF is enabled, disabling: %s\n", m); + secure_audio = 1; + ast_clear_flag(&p->flags[2], SIP_PAGE3_USE_AVPF); + } + else { + ast_log(LOG_WARNING, "Received SAVP profile in audio offer but AVPF is enabled: %s\n", m); + continue; + } } else if (!strcmp(protocol, "UDP/TLS/RTP/SAVP") || !strcmp(protocol, "UDP/TLS/RTP/SAVPF")) { secure_audio = 1; @@ -10124,11 +10139,23 @@ static int process_sdp(struct sip_pvt *p, struct sip_request *req, int t38action } else if (!strcmp(protocol, "RTP/SAVP") || !strcmp(protocol, "RTP/SAVPF")) { secure_audio = 1; } else if (!strcmp(protocol, "RTP/AVPF") && !ast_test_flag(&p->flags[2], SIP_PAGE3_USE_AVPF)) { - ast_log(LOG_WARNING, "Received AVPF profile in audio offer but AVPF is not enabled: %s\n", m); - continue; + if (req->method != SIP_RESPONSE) { + ast_log(LOG_NOTICE, "Received AVPF profile in audio offer but AVPF is not enabled, enabling: %s\n", m); + ast_set_flag(&p->flags[2], SIP_PAGE3_USE_AVPF); + } + else { + ast_log(LOG_WARNING, "Received AVP profile in audio answer but AVPF is enabled: %s\n", m); + continue; + } } else if (!strcmp(protocol, "RTP/AVP") && ast_test_flag(&p->flags[2], SIP_PAGE3_USE_AVPF)) { - ast_log(LOG_WARNING, "Received AVP profile in audio offer but AVPF is enabled: %s\n", m); - continue; + if (req->method != SIP_RESPONSE) { + ast_log(LOG_NOTICE, "Received AVP profile in audio answer but AVPF is enabled, disabling: %s\n", m); + ast_clear_flag(&p->flags[2], SIP_PAGE3_USE_AVPF); + } + else { + ast_log(LOG_WARNING, "Received AVP profile in audio answer but AVPF is enabled: %s\n", m); + continue; + } } else if ((!strcmp(protocol, "UDP/TLS/RTP/SAVP") || !strcmp(protocol, "UDP/TLS/RTP/SAVPF")) && (!(dtls = ast_rtp_instance_get_dtls(p->rtp)) || !dtls->active(p->rtp))) { ast_log(LOG_WARNING, "Received UDP/TLS in audio offer but DTLS is not enabled: %s\n", m); -- 2.47.2