diff options
-rw-r--r-- | channels/chan_sip.c | 11 | ||||
-rw-r--r-- | channels/sip/include/sip.h | 3 | ||||
-rw-r--r-- | configs/sip.conf.sample | 2 |
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. ; ;------------------------------------------------------------------------------ |