diff options
Diffstat (limited to 'src/download.c')
| -rw-r--r-- | src/download.c | 47 | 
1 files changed, 30 insertions, 17 deletions
| diff --git a/src/download.c b/src/download.c index a258da2..0b6b076 100644 --- a/src/download.c +++ b/src/download.c @@ -43,12 +43,12 @@ static size_t download_write_buffer_callback(char* data, size_t size, size_t nme  	return total;  } -int download_to_buffer(const char* url, char** buf, uint32_t* length) +int download_to_buffer(const char* url, void** buf, size_t* length)  {  	int res = 0;  	CURL* handle = curl_easy_init();  	if (handle == NULL) { -		error("ERROR: could not initialize CURL\n"); +		logger(LL_ERROR, "could not initialize CURL\n");  		return -1;  	} @@ -57,7 +57,7 @@ int download_to_buffer(const char* url, char** buf, uint32_t* length)  	response.content = malloc(1);  	response.content[0] = '\0'; -	if (idevicerestore_debug) +	if (log_level >= LL_DEBUG)  		curl_easy_setopt(handle, CURLOPT_VERBOSE, 1);  	/* disable SSL verification to allow download from untrusted https locations */ @@ -86,17 +86,18 @@ int download_to_buffer(const char* url, char** buf, uint32_t* length)  	return res;  } -static int lastprogress = 0; - +#if LIBCURL_VERSION_NUM >= 0x072000 +static int download_progress(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) +#else  static int download_progress(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow) +#endif  { -	double p = (dlnow / dltotal) * 100; +	double p = ((double)dlnow / (double)dltotal); -	if (p < 100.0) { -		if ((int)p > lastprogress) { -			info("downloading: %d%%\n", (int)p); -			lastprogress = (int)p; -		} +	set_progress('DNLD', p); + +	if (global_quit_flag > 0) { +		return 1;  	}  	return 0; @@ -107,19 +108,17 @@ int download_to_file(const char* url, const char* filename, int enable_progress)  	int res = 0;  	CURL* handle = curl_easy_init();  	if (handle == NULL) { -		error("ERROR: could not initialize CURL\n"); +		logger(LL_ERROR, "Could not initialize CURL\n");  		return -1;  	}  	FILE* f = fopen(filename, "wb");  	if (!f) { -		error("ERROR: cannot open '%s' for writing\n", filename); +		logger(LL_ERROR, "Cannot open '%s' for writing\n", filename);  		return -1;  	} -	lastprogress = 0; - -	if (idevicerestore_debug) +	if (log_level >= LL_DEBUG)  		curl_easy_setopt(handle, CURLOPT_VERBOSE, 1);  	/* disable SSL verification to allow download from untrusted https locations */ @@ -128,8 +127,14 @@ int download_to_file(const char* url, const char* filename, int enable_progress)  	curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, NULL);  	curl_easy_setopt(handle, CURLOPT_WRITEDATA, f); -	if (enable_progress > 0) +	if (enable_progress > 0) { +		register_progress('DNLD', "Downloading"); +#if LIBCURL_VERSION_NUM >= 0x072000 +		curl_easy_setopt(handle, CURLOPT_XFERINFOFUNCTION, (curl_progress_callback)&download_progress); +#else  		curl_easy_setopt(handle, CURLOPT_PROGRESSFUNCTION, (curl_progress_callback)&download_progress); +#endif +	}  	curl_easy_setopt(handle, CURLOPT_NOPROGRESS, enable_progress > 0 ? 0: 1);  	curl_easy_setopt(handle, CURLOPT_USERAGENT, USER_AGENT_STRING); @@ -137,6 +142,11 @@ int download_to_file(const char* url, const char* filename, int enable_progress)  	curl_easy_setopt(handle, CURLOPT_URL, url);  	curl_easy_perform(handle); + +	if (enable_progress) { +		finalize_progress('DNLD'); +	} +  	curl_easy_cleanup(handle);  #ifdef WIN32 @@ -151,6 +161,9 @@ int download_to_file(const char* url, const char* filename, int enable_progress)  		res = -1;  		remove(filename);  	} +	if (global_quit_flag > 0) { +		res = -2; +	}  	return res;  } | 
