]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Added the 'storesipcause' option to sip.conf to allow the user to disable the
authorMatthew Nicholson <mnicholson@digium.com>
Tue, 16 Aug 2011 14:20:43 +0000 (14:20 +0000)
committerMatthew Nicholson <mnicholson@digium.com>
Tue, 16 Aug 2011 14:20:43 +0000 (14:20 +0000)
setting of HASH(SIP_CAUSE,<chan name>) on the channel.

Having chan_sip set HASH(SIP_CAUSE,<chan name>) on the channel carries a
significant performance penalty because of the usage of the MASTER_CHANNEL()
dialplan function.

AST-580

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@332021 65c4cc65-6c06-0410-ace0-fbb531ad65f3

CHANGES
channels/chan_sip.c
configs/sip.conf.sample

diff --git a/CHANGES b/CHANGES
index 67630f6a19c47c378965252102fa0a631f76f182..b93d65cda893b51ee28807f4c725a3b052911d34 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -43,7 +43,9 @@ SIP Changes
    and enables symmetric RTP support.
  * Slave SIP channels now set HASH(SIP_CAUSE,<slave-channel-name>) on each
    response.  This permits the master channel to know how each channel dialled
-   in a multi-channel setup resolved in an individual way.
+   in a multi-channel setup resolved in an individual way. This carries a
+   performance penalty and can be disabled in sip.conf using the
+   'storesipcause' option.
  * Added 'externtcpport' and 'externtlsport' options to allow custom port
    configuration for the externip and externhost options when tcp or tls is used.
  * Added support for message body (stored in content variable) to SIP NOTIFY message
index 6398f690b06a0ce95bf9933e81f8b2a7797d18a7..8f43c90dab9dd44bcabc2dd8a986ade28f44028e 100644 (file)
@@ -745,6 +745,8 @@ static enum st_refresher global_st_refresher; /*!< Session-Timer refresher
 static int global_min_se;                     /*!< Lowest threshold for session refresh interval  */
 static int global_max_se;                     /*!< Highest threshold for session refresh interval */
 
+static int global_store_sip_cause;    /*!< Whether the MASTER_CHANNEL(HASH(SIP_CAUSE,[chan_name])) var should be set */
+
 static int global_dynamic_exclude_static = 0; /*!< Exclude static peers from contact registrations */
 /*@}*/
 
@@ -17495,6 +17497,7 @@ static char *sip_show_settings(struct ast_cli_entry *e, int cmd, struct ast_cli_
                ast_cli(a->fd, "  SIP realtime:           Enabled\n" );
        ast_cli(a->fd, "  Qualify Freq :          %d ms\n", global_qualifyfreq);
        ast_cli(a->fd, "  Q.850 Reason header:    %s\n", AST_CLI_YESNO(ast_test_flag(&global_flags[1], SIP_PAGE2_Q850_REASON)));
+       ast_cli(a->fd, "  Store SIP_CAUSE:        %s\n", AST_CLI_YESNO(global_store_sip_cause));
        ast_cli(a->fd, "\nNetwork QoS Settings:\n");
        ast_cli(a->fd, "---------------------------\n");
        ast_cli(a->fd, "  IP ToS SIP:             %s\n", ast_tos2str(global_tos_sip));
@@ -24422,7 +24425,7 @@ static int handle_incoming(struct sip_pvt *p, struct sip_request *req, struct as
 
                        handle_response(p, respid, e + len, req, seqno);
 
-                       if (p->owner) {
+                       if (global_store_sip_cause && p->owner) {
                                struct ast_channel *owner = p->owner;
 
                                snprintf(causevar, sizeof(causevar), "MASTER_CHANNEL(HASH(SIP_CAUSE,%s))", owner->name);
@@ -27402,6 +27405,7 @@ static int reload_config(enum channelreloadreason reason)
        global_shrinkcallerid = 1;
        authlimit = DEFAULT_AUTHLIMIT;
        authtimeout = DEFAULT_AUTHTIMEOUT;
+       global_store_sip_cause = TRUE;
 
        sip_cfg.matchexternaddrlocally = DEFAULT_MATCHEXTERNADDRLOCALLY;
 
@@ -27871,6 +27875,8 @@ static int reload_config(enum channelreloadreason reason)
                        } else {
                                global_st_refresher = i;
                        }
+               } else if (!strcasecmp(v->name, "storesipcause")) {
+                       global_store_sip_cause = ast_true(v->value);
                } else if (!strcasecmp(v->name, "qualifygap")) {
                        if (sscanf(v->value, "%30d", &global_qualify_gap) != 1) {
                                ast_log(LOG_WARNING, "Invalid qualifygap '%s' at line %d of %s\n", v->value, v->lineno, config);
index d2712871d70f762d1f6b6392f4c8e3946d710392..2ad86474799b5cdaea6c8bb79fe1ea46b65ca32a 100644 (file)
@@ -1005,6 +1005,17 @@ srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
                               ; but occasionally has spikes.
 
 ; jblog = no                  ; Enables jitterbuffer frame logging. Defaults to "no".
+
+;----------------------------- SIP_CAUSE reporting ---------------------------------
+; storesipcause = yes         ; This option causes chan_sip to set the
+                             ; HASH(SIP_CAUSE,<channel name>) channel variable
+                             ; to the value of the last sip response.
+                             ; WARNING: enabling this option carries a
+                             ; significant performance burden. It should only
+                             ; be used in low call volume situations. For
+                             ; historical reasons, this option defaults to
+                             ; "yes".
+
 ;-----------------------------------------------------------------------------------
 
 [authentication]