[libsoup] message: add private helper functions to set and replace the Host header
- From: Carlos Garcia Campos <carlosgc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libsoup] message: add private helper functions to set and replace the Host header
- Date: Sun, 9 May 2021 10:49:56 +0000 (UTC)
commit 7250d149c297107444c4b651e7c657fe65d7c29a
Author: Carlos Garcia Campos <cgarcia igalia com>
Date: Sun May 9 12:26:44 2021 +0200
message: add private helper functions to set and replace the Host header
And ensure we only do this for HTTP/1.x.
libsoup/soup-message-private.h | 5 +++++
libsoup/soup-message.c | 37 +++++++++++++++++++++++++++++++++++++
libsoup/soup-session.c | 31 ++-----------------------------
3 files changed, 44 insertions(+), 29 deletions(-)
---
diff --git a/libsoup/soup-message-private.h b/libsoup/soup-message-private.h
index 4efba24e..5942ee67 100644
--- a/libsoup/soup-message-private.h
+++ b/libsoup/soup-message-private.h
@@ -139,4 +139,9 @@ typedef enum {
void soup_message_set_metrics_timestamp (SoupMessage *msg,
SoupMessageMetricsType type);
+void soup_message_set_request_host_from_uri (SoupMessage *msg,
+ GUri *uri);
+
+void soup_message_update_request_host_if_needed (SoupMessage *msg);
+
#endif /* __SOUP_MESSAGE_PRIVATE_H__ */
diff --git a/libsoup/soup-message.c b/libsoup/soup-message.c
index 68328d45..b5f2e346 100644
--- a/libsoup/soup-message.c
+++ b/libsoup/soup-message.c
@@ -2622,3 +2622,40 @@ soup_message_set_metrics_timestamp (SoupMessage *msg,
break;
}
}
+
+void
+soup_message_set_request_host_from_uri (SoupMessage *msg,
+ GUri *uri)
+{
+ SoupMessagePrivate *priv = soup_message_get_instance_private (msg);
+ char *host;
+
+ if (priv->http_version == SOUP_HTTP_2_0)
+ return;
+
+ host = soup_uri_get_host_for_headers (uri);
+ if (soup_uri_uses_default_port (uri))
+ soup_message_headers_replace (priv->request_headers, "Host", host);
+ else {
+ char *value;
+
+ value = g_strdup_printf ("%s:%d", host, g_uri_get_port (uri));
+ soup_message_headers_replace (priv->request_headers, "Host", value);
+ g_free (value);
+ }
+ g_free (host);
+}
+
+void
+soup_message_update_request_host_if_needed (SoupMessage *msg)
+{
+ SoupMessagePrivate *priv = soup_message_get_instance_private (msg);
+
+ if (priv->http_version == SOUP_HTTP_2_0)
+ return;
+
+ if (soup_message_headers_get_one (priv->request_headers, "Host"))
+ return;
+
+ soup_message_set_request_host_from_uri (msg, priv->uri);
+}
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index 999b8306..9530730d 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -1243,7 +1243,6 @@ soup_session_redirect_message (SoupSession *session,
GError **error)
{
GUri *new_uri;
- char *host;
g_return_val_if_fail (SOUP_IS_SESSION (session), FALSE);
g_return_val_if_fail (SOUP_IS_MESSAGE (msg), FALSE);
@@ -1264,18 +1263,7 @@ soup_session_redirect_message (SoupSession *session,
SOUP_ENCODING_NONE);
}
- host = soup_uri_get_host_for_headers (new_uri);
- if (soup_uri_uses_default_port (new_uri))
- soup_message_headers_replace (soup_message_get_request_headers (msg), "Host", host);
- else {
- char *value;
-
- value = g_strdup_printf ("%s:%d", host, g_uri_get_port (new_uri));
- soup_message_headers_replace (soup_message_get_request_headers (msg), "Host", value);
- g_free (value);
- }
- g_free (host);
-
+ soup_message_set_request_host_from_uri (msg, new_uri);
soup_message_set_uri (msg, new_uri);
g_uri_unref (new_uri);
@@ -1392,22 +1380,7 @@ soup_session_send_queue_item (SoupSession *session,
soup_message_headers_append (request_headers, "Connection", "Keep-Alive");
}
- if (!soup_message_headers_get_one (request_headers, "Host")) {
- GUri *uri = soup_message_get_uri (item->msg);
- char *host;
-
- host = soup_uri_get_host_for_headers (uri);
- if (soup_uri_uses_default_port (uri))
- soup_message_headers_append (request_headers, "Host", host);
- else {
- char *value;
-
- value = g_strdup_printf ("%s:%d", host, g_uri_get_port (uri));
- soup_message_headers_append (request_headers, "Host", value);
- g_free (value);
- }
- g_free (host);
- }
+ soup_message_update_request_host_if_needed (item->msg);
/* A user agent SHOULD send a Content-Length in a request message when
* no Transfer-Encoding is sent and the request method defines a meaning
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]