+/**
+ * load_url - Loads a (possibly) remote URL and returns the local file
+ * path.
+ * @ctx: The talloc context to associate with the returned string.
+ * @url: The remote file URL.
+ * @tempfile: An optional variable pointer to be set when a temporary local
+ * file is created.
+ * @url_cb: An optional callback pointer if the caller wants to load url
+ * asynchronously.
+ *
+ * Returns the local file path in a talloc'ed character string on success,
+ * or NULL on error.
+ */
+
+struct load_url_result *load_url_async(void *ctx, struct pb_url *url,
+ load_url_complete async_cb, void *async_data,
+ waiter_cb stdout_cb, void *stdout_data)
+{
+ struct load_url_result *result;
+ struct load_task *task;
+ int flags = 0;
+
+ if (!url)
+ return NULL;
+
+ task = talloc_zero(ctx, struct load_task);
+ task->url = url;
+ task->async = async_cb != NULL;
+ task->result = talloc_zero(ctx, struct load_url_result);
+ task->result->task = task;
+ task->result->url = url;
+ task->process = process_create(task);
+ if (task->async) {
+ task->async_cb = async_cb;
+ task->async_data = async_data;
+ task->process->exit_cb = load_url_process_exit;
+ task->process->data = task;
+ task->process->stdout_cb = stdout_cb;
+ task->process->stdout_data = stdout_data;
+ }