libsoup r1071 - in trunk: . libsoup tests



Author: danw
Date: Sun Feb  3 03:13:14 2008
New Revision: 1071
URL: http://svn.gnome.org/viewvc/libsoup?rev=1071&view=rev

Log:
	* libsoup/soup-session.c: fix default connections-per-host again;
	it was defined in two places. Add SOUP_SESSION_USER_AGENT property
	(setup_message): set the User-Agent request header on the request

	* libsoup/soup-server.c: add SOUP_SERVER_SERVER_HEADER property
	(start_request): set the Server response header on the request.

	* tests/get.c:
	* tests/simple-httpd.c: set the User-Agent/Server headers


Modified:
   trunk/ChangeLog
   trunk/libsoup/soup-server.c
   trunk/libsoup/soup-server.h
   trunk/libsoup/soup-session.c
   trunk/libsoup/soup-session.h
   trunk/tests/get.c
   trunk/tests/simple-httpd.c

Modified: trunk/libsoup/soup-server.c
==============================================================================
--- trunk/libsoup/soup-server.c	(original)
+++ trunk/libsoup/soup-server.c	Sun Feb  3 03:13:14 2008
@@ -95,6 +95,8 @@
 	char              *ssl_cert_file, *ssl_key_file;
 	SoupSSLCredentials *ssl_creds;
 
+	char              *server_header;
+
 	GMainLoop         *loop;
 
 	SoupSocket        *listen_sock;
@@ -110,6 +112,8 @@
 } SoupServerPrivate;
 #define SOUP_SERVER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SOUP_TYPE_SERVER, SoupServerPrivate))
 
+#define SOUP_SERVER_SERVER_HEADER_BASE "libsoup/" PACKAGE_VERSION
+
 enum {
 	PROP_0,
 
@@ -119,6 +123,7 @@
 	PROP_SSL_KEY_FILE,
 	PROP_ASYNC_CONTEXT,
 	PROP_RAW_PATHS,
+	PROP_SERVER_HEADER,
 
 	LAST_PROP
 };
@@ -161,6 +166,8 @@
 	if (priv->ssl_creds)
 		soup_ssl_free_server_credentials (priv->ssl_creds);
 
+	g_free (priv->server_header);
+
 	if (priv->listen_sock)
 		g_object_unref (priv->listen_sock);
 
@@ -348,6 +355,14 @@
 				      "If %TRUE, percent-encoding in the Request-URI path will not be automatically decoded.",
 				      FALSE,
 				      G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+
+	g_object_class_install_property (
+		object_class, PROP_SERVER_HEADER,
+		g_param_spec_string (SOUP_SERVER_SERVER_HEADER,
+				     "Server header",
+				     "Server header",
+				     NULL,
+				     G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 }
 
 static GObject *
@@ -406,6 +421,7 @@
 	      const GValue *value, GParamSpec *pspec)
 {
 	SoupServerPrivate *priv = SOUP_SERVER_GET_PRIVATE (object);
+	const char *header;
 
 	switch (prop_id) {
 	case PROP_PORT:
@@ -434,6 +450,21 @@
 	case PROP_RAW_PATHS:
 		priv->raw_paths = g_value_get_boolean (value);
 		break;
+	case PROP_SERVER_HEADER:
+		g_free (priv->server_header);
+		header = g_value_get_string (value);
+		if (!header)
+			priv->server_header = NULL;
+		else if (!*header) {
+			priv->server_header =
+				g_strdup (SOUP_SERVER_SERVER_HEADER_BASE);
+		} else if (g_str_has_suffix (header, " ")) {
+			priv->server_header =
+				g_strdup_printf ("%s%s", header,
+						 SOUP_SERVER_SERVER_HEADER_BASE);
+		} else
+			priv->server_header = g_strdup (header);
+		break;
 	default:
 		break;
 	}
@@ -464,6 +495,9 @@
 	case PROP_RAW_PATHS:
 		g_value_set_boolean (value, priv->raw_paths);
 		break;
+	case PROP_SERVER_HEADER:
+		g_value_set_string (value, priv->server_header);
+		break;
 	default:
 		break;
 	}
