FS-5118 take 2
This commit is contained in:
parent
a3786d528f
commit
fc1316601b
|
@ -4687,10 +4687,7 @@ static switch_call_cause_t sofia_outgoing_channel(switch_core_session_t *session
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ((params = strchr(dest, '+'))) {
|
if ((params = strchr(dest, ';'))) {
|
||||||
*params = ';';
|
|
||||||
params = NULL;
|
|
||||||
} else if ((params = strchr(dest, ';'))) {
|
|
||||||
char *tp_param;
|
char *tp_param;
|
||||||
|
|
||||||
*params++ = '\0';
|
*params++ = '\0';
|
||||||
|
|
|
@ -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);
|
void sofia_glue_sql_close(sofia_profile_t *profile, time_t prune);
|
||||||
int sofia_glue_init_sql(sofia_profile_t *profile);
|
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,
|
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,
|
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);
|
void *pdata);
|
||||||
char *sofia_glue_execute_sql2str(sofia_profile_t *profile, switch_mutex_t *mutex, char *sql, char *resbuf, size_t len);
|
char *sofia_glue_execute_sql2str(sofia_profile_t *profile, switch_mutex_t *mutex, char *sql, char *resbuf, size_t len);
|
||||||
|
|
|
@ -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);
|
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, '@'))) {
|
if ((at = strchr(tmp, '@'))) {
|
||||||
url = switch_core_session_sprintf(session, "sip:%s%s", user, at);
|
url = switch_core_session_sprintf(session, "sip:%s%s", user, at);
|
||||||
|
|
|
@ -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,
|
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 *stripped = switch_core_session_strdup(session, uri);
|
||||||
char *new_uri = NULL;
|
char *new_uri = NULL;
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
|
|
||||||
stripped = sofia_glue_get_url_from_contact(stripped, 0);
|
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 */
|
/* 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;
|
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 *screen = "no";
|
||||||
const char *invite_params = switch_channel_get_variable(tech_pvt->channel, "sip_invite_params");
|
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_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_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_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");
|
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 *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_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 *invite_domain = switch_channel_get_variable(tech_pvt->channel, "sip_invite_domain");
|
||||||
|
|
||||||
const char *use_name, *use_number;
|
const char *use_name, *use_number;
|
||||||
|
|
||||||
if (zstr(tech_pvt->dest)) {
|
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);
|
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);
|
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);
|
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);
|
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);
|
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);
|
dst = sofia_glue_get_destination(tech_pvt->dest);
|
||||||
|
|
||||||
if (dst->route_uri) {
|
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) {
|
if (dst->route) {
|
||||||
|
|
Loading…
Reference in New Issue