From 7948364c8f3b6e24f88e032cc84ca3a73d46f209 Mon Sep 17 00:00:00 2001 From: file Date: Mon, 16 Oct 2006 19:43:33 +0000 Subject: [PATCH] Merged revisions 45262 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ................ r45262 | file | 2006-10-16 15:37:34 -0400 (Mon, 16 Oct 2006) | 10 lines Merged revisions 45260 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.2 ........ r45260 | file | 2006-10-16 15:28:18 -0400 (Mon, 16 Oct 2006) | 2 lines Add 'ignoreoodreplies' option which will not create a pvt structure on a SIP response but instead basically drop it. ........ ................ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@45263 f38db490-d61c-443f-a65b-d21fe96a405b --- channels/chan_sip.c | 14 ++++++++++++++ configs/sip.conf.sample | 2 ++ 2 files changed, 16 insertions(+) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 0b10358f1..223f2fe78 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -536,6 +536,8 @@ static enum transfermodes global_allowtransfer; /*!< SIP Refer restriction schem static int global_capability = AST_FORMAT_ULAW | AST_FORMAT_ALAW | AST_FORMAT_GSM | AST_FORMAT_H263; static int noncodeccapability = AST_RTP_DTMF; +static int global_ignoreoodreplies = 1; + /* Object counters */ static int suserobjs = 0; /*!< Static users */ static int ruserobjs = 0; /*!< Realtime users */ @@ -4257,9 +4259,14 @@ static struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *si } } ast_mutex_unlock(&iflock); + + if (req->method == SIP_RESPONSE && global_ignoreoodreplies) + return NULL; + /* Allocate new call */ if ((p = sip_alloc(callid, sin, 1, intended_method))) ast_mutex_lock(&p->lock); + return p; } @@ -9985,6 +9992,7 @@ static int sip_show_settings(int fd, int argc, char *argv[]) ast_cli(fd, " Allow subscriptions: %s\n", ast_test_flag(&global_flags[1], SIP_PAGE2_ALLOWSUBSCRIBE) ? "Yes" : "No"); ast_cli(fd, " Allow overlap dialing: %s\n", ast_test_flag(&global_flags[1], SIP_PAGE2_ALLOWOVERLAP) ? "Yes" : "No"); ast_cli(fd, " Promsic. redir: %s\n", ast_test_flag(&global_flags[0], SIP_PROMISCREDIR) ? "Yes" : "No"); + ast_cli(fd, " Drop misc replies: %s\n", global_ignoreoodreplies ? "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"); ast_cli(fd, " URI user is phone no: %s\n", ast_test_flag(&global_flags[0], SIP_USEREQPHONE) ? "Yes" : "No"); @@ -14968,6 +14976,11 @@ static int handle_common_options(struct ast_flags *flags, struct ast_flags *mask } else if (!strcasecmp(v->name, "rfc2833compensate")) { ast_set_flag(&mask[1], SIP_PAGE2_RFC2833_COMPENSATE); ast_set2_flag(&flags[1], ast_true(v->value), SIP_PAGE2_RFC2833_COMPENSATE); + } else if (!strcasecmp(v->name, "ignoreoodreplies")) { + if (ast_true(v->value)) + global_ignoreoodreplies = 1; + else + global_ignoreoodreplies = 0; } return res; @@ -15657,6 +15670,7 @@ static int reload_config(enum channelreloadreason reason) ast_set_flag(&global_flags[1], SIP_PAGE2_ALLOWSUBSCRIBE); /* Default for peers, users: TRUE */ ast_set_flag(&global_flags[1], SIP_PAGE2_ALLOWOVERLAP); /* Default for peers, users: TRUE */ ast_set_flag(&global_flags[1], SIP_PAGE2_RTUPDATE); + global_ignoreoodreplies = 1; /* Initialize some reasonable defaults at SIP reload (used both for channel and as default for peers and users */ ast_copy_string(default_context, DEFAULT_CONTEXT, sizeof(default_context)); diff --git a/configs/sip.conf.sample b/configs/sip.conf.sample index efa78848c..4000ed5ab 100644 --- a/configs/sip.conf.sample +++ b/configs/sip.conf.sample @@ -132,6 +132,8 @@ srvlookup=yes ; Enable DNS SRV lookups on outbound calls ; contrary to the RFC3551 specification, the peer _should_ ; be negotiating AAL2-G726-32 instead :-( +;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