commit 02de13a: [Minor] Simplify host element handling in HTTP message

Vsevolod Stakhov vsevolod at highsecure.ru
Mon Mar 18 16:21:07 UTC 2019


Author: Vsevolod Stakhov
Date: 2019-03-18 15:56:45 +0000
URL: https://github.com/rspamd/rspamd/commit/02de13af4e812e81c882fa33683429c65a475099

[Minor] Simplify host element handling in HTTP message

---
 src/libutil/http_connection.c | 87 ++++++++++++++++---------------------------
 src/libutil/http_message.c    |  4 +-
 src/libutil/http_private.h    |  2 +-
 src/lua/lua_http.c            |  6 +--
 4 files changed, 36 insertions(+), 63 deletions(-)

diff --git a/src/libutil/http_connection.c b/src/libutil/http_connection.c
index e75e26a45..78ec2582f 100644
--- a/src/libutil/http_connection.c
+++ b/src/libutil/http_connection.c
@@ -720,7 +720,7 @@ rspamd_http_simple_client_helper (struct rspamd_http_connection *conn)
 	struct rspamd_http_connection_private *priv;
 	gpointer ssl;
 	gint request_method;
-	rspamd_fstring_t *prev_host;
+	GString *prev_host = NULL;
 
 	priv = conn->priv;
 	ssl = priv->ssl;
@@ -754,7 +754,7 @@ rspamd_http_simple_client_helper (struct rspamd_http_connection *conn)
 	}
 	else {
 		if (prev_host) {
-			rspamd_fstring_free (prev_host);
+			g_string_free (prev_host, TRUE);
 		}
 	}
 }
@@ -1426,8 +1426,7 @@ rspamd_http_connection_copy_msg (struct rspamd_http_message *msg, GError **err)
 	}
 
 	if (msg->host) {
-		new_msg->host = rspamd_fstring_new_init (msg->host->str,
-				msg->host->len);
+		new_msg->host = g_string_new_len (msg->host->str, msg->host->len);
 	}
 
 	new_msg->method = msg->method;
@@ -1812,12 +1811,15 @@ rspamd_http_message_write_header (const gchar* mime_type, gboolean encrypted,
 		}
 	}
 	else {
+
+		/* Client request */
 		if (conn->opts & RSPAMD_HTTP_CLIENT_KEEP_ALIVE) {
 			conn_type = "keep-alive";
 		}
 
 		/* Format request */
-		enclen += msg->url->len + strlen (http_method_str (msg->method)) + 1;
+		enclen += RSPAMD_FSTRING_LEN (msg->url) +
+				strlen (http_method_str (msg->method)) + 1;
 
 		if (host == NULL && msg->host == NULL) {
 			/* Fallback to HTTP/1.0 */
@@ -1855,59 +1857,34 @@ rspamd_http_message_write_header (const gchar* mime_type, gboolean encrypted,
 		}
 		else {
 			/* Normal HTTP/1.1 with Host */
+			if (host == NULL) {
+				host = msg->host->str;
+			}
+
 			if (encrypted) {
-				if (host != NULL) {
-					rspamd_printf_fstring (buf,
-							"%s %s HTTP/1.1\r\n"
-							"Connection: %s\r\n"
-							"Host: %s\r\n"
-							"Content-Length: %z\r\n"
-							"Content-Type: application/octet-stream\r\n",
-							"POST",
-							"/post",
-							conn_type,
-							host,
-							enclen);
-				}
-				else {
-					rspamd_printf_fstring (buf,
-							"%s %s HTTP/1.1\r\n"
-							"Connection: %s\r\n"
-							"Host: %V\r\n"
-							"Content-Length: %z\r\n"
-							"Content-Type: application/octet-stream\r\n",
-							"POST",
-							"/post",
-							conn_type,
-							msg->host,
-							enclen);
-				}
+				rspamd_printf_fstring (buf,
+						"%s %s HTTP/1.1\r\n"
+						"Connection: %s\r\n"
+						"Host: %s\r\n"
+						"Content-Length: %z\r\n"
+						"Content-Type: application/octet-stream\r\n",
+						"POST",
+						"/post",
+						conn_type,
+						host,
+						enclen);
 			}
 			else {
-				if (host != NULL) {
-					rspamd_printf_fstring (buf,
-							"%s %V HTTP/1.1\r\n"
-							"Connection: %s\r\n"
-							"Host: %s\r\n"
-							"Content-Length: %z\r\n",
-							http_method_str (msg->method),
-							msg->url,
-							conn_type,
-							host,
-							bodylen);
-				}
-				else {
-					rspamd_printf_fstring (buf,
-							"%s %V HTTP/1.1\r\n"
-							"Connection: %s\r\n"
-							"Host: %V\r\n"
-							"Content-Length: %z\r\n",
-							http_method_str (msg->method),
-							msg->url,
-							conn_type,
-							msg->host,
-							bodylen);
-				}
+				rspamd_printf_fstring (buf,
+						"%s %V HTTP/1.1\r\n"
+						"Connection: %s\r\n"
+						"Host: %s\r\n"
+						"Content-Length: %z\r\n",
+						http_method_str (msg->method),
+						msg->url,
+						conn_type,
+						host,
+						bodylen);
 
 				if (bodylen > 0) {
 					if (mime_type != NULL) {
diff --git a/src/libutil/http_message.c b/src/libutil/http_message.c
index 0720dc416..13241034c 100644
--- a/src/libutil/http_message.c
+++ b/src/libutil/http_message.c
@@ -104,7 +104,7 @@ rspamd_http_message_from_url (const gchar *url)
 		}
 	}
 
-	msg->host = rspamd_fstring_new_init (host, pu.field_data[UF_HOST].len);
+	msg->host = g_string_new_len (host, pu.field_data[UF_HOST].len);
 	msg->url = rspamd_fstring_append (msg->url, path, pathlen);
 
 	REF_INIT_RETAIN (msg, rspamd_http_message_free);
@@ -489,7 +489,7 @@ rspamd_http_message_free (struct rspamd_http_message *msg)
 		rspamd_fstring_free (msg->status);
 	}
 	if (msg->host != NULL) {
-		rspamd_fstring_free (msg->host);
+		g_string_free (msg->host, TRUE);
 	}
 	if (msg->peer_key != NULL) {
 		rspamd_pubkey_unref (msg->peer_key);
diff --git a/src/libutil/http_private.h b/src/libutil/http_private.h
index dd4ca3435..fbc4c17e3 100644
--- a/src/libutil/http_private.h
+++ b/src/libutil/http_private.h
@@ -43,7 +43,7 @@ struct rspamd_http_header {
  */
 struct rspamd_http_message {
 	rspamd_fstring_t *url;
-	rspamd_fstring_t *host;
+	GString *host;
 	rspamd_fstring_t *status;
 	struct rspamd_http_header *headers;
 
diff --git a/src/lua/lua_http.c b/src/lua/lua_http.c
index 19cf8f2c9..a7b8c0a89 100644
--- a/src/lua/lua_http.c
+++ b/src/lua/lua_http.c
@@ -127,10 +127,6 @@ lua_http_fin (gpointer arg)
 		g_free (cbd->mime_type);
 	}
 
-	if (cbd->host) {
-		g_free (cbd->host);
-	}
-
 	if (cbd->auth) {
 		g_free (cbd->auth);
 	}
@@ -935,7 +931,7 @@ lua_http_request (lua_State *L)
 	}
 
 	if (msg->host) {
-		cbd->host = rspamd_fstring_cstr (msg->host);
+		cbd->host = msg->host->str;
 	}
 
 	if (body) {


More information about the Commits mailing list