[libshumate] Add libsoup3 support as a build option
- From: Corentin Noël <corentinnoel src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libshumate] Add libsoup3 support as a build option
- Date: Sat, 8 Jan 2022 20:17:23 +0000 (UTC)
commit 61fab4845ddea022dfafee74cf97af74c83a0d0d
Author: James Westman <james jwestman net>
Date: Fri Jan 7 01:02:10 2022 -0600
Add libsoup3 support as a build option
README | 2 +-
meson.build | 7 ++++--
meson_options.txt | 4 +++
shumate/meson.build | 6 +++++
shumate/shumate-tile-downloader.c | 52 ++++++++++++++++++++++++++++++---------
5 files changed, 57 insertions(+), 14 deletions(-)
---
diff --git a/README b/README
index f5264e2..1461d00 100644
--- a/README
+++ b/README
@@ -11,7 +11,7 @@ libshumate requires:
* gobject-introspection >= 0.6.3
* cairo >= 1.4
* sqlite3 >= 1.12.0
- * libsoup > 2.42
+ * libsoup >= 2.42 OR libsoup >= 3.0 if -Dlibsoup3=true is passed to meson
* gtk4
Building is done with meson.
diff --git a/meson.build b/meson.build
index 8cd9a08..41f548f 100644
--- a/meson.build
+++ b/meson.build
@@ -56,7 +56,6 @@ libm_dep = cc.find_library('m', required: true)
glib_req = '>= 2.16.0'
cairo_req = '>= 1.4'
sqlite_req = '>= 1.12.0'
-libsoup_req = '>= 2.42'
introspection_req = '>= 0.6.3'
vala_req = '>= 0.11.0'
gtk_doc_req = '>= 1.9'
@@ -67,8 +66,12 @@ gobject_dep = dependency('gobject-2.0', version: glib_req)
gio_dep = dependency('gio-2.0', version: glib_req)
cairo_dep = dependency('cairo', version: cairo_req)
sqlite_dep = dependency('sqlite3', version: sqlite_req)
-libsoup_dep = dependency('libsoup-2.4', version: libsoup_req)
gtk_dep = dependency('gtk4')
+if get_option('libsoup3')
+ libsoup_dep = dependency('libsoup-3.0', version: '>= 3.0')
+else
+ libsoup_dep = dependency('libsoup-2.4', version: '>= 2.42')
+endif
introspection_dep = dependency('gobject-introspection-1.0', version: introspection_req, required: false)
vapigen_dep = dependency('vapigen', version: vala_req, required: false)
diff --git a/meson_options.txt b/meson_options.txt
index 238aef7..f02e083 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -16,3 +16,7 @@ option('demos',
option('vector_renderer',
type: 'boolean', value: false,
description: 'Build the experimental vector tile renderer')
+
+option('libsoup3',
+ type: 'boolean', value: false,
+ description: 'Use libsoup 3.0')
diff --git a/shumate/meson.build b/shumate/meson.build
index 35de053..871ecef 100644
--- a/shumate/meson.build
+++ b/shumate/meson.build
@@ -171,6 +171,12 @@ if get_option('vector_renderer')
]
endif
+if get_option('libsoup3')
+ libshumate_c_args += [
+ '-DSHUMATE_LIBSOUP_3',
+ ]
+endif
+
libshumate_lib = library(
package_string,
libshumate_sources,
diff --git a/shumate/shumate-tile-downloader.c b/shumate/shumate-tile-downloader.c
index ce81536..5b3adda 100644
--- a/shumate/shumate-tile-downloader.c
+++ b/shumate/shumate-tile-downloader.c
@@ -331,6 +331,7 @@ fetch_from_network (GTask *task)
GCancellable *cancellable = g_task_get_cancellable (task);
g_autofree char *uri = NULL;
g_autofree char *modtime_string = NULL;
+ SoupMessageHeaders *headers;
uri = get_tile_uri (data->self, data->x, data->y, data->z);
@@ -345,6 +346,11 @@ fetch_from_network (GTask *task)
}
modtime_string = get_modified_time_string (data->modtime);
+#ifdef SHUMATE_LIBSOUP_3
+ headers = soup_message_get_request_headers (data->msg);
+#else
+ headers = data->msg->request_headers;
+#endif
/* If an etag is available, only use it.
* OSM servers seems to send now as the modified time for all tiles
@@ -353,18 +359,23 @@ fetch_from_network (GTask *task)
if (data->etag)
{
g_debug ("If-None-Match: %s", data->etag);
- soup_message_headers_append (data->msg->request_headers,
- "If-None-Match", data->etag);
+ soup_message_headers_append (headers, "If-None-Match", data->etag);
}
else if (modtime_string)
{
g_debug ("If-Modified-Since %s", modtime_string);
- soup_message_headers_append (data->msg->request_headers,
- "If-Modified-Since", modtime_string);
+ soup_message_headers_append (headers, "If-Modified-Since", modtime_string);
}
if (data->self->soup_session == NULL)
{
+#ifdef SHUMATE_LIBSOUP_3
+ data->self->soup_session =
+ soup_session_new_with_options ("user-agent", "libshumate/" SHUMATE_VERSION,
+ "max-conns-per-host", MAX_CONNS_DEFAULT,
+ "max-conns", MAX_CONNS_DEFAULT,
+ NULL);
+#else
data->self->soup_session
= soup_session_new_with_options ("proxy-uri", NULL,
"ssl-strict", FALSE,
@@ -380,9 +391,18 @@ fetch_from_network (GTask *task)
"max-conns-per-host", MAX_CONNS_DEFAULT,
"max-conns", MAX_CONNS_DEFAULT,
NULL);
+
+#endif
}
- soup_session_send_async (data->self->soup_session, data->msg, cancellable, on_message_sent, g_object_ref
(task));
+ soup_session_send_async (data->self->soup_session,
+ data->msg,
+#ifdef SHUMATE_LIBSOUP_3
+ G_PRIORITY_DEFAULT,
+#endif
+ cancellable,
+ on_message_sent,
+ g_object_ref (task));
}
/* Receive the response from the network. If the tile hasn't been modified,
@@ -396,6 +416,8 @@ on_message_sent (GObject *source_object, GAsyncResult *res, gpointer user_data)
g_autoptr(GInputStream) input_stream = NULL;
g_autoptr(GError) error = NULL;
g_autoptr(GOutputStream) output_stream = NULL;
+ SoupStatus status;
+ SoupMessageHeaders *headers;
input_stream = soup_session_send_finish (data->self->soup_session, res, &error);
if (error != NULL)
@@ -413,9 +435,17 @@ on_message_sent (GObject *source_object, GAsyncResult *res, gpointer user_data)
return;
}
- g_debug ("Got reply %d", data->msg->status_code);
+#ifdef SHUMATE_LIBSOUP_3
+ status = soup_message_get_status (data->msg);
+ headers = soup_message_get_response_headers (data->msg);
+#else
+ status = data->msg->status_code;
+ headers = data->msg->response_headers;
+#endif
+
+ g_debug ("Got reply %d", status);
- if (data->msg->status_code == SOUP_STATUS_NOT_MODIFIED)
+ if (status == SOUP_STATUS_NOT_MODIFIED)
{
/* The tile has already been filled from the cache, and the server says
* it doesn't have a newer one. Just update the cache, mark the tile as
@@ -426,12 +456,12 @@ on_message_sent (GObject *source_object, GAsyncResult *res, gpointer user_data)
return;
}
- if (!SOUP_STATUS_IS_SUCCESSFUL (data->msg->status_code))
+ if (!SOUP_STATUS_IS_SUCCESSFUL (status))
{
if (data->bytes)
{
g_debug ("Fetching tile failed, but there is a cached version (HTTP %s)",
- soup_status_get_phrase (data->msg->status_code));
+ soup_status_get_phrase (status));
g_task_return_pointer (task, g_steal_pointer (&data->bytes), (GDestroyNotify)g_bytes_unref);
}
else
@@ -439,7 +469,7 @@ on_message_sent (GObject *source_object, GAsyncResult *res, gpointer user_data)
g_task_return_new_error (task, SHUMATE_TILE_DOWNLOADER_ERROR,
SHUMATE_TILE_DOWNLOADER_ERROR_BAD_RESPONSE,
"Unable to download tile: HTTP %s",
- soup_status_get_phrase (data->msg->status_code));
+ soup_status_get_phrase (status));
}
return;
@@ -447,7 +477,7 @@ on_message_sent (GObject *source_object, GAsyncResult *res, gpointer user_data)
/* Verify if the server sent an etag and save it */
g_clear_pointer (&data->etag, g_free);
- data->etag = g_strdup (soup_message_headers_get_one (data->msg->response_headers, "ETag"));
+ data->etag = g_strdup (soup_message_headers_get_one (headers, "ETag"));
g_debug ("Received ETag %s", data->etag);
output_stream = g_memory_output_stream_new_resizable ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]