#endif
#include <stdio.h>
+#include <string.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#include <curl/curl.h>
#include "background.h"
+#include "dir.h"
#include "file.h"
#include "globals.h"
#include "curl_download.h"
curl = handle ? handle : curl_easy_init ();
if ( !curl ) {
- return DOWNLOAD_ERROR;
+ return CURL_DOWNLOAD_ERROR;
}
if (vik_verbose)
curl_easy_setopt ( curl, CURLOPT_VERBOSE, 1 );
curl_easy_setopt ( curl, CURLOPT_NOSIGNAL, 1 ); // Yep, we're a multi-threaded program so don't let signals mess it up!
+ if ( options != NULL && options->user_pass ) {
+ curl_easy_setopt ( curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY );
+ curl_easy_setopt ( curl, CURLOPT_USERPWD, options->user_pass );
+ }
curl_easy_setopt ( curl, CURLOPT_URL, uri );
curl_easy_setopt ( curl, CURLOPT_WRITEDATA, f );
curl_easy_setopt ( curl, CURLOPT_WRITEFUNCTION, curl_write_func);
glong response;
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response);
if (response == 304) { // 304 = Not Modified
- res = DOWNLOAD_NO_NEWER_FILE;
+ res = CURL_DOWNLOAD_NO_NEWER_FILE;
} else if (response == 200 || // http: 200 = Ok
response == 226) { // ftp: 226 = sucess
gdouble size;
when the server has a (incorrect) time earlier than the time on the file we already have */
curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD, &size);
if (size == 0)
- res = DOWNLOAD_ERROR;
+ res = CURL_DOWNLOAD_ERROR;
else
- res = DOWNLOAD_NO_ERROR;
+ res = CURL_DOWNLOAD_NO_ERROR;
} else {
g_warning("%s: http response: %ld for uri %s\n", __FUNCTION__, response, uri);
- res = DOWNLOAD_ERROR;
+ res = CURL_DOWNLOAD_ERROR;
}
} else {
- res = DOWNLOAD_ERROR;
+ res = CURL_DOWNLOAD_ERROR;
}
if (!handle)
curl_easy_cleanup ( curl );
int ret;
gchar *full = NULL;
- /* Compose the full url */
- full = g_strdup_printf ( "%s://%s%s", (ftp?"ftp":"http"), hostname, uri );
+ if ( strstr ( hostname, "://" ) != NULL )
+ /* Already full url */
+ full = (gchar *) hostname;
+ else if ( strstr ( uri, "://" ) != NULL )
+ /* Already full url */
+ full = (gchar *) uri;
+ else
+ /* Compose the full url */
+ full = g_strdup_printf ( "%s://%s%s", (ftp?"ftp":"http"), hostname, uri );
ret = curl_download_uri ( full, f, options, file_options, handle );
- g_free ( full );
+ /* Free newly allocated memory, but do not free uri */
+ if ( hostname != full && uri != full )
+ g_free ( full );
full = NULL;
return ret;