summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--channels/chan_sip.c11
-rw-r--r--channels/sip/include/sip.h3
-rw-r--r--configs/sip.conf.sample2
3 files changed, 11 insertions, 5 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 9d5d638ad..22a345767 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -13167,10 +13167,11 @@ static enum sip_result add_sdp(struct sip_request *resp, struct sip_pvt *p, int
- Then other codecs in capabilities, including video
*/
- /* Prefer the audio codec we were requested to use, first, no matter what
- Note that p->prefcodec can include video codecs, so mask them out
- */
- if (ast_format_cap_has_joint(tmpcap, p->prefcaps)) {
+
+ /* Unless otherwise configured, the prefcaps is added before the peer's
+ * configured codecs.
+ */
+ if (!ast_test_flag(&p->flags[2], SIP_PAGE3_IGNORE_PREFCAPS) && ast_format_cap_has_joint(tmpcap, p->prefcaps)) {
ast_format_cap_iter_start(p->prefcaps);
while (!(ast_format_cap_iter_next(p->prefcaps, &tmp_fmt))) {
if (AST_FORMAT_GET_TYPE(tmp_fmt.id) != AST_FORMAT_TYPE_AUDIO) {
@@ -30766,6 +30767,8 @@ static struct sip_peer *build_peer(const char *name, struct ast_variable *v, str
ast_set2_flag(&peer->flags[2], ast_true(v->value), SIP_PAGE3_USE_AVPF);
} else if (!strcasecmp(v->name, "icesupport")) {
ast_set2_flag(&peer->flags[2], ast_true(v->value), SIP_PAGE3_ICE_SUPPORT);
+ } else if (!strcasecmp(v->name, "ignore_requested_pref")) {
+ ast_set2_flag(&peer->flags[2], ast_true(v->value), SIP_PAGE3_IGNORE_PREFCAPS);
} else {
ast_rtp_dtls_cfg_parse(&peer->dtls_cfg, v->name, v->value);
}
diff --git a/channels/sip/include/sip.h b/channels/sip/include/sip.h
index 7f907c6e5..9a818553b 100644
--- a/channels/sip/include/sip.h
+++ b/channels/sip/include/sip.h
@@ -373,10 +373,11 @@
#define SIP_PAGE3_DIRECT_MEDIA_OUTGOING (1 << 4) /*!< DP: Only send direct media reinvites on outgoing calls */
#define SIP_PAGE3_USE_AVPF (1 << 5) /*!< DGP: Support a minimal AVPF-compatible profile */
#define SIP_PAGE3_ICE_SUPPORT (1 << 6) /*!< DGP: Enable ICE support */
+#define SIP_PAGE3_IGNORE_PREFCAPS (1 << 7) /*!< DP: Ignore prefcaps when setting up an outgoing call leg */
#define SIP_PAGE3_FLAGS_TO_COPY \
(SIP_PAGE3_SNOM_AOC | SIP_PAGE3_SRTP_TAG_32 | SIP_PAGE3_NAT_AUTO_RPORT | SIP_PAGE3_NAT_AUTO_COMEDIA | \
- SIP_PAGE3_DIRECT_MEDIA_OUTGOING | SIP_PAGE3_USE_AVPF | SIP_PAGE3_ICE_SUPPORT)
+ SIP_PAGE3_DIRECT_MEDIA_OUTGOING | SIP_PAGE3_USE_AVPF | SIP_PAGE3_ICE_SUPPORT | SIP_PAGE3_IGNORE_PREFCAPS )
#define CHECK_AUTH_BUF_INITLEN 256
diff --git a/configs/sip.conf.sample b/configs/sip.conf.sample
index bbd2af8df..90b8abe5f 100644
--- a/configs/sip.conf.sample
+++ b/configs/sip.conf.sample
@@ -1259,6 +1259,8 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls
; dtlscafile
; dtlscapath
; dtlssetup
+; ignore_requested_pref ; Ignore the requested codec and determine the preferred codec
+; ; from the peer's configuration.
;
;------------------------------------------------------------------------------