mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-16 16:58:35 +00:00
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_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 {
|
||||||
|
@ -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);
|
||||||
|
@ -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";
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user