summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrent Eagles <beagles@digium.com>2012-12-13 15:22:27 +0000
committerBrent Eagles <beagles@digium.com>2012-12-13 15:22:27 +0000
commitab894d5af9c2d3acc2c97a5e0b82f135f3eb51cd (patch)
treebbd13d6aac3006739c0b70b12207709c7462f67d
parent4f6064584d12717d842cfcbc6f25993281d7def0 (diff)
This change adds a SIP peer configuration feature to allow the peer's
configured codecs to take precedence on an outgoing call. This change introduces a new peer configuration property named 'ignore_requested_pref' that causes the requested codec to be ignored when determining the preferred codec for an outgoing call leg. The consequence is that Asterisk's usual efforts to prefer avoiding transcoding can be overridden on a peer-by-peer basis where appropriate. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@377971 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-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.
;
;------------------------------------------------------------------------------