/*! \brief Destructor for transport */ static void transport_destroy(void *obj) { struct ast_sip_transport *transport = obj; ast_string_field_free_memory(transport); ast_free_ha(transport->localnet); if (transport->external_address_refresher) { ast_dnsmgr_release(transport->external_address_refresher); } ao2_cleanup(transport->state); }
static int destroy_sip_transport_state(void *data) { struct ast_sip_transport_state *transport_state = data; ast_free(transport_state->id); ast_free_ha(transport_state->localnet); if (transport_state->external_address_refresher) { ast_dnsmgr_release(transport_state->external_address_refresher); } if (transport_state->transport) { pjsip_transport_shutdown(transport_state->transport); } return 0; }
/*! \brief Custom handler for localnet setting */ static int transport_localnet_handler(const struct aco_option *opt, struct ast_variable *var, void *obj) { struct ast_sip_transport *transport = obj; int error = 0; RAII_VAR(struct ast_sip_transport_state *, state, find_or_create_temporary_state(transport), ao2_cleanup); if (!state) { return -1; } if (ast_strlen_zero(var->value)) { ast_free_ha(state->localnet); state->localnet = NULL; return 0; } if (!(state->localnet = ast_append_ha("d", var->value, state->localnet, &error))) { return -1; } return error; }