libsoup r1108 - in trunk: . libsoup tests
- From: danw svn gnome org
- To: svn-commits-list gnome org
- Subject: libsoup r1108 - in trunk: . libsoup tests
- Date: Fri, 14 Mar 2008 23:09:43 +0000 (GMT)
Author: danw
Date: Fri Mar 14 23:09:43 2008
New Revision: 1108
URL: http://svn.gnome.org/viewvc/libsoup?rev=1108&view=rev
Log:
* libsoup/soup-message-private.h (SoupMessagePrivate): add
an orig_http_version field.
* libsoup/soup-message.c (soup_message_init): initialize
orig_http_version.
(soup_message_set_http_version): If called before the status code
is received, set orig_http_version too.
(soup_message_cleanup_response): Restore orig_http_version, so
that we don't send an HTTP/1.0 request in response to an HTTP/1.0
redirect. #521848, Tommi Komulainen.
* libsoup/soup-message-server-io.c (get_response_headers):
actually output "HTTP/1.0", not "HTTP/1.1", if the message's http
version is 1.0.
* tests/redirect-test.c (server_callback): Add a regression test;
set http_version to 1.0 when returning a redirect, but require it
to be 1.1 when processing the following request
Modified:
trunk/ChangeLog
trunk/libsoup/soup-message-private.h
trunk/libsoup/soup-message-server-io.c
trunk/libsoup/soup-message.c
trunk/tests/redirect-test.c
Modified: trunk/libsoup/soup-message-private.h
==============================================================================
--- trunk/libsoup/soup-message-private.h (original)
+++ trunk/libsoup/soup-message-private.h Fri Mar 14 23:09:43 2008
@@ -28,7 +28,7 @@
guint msg_flags;
- SoupHTTPVersion http_version;
+ SoupHTTPVersion http_version, orig_http_version;
SoupURI *uri;
Modified: trunk/libsoup/soup-message-server-io.c
==============================================================================
--- trunk/libsoup/soup-message-server-io.c (original)
+++ trunk/libsoup/soup-message-server-io.c Fri Mar 14 23:09:43 2008
@@ -100,7 +100,8 @@
SoupMessageHeadersIter iter;
const char *name, *value;
- g_string_append_printf (headers, "HTTP/1.1 %d %s\r\n",
+ g_string_append_printf (headers, "HTTP/1.%c %d %s\r\n",
+ soup_message_get_http_version (msg) == SOUP_HTTP_1_0 ? '0' : '1',
msg->status_code, msg->reason_phrase);
claimed_encoding = soup_message_headers_get_encoding (msg->response_headers);
Modified: trunk/libsoup/soup-message.c
==============================================================================
--- trunk/libsoup/soup-message.c (original)
+++ trunk/libsoup/soup-message.c Fri Mar 14 23:09:43 2008
@@ -118,7 +118,7 @@
SoupMessagePrivate *priv = SOUP_MESSAGE_GET_PRIVATE (msg);
priv->io_status = SOUP_MESSAGE_IO_STATUS_IDLE;
- priv->http_version = SOUP_HTTP_1_1;
+ priv->http_version = priv->orig_http_version = SOUP_HTTP_1_1;
msg->request_body = soup_message_body_new ();
msg->request_headers = soup_message_headers_new (SOUP_MESSAGE_HEADERS_REQUEST);
@@ -1032,6 +1032,8 @@
void
soup_message_cleanup_response (SoupMessage *req)
{
+ SoupMessagePrivate *priv = SOUP_MESSAGE_GET_PRIVATE (req);
+
soup_message_body_truncate (req->response_body);
soup_message_headers_clear (req->response_headers);
@@ -1040,8 +1042,11 @@
g_free ((char *) req->reason_phrase);
req->reason_phrase = NULL;
}
+ priv->http_version = priv->orig_http_version;
+
g_object_notify (G_OBJECT (req), SOUP_MESSAGE_STATUS_CODE);
g_object_notify (G_OBJECT (req), SOUP_MESSAGE_REASON_PHRASE);
+ g_object_notify (G_OBJECT (req), SOUP_MESSAGE_HTTP_VERSION);
}
/**
@@ -1110,9 +1115,14 @@
void
soup_message_set_http_version (SoupMessage *msg, SoupHTTPVersion version)
{
+ SoupMessagePrivate *priv;
+
g_return_if_fail (SOUP_IS_MESSAGE (msg));
+ priv = SOUP_MESSAGE_GET_PRIVATE (msg);
- SOUP_MESSAGE_GET_PRIVATE (msg)->http_version = version;
+ priv->http_version = version;
+ if (msg->status_code == SOUP_STATUS_NONE)
+ priv->orig_http_version = version;
g_object_notify (G_OBJECT (msg), SOUP_MESSAGE_HTTP_VERSION);
}
Modified: trunk/tests/redirect-test.c
==============================================================================
--- trunk/tests/redirect-test.c (original)
+++ trunk/tests/redirect-test.c Fri Mar 14 23:09:43 2008
@@ -199,6 +199,14 @@
return;
}
+ /* Make sure that a HTTP/1.0 redirect doesn't cause an
+ * HTTP/1.0 re-request. (#521848)
+ */
+ if (soup_message_get_http_version (msg) == SOUP_HTTP_1_0) {
+ soup_message_set_status (msg, SOUP_STATUS_BAD_REQUEST);
+ return;
+ }
+
soup_message_set_status (msg, SOUP_STATUS_OK);
soup_message_set_response (msg, "text/plain",
SOUP_MEMORY_STATIC,
@@ -213,6 +221,9 @@
return;
}
+ /* See above comment re bug 521848. */
+ soup_message_set_http_version (msg, SOUP_HTTP_1_0);
+
soup_message_set_status (msg, status_code);
if (*remainder) {
soup_message_headers_replace (msg->response_headers,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]