if (!ast_file_is_readable(var->value)) {
ast_log(LOG_ERROR, "Transport: %s: %s %s is either missing or not readable\n",
ast_sorcery_object_get_id(obj), var->name, var->value);
+ remove_temporary_state();
return -1;
}
if (stat(var->value, &state->cert_file_stat)) {
ast_log(LOG_ERROR, "Failed to stat certificate file '%s' for transport '%s' due to '%s'\n",
var->value, ast_sorcery_object_get_id(obj), strerror(errno));
+ remove_temporary_state();
return -1;
}
ast_sorcery_object_set_has_dynamic_contents(transport);
if (stat(var->value, &state->privkey_file_stat)) {
ast_log(LOG_ERROR, "Failed to stat private key file '%s' for transport '%s' due to '%s'\n",
var->value, ast_sorcery_object_get_id(obj), strerror(errno));
+ remove_temporary_state();
return -1;
}
ast_sorcery_object_set_has_dynamic_contents(transport);
} else if (!strcasecmp(var->value, "wss")) {
transport->type = AST_TRANSPORT_WSS;
} else {
+ remove_temporary_state();
return -1;
}
transport->flow = 0;
}
rc = pj_sockaddr_parse(pj_AF_UNSPEC(), 0, pj_cstr(&buf, var->value), &state->host);
-
+ if (rc != PJ_SUCCESS) {
+ remove_temporary_state();
+ }
return rc != PJ_SUCCESS ? -1 : 0;
}
} else if (!strcasecmp(var->name, "allow_wildcard_certs")) {
state->allow_wildcard_certs = ast_true(var->value);
} else {
+ remove_temporary_state();
return -1;
}
} else if (!strcasecmp(var->value, "sslv23")) {
state->tls.method = PJSIP_SSLV23_METHOD;
} else {
+ remove_temporary_state();
return -1;
}
}
res |= transport_cipher_add(state, name);
}
+
+ if (res) {
+ remove_temporary_state();
+ }
return res ? -1 : 0;
}
#endif
/* We use only the ast_apply_ha() which defaults to ALLOW
* ("permit"), so we add DENY rules. */
if (!(state->localnet = ast_append_ha("deny", var->value, state->localnet, &error))) {
+ remove_temporary_state();
return -1;
}
ast_log(LOG_ERROR, "Error configuring transport '%s' - Could not "
"interpret 'tos' value '%s'\n",
ast_sorcery_object_get_id(transport), var->value);
+ remove_temporary_state();
return -1;
}
struct ast_sockaddr addr = { { 0, } };
pjsip_sip_uri *uri = NULL;
RAII_VAR(struct ao2_container *, hooks, NULL, ao2_cleanup);
+ const char *transport_type_name = "unknown";
if (ast_sip_set_request_transport_details(&details, tdata, 0)) {
+ ast_debug(4, "Unable to process message for transport type '%s'\n", transport_type_name);
return PJ_SUCCESS;
}
+ if (details.transport) {
+ transport_type_name = details.transport->type_name;
+ } else if (details.factory) {
+ transport_type_name = details.factory->type_name;
+ }
+
+ ast_debug(4, "Processing outgoing message for transport type '%s'\n", transport_type_name);
+
uri = ast_sip_get_contact_sip_uri(tdata);
via = pjsip_msg_find_hdr(tdata->msg, PJSIP_H_VIA, NULL);
return PJ_SUCCESS;
}
+ ast_debug(4, "Found transport state '%s' for type '%s'\n", transport_state->id,
+ transport_type_name);
+
if (!(transport = ast_sorcery_retrieve_by_id(ast_sip_get_sorcery(), "transport", transport_state->id))) {
+ ast_debug(4, "Unable to find transport for transport state '%s' type '%s'\n", transport_state->id,
+ transport_type_name);
return PJ_SUCCESS;
}
+ ast_debug(4, "Found transport '%s' for transport state '%s' type '%s'\n",
+ ast_sorcery_object_get_id(transport),
+ transport_state->id, transport_type_name);
+
if (transport_state->localnet) {
ast_sockaddr_parse(&addr, tdata->tp_info.dst_name, PARSE_PORT_FORBID);
ast_sockaddr_set_port(&addr, tdata->tp_info.dst_port);
/* See if where we are sending this request is local or not, and if not that we can get a Contact URI to modify */
if (ast_sip_transport_is_local(transport_state, &addr)) {
- ast_debug(5, "Request is being sent to local address, skipping NAT manipulation\n");
+ ast_debug(4, "Request is being sent to local address, skipping NAT manipulation\n");
return PJ_SUCCESS;
}
}