@@ -735,6 +769,7 @@
 static void
 start_request (SoupServer *server, SoupClientContext *client)
 {
+	SoupServerPrivate *priv = SOUP_SERVER_GET_PRIVATE (server);
 	SoupMessage *msg;
 
 	soup_client_context_cleanup (client);
@@ -743,6 +778,10 @@
 	msg = g_object_new (SOUP_TYPE_MESSAGE, NULL);
         soup_message_headers_set_encoding (msg->response_headers,
                                            SOUP_ENCODING_CONTENT_LENGTH);
+	if (priv->server_header) {
+		soup_message_headers_append (msg->response_headers, "Server",
+					     priv->server_header);
+	}
 
 	g_signal_connect (msg, "got_headers", G_CALLBACK (got_headers), client);
 	g_signal_connect (msg, "got_body", G_CALLBACK (call_handler), client);

Modified: trunk/libsoup/soup-server.h
==============================================================================
--- trunk/libsoup/soup-server.h	(original)
+++ trunk/libsoup/soup-server.h	Sun Feb  3 03:13:14 2008
@@ -62,6 +62,7 @@
 #define SOUP_SERVER_SSL_KEY_FILE  "ssl-key-file"
 #define SOUP_SERVER_ASYNC_CONTEXT "async-context"
 #define SOUP_SERVER_RAW_PATHS     "raw-paths"
+#define SOUP_SERVER_SERVER_HEADER "server-header"
 
 SoupServer        *soup_server_new            (const char            *optname1,
 					       ...) G_GNUC_NULL_TERMINATED;

Modified: trunk/libsoup/soup-session.c
==============================================================================
--- trunk/libsoup/soup-session.c	(original)
+++ trunk/libsoup/soup-session.c	Sun Feb  3 03:13:14 2008
@@ -55,6 +55,8 @@
 
 	SoupMessageQueue *queue;
 
+	char *user_agent;
+
 	SoupAuthManager *auth_manager;
 	SoupAuthManagerNTLM *ntlm_manager;
 
@@ -92,7 +94,9 @@
 extern SoupURI  *soup_uri_copy_root  (SoupURI *uri);
 
 #define SOUP_SESSION_MAX_CONNS_DEFAULT 10
-#define SOUP_SESSION_MAX_CONNS_PER_HOST_DEFAULT 4
+#define SOUP_SESSION_MAX_CONNS_PER_HOST_DEFAULT 2
+
+#define SOUP_SESSION_USER_AGENT_BASE "libsoup/" PACKAGE_VERSION
 
 G_DEFINE_TYPE (SoupSession, soup_session, G_TYPE_OBJECT)
 
@@ -114,6 +118,7 @@
 	PROP_SSL_CA_FILE,
 	PROP_ASYNC_CONTEXT,
 	PROP_TIMEOUT,
+	PROP_USER_AGENT,
 
 	LAST_PROP
 };
@@ -296,7 +301,7 @@
 				  "The maximum number of connections that the session can open at once",
 				  1,
 				  G_MAXINT,
-				  10,
+				  SOUP_SESSION_MAX_CONNS_DEFAULT,
 				  G_PARAM_READWRITE));
 	g_object_class_install_property (
 		object_class, PROP_MAX_CONNS_PER_HOST,
@@ -305,7 +310,7 @@
 				  "The maximum number of connections that the session can open at once to a given host",
 				  1,
 				  G_MAXINT,
-				  2,
+				  SOUP_SESSION_MAX_CONNS_PER_HOST_DEFAULT,
 				  G_PARAM_READWRITE));
 	g_object_class_install_property (
 		object_class, PROP_USE_NTLM,
@@ -334,6 +339,13 @@
 				   "Value in seconds to timeout a blocking I/O",
 				   0, G_MAXUINT, 0,
 				   G_PARAM_READWRITE));
+	g_object_class_install_property (
+		object_class, PROP_USER_AGENT,
+		g_param_spec_string (SOUP_SESSION_USER_AGENT,
+				     "User-Agent string",
+				     "User-Agent string",
+				     NULL,
+				     G_PARAM_READWRITE));
 }
 
 static gboolean
@@ -369,7 +381,7 @@
 	SoupURI *uri;
 	gboolean need_abort = FALSE;
 	gboolean ca_file_changed = FALSE;
-	const char *new_ca_file;
+	const char *new_ca_file, *user_agent;
 
 	switch (prop_id) {
 	case PROP_PROXY_URI:
@@ -433,6 +445,21 @@
 	case PROP_TIMEOUT:
 		priv->timeout = g_value_get_uint (value);
 		break;
+	case PROP_USER_AGENT:
+		g_free (priv->user_agent);
+		user_agent = g_value_get_string (value);
+		if (!user_agent)
+			priv->user_agent = NULL;
+		else if (!*user_agent) {
+			priv->user_agent =
+				g_strdup (SOUP_SESSION_USER_AGENT_BASE);
+		} else if (g_str_has_suffix (user_agent, " ")) {
+			priv->user_agent =
+				g_strdup_printf ("%s%s", user_agent,
+						 SOUP_SESSION_USER_AGENT_BASE);
+		} else
+			priv->user_agent = g_strdup (user_agent);
+		break;
 	default:
 		break;
 	}
@@ -467,6 +494,9 @@
 	case PROP_TIMEOUT:
 		g_value_set_uint (value, priv->timeout);
 		break;
+	case PROP_USER_AGENT:
+		g_value_set_string (value, priv->user_agent);
+		break;
 	default:
 		break;
 	}
@@ -626,6 +656,12 @@
 			    gpointer data)
 {
 	SoupSession *session = data;
+	SoupSessionPrivate *priv = SOUP_SESSION_GET_PRIVATE (session);
+
+	if (priv->user_agent) {
+		soup_message_headers_replace (msg->request_headers,
+					      "User-Agent", priv->user_agent);
+	}
 
 	g_signal_emit (session, signals[REQUEST_STARTED], 0,
 		       msg, soup_connection_get_socket (conn));

Modified: trunk/libsoup/soup-session.h
==============================================================================
--- trunk/libsoup/soup-session.h	(original)
+++ trunk/libsoup/soup-session.h	Sun Feb  3 03:13:14 2008
@@ -62,6 +62,7 @@
 #define SOUP_SESSION_SSL_CA_FILE        "ssl-ca-file"
 #define SOUP_SESSION_ASYNC_CONTEXT      "async-context"
 #define SOUP_SESSION_TIMEOUT		"timeout"
+#define SOUP_SESSION_USER_AGENT         "user-agent"
 
 GMainContext   *soup_session_get_async_context(SoupSession           *session);
 

Modified: trunk/tests/get.c
==============================================================================
--- trunk/tests/get.c	(original)
+++ trunk/tests/get.c	Sun Feb  3 03:13:14 2008
@@ -286,11 +286,13 @@
 		session = soup_session_sync_new_with_options (
 			SOUP_SESSION_SSL_CA_FILE, cafile,
 			SOUP_SESSION_PROXY_URI, proxy,
+			SOUP_SESSION_USER_AGENT, "get ",
 			NULL);
 	} else {
 		session = soup_session_async_new_with_options (
 			SOUP_SESSION_SSL_CA_FILE, cafile,
 			SOUP_SESSION_PROXY_URI, proxy,
+			SOUP_SESSION_USER_AGENT, "get ",
 			NULL);
 	}
 

Modified: trunk/tests/simple-httpd.c
==============================================================================
--- trunk/tests/simple-httpd.c	(original)
+++ trunk/tests/simple-httpd.c	Sun Feb  3 03:13:14 2008
@@ -197,6 +197,7 @@
 	}
 
 	server = soup_server_new (SOUP_SERVER_PORT, port,
+				  SOUP_SERVER_SERVER_HEADER, "simple-httpd ",
 				  NULL);
 	if (!server) {
 		fprintf (stderr, "Unable to bind to server port %d\n", port);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]