]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
set chanvars on both directions in sip and introduce sip_to_tag and sip_from_tag...
authorAnthony Minessale <anthony.minessale@gmail.com>
Mon, 18 Jan 2010 20:55:19 +0000 (20:55 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Mon, 18 Jan 2010 20:55:19 +0000 (20:55 +0000)
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@16396 d0543943-73ff-0310-b7d9-9358b9ac24b2

src/mod/endpoints/mod_sofia/sofia.c

index 05f0c4d1c6fa0488e47bbe35ff8d01ad3899034d..de499b8f36c40f844aee96467d4d463864e23be3 100644 (file)
@@ -85,11 +85,13 @@ void sofia_handle_sip_r_notify(switch_core_session_t *session, int status,
 #endif
 }
 
+#define url_set_chanvars(session, url, varprefix) _url_set_chanvars(session, url, #varprefix "_user", #varprefix "_host", #varprefix "_port", #varprefix "_uri", #varprefix "_params")
 
-static void _set_chanvars(switch_core_session_t *session, url_t *url, const char *user_var,
+static const char *_url_set_chanvars(switch_core_session_t *session, url_t *url, const char *user_var,
                                                          const char *host_var, const char *port_var, const char *uri_var, const char *params_var)
 {
        const char *user = NULL, *host = NULL, *port = NULL;
+       char *uri = NULL;
        switch_channel_t *channel = switch_core_session_get_channel(session);
        char new_port[25] = "";
 
@@ -122,9 +124,18 @@ static void _set_chanvars(switch_core_session_t *session, url_t *url, const char
        }
 
        switch_channel_set_variable(channel, port_var, port);
-       
+       if (host) {
+               if (user) {
+                       uri = switch_core_session_sprintf(session, "%s@%s%s", user, host, new_port);
+               } else {
+                       uri = switch_core_session_sprintf(session, "%s%s", host, new_port);
+               }
+               switch_channel_set_variable(channel, uri_var, uri);
+               switch_channel_set_variable(channel, host_var, host);
+       }
+
+       return uri;
 }
-#define set_chanvars(session, url, varprefix) _set_chanvars(session, url, #varprefix "_user", #varprefix "_host", #varprefix "_port", #varprefix "_uri", #varprefix "_params")
 
 
 static void extract_vars(sip_t const *sip, switch_core_session_t *session)
@@ -132,11 +143,11 @@ static void extract_vars(sip_t const *sip, switch_core_session_t *session)
        switch_channel_t *channel = switch_core_session_get_channel(session);
 
        if (sip) {
-               if (sip->sip_from && sip->sip_from->a_url) set_chanvars(session, sip->sip_from->a_url, sip_from);
-               if (sip->sip_request && sip->sip_request->rq_url) set_chanvars(session, sip->sip_request->rq_url, sip_req);
-               if (sip->sip_to && sip->sip_to->a_url) set_chanvars(session, sip->sip_to->a_url, sip_to);
-               if (sip->sip_contact && sip->sip_contact->m_url) set_chanvars(session, sip->sip_contact->m_url, sip_contact);
-               if (sip->sip_referred_by && sip->sip_referred_by->b_url) set_chanvars(session, sip->sip_referred_by->b_url, sip_referred_by);
+               if (sip->sip_from && sip->sip_from->a_url) url_set_chanvars(session, sip->sip_from->a_url, sip_from);
+               if (sip->sip_request && sip->sip_request->rq_url) url_set_chanvars(session, sip->sip_request->rq_url, sip_req);
+               if (sip->sip_to && sip->sip_to->a_url) url_set_chanvars(session, sip->sip_to->a_url, sip_to);
+               if (sip->sip_contact && sip->sip_contact->m_url) url_set_chanvars(session, sip->sip_contact->m_url, sip_contact);
+               if (sip->sip_referred_by && sip->sip_referred_by->b_url) url_set_chanvars(session, sip->sip_referred_by->b_url, sip_referred_by);
                if (sip->sip_to && sip->sip_to->a_tag) {
                                        switch_channel_set_variable(channel, "sip_to_tag", sip->sip_to->a_tag);
                }
@@ -5343,59 +5354,6 @@ void sofia_handle_sip_i_info(nua_t *nua, sofia_profile_t *profile, nua_handle_t
 
 }
 
-#define url_set_chanvars(session, url, varprefix) _url_set_chanvars(session, url, #varprefix "_user", #varprefix "_host", #varprefix "_port", #varprefix "_uri", #varprefix "_params")
-
-static const char *_url_set_chanvars(switch_core_session_t *session, url_t *url, const char *user_var,
-                                                         const char *host_var, const char *port_var, const char *uri_var, const char *params_var)
-{
-       const char *user = NULL, *host = NULL, *port = NULL;
-       char *uri = NULL;
-       switch_channel_t *channel = switch_core_session_get_channel(session);
-       char new_port[25] = "";
-
-       if (url) {
-               user = url->url_user;
-               host = url->url_host;
-               port = url->url_port;
-               if (!zstr(url->url_params)) {
-                       switch_channel_set_variable(channel, params_var, url->url_params);
-               }
-       }
-
-       if (zstr(user)) {
-               user = "nobody";
-       }
-
-       if (zstr(host)) {
-               host = "nowhere";
-       }
-
-       check_decode(user, session);
-
-       if (user) {
-               switch_channel_set_variable(channel, user_var, user);
-       }
-
-
-       if (port) {
-               switch_snprintf(new_port, sizeof(new_port), ":%s", port);
-       }
-
-       switch_channel_set_variable(channel, port_var, port);
-       if (host) {
-               if (user) {
-                       uri = switch_core_session_sprintf(session, "%s@%s%s", user, host, new_port);
-               } else {
-                       uri = switch_core_session_sprintf(session, "%s%s", host, new_port);
-               }
-               switch_channel_set_variable(channel, uri_var, uri);
-               switch_channel_set_variable(channel, host_var, host);
-       }
-
-       return uri;
-}
-
-
 void sofia_handle_sip_i_reinvite(switch_core_session_t *session, 
                                                           nua_t *nua, sofia_profile_t *profile, nua_handle_t *nh, sofia_private_t *sofia_private, sip_t const *sip, tagi_t tags[])
 {