mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-07-01 13:22:40 +00:00
FS-11583 [mod_sofia] fix crash when missing address in register event
This commit is contained in:
parent
572ce975b1
commit
604690b5c8
@ -510,6 +510,9 @@ int sofia_glue_transport_has_tls(const sofia_transport_t tp)
|
|||||||
void sofia_glue_get_addr(msg_t *msg, char *buf, size_t buflen, int *port)
|
void sofia_glue_get_addr(msg_t *msg, char *buf, size_t buflen, int *port)
|
||||||
{
|
{
|
||||||
su_addrinfo_t *addrinfo = msg_addrinfo(msg);
|
su_addrinfo_t *addrinfo = msg_addrinfo(msg);
|
||||||
|
if (!addrinfo) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (buf) {
|
if (buf) {
|
||||||
get_addr(buf, buflen, addrinfo->ai_addr, (socklen_t)addrinfo->ai_addrlen);
|
get_addr(buf, buflen, addrinfo->ai_addr, (socklen_t)addrinfo->ai_addrlen);
|
||||||
|
@ -151,8 +151,10 @@ void sofia_reg_fire_custom_gateway_state_event(sofia_gateway_t *gateway, int sta
|
|||||||
switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Gateway", gateway->name);
|
switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Gateway", gateway->name);
|
||||||
switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "State", sofia_state_string(gateway->state));
|
switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "State", sofia_state_string(gateway->state));
|
||||||
switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Ping-Status", sofia_gateway_status_name(gateway->status));
|
switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Ping-Status", sofia_gateway_status_name(gateway->status));
|
||||||
switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Register-Network-IP", gateway->register_network_ip);
|
if (!zstr_buf(gateway->register_network_ip)) {
|
||||||
switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "Register-Network-Port", "%d", gateway->register_network_port);
|
switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Register-Network-IP", gateway->register_network_ip);
|
||||||
|
switch_event_add_header(s_event, SWITCH_STACK_BOTTOM, "Register-Network-Port", "%d", gateway->register_network_port);
|
||||||
|
}
|
||||||
|
|
||||||
if (!zstr(phrase)) {
|
if (!zstr(phrase)) {
|
||||||
switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Phrase", phrase);
|
switch_event_add_header_string(s_event, SWITCH_STACK_BOTTOM, "Phrase", phrase);
|
||||||
@ -2406,13 +2408,17 @@ void sofia_reg_handle_sip_r_register(int status,
|
|||||||
if (sofia_private && gateway) {
|
if (sofia_private && gateway) {
|
||||||
reg_state_t ostate = gateway->state;
|
reg_state_t ostate = gateway->state;
|
||||||
char oregister_network_ip[80] = { 0 };
|
char oregister_network_ip[80] = { 0 };
|
||||||
char network_ip[80];
|
char network_ip[80] = { 0 };
|
||||||
|
|
||||||
if (!zstr_buf(gateway->register_network_ip)) {
|
if (de && de->data && de->data->e_msg) {
|
||||||
strncpy(oregister_network_ip, gateway->register_network_ip, sizeof(oregister_network_ip) - 1);
|
if (!zstr_buf(gateway->register_network_ip)) {
|
||||||
|
strncpy(oregister_network_ip, gateway->register_network_ip, sizeof(oregister_network_ip) - 1);
|
||||||
|
}
|
||||||
|
sofia_glue_get_addr(de->data->e_msg, network_ip, sizeof(network_ip), &gateway->register_network_port);
|
||||||
|
if (!zstr_buf(network_ip)) {
|
||||||
|
snprintf(gateway->register_network_ip, sizeof(gateway->register_network_ip), (msg_addrinfo(de->data->e_msg))->ai_addr->sa_family == AF_INET6 ? "[%s]" : "%s", network_ip);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
sofia_glue_get_addr(de->data->e_msg, network_ip, sizeof(network_ip), &gateway->register_network_port);
|
|
||||||
snprintf(gateway->register_network_ip, sizeof(gateway->register_network_ip), (msg_addrinfo(de->data->e_msg))->ai_addr->sa_family == AF_INET6 ? "[%s]" : "%s", network_ip);
|
|
||||||
|
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case 200:
|
case 200:
|
||||||
@ -2470,8 +2476,8 @@ void sofia_reg_handle_sip_r_register(int status,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (ostate != gateway->state ||
|
if (ostate != gateway->state ||
|
||||||
zstr_buf(oregister_network_ip) || strcmp(oregister_network_ip, gateway->register_network_ip)) {
|
(!zstr_buf(gateway->register_network_ip) &&
|
||||||
|
(zstr_buf(oregister_network_ip) || strcmp(oregister_network_ip, gateway->register_network_ip)))) {
|
||||||
sofia_reg_fire_custom_gateway_state_event(gateway, status, phrase);
|
sofia_reg_fire_custom_gateway_state_event(gateway, status, phrase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user