Set SIPDOMAIN on 302 redirects.
authorOlle Johansson <oej@edvina.net>
Wed, 8 Mar 2006 08:36:40 +0000 (08:36 +0000)
committerOlle Johansson <oej@edvina.net>
Wed, 8 Mar 2006 08:36:40 +0000 (08:36 +0000)
This way you can catch 302 redirects in the dial plan and see if
the redirect is to a local extension or a remote URI.

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

channels/chan_sip.c

index 2c76212..57d7c7d 100644 (file)
@@ -9502,6 +9502,8 @@ static void parse_moved_contact(struct sip_pvt *p, struct sip_request *req)
 {
        char tmp[256];
        char *s, *e;
+       char *domain;
+
        ast_copy_string(tmp, get_header(req, "Contact"), sizeof(tmp));
        s = get_in_brackets(tmp);
        e = strchr(s, ';');
@@ -9518,16 +9520,25 @@ static void parse_moved_contact(struct sip_pvt *p, struct sip_request *req)
                        ast_string_field_build(p->owner, call_forward, "SIP/%s", s);
        } else {
                e = strchr(tmp, '@');
-               if (e)
+               if (e) {
                        *e = '\0';
+                       e++;
+                       domain = e;
+               } else {
+                       /* No username part */
+                       domain = tmp;
+               }
                e = strchr(tmp, '/');
                if (e)
                        *e = '\0';
                if (!strncasecmp(s, "sip:", 4))
                        s += 4;
-               ast_log(LOG_DEBUG, "Found 302 Redirect to extension '%s'\n", s);
-               if (p->owner)
+               if (option_debug > 1)
+                       ast_log(LOG_DEBUG, "Received 302 Redirect to extension '%s' (domain %s)\n", s, domain);
+               if (p->owner) {
+                       pbx_builtin_setvar_helper(p->owner, "SIPDOMAIN", domain);
                        ast_string_field_set(p->owner, call_forward, s);
+               }
        }
 }