summaryrefslogtreecommitdiff
path: root/src/libostree/ostree-metalink.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libostree/ostree-metalink.c')
-rw-r--r--src/libostree/ostree-metalink.c206
1 files changed, 74 insertions, 132 deletions
diff --git a/src/libostree/ostree-metalink.c b/src/libostree/ostree-metalink.c
index d028266f..449018e3 100644
--- a/src/libostree/ostree-metalink.c
+++ b/src/libostree/ostree-metalink.c
@@ -19,13 +19,14 @@
#include "config.h"
-#include "ostree-metalink.h"
#include "ostree-fetcher-util.h"
+#include "ostree-metalink.h"
#include <gio/gfiledescriptorbased.h>
#include "otutil.h"
-typedef enum {
+typedef enum
+{
OSTREE_METALINK_STATE_INITIAL,
OSTREE_METALINK_STATE_METALINK,
OSTREE_METALINK_STATE_FILES,
@@ -83,8 +84,7 @@ typedef struct
} OstreeMetalinkRequest;
static void
-state_transition (OstreeMetalinkRequest *self,
- OstreeMetalinkState new_state)
+state_transition (OstreeMetalinkRequest *self, OstreeMetalinkState new_state)
{
g_assert (self->state != new_state);
@@ -95,21 +95,16 @@ state_transition (OstreeMetalinkRequest *self,
}
static void
-unknown_element (OstreeMetalinkRequest *self,
- const char *element_name,
- GError **error)
+unknown_element (OstreeMetalinkRequest *self, const char *element_name, GError **error)
{
state_transition (self, OSTREE_METALINK_STATE_PASSTHROUGH);
g_assert (self->passthrough_depth == 0);
}
static void
-metalink_parser_start (GMarkupParseContext *context,
- const gchar *element_name,
- const gchar **attribute_names,
- const gchar **attribute_values,
- gpointer user_data,
- GError **error)
+metalink_parser_start (GMarkupParseContext *context, const gchar *element_name,
+ const gchar **attribute_names, const gchar **attribute_values,
+ gpointer user_data, GError **error)
{
OstreeMetalinkRequest *self = user_data;
@@ -139,13 +134,8 @@ metalink_parser_start (GMarkupParseContext *context,
{
const char *file_name;
- if (!g_markup_collect_attributes (element_name,
- attribute_names,
- attribute_values,
- error,
- G_MARKUP_COLLECT_STRING,
- "name",
- &file_name,
+ if (!g_markup_collect_attributes (element_name, attribute_names, attribute_values, error,
+ G_MARKUP_COLLECT_STRING, "name", &file_name,
G_MARKUP_COLLECT_INVALID))
goto out;
@@ -181,16 +171,11 @@ metalink_parser_start (GMarkupParseContext *context,
case OSTREE_METALINK_STATE_VERIFICATION:
if (strcmp (element_name, "hash") == 0)
{
- char *verification_type_str = NULL;
+ char *verification_type_str = NULL;
state_transition (self, OSTREE_METALINK_STATE_HASH);
- if (!g_markup_collect_attributes (element_name,
- attribute_names,
- attribute_values,
- error,
- G_MARKUP_COLLECT_STRING,
- "type",
- &verification_type_str,
+ if (!g_markup_collect_attributes (element_name, attribute_names, attribute_values, error,
+ G_MARKUP_COLLECT_STRING, "type", &verification_type_str,
G_MARKUP_COLLECT_INVALID))
goto out;
@@ -227,23 +212,11 @@ metalink_parser_start (GMarkupParseContext *context,
{
const char *protocol;
- if (!g_markup_collect_attributes (element_name,
- attribute_names,
- attribute_values,
- error,
- G_MARKUP_COLLECT_STRING,
- "protocol",
- &protocol,
- G_MARKUP_COLLECT_STRING,
- "type",
- NULL,
- G_MARKUP_COLLECT_STRING,
- "location",
- NULL,
- G_MARKUP_COLLECT_STRING,
- "preference",
- NULL,
- G_MARKUP_COLLECT_INVALID))
+ if (!g_markup_collect_attributes (
+ element_name, attribute_names, attribute_values, error, G_MARKUP_COLLECT_STRING,
+ "protocol", &protocol, G_MARKUP_COLLECT_STRING, "type", NULL,
+ G_MARKUP_COLLECT_STRING, "location", NULL, G_MARKUP_COLLECT_STRING, "preference",
+ NULL, G_MARKUP_COLLECT_INVALID))
goto out;
/* Ignore non-HTTP resources */
@@ -263,15 +236,13 @@ metalink_parser_start (GMarkupParseContext *context,
break;
}
- out:
+out:
return;
}
static void
-metalink_parser_end (GMarkupParseContext *context,
- const gchar *element_name,
- gpointer user_data,
- GError **error)
+metalink_parser_end (GMarkupParseContext *context, const gchar *element_name, gpointer user_data,
+ GError **error)
{
OstreeMetalinkRequest *self = user_data;
@@ -309,11 +280,8 @@ metalink_parser_end (GMarkupParseContext *context,
}
static void
-metalink_parser_text (GMarkupParseContext *context,
- const gchar *text,
- gsize text_len,
- gpointer user_data,
- GError **error)
+metalink_parser_text (GMarkupParseContext *context, const gchar *text, gsize text_len,
+ gpointer user_data, GError **error)
{
OstreeMetalinkRequest *self = user_data;
@@ -366,7 +334,6 @@ metalink_parser_text (GMarkupParseContext *context,
case OSTREE_METALINK_STATE_PASSTHROUGH:
break;
}
-
}
static void
@@ -397,13 +364,10 @@ _ostree_metalink_init (OstreeMetalink *self)
}
OstreeMetalink *
-_ostree_metalink_new (OstreeFetcher *fetcher,
- const char *requested_file,
- guint64 max_size,
- OstreeFetcherURI *uri,
- guint n_network_retries)
+_ostree_metalink_new (OstreeFetcher *fetcher, const char *requested_file, guint64 max_size,
+ OstreeFetcherURI *uri, guint n_network_retries)
{
- OstreeMetalink *self = (OstreeMetalink*)g_object_new (OSTREE_TYPE_METALINK, NULL);
+ OstreeMetalink *self = (OstreeMetalink *)g_object_new (OSTREE_TYPE_METALINK, NULL);
self->fetcher = g_object_ref (fetcher);
self->requested_file = g_strdup (requested_file);
@@ -423,31 +387,23 @@ valid_hex_checksum (const char *s, gsize expected_len)
}
static gboolean
-try_one_url (OstreeMetalinkRequest *self,
- OstreeFetcherURI *uri,
- GBytes **out_data,
- GError **error)
+try_one_url (OstreeMetalinkRequest *self, OstreeFetcherURI *uri, GBytes **out_data, GError **error)
{
gboolean ret = FALSE;
- g_autoptr(GBytes) bytes = NULL;
+ g_autoptr (GBytes) bytes = NULL;
gssize n_bytes;
- if (!_ostree_fetcher_request_uri_to_membuf (self->metalink->fetcher,
- uri, 0,
- NULL, 0,
- self->metalink->n_network_retries,
- &bytes,
- NULL, NULL, NULL,
- self->metalink->max_size,
- self->cancellable,
- error))
+ if (!_ostree_fetcher_request_uri_to_membuf (
+ self->metalink->fetcher, uri, 0, NULL, 0, self->metalink->n_network_retries, &bytes, NULL,
+ NULL, NULL, self->metalink->max_size, self->cancellable, error))
goto out;
n_bytes = g_bytes_get_size (bytes);
if (n_bytes != self->size)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Expected size is %" G_GUINT64_FORMAT " bytes but content is %" G_GSSIZE_FORMAT " bytes",
+ "Expected size is %" G_GUINT64_FORMAT " bytes but content is %" G_GSSIZE_FORMAT
+ " bytes",
self->size, n_bytes);
goto out;
}
@@ -461,8 +417,8 @@ try_one_url (OstreeMetalinkRequest *self,
if (strcmp (self->verification_sha512, actual) != 0)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Expected checksum is %s but actual is %s",
- self->verification_sha512, actual);
+ "Expected checksum is %s but actual is %s", self->verification_sha512,
+ actual);
goto out;
}
}
@@ -475,8 +431,8 @@ try_one_url (OstreeMetalinkRequest *self,
if (strcmp (self->verification_sha256, actual) != 0)
{
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Expected checksum is %s but actual is %s",
- self->verification_sha256, actual);
+ "Expected checksum is %s but actual is %s", self->verification_sha256,
+ actual);
goto out;
}
}
@@ -484,24 +440,21 @@ try_one_url (OstreeMetalinkRequest *self,
ret = TRUE;
if (out_data)
*out_data = g_steal_pointer (&bytes);
- out:
+out:
return ret;
}
static gboolean
-try_metalink_targets (OstreeMetalinkRequest *self,
- OstreeFetcherURI **out_target_uri,
- GBytes **out_data,
- GError **error)
+try_metalink_targets (OstreeMetalinkRequest *self, OstreeFetcherURI **out_target_uri,
+ GBytes **out_data, GError **error)
{
gboolean ret = FALSE;
OstreeFetcherURI *target_uri = NULL;
- g_autoptr(GBytes) ret_data = NULL;
+ g_autoptr (GBytes) ret_data = NULL;
if (!self->found_a_file_element)
{
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "No <file> element found");
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "No <file> element found");
goto out;
}
@@ -510,8 +463,8 @@ try_metalink_targets (OstreeMetalinkRequest *self,
/* XXX Use NOT_FOUND here so we can distinguish not finding the
* requested file from other errors. This is a bit of a hack
* through; metalinks should have their own error enum. */
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
- "No <file name='%s'> found", self->metalink->requested_file);
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, "No <file name='%s'> found",
+ self->metalink->requested_file);
goto out;
}
@@ -524,27 +477,23 @@ try_metalink_targets (OstreeMetalinkRequest *self,
if (self->verification_sha256 && !valid_hex_checksum (self->verification_sha256, 64))
{
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Invalid hash digest for sha256");
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Invalid hash digest for sha256");
goto out;
}
if (self->verification_sha512 && !valid_hex_checksum (self->verification_sha512, 128))
{
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Invalid hash digest for sha512");
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Invalid hash digest for sha512");
goto out;
}
if (self->urls->len == 0)
{
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "No <url method='http'> elements found");
+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "No <url method='http'> elements found");
goto out;
}
- for (self->current_url_index = 0;
- self->current_url_index < self->urls->len;
+ for (self->current_url_index = 0; self->current_url_index < self->urls->len;
self->current_url_index++)
{
GError *temp_error = NULL;
@@ -565,8 +514,8 @@ try_metalink_targets (OstreeMetalinkRequest *self,
{
g_assert (self->last_metalink_error != NULL);
g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "Exhausted %u metalink targets, last error: %s",
- self->urls->len, self->last_metalink_error);
+ "Exhausted %u metalink targets, last error: %s", self->urls->len,
+ self->last_metalink_error);
goto out;
}
@@ -575,38 +524,32 @@ try_metalink_targets (OstreeMetalinkRequest *self,
*out_target_uri = _ostree_fetcher_uri_clone (target_uri);
if (out_data)
*out_data = g_steal_pointer (&ret_data);
- out:
+out:
return ret;
}
-static const GMarkupParser metalink_parser = {
- metalink_parser_start,
- metalink_parser_end,
- metalink_parser_text,
- NULL,
- NULL
-};
+static const GMarkupParser metalink_parser
+ = { metalink_parser_start, metalink_parser_end, metalink_parser_text, NULL, NULL };
typedef struct
{
- OstreeFetcherURI **out_target_uri;
- GBytes **out_data;
- gboolean success;
- GError **error;
- GMainLoop *loop;
+ OstreeFetcherURI **out_target_uri;
+ GBytes **out_data;
+ gboolean success;
+ GError **error;
+ GMainLoop *loop;
} FetchMetalinkSyncData;
gboolean
-_ostree_metalink_request_sync (OstreeMetalink *self,
- OstreeFetcherURI **out_target_uri,
- GBytes **out_data,
- GCancellable *cancellable,
- GError **error)
+_ostree_metalink_request_sync (OstreeMetalink *self, OstreeFetcherURI **out_target_uri,
+ GBytes **out_data, GCancellable *cancellable, GError **error)
{
gboolean ret = FALSE;
- OstreeMetalinkRequest request = { 0, };
- g_autoptr(GMainContext) mainctx = NULL;
- g_autoptr(GBytes) contents = NULL;
+ OstreeMetalinkRequest request = {
+ 0,
+ };
+ g_autoptr (GMainContext) mainctx = NULL;
+ g_autoptr (GBytes) contents = NULL;
gsize len;
const guint8 *data;
@@ -614,25 +557,24 @@ _ostree_metalink_request_sync (OstreeMetalink *self,
g_main_context_push_thread_default (mainctx);
request.metalink = g_object_ref (self);
- request.urls = g_ptr_array_new_with_free_func ((GDestroyNotify) _ostree_fetcher_uri_free);
- request.parser = g_markup_parse_context_new (&metalink_parser, G_MARKUP_PREFIX_ERROR_POSITION, &request, NULL);
-
- if (!_ostree_fetcher_request_uri_to_membuf (self->fetcher, self->uri, 0,
- NULL, 0,
- self->n_network_retries,
- &contents, NULL, NULL, NULL, self->max_size,
- cancellable, error))
+ request.urls = g_ptr_array_new_with_free_func ((GDestroyNotify)_ostree_fetcher_uri_free);
+ request.parser = g_markup_parse_context_new (&metalink_parser, G_MARKUP_PREFIX_ERROR_POSITION,
+ &request, NULL);
+
+ if (!_ostree_fetcher_request_uri_to_membuf (self->fetcher, self->uri, 0, NULL, 0,
+ self->n_network_retries, &contents, NULL, NULL, NULL,
+ self->max_size, cancellable, error))
goto out;
data = g_bytes_get_data (contents, &len);
- if (!g_markup_parse_context_parse (request.parser, (const char*)data, len, error))
+ if (!g_markup_parse_context_parse (request.parser, (const char *)data, len, error))
goto out;
if (!try_metalink_targets (&request, out_target_uri, out_data, error))
goto out;
ret = TRUE;
- out:
+out:
if (mainctx)
g_main_context_pop_thread_default (mainctx);
g_clear_object (&request.metalink);