handle route for ws and wss transport

This commit is contained in:
Anthony Minessale 2013-02-06 09:48:04 -06:00
parent 9b16fb319a
commit 5bcf68c92d
3 changed files with 28 additions and 7 deletions

View File

@ -391,7 +391,9 @@ typedef enum {
SOFIA_TRANSPORT_UDP,
SOFIA_TRANSPORT_TCP,
SOFIA_TRANSPORT_TCP_TLS,
SOFIA_TRANSPORT_SCTP
SOFIA_TRANSPORT_SCTP,
SOFIA_TRANSPORT_WS,
SOFIA_TRANSPORT_WSS
} sofia_transport_t;
typedef enum {

View File

@ -7671,6 +7671,10 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
sofia_glue_get_addr(de->data->e_msg, network_ip, sizeof(network_ip), &network_port);
if (sip && sip->sip_via && sip->sip_via->v_protocol && switch_stristr("sip/2.0/ws", sip->sip_via->v_protocol)) {
is_nat = "websockets";
}
if (sofia_test_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION)) {
if (sip && sip->sip_via) {
const char *port = sip->sip_via->v_port;
@ -7897,17 +7901,22 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
}
}
if (sip->sip_contact && sip->sip_contact->m_url) {
if (sip->sip_via || (sip->sip_contact && sip->sip_contact->m_url)) {
char tmp[35] = "";
const char *ipv6 = strchr(tech_pvt->mparams.remote_ip, ':');
transport = sofia_glue_url2transport(sip->sip_contact->m_url);
if (sip->sip_via) {
transport = sofia_glue_via2transport(sip->sip_via);
} else {
transport = sofia_glue_url2transport(sip->sip_contact->m_url);
}
tech_pvt->record_route=
tech_pvt->record_route =
switch_core_session_sprintf(session,
"sip:%s@%s%s%s:%d;transport=%s",
sip->sip_contact->m_url->url_user,
ipv6 ? "[" : "", tech_pvt->mparams.remote_ip, ipv6 ? "]" : "", tech_pvt->mparams.remote_port, sofia_glue_transport2str(transport));
"sip:%s%s%s:%d;transport=%s",
ipv6 ? "[" : "", tech_pvt->mparams.remote_ip, ipv6 ? "]" : "",
tech_pvt->mparams.remote_port, sofia_glue_transport2str(transport));
switch_channel_set_variable(channel, "sip_received_ip", tech_pvt->mparams.remote_ip);
snprintf(tmp, sizeof(tmp), "%d", tech_pvt->mparams.remote_port);

View File

@ -386,6 +386,10 @@ sofia_transport_t sofia_glue_via2transport(const sip_via_t * via)
return SOFIA_TRANSPORT_TCP_TLS;
} else if (!strncasecmp(ptr, "sctp", 4)) {
return SOFIA_TRANSPORT_SCTP;
} else if (!strncasecmp(ptr, "wss", 3)) {
return SOFIA_TRANSPORT_WSS;
} else if (!strncasecmp(ptr, "ws", 2)) {
return SOFIA_TRANSPORT_WS;
}
}
@ -404,6 +408,12 @@ const char *sofia_glue_transport2str(const sofia_transport_t tp)
case SOFIA_TRANSPORT_SCTP:
return "sctp";
case SOFIA_TRANSPORT_WS:
return "ws";
case SOFIA_TRANSPORT_WSS:
return "wss";
default:
return "udp";
}