]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-3714 --resolve You are using the sip_from_host and sip_to_host which are calculate...
authorAnthony Minessale <anthm@freeswitch.org>
Tue, 22 Nov 2011 23:59:04 +0000 (17:59 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Tue, 22 Nov 2011 23:59:14 +0000 (17:59 -0600)
src/mod/endpoints/mod_sofia/mod_sofia.h
src/mod/endpoints/mod_sofia/sofia_glue.c

index b13d9ffd3553fb8a0b670d842a4f398379c0b5f7..4a74ce373519d7e3e35a3208c26b8dd9eb9d6dec 100644 (file)
@@ -1139,4 +1139,4 @@ void sofia_glue_parse_rtp_bugs(switch_rtp_bug_flag_t *flag_pole, const char *str
 char *sofia_glue_gen_contact_str(sofia_profile_t *profile, sip_t const *sip, sofia_dispatch_event_t *de, sofia_nat_parse_t *np);
 void sofia_glue_pause_jitterbuffer(switch_core_session_t *session, switch_bool_t on);
 void sofia_process_dispatch_event(sofia_dispatch_event_t **dep);
-
+char *sofia_glue_get_host(const char *str, switch_memory_pool_t *pool);
index 15eb3a197650834297ead8c6610ff49eaf35d3d6..1585fd89fd3ae1658ca0350a02d1c30e50e12fa2 100644 (file)
@@ -2240,6 +2240,9 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
                        }
                        switch_channel_set_variable(channel, "sip_req_uri", s);
                }
+               
+               switch_channel_set_variable(channel, "sip_to_host", sofia_glue_get_host(to_str, switch_core_session_get_pool(session)));
+               switch_channel_set_variable(channel, "sip_from_host", sofia_glue_get_host(from_str, switch_core_session_get_pool(session)));
 
                if (!(tech_pvt->nh = nua_handle(tech_pvt->profile->nua, NULL,
                                                                                NUTAG_URL(url_str),
@@ -6785,6 +6788,31 @@ char *sofia_glue_gen_contact_str(sofia_profile_t *profile, sip_t const *sip, sof
        return contact_str;
 }
 
+char *sofia_glue_get_host(const char *str, switch_memory_pool_t *pool)
+{
+       char *s, *p;
+
+       if ((p = strchr(str, '@'))) {
+               p++;
+       } else {
+               return NULL;
+       }
+
+       if (pool) {
+               s = switch_core_strdup(pool, p);
+       } else {
+               s = strdup(p);
+       }
+
+       for (p = s; p && *p; p++) {
+               if ((*p == ';') || (*p == '>')) {
+                       *p = '\0';
+                       break;
+               }
+       }
+
+       return s;
+}
 
 
 /* For Emacs: