aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--channels/chan_sip.c14
-rw-r--r--configs/sip.conf.sample2
2 files changed, 15 insertions, 1 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 4e6b105b4..66f70fa0e 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -377,6 +377,8 @@ static int global_rtpkeepalive = 0;
static int global_reg_timeout = DEFAULT_REGISTRATION_TIMEOUT;
static int global_regattempts_max = 0;
+static int global_ignoreoodresponses = 1;
+
/* Object counters */
static int suserobjs = 0;
static int ruserobjs = 0;
@@ -3276,6 +3278,11 @@ static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *si
p = p->next;
}
ast_mutex_unlock(&iflock);
+
+ /* If this is a response and we have ignoring of out of dialog responses turned on, then drop it */
+ if (req->method == SIP_RESPONSE && global_ignoreoodresponses)
+ return NULL;
+
p = sip_alloc(callid, sin, 1, intended_method);
if (p)
ast_mutex_lock(&p->lock);
@@ -8391,6 +8398,7 @@ static int sip_show_settings(int fd, int argc, char *argv[])
ast_cli(fd, " Videosupport: %s\n", videosupport ? "Yes" : "No");
ast_cli(fd, " AutoCreatePeer: %s\n", autocreatepeer ? "Yes" : "No");
ast_cli(fd, " Allow unknown access: %s\n", global_allowguest ? "Yes" : "No");
+ ast_cli(fd, " Drop misc responses: %s\n", global_ignoreoodresponses ? "Yes" : "No");
ast_cli(fd, " Promsic. redir: %s\n", ast_test_flag(&global_flags, SIP_PROMISCREDIR) ? "Yes" : "No");
ast_cli(fd, " SIP domain support: %s\n", AST_LIST_EMPTY(&domain_list) ? "No" : "Yes");
ast_cli(fd, " Call to non-local dom.: %s\n", allow_external_domains ? "Yes" : "No");
@@ -12057,6 +12065,11 @@ static int handle_common_options(struct ast_flags *flags, struct ast_flags *mask
ast_set_flag(mask, SIP_PROMISCREDIR);
ast_set2_flag(flags, ast_true(v->value), SIP_PROMISCREDIR);
res = 1;
+ } else if (!strcasecmp(v->name, "ignoreoodresponses")) {
+ if (ast_true(v->value))
+ global_ignoreoodresponses = 1;
+ else
+ global_ignoreoodresponses = 0;
}
return res;
@@ -12709,6 +12722,7 @@ static int reload_config(void)
tos = 0;
expiry = DEFAULT_EXPIRY;
global_allowguest = 1;
+ global_ignoreoodresponses = 1;
/* Read the [general] config section of sip.conf (or from realtime config) */
v = ast_variable_browse(cfg, "general");
diff --git a/configs/sip.conf.sample b/configs/sip.conf.sample
index 1b16543ef..c6e8c1355 100644
--- a/configs/sip.conf.sample
+++ b/configs/sip.conf.sample
@@ -111,7 +111,7 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls
; for any reason, always reject with '401 Unauthorized'
; instead of letting the requester know whether there was
; a matching user or peer for their request
-
+;ignoreoodresponses = no ; If no then out of dialog responses will not be ignored
;
; If regcontext is specified, Asterisk will dynamically create and destroy a
; NoOp priority 1 extension for a given peer who registers or unregisters with