handle route for ws and wss transport
This commit is contained in:
parent
9b16fb319a
commit
5bcf68c92d
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue