[evolution-data-server/wip/mcrha/soup3] Add e_soup_session_util_get_message_request_body()
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server/wip/mcrha/soup3] Add e_soup_session_util_get_message_request_body()
- Date: Wed, 8 Dec 2021 17:25:05 +0000 (UTC)
commit a01b196ce8bf4f185298c128a2e4b5cc0fe514ba
Author: Milan Crha <mcrha redhat com>
Date: Wed Dec 8 18:24:33 2021 +0100
Add e_soup_session_util_get_message_request_body()
Required for evolution-ews
src/libedataserver/e-soup-session.c | 64 +++++++++++++++++++++++++++++++------
src/libedataserver/e-soup-session.h | 5 ++-
2 files changed, 59 insertions(+), 10 deletions(-)
---
diff --git a/src/libedataserver/e-soup-session.c b/src/libedataserver/e-soup-session.c
index 786abb00f..bf277d8da 100644
--- a/src/libedataserver/e-soup-session.c
+++ b/src/libedataserver/e-soup-session.c
@@ -1309,8 +1309,7 @@ message_data_new (GInputStream *input_stream,
}
static void
-message_data_free (gpointer ptr,
- GClosure *closure)
+message_data_free (gpointer ptr)
{
MessageData *md = ptr;
@@ -1324,14 +1323,18 @@ static void
e_soup_session_message_restarted_cb (SoupMessage *message,
gpointer user_data)
{
- MessageData *md = user_data;
+ GInputStream *input_stream;
+ gssize length = 0;
- if (G_IS_SEEKABLE (md->input_stream) && md->read_from != g_seekable_tell (G_SEEKABLE
(md->input_stream)))
- g_seekable_seek (G_SEEKABLE (md->input_stream), md->read_from, G_SEEK_SET, NULL, NULL);
+ input_stream = e_soup_session_util_get_message_request_body (message, &length);
+
+ g_return_if_fail (input_stream != NULL);
- soup_message_set_request_body (message, NULL, md->input_stream, md->length);
+ soup_message_set_request_body (message, NULL, input_stream, length);
}
+#define MESSAGE_DATA_KEY "ESoupSession::message-data"
+
/**
* e_soup_session_util_set_message_request_body:
* @message: a #SoupMessage
@@ -1360,8 +1363,10 @@ e_soup_session_util_set_message_request_body (SoupMessage *message,
md = message_data_new (input_stream, length);
- g_signal_connect_data (message, "restarted",
- G_CALLBACK (e_soup_session_message_restarted_cb), md, message_data_free, 0);
+ g_object_set_data_full (G_OBJECT (message), MESSAGE_DATA_KEY, md, message_data_free);
+
+ g_signal_connect (message, "restarted",
+ G_CALLBACK (e_soup_session_message_restarted_cb), NULL);
soup_message_set_request_body (message, content_type, input_stream, length);
}
@@ -1388,7 +1393,7 @@ e_soup_session_util_set_message_request_body_from_data (SoupMessage *message,
gboolean create_copy,
const gchar *content_type,
gconstpointer data,
- gsize length,
+ gssize length,
GDestroyNotify free_func)
{
GInputStream *input_stream;
@@ -1407,3 +1412,44 @@ e_soup_session_util_set_message_request_body_from_data (SoupMessage *message,
g_object_unref (input_stream);
}
+
+/**
+ * e_soup_session_util_get_message_request_body:
+ * @message: a #SoupMessage
+ * @out_length: (out): length of the input stream
+ *
+ * Returns referenced request data for the @message, as being previously
+ * set by the e_soup_session_util_set_message_request_body() or
+ * e_soup_session_util_set_message_request_body_from_data().
+ *
+ * Do not call this function while the @message is queued in
+ * a #SoupSession, nor modify the input stream position until
+ * the @message lefts the #SoupSession.
+ *
+ * Returns: (nullable) (transfer none): a #GInputStream with the request body
+ * being previously set, on %NULL. The @out_length is set to the length
+ * of the returned input stream.
+ *
+ * Since: 3.44
+ **/
+GInputStream *
+e_soup_session_util_get_message_request_body (SoupMessage *message,
+ gssize *out_length)
+{
+ MessageData *md;
+
+ g_return_val_if_fail (SOUP_IS_MESSAGE (message), NULL);
+ g_return_val_if_fail (out_length != NULL, NULL);
+
+ md = g_object_get_data (G_OBJECT (message), MESSAGE_DATA_KEY);
+
+ if (!md || !md->input_stream)
+ return NULL;
+
+ if (G_IS_SEEKABLE (md->input_stream) && md->read_from != g_seekable_tell (G_SEEKABLE
(md->input_stream)))
+ g_seekable_seek (G_SEEKABLE (md->input_stream), md->read_from, G_SEEK_SET, NULL, NULL);
+
+ *out_length = md->length;
+
+ return md->input_stream;
+}
diff --git a/src/libedataserver/e-soup-session.h b/src/libedataserver/e-soup-session.h
index 716d80202..ad8d3da84 100644
--- a/src/libedataserver/e-soup-session.h
+++ b/src/libedataserver/e-soup-session.h
@@ -129,8 +129,11 @@ void e_soup_session_util_set_message_request_body_from_data
gboolean create_copy,
const gchar *content_type,
gconstpointer data,
- gsize length,
+ gssize length,
GDestroyNotify free_func);
+GInputStream * e_soup_session_util_get_message_request_body
+ (SoupMessage *message,
+ gssize *out_length);
G_END_DECLS
#endif /* E_SOUP_SESSION_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]