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_UDP,
SOFIA_TRANSPORT_TCP, SOFIA_TRANSPORT_TCP,
SOFIA_TRANSPORT_TCP_TLS, SOFIA_TRANSPORT_TCP_TLS,
SOFIA_TRANSPORT_SCTP SOFIA_TRANSPORT_SCTP,
SOFIA_TRANSPORT_WS,
SOFIA_TRANSPORT_WSS
} sofia_transport_t; } sofia_transport_t;
typedef enum { 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); 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 (sofia_test_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION)) {
if (sip && sip->sip_via) { if (sip && sip->sip_via) {
const char *port = sip->sip_via->v_port; 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] = ""; char tmp[35] = "";
const char *ipv6 = strchr(tech_pvt->mparams.remote_ip, ':'); 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, switch_core_session_sprintf(session,
"sip:%s@%s%s%s:%d;transport=%s", "sip:%s%s%s:%d;transport=%s",
sip->sip_contact->m_url->url_user, ipv6 ? "[" : "", tech_pvt->mparams.remote_ip, ipv6 ? "]" : "",
ipv6 ? "[" : "", tech_pvt->mparams.remote_ip, ipv6 ? "]" : "", tech_pvt->mparams.remote_port, sofia_glue_transport2str(transport)); tech_pvt->mparams.remote_port, sofia_glue_transport2str(transport));
switch_channel_set_variable(channel, "sip_received_ip", tech_pvt->mparams.remote_ip); switch_channel_set_variable(channel, "sip_received_ip", tech_pvt->mparams.remote_ip);
snprintf(tmp, sizeof(tmp), "%d", tech_pvt->mparams.remote_port); 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; return SOFIA_TRANSPORT_TCP_TLS;
} else if (!strncasecmp(ptr, "sctp", 4)) { } else if (!strncasecmp(ptr, "sctp", 4)) {
return SOFIA_TRANSPORT_SCTP; 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: case SOFIA_TRANSPORT_SCTP:
return "sctp"; return "sctp";
case SOFIA_TRANSPORT_WS:
return "ws";
case SOFIA_TRANSPORT_WSS:
return "wss";
default: default:
return "udp"; return "udp";
} }