fixup: Volte support
Fix crash when cleaning up transport. (re-register)
This commit is contained in:
parent
717b64fb17
commit
4dc9a6ffc2
|
@ -118,17 +118,20 @@ static const pj_str_t AST_PJ_STR_EMPTY = { "", 0 };
|
|||
*/
|
||||
struct ast_sip_transport_volte {
|
||||
/*! Current states for sec-agree */
|
||||
pj_sockaddr local_addr_c, remote_addr_s;
|
||||
pj_sockaddr remote_addr_c, local_addr_s;
|
||||
uint32_t local_spi_c, remote_spi_s;
|
||||
uint32_t remote_spi_c, local_spi_s;
|
||||
pj_bool_t local_sa_c_set, remote_sa_s_set;
|
||||
pj_bool_t remote_sa_c_set, local_sa_s_set;
|
||||
pj_bool_t local_sp_c_set, remote_sp_s_set;
|
||||
pj_bool_t remote_sp_c_set, local_sp_s_set;
|
||||
pj_sockaddr remote_addr_orig;
|
||||
pj_bool_t transport_set;
|
||||
char security_server[1024];
|
||||
pj_sockaddr local_addr_c, remote_addr_s;
|
||||
pj_sockaddr remote_addr_c, local_addr_s;
|
||||
uint32_t local_spi_c, remote_spi_s;
|
||||
uint32_t remote_spi_c, local_spi_s;
|
||||
pj_bool_t local_sa_c_set, remote_sa_s_set;
|
||||
pj_bool_t remote_sa_c_set, local_sa_s_set;
|
||||
pj_bool_t local_sp_c_set, remote_sp_s_set;
|
||||
pj_bool_t remote_sp_c_set, local_sp_s_set;
|
||||
pj_sockaddr remote_addr_orig;
|
||||
char security_server[1024];
|
||||
/*! Transport that was used (for reset) */
|
||||
struct pjsip_transport *transport;
|
||||
/* Assigned URI */
|
||||
char p_associated_uri[1024];
|
||||
};
|
||||
|
||||
/*!
|
||||
|
|
|
@ -235,6 +235,7 @@ static pj_status_t volte_set_xfrm(struct ast_sip_transport_state *transport_stat
|
|||
ast_log(LOG_ERROR, "Given 'ealg' not supported.\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
ast_assert(sizeof(auth_algo.buf) >= 160);
|
||||
memset(&auth_algo, 0, sizeof(auth_algo));
|
||||
strcpy(auth_algo.algo.alg_name, g_ipsec_alg[i].kernel_name);
|
||||
switch (i) {
|
||||
|
@ -507,20 +508,20 @@ pj_status_t volte_reset_transport(struct ast_sip_transport_state *transport_stat
|
|||
|
||||
/* Cleanup old transport. */
|
||||
old_port_c = pj_sockaddr_get_port(&transport_state->volte.local_addr_c);
|
||||
if (old_port_c > 0 && old_port_c < 65535 && transport_state->volte.transport_set) {
|
||||
if (old_port_c > 0 && old_port_c < 65535 && transport_state->volte.transport) {
|
||||
/* Create socket with default transport port. */
|
||||
status = transport_state->transport->create_new_sock(transport_state->transport, NULL);
|
||||
status = transport_state->volte.transport->create_new_sock(transport_state->volte.transport, NULL);
|
||||
if (status != PJ_SUCCESS) {
|
||||
ast_log(LOG_ERROR, "Failed to get connection addresses (errno=%d).\n", errno);
|
||||
return status;
|
||||
}
|
||||
status = transport_state->transport->connect_new_sock(transport_state->transport,
|
||||
status = transport_state->volte.transport->connect_new_sock(transport_state->volte.transport,
|
||||
&transport_state->volte.local_addr_c, &transport_state->volte.remote_addr_orig);
|
||||
if (status != PJ_SUCCESS) {
|
||||
ast_log(LOG_ERROR, "Failed to change connection addresses (errno=%d).\n", errno);
|
||||
return status;
|
||||
}
|
||||
transport_state->volte.transport_set = PJ_FALSE;
|
||||
transport_state->volte.transport = NULL;
|
||||
}
|
||||
|
||||
return PJ_SUCCESS;
|
||||
|
@ -611,7 +612,7 @@ pj_status_t volte_set_transport(struct ast_sip_transport_state *transport_state,
|
|||
ast_log(LOG_ERROR, "Failed to change connection addresses (errno=%d).\n", errno);
|
||||
return status;
|
||||
}
|
||||
transport_state->volte.transport_set = PJ_TRUE;
|
||||
transport_state->volte.transport = tdata->tp_info.transport;
|
||||
|
||||
return PJ_SUCCESS;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue