From e64fa8614d359041723179f05351024a49117773 Mon Sep 17 00:00:00 2001 From: Joshua Colp Date: Mon, 16 Oct 2006 19:28:18 +0000 Subject: [PATCH] Add 'ignoreoodreplies' option which will not create a pvt structure on a SIP response but instead basically drop it. git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.2@45260 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 14 ++++++++++++++ configs/sip.conf.sample | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 722a94ec25..d7983cca4f 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -373,6 +373,8 @@ static int global_rtpkeepalive = 0; static int global_reg_timeout = DEFAULT_REGISTRATION_TIMEOUT; static int global_regattempts_max = 0; +static int global_ignoreoodreplies = 1; + /* Object counters */ static int suserobjs = 0; static int ruserobjs = 0; @@ -3238,6 +3240,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 replies turned, then drop it */ + if (req->method == SIP_RESPONSE && global_ignoreoodreplies) + return NULL; + p = sip_alloc(callid, sin, 1, intended_method); if (p) ast_mutex_lock(&p->lock); @@ -8304,6 +8311,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 replies: %s\n", global_ignoreoodreplies ? "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"); @@ -11947,6 +11955,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, "ignoreoodreplies")) { + if (ast_true(v->value)) + global_ignoreoodreplies = 1; + else + global_ignoreoodreplies = 0; } return res; @@ -12599,6 +12612,7 @@ static int reload_config(void) tos = 0; expiry = DEFAULT_EXPIRY; global_allowguest = 1; + global_ignoreoodreplies = 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 1b16543efe..d51a765d0e 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 - +;ignoreoodreplies = no ; If no then out of dialog replies 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