]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-5118 take 2
authorAnthony Minessale <anthm@freeswitch.org>
Wed, 27 Feb 2013 15:04:51 +0000 (09:04 -0600)
committerAnthony Minessale <anthm@freeswitch.org>
Wed, 27 Feb 2013 15:04:55 +0000 (09:04 -0600)
src/mod/endpoints/mod_sofia/mod_sofia.c
src/mod/endpoints/mod_sofia/mod_sofia.h
src/mod/endpoints/mod_sofia/sofia.c
src/mod/endpoints/mod_sofia/sofia_glue.c

index 9fecaceacf28d1450e22f7f0f5a8d3e024823704..f0d0ab280ba67989831406e1484a6c2644006008 100644 (file)
@@ -4687,10 +4687,7 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
                 *
                 */
 
-               if ((params = strchr(dest, '+'))) {
-                       *params = ';';
-                       params = NULL;
-               } else if ((params = strchr(dest, ';'))) {
+               if ((params = strchr(dest, ';'))) {
                        char *tp_param;
 
                        *params++ = '\0';
index ee4776de51e1a828aff5e1708fed9fb4dfffc6cb..de32b2c7c3bfcb201e97f23faa138dcb97f3c666 100644 (file)
@@ -1046,7 +1046,7 @@ void sofia_presence_set_hash_key(char *hash_key, int32_t len, sip_t const *sip);
 void sofia_glue_sql_close(sofia_profile_t *profile, time_t prune);
 int sofia_glue_init_sql(sofia_profile_t *profile);
 char *sofia_overcome_sip_uri_weakness(switch_core_session_t *session, const char *uri, const sofia_transport_t transport, switch_bool_t uri_only,
-                                                                         const char *params);
+                                                                         const char *params, const char *invite_tel_params);
 switch_bool_t sofia_glue_execute_sql_callback(sofia_profile_t *profile, switch_mutex_t *mutex, char *sql, switch_core_db_callback_func_t callback,
                                                                                          void *pdata);
 char *sofia_glue_execute_sql2str(sofia_profile_t *profile, switch_mutex_t *mutex, char *sql, char *resbuf, size_t len);
index 69d6fd72692ec845f1bad1b31542b3ec18b9a73c..b8eaff50dd7aba13ecaddff9efdae6f42abbf045 100644 (file)
@@ -8060,7 +8060,7 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
                                switch_channel_hangup(tech_pvt->channel, SWITCH_CAUSE_DESTINATION_OUT_OF_ORDER);
                        }
 
-                       tmp = sofia_overcome_sip_uri_weakness(session, url, transport, SWITCH_TRUE, NULL);
+                       tmp = sofia_overcome_sip_uri_weakness(session, url, transport, SWITCH_TRUE, NULL, NULL);
 
                        if ((at = strchr(tmp, '@'))) {
                                url = switch_core_session_sprintf(session, "sip:%s%s", user, at);
index 15f6d529f2e42b37b8c00535f8009abab699bbf0..78ba3c2132e3f9037c23f864d1f515ee644c60e5 100644 (file)
@@ -1447,12 +1447,13 @@ void sofia_glue_get_addr(msg_t *msg, char *buf, size_t buflen, int *port)
 }
 
 char *sofia_overcome_sip_uri_weakness(switch_core_session_t *session, const char *uri, const sofia_transport_t transport, switch_bool_t uri_only,
-                                                                         const char *params)
+                                                                         const char *params, const char *invite_tel_params)
 {
        char *stripped = switch_core_session_strdup(session, uri);
        char *new_uri = NULL;
        char *p;
 
+
        stripped = sofia_glue_get_url_from_contact(stripped, 0);
 
        /* remove our params so we don't make any whiny moronic device piss it's pants and forget who it is for a half-hour */
@@ -1496,6 +1497,18 @@ char *sofia_overcome_sip_uri_weakness(switch_core_session_t *session, const char
                }
        }
 
+
+
+       if (!zstr(invite_tel_params)) {
+               char *lhs, *rhs = strchr(new_uri, '@');
+
+               if (!zstr(rhs)) {
+                       *rhs++ = '\0';
+                       lhs = new_uri;
+                       new_uri = switch_core_session_sprintf(session, "%s;%s@%s", lhs, invite_tel_params, rhs);
+               }
+       }
+       
        return new_uri;
 }
 
@@ -2191,6 +2204,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
                const char *screen = "no";
                const char *invite_params = switch_channel_get_variable(tech_pvt->channel, "sip_invite_params");
                const char *invite_to_params = switch_channel_get_variable(tech_pvt->channel, "sip_invite_to_params");
+               const char *invite_tel_params = switch_channel_get_variable(switch_core_session_get_channel(session), "sip_invite_tel_params");
                const char *invite_to_uri = switch_channel_get_variable(tech_pvt->channel, "sip_invite_to_uri");
                const char *invite_from_uri = switch_channel_get_variable(tech_pvt->channel, "sip_invite_from_uri");
                const char *invite_contact_params = switch_channel_get_variable(tech_pvt->channel, "sip_invite_contact_params");
@@ -2199,6 +2213,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
                const char *from_display = switch_channel_get_variable(tech_pvt->channel, "sip_from_display");
                const char *invite_req_uri = switch_channel_get_variable(tech_pvt->channel, "sip_invite_req_uri");
                const char *invite_domain = switch_channel_get_variable(tech_pvt->channel, "sip_invite_domain");
+               
                const char *use_name, *use_number;
 
                if (zstr(tech_pvt->dest)) {
@@ -2335,10 +2350,10 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
                        }
                }
 
-               url_str = sofia_overcome_sip_uri_weakness(session, url, tech_pvt->transport, SWITCH_TRUE, invite_params);
-               invite_contact = sofia_overcome_sip_uri_weakness(session, tech_pvt->invite_contact, tech_pvt->transport, SWITCH_FALSE, invite_contact_params);
-               from_str = sofia_overcome_sip_uri_weakness(session, invite_from_uri ? invite_from_uri : use_from_str, 0, SWITCH_TRUE, invite_from_params);
-               to_str = sofia_overcome_sip_uri_weakness(session, invite_to_uri ? invite_to_uri : tech_pvt->dest_to, 0, SWITCH_FALSE, invite_to_params);
+               url_str = sofia_overcome_sip_uri_weakness(session, url, tech_pvt->transport, SWITCH_TRUE, invite_params, invite_tel_params);
+               invite_contact = sofia_overcome_sip_uri_weakness(session, tech_pvt->invite_contact, tech_pvt->transport, SWITCH_FALSE, invite_contact_params, NULL);
+               from_str = sofia_overcome_sip_uri_weakness(session, invite_from_uri ? invite_from_uri : use_from_str, 0, SWITCH_TRUE, invite_from_params, NULL);
+               to_str = sofia_overcome_sip_uri_weakness(session, invite_to_uri ? invite_to_uri : tech_pvt->dest_to, 0, SWITCH_FALSE, invite_to_params, NULL);
 
                switch_channel_set_variable(channel, "sip_outgoing_contact_uri", invite_contact);
 
@@ -2603,7 +2618,7 @@ switch_status_t sofia_glue_do_invite(switch_core_session_t *session)
                dst = sofia_glue_get_destination(tech_pvt->dest);
 
                if (dst->route_uri) {
-                       route_uri = sofia_overcome_sip_uri_weakness(tech_pvt->session, dst->route_uri, tech_pvt->transport, SWITCH_TRUE, NULL);
+                       route_uri = sofia_overcome_sip_uri_weakness(tech_pvt->session, dst->route_uri, tech_pvt->transport, SWITCH_TRUE, NULL, NULL);
                }
 
                if (dst->route) {