summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Graveley <alex@ximian.com>2001-07-19 23:05:41 +0000
committerAlex Graveley <orph@src.gnome.org>2001-07-19 23:05:41 +0000
commitedb75212e12b60d3e4e17ce14075b02802379429 (patch)
tree810b68b8a0e510e558f8415f548f5a8591a9d0b9
parentc513d272dc6c192f5172d58a66bee1f96351cfb6 (diff)
downloadlibsoup-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--ChangeLog13
-rw-r--r--libsoup/soup-message.c12
-rw-r--r--libsoup/soup-message.h8
-rw-r--r--libsoup/soup-private.h2
-rw-r--r--libsoup/soup-queue.c26
5 files changed, 53 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 54a20c59..edad6ef0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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",