From a5b69b35839a3b2b6ee7ae29e35a1621428651f3 Mon Sep 17 00:00:00 2001 From: Joshua Colp Date: Fri, 19 Oct 2007 15:33:49 +0000 Subject: [PATCH] Fix two issues with domains and transfers. If a port was given in the hostname it was treated as part of the hostname. If domains were configured but external domains were not enabled all transfers would be considered remote. (closes issue #11027) Reported by: ramonpeek Patches: 11027-1.diff uploaded by ramonpeek (license 266) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@86471 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_sip.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index e823f6aefc..adf83ce64a 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -8875,13 +8875,18 @@ static int get_refer_info(struct sip_pvt *transferer, struct sip_request *outgoi } if ((ptr = strchr(refer_to, '@'))) { /* Separate domain */ - char *urioption; - + char *urioption = NULL, *domain; *ptr++ = '\0'; - if ((urioption = strchr(ptr, ';'))) + + if ((urioption = strchr(ptr, ';'))) /* Separate urioptions */ *urioption++ = '\0'; + + domain = ptr; + if ((ptr = strchr(domain, ':'))) /* Remove :port */ + *ptr = '\0'; + /* Save the domain for the dial plan */ - ast_copy_string(referdata->refer_to_domain, ptr, sizeof(referdata->refer_to_domain)); + ast_copy_string(referdata->refer_to_domain, domain, sizeof(referdata->refer_to_domain)); if (urioption) ast_copy_string(referdata->refer_to_urioption, urioption, sizeof(referdata->refer_to_urioption)); } @@ -14166,11 +14171,10 @@ static int handle_request_refer(struct sip_pvt *p, struct sip_request *req, int p->refer->localtransfer = 1; if (sipdebug && option_debug > 2) ast_log(LOG_DEBUG, "This SIP transfer is local : %s\n", p->refer->refer_to_domain); - } else if (AST_LIST_EMPTY(&domain_list)) { - /* This PBX don't bother with SIP domains, so all transfers are local */ + } else if (AST_LIST_EMPTY(&domain_list) || check_sip_domain(p->refer->refer_to_domain, NULL, 0)) { + /* This PBX doesn't bother with SIP domains or domain is local, so this transfer is local */ p->refer->localtransfer = 1; - } else - if (sipdebug && option_debug > 2) + } else if (sipdebug && option_debug > 2) ast_log(LOG_DEBUG, "This SIP transfer is to a remote SIP extension (remote domain %s)\n", p->refer->refer_to_domain); /* Is this a repeat of a current request? Ignore it */