diff options
-rw-r--r-- | CHANGES | 2 | ||||
-rw-r--r-- | channels/chan_sip.c | 9 | ||||
-rw-r--r-- | channels/sip/include/sip.h | 2 | ||||
-rw-r--r-- | configs/sip.conf.sample | 5 |
4 files changed, 18 insertions, 0 deletions
@@ -65,6 +65,8 @@ SIP Changes which set the force_rport and comedia options automatically if Asterisk detects that an incoming SIP request crossed a NAT after being sent by the remote endpoint. + * Adds an option send_diversion which can be disabled to prevent + diversion headers from automatically being added to invites. Chan_local changes ------------------ diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 417e7e347..657844ddd 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -12542,6 +12542,11 @@ static void add_diversion_header(struct sip_request *req, struct sip_pvt *pvt) const char *reason; char header_text[256]; + /* We skip this entirely if the configuration doesn't allow diversion headers */ + if (!sip_cfg.send_diversion) { + return; + } + if (!pvt->owner) { return; } @@ -18827,6 +18832,7 @@ static char *sip_show_settings(struct ast_cli_entry *e, int cmd, struct ast_cli_ ast_cli(a->fd, " Trust RPID: %s\n", AST_CLI_YESNO(ast_test_flag(&global_flags[0], SIP_TRUSTRPID))); ast_cli(a->fd, " Send RPID: %s\n", AST_CLI_YESNO(ast_test_flag(&global_flags[0], SIP_SENDRPID))); ast_cli(a->fd, " Legacy userfield parse: %s\n", AST_CLI_YESNO(sip_cfg.legacy_useroption_parsing)); + ast_cli(a->fd, " Send Diversion: %s\n", AST_CLI_YESNO(sip_cfg.send_diversion)); ast_cli(a->fd, " Caller ID: %s\n", default_callerid); if ((default_fromdomainport) && (default_fromdomainport != STANDARD_SIP_PORT)) { ast_cli(a->fd, " From: Domain: %s:%d\n", default_fromdomain, default_fromdomainport); @@ -29166,6 +29172,7 @@ static int reload_config(enum channelreloadreason reason) sip_set_default_format_capabilities(sip_cfg.caps); sip_cfg.regextenonqualify = DEFAULT_REGEXTENONQUALIFY; sip_cfg.legacy_useroption_parsing = DEFAULT_LEGACY_USEROPTION_PARSING; + sip_cfg.send_diversion = DEFAULT_SEND_DIVERSION; sip_cfg.notifyringing = DEFAULT_NOTIFYRINGING; sip_cfg.notifycid = DEFAULT_NOTIFYCID; sip_cfg.notifyhold = FALSE; /*!< Keep track of hold status for a peer */ @@ -29467,6 +29474,8 @@ static int reload_config(enum channelreloadreason reason) sip_cfg.regextenonqualify = ast_true(v->value); } else if (!strcasecmp(v->name, "legacy_useroption_parsing")) { sip_cfg.legacy_useroption_parsing = ast_true(v->value); + } else if (!strcasecmp(v->name, "send_diversion")) { + sip_cfg.send_diversion = ast_true(v->value); } else if (!strcasecmp(v->name, "callerid")) { ast_copy_string(default_callerid, v->value, sizeof(default_callerid)); } else if (!strcasecmp(v->name, "mwi_from")) { diff --git a/channels/sip/include/sip.h b/channels/sip/include/sip.h index 2f9beff84..d9f99d652 100644 --- a/channels/sip/include/sip.h +++ b/channels/sip/include/sip.h @@ -219,6 +219,7 @@ #define DEFAULT_ACCEPT_OUTOFCALL_MESSAGE TRUE #define DEFAULT_REGEXTENONQUALIFY FALSE #define DEFAULT_LEGACY_USEROPTION_PARSING FALSE +#define DEFAULT_SEND_DIVERSION TRUE #define DEFAULT_T1MIN 100 /*!< 100 MS for minimal roundtrip time */ #define DEFAULT_MAX_CALL_BITRATE (384) /*!< Max bitrate for video */ #ifndef DEFAULT_USERAGENT @@ -733,6 +734,7 @@ struct sip_settings { int callevents; /*!< Whether we send manager events or not */ int regextenonqualify; /*!< Whether to add/remove regexten when qualifying peers */ int legacy_useroption_parsing; /*!< Whether to strip useroptions in URI via semicolons */ + int send_diversion; /*!< Whether to Send SIP Diversion headers */ int matchexternaddrlocally; /*!< Match externaddr/externhost setting against localnet setting */ char regcontext[AST_MAX_CONTEXT]; /*!< Context for auto-extensions */ char messagecontext[AST_MAX_CONTEXT]; /*!< Default context for out of dialog msgs. */ diff --git a/configs/sip.conf.sample b/configs/sip.conf.sample index f64dc04a9..d54610686 100644 --- a/configs/sip.conf.sample +++ b/configs/sip.conf.sample @@ -476,6 +476,11 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls ; user options for whatever reason. The behavior is similar to ; how SIP URI's were typically handled in 1.6.2, hence the name. +;send_diversion=no ; Default "yes" ; Asterisk normally sends Diversion headers with certain SIP + ; invites to relay data about forwarded calls. If this option + ; is disabled, Asterisk won't send Diversion headers unless + ; they are added manually. + ; The shrinkcallerid function removes '(', ' ', ')', non-trailing '.', and '-' not ; in square brackets. For example, the caller id value 555.5555 becomes 5555555 ; when this option is enabled. Disabling this option results in no modification |