X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/2bf635ef2201a91e4d9bb2654d0fca9693cc6c62..e0826724ba01672b9bac56f171021b9d08f96a1e:/src/curl_download.c?ds=sidebyside diff --git a/src/curl_download.c b/src/curl_download.c index 5d94919a..85aac91f 100644 --- a/src/curl_download.c +++ b/src/curl_download.c @@ -1,7 +1,10 @@ /* * viking -- GPS Data and Topo Analyzer, Explorer, and Manager * - * Copyright (C) 2003-2005, Evan Battaglia + * Copyright (C) 2007, Guilhem Bonnefille + * Copyright (C) 2007, Quy Tonthat + * Copyright (C) 2009-2010, Jocelyn Jaubert + * Copyright (C) 2010, Sven Wegener * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -55,18 +58,19 @@ static size_t curl_write_func(void *ptr, size_t size, size_t nmemb, FILE *stream return fwrite(ptr, size, nmemb, stream); } -static size_t curl_get_etag_func(void *ptr, size_t size, size_t nmemb, gchar **stream) +static size_t curl_get_etag_func(char *ptr, size_t size, size_t nmemb, void *stream) { #define ETAG_KEYWORD "ETag: " #define ETAG_LEN (sizeof(ETAG_KEYWORD)-1) + gchar **etag = stream; size_t len = size*nmemb; - char *str = g_strstr_len(ptr, len, ETAG_KEYWORD); + char *str = g_strstr_len((const char*)ptr, len, ETAG_KEYWORD); if (str) { char *etag_str = str + ETAG_LEN; char *end_str = g_strstr_len(etag_str, len - ETAG_LEN, "\r\n"); if (etag_str && end_str) { - *stream = g_strndup(etag_str, end_str - etag_str); - g_debug("%s: ETAG found: %s", __FUNCTION__, *stream); + *etag = g_strndup(etag_str, end_str - etag_str); + g_debug("%s: ETAG found: %s", __FUNCTION__, *etag); } } return nmemb; @@ -138,6 +142,12 @@ void curl_download_init() curl_download_user_agent = g_strdup_printf ("%s/%s %s", PACKAGE, VERSION, curl_version()); } +/* This should to be called from main() to make sure thread safe */ +void curl_download_uninit() +{ + curl_global_cleanup(); +} + int curl_download_uri ( const char *uri, FILE *f, DownloadMapOptions *options, DownloadFileOptions *file_options, void *handle ) { CURL *curl; @@ -153,6 +163,7 @@ int curl_download_uri ( const char *uri, FILE *f, DownloadMapOptions *options, D } 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! curl_easy_setopt ( curl, CURLOPT_URL, uri ); curl_easy_setopt ( curl, CURLOPT_WRITEDATA, f ); curl_easy_setopt ( curl, CURLOPT_WRITEFUNCTION, curl_write_func); @@ -207,7 +218,7 @@ int curl_download_uri ( const char *uri, FILE *f, DownloadMapOptions *options, D else res = DOWNLOAD_NO_ERROR; } else { - g_warning("%s: http response: %ld for uri %s (time_condition = %ld)\n", __FUNCTION__, response, uri, file_options->time_condition); + g_warning("%s: http response: %ld for uri %s\n", __FUNCTION__, response, uri); res = DOWNLOAD_ERROR; } } else {