Browse Source

deps/file-updater: Add func to get single remote file

jp9000 8 years ago
parent
commit
81fa5179cd

+ 50 - 0
deps/file-updater/file-updater/file-updater.c

@@ -523,3 +523,53 @@ update_info_t *update_info_create(
 
 	return info;
 }
+
+static void *single_file_thread(void *data)
+{
+	struct update_info *info = data;
+	struct file_download_data download_data;
+	long response_code;
+
+	info->curl = curl_easy_init();
+	if (!info->curl) {
+		warn("Could not initialize Curl");
+		return NULL;
+	}
+
+	if (!do_http_request(info, info->url, &response_code))
+		return NULL;
+	if (!info->file_data.array || !info->file_data.array[0])
+		return NULL;
+
+	download_data.name = info->url;
+	download_data.version = 0;
+	download_data.buffer.da = info->file_data.da;
+	info->callback(info->param, &download_data);
+	info->file_data.da = download_data.buffer.da;
+	return NULL;
+}
+
+update_info_t *update_info_create_single(
+		const char *log_prefix,
+		const char *user_agent,
+		const char *file_url,
+		confirm_file_callback_t confirm_callback,
+		void *param)
+{
+	struct update_info *info;
+
+	if (!log_prefix)
+		log_prefix = "";
+
+	info = bzalloc(sizeof(*info));
+	info->log_prefix = bstrdup(log_prefix);
+	info->user_agent = bstrdup(user_agent);
+	info->url = bstrdup(file_url);
+	info->callback = confirm_callback;
+	info->param = param;
+
+	if (pthread_create(&info->thread, NULL, single_file_thread, info) == 0)
+		info->thread_created = true;
+
+	return info;
+}

+ 8 - 0
deps/file-updater/file-updater/file-updater.h

@@ -1,5 +1,7 @@
 #pragma once
 
+#include <util/darray.h>
+
 struct update_info;
 typedef struct update_info update_info_t;
 
@@ -21,4 +23,10 @@ update_info_t *update_info_create(
 		const char *cache_dir,
 		confirm_file_callback_t confirm_callback,
 		void *param);
+update_info_t *update_info_create_single(
+		const char *log_prefix,
+		const char *user_agent,
+		const char *file_url,
+		confirm_file_callback_t confirm_callback,
+		void *param);
 void update_info_destroy(update_info_t *info);