diff options
author | Alex Graveley <alex@ximian.com> | 2001-07-19 23:05:41 +0000 |
---|---|---|
committer | Alex Graveley <orph@src.gnome.org> | 2001-07-19 23:05:41 +0000 |
commit | edb75212e12b60d3e4e17ce14075b02802379429 (patch) | |
tree | 810b68b8a0e510e558f8415f548f5a8591a9d0b9 | |
parent | c513d272dc6c192f5172d58a66bee1f96351cfb6 (diff) | |
download | libsoup-edb75212e12b60d3e4e17ce14075b02802379429.tar.gz |
Allow override of http version. Only include Content-Length if method is
2001-07-19 Alex Graveley <alex@ximian.com>
* src/soup-core/soup-queue.c (soup_get_request_header): Allow
override of http version. Only include Content-Length if method is
not GET or HEAD.
* src/soup-core/soup-message.c (soup_message_new): Set default
http_version to SOUP_HTTP_1_1;
(soup_message_set_http_version): Impl.
(soup_message_get_flags): Check for NULL.
* src/soup-core/soup-private.h: Add http_version to _SoupMessagePrivate.
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | libsoup/soup-message.c | 12 | ||||
-rw-r--r-- | libsoup/soup-message.h | 8 | ||||
-rw-r--r-- | libsoup/soup-private.h | 2 | ||||
-rw-r--r-- | libsoup/soup-queue.c | 26 |
5 files changed, 53 insertions, 8 deletions
@@ -1,5 +1,18 @@ 2001-07-19 Alex Graveley <alex@ximian.com>
+ * src/soup-core/soup-queue.c (soup_get_request_header): Allow
+ override of http version. Only include Content-Length if method is
+ not GET or HEAD.
+
+ * src/soup-core/soup-message.c (soup_message_new): Set default
+ http_version to SOUP_HTTP_1_1;
+ (soup_message_set_http_version): Impl.
+ (soup_message_get_flags): Check for NULL.
+
+ * src/soup-core/soup-private.h: Add http_version to _SoupMessagePrivate.
+
+2001-07-19 Alex Graveley <alex@ximian.com>
+
* configure.in: Bump version to 0.4.0.
2001-07-19 Alex Graveley <alex@ximian.com>
diff --git a/libsoup/soup-message.c b/libsoup/soup-message.c index 63adb988..458dd67f 100644 --- a/libsoup/soup-message.c +++ b/libsoup/soup-message.c @@ -114,6 +114,8 @@ soup_message_new (SoupContext *context, SoupAction action) ret->context = context; ret->method = SOUP_METHOD_POST; + ret->priv->http_version = SOUP_HTTP_1_1; + soup_context_ref (context); /* @@ -662,5 +664,15 @@ soup_message_set_flags (SoupMessage *msg, guint flags) guint soup_message_get_flags (SoupMessage *msg) { + g_return_val_if_fail (msg != NULL, 0); + return msg->priv->msg_flags; } + +void +soup_message_set_http_version (SoupMessage *msg, SoupHttpVersion version) +{ + g_return_if_fail (msg != NULL); + + msg->priv->http_version = version; +} diff --git a/libsoup/soup-message.h b/libsoup/soup-message.h index d9108737..e5fa4ddf 100644 --- a/libsoup/soup-message.h +++ b/libsoup/soup-message.h @@ -118,6 +118,14 @@ void soup_message_set_method (SoupMessage *msg, const gchar *soup_message_get_method (SoupMessage *msg); typedef enum { + SOUP_HTTP_1_0 = 0, + SOUP_HTTP_1_1 = 1, +} SoupHttpVersion; + +void soup_message_set_http_version (SoupMessage *msg, + SoupHttpVersion version); + +typedef enum { SOUP_HANDLER_PRE_BODY, SOUP_HANDLER_BODY_CHUNK, SOUP_HANDLER_POST_BODY diff --git a/libsoup/soup-private.h b/libsoup/soup-private.h index 7b705530..0ac0b2ae 100644 --- a/libsoup/soup-private.h +++ b/libsoup/soup-private.h @@ -103,6 +103,8 @@ struct _SoupMessagePrivate { guint msg_flags; GSList *content_handlers; + + SoupHttpVersion http_version; }; typedef struct { diff --git a/libsoup/soup-queue.c b/libsoup/soup-queue.c index 1117c3fe..0798d9b7 100644 --- a/libsoup/soup-queue.c +++ b/libsoup/soup-queue.c @@ -287,7 +287,7 @@ static GString * soup_get_request_header (SoupMessage *req) { GString *header; - gchar *uri; + gchar *uri, *action; SoupContext *proxy; const SoupUri *suri; struct SoupUsedHeaders hdrs = { @@ -313,18 +313,28 @@ soup_get_request_header (SoupMessage *req) uri = g_strdup (suri->path); g_string_sprintfa (header, - "%s %s HTTP/1.1\r\n" - "Content-Length: %d\r\n", + req->priv->http_version == SOUP_HTTP_1_1 ? + "%s %s HTTP/1.1\r\n" : + "%s %s HTTP/1.0\r\n", req->method, - uri, - req->request.length); + uri); + g_free (uri); + if (g_strcasecmp (req->method, "GET") != 0 || + g_strcasecmp (req->method, "HEAD") != 0) { + g_string_sprintfa (header, + "Content-Length: %d\r\n", + req->request.length); + } + if (req->request_headers) g_hash_table_foreach (req->request_headers, (GHFunc) soup_check_used_headers, &hdrs); + action = req->action && !hdrs.soapaction ? req->action : NULL; + /* If we specify an absoluteURI in the request line, the Host header MUST be ignored by the proxy. */ g_string_sprintfa (header, @@ -332,9 +342,9 @@ soup_get_request_header (SoupMessage *req) hdrs.host ? "" : "Host: ", hdrs.host ? "" : suri->host, hdrs.host ? "" : "\r\n", - hdrs.soapaction && req->action ? "" : "SOAPAction: ", - hdrs.soapaction && req->action ? "" : req->action, - hdrs.soapaction && req->action ? "" : "\r\n", + action ? "" : "SOAPAction: ", + action ? "" : req->action, + action ? "" : "\r\n", hdrs.content_type ? "" : "Content-Type: text/xml; ", hdrs.content_type ? "" : "charset=utf-8\r\n", hdrs.connection ? "" : "Connection: keep-alive\r\n", |