PLIV-13 #resolve
This commit is contained in:
parent
0c68bb6d89
commit
33d37ce0f5
|
@ -155,6 +155,7 @@ static struct {
|
||||||
int not_found_expires;
|
int not_found_expires;
|
||||||
int cache_ttl;
|
int cache_ttl;
|
||||||
int abs_cache_ttl;
|
int abs_cache_ttl;
|
||||||
|
client_profile_t *profile;
|
||||||
} globals;
|
} globals;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1624,10 +1625,15 @@ static switch_status_t httapi_sync(client_t *client)
|
||||||
if (client->profile->ssl_version) {
|
if (client->profile->ssl_version) {
|
||||||
if (!strcasecmp(client->profile->ssl_version, "SSLv3")) {
|
if (!strcasecmp(client->profile->ssl_version, "SSLv3")) {
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_SSLVERSION, CURL_SSLVERSION_SSLv3);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_SSLVERSION, CURL_SSLVERSION_SSLv3);
|
||||||
} else if (!strcasecmp(client->profile->ssl_version, "TLSv1")) {
|
} else if (!strcasecmp(client->profile->ssl_version, "TLSv1.1")) {
|
||||||
|
switch_curl_easy_setopt(curl_handle, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1);
|
||||||
|
} else if (!strcasecmp(client->profile->ssl_version, "TLSv1.2")) {
|
||||||
|
switch_curl_easy_setopt(curl_handle, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (client->profile->ssl_cacert_file) {
|
if (client->profile->ssl_cacert_file) {
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_CAINFO, client->profile->ssl_cacert_file);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_CAINFO, client->profile->ssl_cacert_file);
|
||||||
|
@ -2150,6 +2156,8 @@ static switch_status_t do_config(void)
|
||||||
|
|
||||||
profile->name = switch_core_strdup(globals.pool, bname);
|
profile->name = switch_core_strdup(globals.pool, bname);
|
||||||
|
|
||||||
|
if (!globals.profile) globals.profile = profile;
|
||||||
|
|
||||||
switch_core_hash_insert(globals.profile_hash, bname, profile);
|
switch_core_hash_insert(globals.profile_hash, bname, profile);
|
||||||
|
|
||||||
x++;
|
x++;
|
||||||
|
@ -2429,16 +2437,33 @@ static size_t save_file_callback(void *ptr, size_t size, size_t nmemb, void *dat
|
||||||
static switch_status_t fetch_cache_data(http_file_context_t *context, const char *url, switch_event_t **headers, const char *save_path)
|
static switch_status_t fetch_cache_data(http_file_context_t *context, const char *url, switch_event_t **headers, const char *save_path)
|
||||||
{
|
{
|
||||||
switch_CURL *curl_handle = NULL;
|
switch_CURL *curl_handle = NULL;
|
||||||
client_t client = { 0 };
|
client_t *client = NULL;
|
||||||
long code;
|
long code;
|
||||||
switch_status_t status = SWITCH_STATUS_FALSE;
|
switch_status_t status = SWITCH_STATUS_FALSE;
|
||||||
char *dup_creds = NULL, *dynamic_url = NULL, *use_url;
|
char *dup_creds = NULL, *dynamic_url = NULL, *use_url;
|
||||||
char *ua = NULL;
|
char *ua = NULL;
|
||||||
|
const char *profile_name = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
if (context->url_params) {
|
||||||
|
profile_name = switch_event_get_header(context->url_params, "profile_name");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zstr(profile_name)) {
|
||||||
|
if (globals.profile) profile_name = globals.profile->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zstr(profile_name)) {
|
||||||
|
profile_name = "default";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(client = client_create(NULL, profile_name, NULL))) {
|
||||||
|
return SWITCH_STATUS_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
client.fd = -1;
|
|
||||||
|
|
||||||
if (save_path) {
|
if (save_path) {
|
||||||
if ((client.fd = open(save_path, O_CREAT | O_RDWR | O_TRUNC, S_IRUSR | S_IWUSR)) < 0) {
|
if ((client->fd = open(save_path, O_CREAT | O_RDWR | O_TRUNC, S_IRUSR | S_IWUSR)) < 0) {
|
||||||
return SWITCH_STATUS_FALSE;
|
return SWITCH_STATUS_FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2478,31 +2503,80 @@ static switch_status_t fetch_cache_data(http_file_context_t *context, const char
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_NOSIGNAL, 1);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_NOSIGNAL, 1);
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1);
|
||||||
|
|
||||||
|
if (!strncasecmp(url, "https", 5)) {
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYPEER, 0);
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, 0);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, 0);
|
||||||
|
}
|
||||||
|
|
||||||
client.max_bytes = HTTAPI_MAX_FILE_BYTES;
|
client->max_bytes = HTTAPI_MAX_FILE_BYTES;
|
||||||
|
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1);
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 10);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 10);
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_URL, url);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_URL, url);
|
||||||
|
|
||||||
|
if (client->profile->timeout) {
|
||||||
|
switch_curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, client->profile->timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (client->profile->ssl_cert_file) {
|
||||||
|
switch_curl_easy_setopt(curl_handle, CURLOPT_SSLCERT, client->profile->ssl_cert_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (client->profile->ssl_key_file) {
|
||||||
|
switch_curl_easy_setopt(curl_handle, CURLOPT_SSLKEY, client->profile->ssl_key_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (client->profile->ssl_key_password) {
|
||||||
|
switch_curl_easy_setopt(curl_handle, CURLOPT_SSLKEYPASSWD, client->profile->ssl_key_password);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (client->profile->ssl_version) {
|
||||||
|
if (!strcasecmp(client->profile->ssl_version, "SSLv3")) {
|
||||||
|
switch_curl_easy_setopt(curl_handle, CURLOPT_SSLVERSION, CURL_SSLVERSION_SSLv3);
|
||||||
|
} else if (!strcasecmp(client->profile->ssl_version, "TLSv1.1")) {
|
||||||
|
switch_curl_easy_setopt(curl_handle, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1);
|
||||||
|
} else if (!strcasecmp(client->profile->ssl_version, "TLSv1.2")) {
|
||||||
|
switch_curl_easy_setopt(curl_handle, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
switch_curl_easy_setopt(curl_handle, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (client->profile->ssl_cacert_file) {
|
||||||
|
switch_curl_easy_setopt(curl_handle, CURLOPT_CAINFO, client->profile->ssl_cacert_file);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (client->profile->enable_ssl_verifyhost) {
|
||||||
|
switch_curl_easy_setopt(curl_handle, CURLOPT_SSL_VERIFYHOST, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (client->profile->cookie_file) {
|
||||||
|
switch_curl_easy_setopt(curl_handle, CURLOPT_COOKIEJAR, client->profile->cookie_file);
|
||||||
|
switch_curl_easy_setopt(curl_handle, CURLOPT_COOKIEFILE, client->profile->cookie_file);
|
||||||
|
} else {
|
||||||
|
switch_curl_easy_setopt(curl_handle, CURLOPT_COOKIE, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (client->profile->bind_local) {
|
||||||
|
curl_easy_setopt(curl_handle, CURLOPT_INTERFACE, client->profile->bind_local);
|
||||||
|
}
|
||||||
|
|
||||||
if (save_path) {
|
if (save_path) {
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, save_file_callback);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, save_file_callback);
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *) &client);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *) client);
|
||||||
} else {
|
} else {
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_HEADER, 1);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_HEADER, 1);
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_NOBODY, 1);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_NOBODY, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (headers) {
|
if (headers) {
|
||||||
switch_event_create(&client.headers, SWITCH_EVENT_CLONE);
|
switch_event_create(&client->headers, SWITCH_EVENT_CLONE);
|
||||||
if (save_path) {
|
if (save_path) {
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_HEADERFUNCTION, get_header_callback);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_HEADERFUNCTION, get_header_callback);
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_WRITEHEADER, (void *) &client);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_WRITEHEADER, (void *) client);
|
||||||
} else {
|
} else {
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, get_header_callback);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, get_header_callback);
|
||||||
switch_curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *) &client);
|
switch_curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *) client);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2516,19 +2590,20 @@ static switch_status_t fetch_cache_data(http_file_context_t *context, const char
|
||||||
switch_curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &code);
|
switch_curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &code);
|
||||||
switch_curl_easy_cleanup(curl_handle);
|
switch_curl_easy_cleanup(curl_handle);
|
||||||
|
|
||||||
if (client.fd > -1) {
|
if (client->fd > -1) {
|
||||||
close(client.fd);
|
close(client->fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (headers && client.headers) {
|
if (headers && client->headers) {
|
||||||
switch_event_add_header(client.headers, SWITCH_STACK_BOTTOM, "http-response-code", "%ld", code);
|
switch_event_add_header(client->headers, SWITCH_STACK_BOTTOM, "http-response-code", "%ld", code);
|
||||||
*headers = client.headers;
|
*headers = client->headers;
|
||||||
|
client->headers = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(code) {
|
switch(code) {
|
||||||
case 200:
|
case 200:
|
||||||
if (save_path) {
|
if (save_path) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "caching: url:%s to %s (%" SWITCH_SIZE_T_FMT " bytes)\n", url, save_path, client.bytes);
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "caching: url:%s to %s (%" SWITCH_SIZE_T_FMT " bytes)\n", url, save_path, client->bytes);
|
||||||
}
|
}
|
||||||
status = SWITCH_STATUS_SUCCESS;
|
status = SWITCH_STATUS_SUCCESS;
|
||||||
break;
|
break;
|
||||||
|
@ -2544,7 +2619,7 @@ static switch_status_t fetch_cache_data(http_file_context_t *context, const char
|
||||||
|
|
||||||
switch_safe_free(dynamic_url);
|
switch_safe_free(dynamic_url);
|
||||||
switch_safe_free(dup_creds);
|
switch_safe_free(dup_creds);
|
||||||
|
client_destroy(&client);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
@ -2704,6 +2779,7 @@ static switch_status_t locate_url_file(http_file_context_t *context, const char
|
||||||
|
|
||||||
if (switch_file_exists(context->cache_file, context->pool) != SWITCH_STATUS_SUCCESS && unreachable) {
|
if (switch_file_exists(context->cache_file, context->pool) != SWITCH_STATUS_SUCCESS && unreachable) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "File at url [%s] is unreachable!\n", url);
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "File at url [%s] is unreachable!\n", url);
|
||||||
|
status = SWITCH_STATUS_NOTFOUND;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue