diff --git a/src/builder-flatpak-utils.c b/src/builder-flatpak-utils.c index 5f8f5146..25091e00 100644 --- a/src/builder-flatpak-utils.c +++ b/src/builder-flatpak-utils.c @@ -1073,137 +1073,6 @@ flatpak_allocate_tmpdir (int tmpdir_dfd, } -typedef struct { - GMainLoop *loop; - GError *error; - GOutputStream *out; - guint64 downloaded_bytes; - GString *content; - char buffer[16*1024]; - FlatpakLoadUriProgress progress; - GCancellable *cancellable; - gpointer user_data; - guint64 last_progress_time; - char *etag; -} LoadUriData; - -static void -stream_closed (GObject *source, GAsyncResult *res, gpointer user_data) -{ - LoadUriData *data = user_data; - GInputStream *stream = G_INPUT_STREAM (source); - g_autoptr(GError) error = NULL; - - if (!g_input_stream_close_finish (stream, res, &error)) - g_warning ("Error closing http stream: %s", error->message); - - g_main_loop_quit (data->loop); -} - -static void -load_uri_read_cb (GObject *source, GAsyncResult *res, gpointer user_data) -{ - LoadUriData *data = user_data; - GInputStream *stream = G_INPUT_STREAM (source); - gsize nread; - - nread = g_input_stream_read_finish (stream, res, &data->error); - if (nread == -1 || nread == 0) - { - if (data->progress) - data->progress (data->downloaded_bytes, data->user_data); - g_input_stream_close_async (stream, - G_PRIORITY_DEFAULT, NULL, - stream_closed, data); - return; - } - - if (data->out != NULL) - { - gsize n_written; - - if (!g_output_stream_write_all (data->out, data->buffer, nread, &n_written, - NULL, &data->error)) - { - data->downloaded_bytes += n_written; - g_input_stream_close_async (stream, - G_PRIORITY_DEFAULT, NULL, - stream_closed, data); - return; - } - - data->downloaded_bytes += n_written; - } - else - { - data->downloaded_bytes += nread; - g_string_append_len (data->content, data->buffer, nread); - } - - if (g_get_monotonic_time () - data->last_progress_time > 1 * G_USEC_PER_SEC) - { - if (data->progress) - data->progress (data->downloaded_bytes, data->user_data); - data->last_progress_time = g_get_monotonic_time (); - } - - g_input_stream_read_async (stream, data->buffer, sizeof (data->buffer), - G_PRIORITY_DEFAULT, data->cancellable, - load_uri_read_cb, data); -} - -static void -load_uri_callback (GObject *source_object, - GAsyncResult *res, - gpointer user_data) -{ - SoupRequestHTTP *request = SOUP_REQUEST_HTTP(source_object); - g_autoptr(GInputStream) in = NULL; - LoadUriData *data = user_data; - - in = soup_request_send_finish (SOUP_REQUEST (request), res, &data->error); - if (in == NULL) - { - g_main_loop_quit (data->loop); - return; - } - - g_autoptr(SoupMessage) msg = soup_request_http_get_message ((SoupRequestHTTP*) request); - if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) - { - int code; - GQuark domain = G_IO_ERROR; - - switch (msg->status_code) - { - case 304: - //TODO domain = FLATPAK_OCI_ERROR; - //TODO code = FLATPAK_OCI_ERROR_NOT_CHANGED; - code = G_IO_ERROR_FAILED; - break; - case 404: - case 410: - code = G_IO_ERROR_NOT_FOUND; - break; - default: - code = G_IO_ERROR_FAILED; - } - - data->error = g_error_new (domain, code, - "Server returned status %u: %s", - msg->status_code, - soup_status_get_phrase (msg->status_code)); - g_main_loop_quit (data->loop); - return; - } - - data->etag = g_strdup (soup_message_headers_get_one (msg->response_headers, "ETag")); - - g_input_stream_read_async (in, data->buffer, sizeof (data->buffer), - G_PRIORITY_DEFAULT, data->cancellable, - load_uri_read_cb, data); -} - SoupSession * flatpak_create_soup_session (const char *user_agent) { @@ -1250,54 +1119,6 @@ flatpak_create_curl_session (const char *user_agent) return curl_session; } -gboolean -flatpak_download_http_uri (SoupSession *soup_session, - const char *uri, - GOutputStream *out, - FlatpakLoadUriProgress progress, - gpointer user_data, - GCancellable *cancellable, - GError **error) -{ - g_autoptr(SoupRequestHTTP) request = NULL; - g_autoptr(GMainLoop) loop = NULL; - g_autoptr(GMainContext) context = NULL; - LoadUriData data = { NULL }; - - g_debug ("Loading %s using libsoup", uri); - - context = g_main_context_ref_thread_default (); - - loop = g_main_loop_new (context, TRUE); - data.loop = loop; - data.out = out; - data.progress = progress; - data.cancellable = cancellable; - data.user_data = user_data; - data.last_progress_time = g_get_monotonic_time (); - - request = soup_session_request_http (soup_session, "GET", - uri, error); - if (request == NULL) - return FALSE; - - soup_request_send_async (SOUP_REQUEST(request), - cancellable, - load_uri_callback, &data); - - g_main_loop_run (loop); - - if (data.error) - { - g_propagate_error (error, data.error); - return FALSE; - } - - g_debug ("Received %" G_GUINT64_FORMAT " bytes", data.downloaded_bytes); - - return TRUE; -} - typedef enum { FLATPAK_POLICY_NONE, FLATPAK_POLICY_SEE, diff --git a/src/builder-flatpak-utils.h b/src/builder-flatpak-utils.h index cef23318..075e6d14 100644 --- a/src/builder-flatpak-utils.h +++ b/src/builder-flatpak-utils.h @@ -351,21 +351,6 @@ gboolean flatpak_allocate_tmpdir (int tmpdir_dfd, SoupSession * flatpak_create_soup_session (const char *user_agent); CURL * flatpak_create_curl_session (const char *user_agent); -GBytes * flatpak_load_http_uri (SoupSession *soup_session, - const char *uri, - const char *etag, - char **out_etag, - FlatpakLoadUriProgress progress, - gpointer user_data, - GCancellable *cancellable, - GError **error); -gboolean flatpak_download_http_uri (SoupSession *soup_session, - const char *uri, - GOutputStream *out, - FlatpakLoadUriProgress progress, - gpointer user_data, - GCancellable *cancellable, - GError **error); typedef struct FlatpakContext FlatpakContext;