rpms/rhythmbox/devel soup24.patch, NONE, 1.1 rhythmbox.spec, 1.160, 1.161

Matthias Clasen (mclasen) fedora-extras-commits at redhat.com
Tue Jan 29 20:37:13 UTC 2008


Author: mclasen

Update of /cvs/extras/rpms/rhythmbox/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv13673

Modified Files:
	rhythmbox.spec 
Added Files:
	soup24.patch 
Log Message:
port to libsoup 2.4


soup24.patch:

--- NEW FILE soup24.patch ---
Index: configure.ac
===================================================================
--- configure.ac	(revision 5543)
+++ configure.ac	(working copy)
@@ -441,15 +441,9 @@
 dnl Check for libsoup, needed for DAAP and audioscrobbler
 if test "x$enable_daap" = "xyes" || test "x$enable_audioscrobbler" != "xno"; then
 	PKG_CHECK_MODULES(SOUP,                            \
-		libsoup-2.2,
+		libsoup-2.4,
 		have_libsoup=yes,
 		have_libsoup=no)
-	if test x"$have_libsoup" = "xno"; then
-		PKG_CHECK_MODULES(SOUP,
-			libsoup-2.4,
-			have_libsoup=yes,
-			have_libsoup=no)
-	fi
 	if test x"$have_libsoup" = "xyes"; then
 		AC_DEFINE(HAVE_LIBSOUP, 1, [Define if libsoup support is enabled])
 	fi
@@ -513,15 +507,10 @@
 
 
 
-AC_PATH_X
+AC_PATH_XTRA
+CFLAGS="$CFLAGS $X_CFLAGS"
+#LIBS=$X_LIBS
 
-if test x"$x_includes" != x"NONE" && test -n "$x_includes" ; then
-	CFLAGS=$CFLAGS -I`echo $x_includes | sed -e "s/:/ -I/g"`
-fi
-if test x"$x_libraries" != x"NONE" && test -n "$x_libraries" ; then
-	LIBS=-L`echo $x_libraries | sed -e "s/:/ -L/g"`
-fi
-
 have_xidle=no
 AC_COMPILE_IFELSE([
 	#include <X11/extensions/xidle.h>
Index: lib/rb-proxy-config.c
===================================================================
--- lib/rb-proxy-config.c	(revision 5543)
+++ lib/rb-proxy-config.c	(working copy)
@@ -232,22 +232,22 @@
 }
 
 #if defined(HAVE_LIBSOUP)
-SoupUri *
+SoupURI *
 rb_proxy_config_get_libsoup_uri (RBProxyConfig *config)
 {
-	SoupUri *uri = NULL;
+	SoupURI *uri = NULL;
 
 	if (!config->enabled)
 		return NULL;
 
-	uri = g_new0 (SoupUri, 1);
-	uri->protocol = SOUP_PROTOCOL_HTTP;
+	uri = soup_uri_new (NULL);
+	soup_uri_set_scheme (uri, SOUP_URI_SCHEME_HTTP);
+	soup_uri_set_host (uri, config->host);
+	soup_uri_set_port (uri, config->port);
 
-	uri->host = g_strdup (config->host);
-	uri->port = config->port;
 	if (config->auth_enabled) {
-		uri->user = g_strdup (config->username);
-		uri->passwd = g_strdup (config->password);
+		soup_uri_set_user (uri, config->username);
+		soup_uri_set_password (uri, config->password);
 	}
 
 	return uri;
Index: lib/rb-proxy-config.h
===================================================================
--- lib/rb-proxy-config.h	(revision 5543)
+++ lib/rb-proxy-config.h	(working copy)
@@ -25,7 +25,6 @@
 
 #if defined(HAVE_LIBSOUP)
 #include <libsoup/soup.h>
-#include <libsoup/soup-uri.h>
 #endif
 
 G_BEGIN_DECLS
@@ -66,7 +65,7 @@
 RBProxyConfig *	rb_proxy_config_new (void);
 
 #if defined(HAVE_LIBSOUP)
-SoupUri *	rb_proxy_config_get_libsoup_uri (RBProxyConfig *config);
+SoupURI *	rb_proxy_config_get_libsoup_uri (RBProxyConfig *config);
 #endif
 
 #endif	/* RB_PROXY_CONFIG_H */
Index: plugins/audioscrobbler/rb-audioscrobbler.c
===================================================================
--- plugins/audioscrobbler/rb-audioscrobbler.c	(revision 5543)
+++ plugins/audioscrobbler/rb-audioscrobbler.c	(working copy)
@@ -36,7 +36,6 @@
 #include <gconf/gconf-value.h>
 
 #include <libsoup/soup.h>
-#include <libsoup/soup-uri.h>
 
 #include "config.h"
 #include "eel-gconf-extensions.h"
@@ -196,11 +195,11 @@
 static void	     rb_audioscrobbler_perform (RBAudioscrobbler *audioscrobbler,
 					       char *url,
 					       char *post_data,
-						   SoupMessageCallbackFn response_handler);
+						   SoupSessionCallback response_handler);
 static void	     rb_audioscrobbler_do_handshake (RBAudioscrobbler *audioscrobbler);
-static void	     rb_audioscrobbler_do_handshake_cb (SoupMessage *msg, gpointer user_data);
+static void	     rb_audioscrobbler_do_handshake_cb (SoupSession *session, SoupMessage *msg, gpointer user_data);
 static void	     rb_audioscrobbler_submit_queue (RBAudioscrobbler *audioscrobbler);
-static void	     rb_audioscrobbler_submit_queue_cb (SoupMessage *msg, gpointer user_data);
+static void	     rb_audioscrobbler_submit_queue_cb (SoupSession *session, SoupMessage *msg, gpointer user_data);
 
 static void	     rb_audioscrobbler_import_settings (RBAudioscrobbler *audioscrobbler);
 static void	     rb_audioscrobbler_preferences_sync (RBAudioscrobbler *audioscrobbler);
@@ -690,17 +689,12 @@
 {
 	rb_debug ("Parsing response, status=%d", msg->status_code);
 
-	if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code) && (msg->response).body != NULL) {
-		gchar *body;
+	if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code) && msg->response_body->length != 0) {
 		gchar **breaks;
-
-		body = g_malloc0 ((msg->response).length + 1);
-		memcpy (body, (msg->response).body, (msg->response).length);
-
-		g_strstrip (body);
-		breaks = g_strsplit (body, "\n", 4);
 		int i;
 
+		breaks = g_strsplit (msg->response_body->data, "\n", 4);
+
 		g_free (audioscrobbler->priv->status_msg);
 		audioscrobbler->priv->status = STATUS_OK;
 		audioscrobbler->priv->status_msg = NULL;
@@ -771,10 +765,9 @@
 			audioscrobbler->priv->submit_next = time(NULL) + audioscrobbler->priv->submit_interval;
 
 		g_strfreev (breaks);
-		g_free (body);
 	} else {
 		audioscrobbler->priv->status = REQUEST_FAILED;
-		audioscrobbler->priv->status_msg = g_strdup (soup_status_get_phrase (msg->status_code));
+		audioscrobbler->priv->status_msg = g_strdup (msg->reason_phrase);
 	}
 }
 
@@ -793,7 +786,7 @@
 rb_audioscrobbler_perform (RBAudioscrobbler *audioscrobbler,
 			   char *url,
 			   char *post_data,
-			   SoupMessageCallbackFn response_handler)
+			   SoupSessionCallback response_handler)
 {
 	SoupMessage *msg;
 
@@ -803,14 +796,14 @@
 		rb_debug ("Submitting to Audioscrobbler: %s", post_data);
 		soup_message_set_request (msg,
 					  "application/x-www-form-urlencoded",
-					  SOUP_BUFFER_SYSTEM_OWNED,
+					  SOUP_MEMORY_TAKE,
 					  post_data,
 					  strlen (post_data));
 	}
 
 	/* create soup session, if we haven't got one yet */
 	if (!audioscrobbler->priv->soup_session) {
-		SoupUri *uri;
+		SoupURI *uri;
 
 		uri = rb_proxy_config_get_libsoup_uri (audioscrobbler->priv->proxy_config);
 		audioscrobbler->priv->soup_session = soup_session_async_new_with_options (
@@ -892,7 +885,7 @@
 
 
 static void
-rb_audioscrobbler_do_handshake_cb (SoupMessage *msg, gpointer user_data)
+rb_audioscrobbler_do_handshake_cb (SoupSession *session, SoupMessage *msg, gpointer user_data)
 {
 	RBAudioscrobbler *audioscrobbler = RB_AUDIOSCROBBLER(user_data);
 
@@ -1050,7 +1043,7 @@
 }
 
 static void
-rb_audioscrobbler_submit_queue_cb (SoupMessage *msg, gpointer user_data)
+rb_audioscrobbler_submit_queue_cb (SoupSession *session, SoupMessage *msg, gpointer user_data)
 {
 	RBAudioscrobbler *audioscrobbler = RB_AUDIOSCROBBLER (user_data);
 
@@ -1232,7 +1225,7 @@
 rb_audioscrobbler_proxy_config_changed_cb (RBProxyConfig *config,
 					   RBAudioscrobbler *audioscrobbler)
 {
-	SoupUri *uri;
+	SoupURI *uri;
 
 	if (audioscrobbler->priv->soup_session) {
 		uri = rb_proxy_config_get_libsoup_uri (config);
Index: plugins/audioscrobbler/rb-lastfm-source.c
===================================================================
--- plugins/audioscrobbler/rb-lastfm-source.c	(revision 5543)
+++ plugins/audioscrobbler/rb-lastfm-source.c	(working copy)
@@ -43,7 +43,6 @@
 #include <gconf/gconf-value.h>
 
 #include <libsoup/soup.h>
-#include <libsoup/soup-uri.h>
 
 #include "md5.h"
 
@@ -100,8 +99,8 @@
 static void rb_lastfm_perform (RBLastfmSource *lastfm,
 			       const char *url,
 			       char *post_data, /* this takes ownership */
-			       SoupMessageCallbackFn response_handler);
-static void rb_lastfm_message_cb (SoupMessage *req, gpointer user_data);
+			       SoupSessionCallback response_handler);
+static void rb_lastfm_message_cb (SoupSession *session, SoupMessage *req, gpointer user_data);
 static void rb_lastfm_change_station (RBLastfmSource *source, const char *station);
 
 static void rb_lastfm_proxy_config_changed_cb (RBProxyConfig *config,
@@ -724,7 +723,7 @@
 rb_lastfm_perform (RBLastfmSource *source,
 		   const char *url,
 		   char *post_data,
-		   SoupMessageCallbackFn response_handler)
+		   SoupSessionCallback response_handler)
 {
 	SoupMessage *msg;
 	msg = soup_message_new ("GET", url);
@@ -732,22 +731,20 @@
 	if (msg == NULL)
 		return;
 
-	soup_message_set_http_version (msg, SOUP_HTTP_1_1);
-
 	rb_debug ("Last.fm communicating with %s", url);
 
 	if (post_data != NULL) {
 		rb_debug ("POST data: %s", post_data);
 		soup_message_set_request (msg,
 					  "application/x-www-form-urlencoded",
-					  SOUP_BUFFER_SYSTEM_OWNED,
+					  SOUP_MEMORY_TAKE,
 					  post_data,
 					  strlen (post_data));
 	}
 
 	/* create soup session, if we haven't got one yet */
 	if (!source->priv->soup_session) {
-		SoupUri *uri;
+		SoupURI *uri;
 
 		uri = rb_proxy_config_get_libsoup_uri (source->priv->proxy_config);
 		source->priv->soup_session = soup_session_async_new_with_options (
@@ -759,36 +756,31 @@
 
 	soup_session_queue_message (source->priv->soup_session,
 				    msg,
-				    (SoupMessageCallbackFn) response_handler,
+				    response_handler,
 				    source);
 	source->priv->status = COMMUNICATING;
 	rb_source_notify_status_changed (RB_SOURCE(source));
 }
 
 static void
-rb_lastfm_message_cb (SoupMessage *req, gpointer user_data)
+rb_lastfm_message_cb (SoupSession *session, SoupMessage *req, gpointer user_data)
 {
 	RBLastfmSource *source = RB_LASTFM_SOURCE (user_data);
-	char *body;
 	char **pieces;
 	int i;
 
-	if ((req->response).body == NULL) {
+	if (req->response_body->length == 0) {
 		rb_debug ("Lastfm: Server failed to respond");
 		return;
 	}
 
-	body = g_malloc0 ((req->response).length + 1);
-	memcpy (body, (req->response).body, (req->response).length);
+	rb_debug ("response body: %s", req->response_body->data);
 
-	rb_debug ("response body: %s", body);
-
-	if (strstr (body, "ERROR - no such artist") != NULL) {
+	if (strstr (req->response_body->data, "ERROR - no such artist") != NULL) {
 		source->priv->status = NO_ARTIST;
 	}
 
-	g_strstrip (body);
-	pieces = g_strsplit (body, "\n", 0);
+	pieces = g_strsplit (req->response_body->data, "\n", 0);
 	for (i = 0; pieces[i] != NULL; i++) {
 		gchar **values = g_strsplit (pieces[i], "=", 2);
 		if (strcmp (values[0], "session") == 0) {
@@ -856,10 +848,10 @@
 			rhythmdb_commit (source->priv->db);
 
 		}
+		g_strfreev (values);
 	}
 
 	g_strfreev (pieces);
-	g_free (body);
 
 	/* doesn't work yet
 	if (source->priv->pending_entry) {
@@ -898,7 +890,7 @@
 rb_lastfm_proxy_config_changed_cb (RBProxyConfig *config,
 					   RBLastfmSource *source)
 {
-	SoupUri *uri;
+	SoupURI *uri;
 
 	if (source->priv->soup_session) {
 		uri = rb_proxy_config_get_libsoup_uri (config);
@@ -1164,9 +1156,8 @@
 }
 
 static void
-rb_lastfm_source_metadata_cb (SoupMessage *req, RBLastfmSource *source)
+rb_lastfm_source_metadata_cb (SoupSession *session, SoupMessage *req, RBLastfmSource *source)
 {
-	char *body;
 	char **pieces;
 	int p;
 	RhythmDBEntry *entry;
@@ -1179,11 +1170,8 @@
 	}
 
 	rb_debug ("got response to metadata request");
-	body = g_malloc0 ((req->response).length + 1);
-	memcpy (body, (req->response).body, (req->response).length);
 
-	g_strstrip (body);
-	pieces = g_strsplit (body, "\n", 0);
+	pieces = g_strsplit (req->response_body->data, "\n", 0);
 	found_cover = FALSE;
 
 	for (p = 0; pieces[p] != NULL; p++) {
@@ -1238,7 +1226,6 @@
 	}
 
 	g_strfreev (pieces);
-	g_free (body);
 
 	if (found_cover == FALSE) {
 		GValue v = {0,};
@@ -1271,7 +1258,7 @@
 			       source->priv->base_url,
 			       source->priv->base_path,
 			       source->priv->session);
-	rb_lastfm_perform (source, uri, NULL, (SoupMessageCallbackFn) rb_lastfm_source_metadata_cb);
+	rb_lastfm_perform (source, uri, NULL, (SoupSessionCallback) rb_lastfm_source_metadata_cb);
 	g_free (uri);
 
 	/* re-enable actions */
Index: plugins/audioscrobbler/rb-lastfm-gst-src.c
===================================================================
--- plugins/audioscrobbler/rb-lastfm-gst-src.c	(revision 5543)
+++ plugins/audioscrobbler/rb-lastfm-gst-src.c	(working copy)
@@ -25,7 +25,6 @@
 
 #include "rb-debug.h"
 
-#include <libsoup/soup.h>
 #include <gst/gst.h>
 
 #define RB_TYPE_LASTFM_SRC (rb_lastfm_src_get_type())
Index: plugins/daap/rb-daap-plugin.c
===================================================================
--- plugins/daap/rb-daap-plugin.c	(revision 5543)
+++ plugins/daap/rb-daap-plugin.c	(working copy)
@@ -30,7 +30,6 @@
 #include <glib-object.h>
 
 #include <libsoup/soup.h>
-#include <libsoup/soup-address.h>
 
 #include "rb-daap-plugin.h"
 #include "rb-debug.h"
@@ -646,7 +645,7 @@
 	addr = soup_address_new (host, port);
 	g_free (host);
 
-	soup_address_resolve_async (addr,
+	soup_address_resolve_async (addr, NULL, NULL,
 				    (SoupAddressCallback) new_daap_share_resolve_cb,
 				    data);
 }
Index: plugins/daap/rb-daap-connection.c
===================================================================
--- plugins/daap/rb-daap-connection.c	(revision 5543)
+++ plugins/daap/rb-daap-connection.c	(working copy)
@@ -34,9 +34,6 @@
 #include <gdk/gdk.h>
 
 #include <libsoup/soup.h>
-#include <libsoup/soup-connection.h>
-#include <libsoup/soup-session-sync.h>
-#include <libsoup/soup-uri.h>
 
 #include "rb-daap-hash.h"
 #include "rb-daap-connection.h"
@@ -84,7 +81,7 @@
 	gboolean is_connecting;
 
 	SoupSession *session;
-	SoupUri *base_uri;
+	SoupURI *base_uri;
 	gchar *daap_base_uri;
 
 	gdouble daap_version;
@@ -329,7 +326,7 @@
 {
 	RBDAAPConnectionPrivate *priv = connection->priv;
 	SoupMessage *message = NULL;
-	SoupUri *uri = NULL;
+	SoupURI *uri = NULL;
 
 	uri = soup_uri_new_with_base (priv->base_uri, path);
 	if (uri == NULL) {
@@ -337,14 +334,13 @@
 	}
 
 	message = soup_message_new_from_uri (SOUP_METHOD_GET, uri);
-	soup_message_set_http_version (message, SOUP_HTTP_1_1);
 
-	soup_message_add_header (message->request_headers, "Client-DAAP-Version", 	"3.0");
-	soup_message_add_header (message->request_headers, "Accept-Language", 		"en-us, en;q=5.0");
+	soup_message_headers_append (message->request_headers, "Client-DAAP-Version",		"3.0");
+	soup_message_headers_append (message->request_headers, "Accept-Language", 		"en-us, en;q=5.0");
 #ifdef HAVE_LIBZ
-	soup_message_add_header (message->request_headers, "Accept-Encoding",		"gzip");
+	soup_message_headers_append (message->request_headers, "Accept-Encoding",		"gzip");
 #endif
-	soup_message_add_header (message->request_headers, "Client-DAAP-Access-Index", 	"2");
+	soup_message_headers_append (message->request_headers, "Client-DAAP-Access-Index", 	"2");
 
 	if (priv->password_protected) {
 		char *h;
@@ -352,13 +348,13 @@
 		char *token;
 
 		user_pass = g_strdup_printf ("%s:%s", priv->username, priv->password);
-		token = soup_base64_encode (user_pass, strlen (user_pass));
+		token = g_base64_encode ((guchar *)user_pass, strlen (user_pass));
 		h = g_strdup_printf ("Basic %s", token);
 
 		g_free (token);
 		g_free (user_pass);
 
-		soup_message_add_header (message->request_headers, "Authorization", h);
+		soup_message_headers_append (message->request_headers, "Authorization", h);
 		g_free (h);
 	}
 
@@ -372,10 +368,10 @@
 
 		rb_daap_hash_generate ((short)floor (version), (const guchar*)no_daap_path, 2, (guchar*)hash, req_id);
 
-		soup_message_add_header (message->request_headers, "Client-DAAP-Validation", hash);
+		soup_message_headers_append (message->request_headers, "Client-DAAP-Validation", hash);
 	}
 	if (send_close) {
-		soup_message_add_header (message->request_headers, "Connection", "close");
+		soup_message_headers_append (message->request_headers, "Connection", "close");
 	}
 
 	soup_uri_free (uri);
@@ -425,16 +421,17 @@
 {
 	RBDAAPConnectionPrivate *priv;
 	GNode *structure;
-	char *response;
+	const char *response;
+	char *new_response = NULL;
 	const char *encoding_header;
 	char *message_path;
 	int response_length;
 
 	priv = data->connection->priv;
 	structure = NULL;
-	response = data->message->response.body;
+	response = data->message->response_body->data;
 	encoding_header = NULL;
-	response_length = data->message->response.length;
+	response_length = data->message->response_body->length;
 
 	message_path = soup_uri_to_string (soup_message_get_uri (data->message), FALSE);
 
@@ -444,13 +441,12 @@
 		  data->message->reason_phrase);
 
 	if (data->message->response_headers) {
-		encoding_header = soup_message_get_header (data->message->response_headers, "Content-Encoding");
+		encoding_header = soup_message_headers_get (data->message->response_headers, "Content-Encoding");
 	}
 
 	if (SOUP_STATUS_IS_SUCCESSFUL (data->status) && encoding_header && strcmp (encoding_header, "gzip") == 0) {
 #ifdef HAVE_LIBZ
 		z_stream stream;
-		char *new_response;
 		unsigned int factor = 4;
 		unsigned int unc_size = response_length * factor;
 
@@ -575,10 +571,7 @@
 		rb_daap_structure_destroy (structure);
 	}
 
-	if (response != data->message->response.body) {
-		g_free (response);
-	}
-
+	g_free (new_response);
 	g_free (message_path);
 	g_object_unref (G_OBJECT (data->connection));
 	g_object_unref (G_OBJECT (data->message));
@@ -586,7 +579,8 @@
 }
 
 static void
-http_response_handler (SoupMessage      *message,
+http_response_handler (SoupSession      *session,
+		       SoupMessage      *message,
 		       RBDAAPConnection *connection)
 {
 	DAAPResponseData *data;
@@ -599,7 +593,7 @@
 
 	data = g_new0 (DAAPResponseData, 1);
 	data->status = message->status_code;
-	response_length = message->response.length;
+	response_length = message->response_body->length;
 
 	g_object_ref (G_OBJECT (connection));
 	data->connection = connection;
@@ -655,7 +649,7 @@
 	priv->use_response_handler_thread = use_thread;
 	priv->response_handler = handler;
 	soup_session_queue_message (priv->session, message,
-				    (SoupMessageCallbackFn) http_response_handler,
+				    (SoupSessionCallback) http_response_handler,
 				    connection);
 	rb_debug ("Queued message for http://%s:%d/%s",
 		  priv->base_uri->host,
@@ -1674,7 +1668,7 @@
 		char *token;
 
 		user_pass = g_strdup_printf ("%s:%s", priv->username, priv->password);
-		token = soup_base64_encode (user_pass, strlen (user_pass));
+		token = g_base64_encode ((guchar *)user_pass, strlen (user_pass));
 		g_string_append_printf (headers, "Authentication: Basic %s\r\n", token);
 		g_free (token);
 		g_free (user_pass);
Index: plugins/daap/rb-daap-share.c
===================================================================
--- plugins/daap/rb-daap-share.c	(revision 5543)
+++ plugins/daap/rb-daap-share.c	(working copy)
@@ -28,12 +28,6 @@
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
 #include <libsoup/soup.h>
-#include <libsoup/soup-address.h>
-#include <libsoup/soup-message.h>
-#include <libsoup/soup-uri.h>
-#include <libsoup/soup-server.h>
-#include <libsoup/soup-server-auth.h>
-#include <libsoup/soup-server-message.h>
 #include <libgnomevfs/gnome-vfs.h>
 
 #include "rb-daap-share.h"
@@ -513,20 +507,9 @@
 static void
 message_add_standard_headers (SoupMessage *message)
 {
-	gchar *s;
-	time_t t;
-	struct tm *tm;
+	soup_message_headers_append (message->response_headers, "DAAP-Server", "Rhythmbox " VERSION);
 
-	soup_message_add_header (message->response_headers, "DAAP-Server", "Rhythmbox " VERSION);
-
-	soup_message_add_header (message->response_headers, "Content-Type", "application/x-dmap-tagged");
-
-	t = time (NULL);
-	tm = gmtime (&t);
-	s = g_new (gchar, 100);
-	strftime (s, 100, "%a, %d %b %Y %T GMT", tm);
-	soup_message_add_header (message->response_headers, "Date", s);
-	g_free (s);
+	soup_message_headers_append (message->response_headers, "Content-Type", "application/x-dmap-tagged");
 }
 
 static void
@@ -543,14 +526,11 @@
 		return;
 	}
 
-	message->response.owner = SOUP_BUFFER_SYSTEM_OWNED;
-	message->response.length = length;
-	message->response.body = resp;
-
+	soup_message_set_response (message, "application/x-dmap-tagged",
+				   SOUP_MEMORY_TAKE, resp, length);
 	message_add_standard_headers (message);
 
 	soup_message_set_status (message, SOUP_STATUS_OK);
-	soup_server_message_set_encoding (SOUP_SERVER_MESSAGE (message), SOUP_TRANSFER_CONTENT_LENGTH);
 }
 
 #define DMAP_STATUS_OK 200
@@ -560,9 +540,12 @@
 #define DMAP_TIMEOUT 1800
 
 static void
-server_info_cb (RBDAAPShare *share,
-		SoupServerContext *context,
-		SoupMessage *message)
+server_info_cb (SoupServer        *server,
+		SoupMessage       *message, 
+		const char        *path,
+		GHashTable        *query,
+		SoupClientContext *context,
+		RBDAAPShare       *share)
 {
 /* MSRV	server info response
  * 	MSTT status
@@ -620,9 +603,12 @@
 }
 
 static void
-content_codes_cb (RBDAAPShare *share,
-		  SoupServerContext *context,
-		  SoupMessage *message)
+content_codes_cb (SoupServer        *server,
+		  SoupMessage       *message, 
+		  const char        *path,
+		  GHashTable        *query,
+		  SoupClientContext *context,
+		  RBDAAPShare       *share)
 {
 /* MCCR content codes response
  * 	MSTT status
@@ -657,34 +643,23 @@
 }
 
 static gboolean
-message_get_session_id (SoupMessage *message,
-			guint32     *id)
+get_session_id (GHashTable *query,
+		guint32    *id)
 {
-	const SoupUri *uri;
-	char          *position;
-	guint32        session_id;
+	char    *session_id_str;
+	guint32  session_id;
 
 	if (id) {
 		*id = 0;
 	}
 
-	uri = soup_message_get_uri (message);
-	if (uri == NULL) {
-		return FALSE;
-	}
-
-	if (uri->query != NULL)
-		position = strstr (uri->query, "session-id=");
-	else
-		position = NULL;
-
-	if (position == NULL) {
+	session_id_str = g_hash_table_lookup (query, "session-id");
+	if (session_id_str == NULL) {
 		rb_debug ("session id not found");
 		return FALSE;
 	}
 
-	position += 11;
-	session_id = (guint32) strtoul (position, NULL, 10);
+	session_id = (guint32) strtoul (session_id_str, NULL, 10);
 
 	if (id) {
 		*id = session_id;
@@ -694,34 +669,23 @@
 }
 
 static gboolean
-message_get_revision_number (SoupMessage *message,
-			     guint       *number)
+get_revision_number (GHashTable *query,
+		     guint      *number)
 {
-	const SoupUri *uri;
-	char          *position;
-	guint          revision_number;
+	char  *revision_number_str;
+	guint  revision_number;
 
 	if (number) {
 		*number = 0;
 	}
 
-	uri = soup_message_get_uri (message);
-	if (uri == NULL) {
-		return FALSE;
-	}
-
-	if (uri->query != NULL)
-		position = strstr (uri->query, "revision-number=");
-	else
-		position = NULL;
-
-	if (position == NULL) {
+	revision_number_str = g_hash_table_lookup (query, "revision-number");
+	if (revision_number_str == NULL) {
 		rb_debug ("client asked for an update without a revision number?!?\n");
 		return FALSE;
 	}
 
-	position += 16;
-	revision_number = atoi (position);
+	revision_number = atoi (revision_number_str);
 
 	if (number) {
 		*number = revision_number;
@@ -732,8 +696,9 @@
 
 static gboolean
 session_id_validate (RBDAAPShare       *share,
-		     SoupServerContext *context,
+		     SoupClientContext *context,
 		     SoupMessage       *message,
+		     GHashTable        *query,
 		     guint32           *id)
 {
 	guint32     session_id;
@@ -745,7 +710,7 @@
 		*id = 0;
 	}
 
-	res = message_get_session_id (message, &session_id);
+	res = get_session_id (query, &session_id);
 	if (! res) {
 		rb_debug ("Validation failed: Unable to parse session id from message");
 		return FALSE;
@@ -758,7 +723,7 @@
 		return FALSE;
 	}
 
-	remote_address = soup_server_context_get_client_host (context);
+	remote_address = soup_client_context_get_host (context);
 	rb_debug ("Validating session id %u from %s matches %s",
 		  session_id, remote_address, addr);
 	if (remote_address == NULL || strcmp (addr, remote_address) != 0) {
@@ -775,7 +740,7 @@
 
 static guint32
 session_id_generate (RBDAAPShare       *share,
-		     SoupServerContext *context)
+		     SoupClientContext *context)
 {
 	guint32 id;
 
@@ -786,7 +751,7 @@
 
 static guint32
 session_id_create (RBDAAPShare       *share,
-		   SoupServerContext *context)
+		   SoupClientContext *context)
 {
 	guint32     id;
 	const char *addr;
@@ -802,7 +767,7 @@
 	} while	(addr != NULL);
 
 	/* store session id and remote address */
-	remote_address = g_strdup (soup_server_context_get_client_host (context));
+	remote_address = g_strdup (soup_client_context_get_host (context));
 	g_hash_table_insert (share->priv->session_ids, GUINT_TO_POINTER (id), remote_address);
 
 	return id;
@@ -810,16 +775,19 @@
 
 static void
 session_id_remove (RBDAAPShare       *share,
-		   SoupServerContext *context,
+		   SoupClientContext *context,
 		   guint32            id)
 {
 	g_hash_table_remove (share->priv->session_ids, GUINT_TO_POINTER (id));
 }
 
 static void
-login_cb (RBDAAPShare *share,
-	  SoupServerContext *context,
-	  SoupMessage *message)
+login_cb (SoupServer        *server,
+	  SoupMessage       *message, 
+	  const char        *path,
+	  GHashTable        *query,
+	  SoupClientContext *context,
+	  RBDAAPShare       *share)
 {
 /* MLOG login response
  * 	MSTT status
@@ -841,14 +809,17 @@
 }
 
 static void
-logout_cb (RBDAAPShare *share,
-	   SoupServerContext *context,
-	   SoupMessage *message)
+logout_cb (SoupServer        *server,
+	   SoupMessage       *message, 
+	   const char        *path,
+	   GHashTable        *query,
+	   SoupClientContext *context,
+	   RBDAAPShare       *share)
 {
 	int     status;
 	guint32 id;
 
-	if (session_id_validate (share, context, message, &id)) {
+	if (session_id_validate (share, context, message, query, &id)) {
 		rb_debug ("Handling logout session id %u", id);
 		session_id_remove (share, context, id);
 
@@ -858,18 +829,20 @@
 	}
 
 	soup_message_set_status (message, status);
-	soup_server_message_set_encoding (SOUP_SERVER_MESSAGE (message), SOUP_TRANSFER_CONTENT_LENGTH);
 }
 
 static void
-update_cb (RBDAAPShare *share,
-	   SoupServerContext *context,
-	   SoupMessage *message)
+update_cb (SoupServer        *server,
+	   SoupMessage       *message, 
+	   const char        *path,
+	   GHashTable        *query,
+	   SoupClientContext *context,
+	   RBDAAPShare       *share)
 {
 	guint    revision_number;
 	gboolean res;
 
-	res = message_get_revision_number (message, &revision_number);
+	res = get_revision_number (query, &revision_number);
 
 	if (res && revision_number != share->priv->revision_number) {
 		/* MUPD update response
@@ -885,8 +858,11 @@
 		message_set_from_rb_daap_structure (message, mupd);
 		rb_daap_structure_destroy (mupd);
 	} else {
+		/* FIXME: This seems like a bug. It just leaks the
+		 * message (and socket) without ever replying.
+		 */
 		g_object_ref (message);
-		soup_message_io_pause (message);
+		soup_server_pause_message (server, message);
 	}
 }
 
@@ -1148,28 +1124,14 @@
 }
 
 static bitwise
-parse_meta (const gchar *s)
+parse_meta (GHashTable *query)
 {
-	gchar *start_of_attrs;
-	gchar *end_of_attrs;
-	gchar *attrs;
+	const gchar *attrs;
 	gchar **attrsv;
 	guint i;
 	bitwise bits = 0;
 
-	start_of_attrs = strstr (s, "meta=");
-	if (start_of_attrs == NULL) {
-		return 0;
-	}
-	start_of_attrs += 5;
-
-	end_of_attrs = strchr (start_of_attrs, '&');
-	if (end_of_attrs) {
-		attrs = g_strndup (start_of_attrs, end_of_attrs - start_of_attrs);
-	} else {
-		attrs = g_strdup (start_of_attrs);
-	}
-
+	attrs = g_hash_table_lookup (query, "meta");
 	attrsv = g_strsplit (attrs,",",-1);
 
 	for (i = 0; attrsv[i]; i++) {
@@ -1182,7 +1144,6 @@
 		}
 	}
 
-	g_free (attrs);
 	g_strfreev (attrsv);
 
 	return bits;
@@ -1197,10 +1158,10 @@
 
 	result = gnome_vfs_read (handle, chunk, DAAP_SHARE_CHUNK_SIZE, &read_size);
 	if (result == GNOME_VFS_OK && read_size > 0) {
-		soup_message_add_chunk (message, SOUP_BUFFER_SYSTEM_OWNED, chunk, read_size);
+		soup_message_body_append (message->response_body, SOUP_MEMORY_TAKE, chunk, read_size);
 	} else {
 		g_free (chunk);
-		soup_message_add_final_chunk (message);
+		soup_message_body_complete (message->response_body);
 	}
 }
 
@@ -1238,7 +1199,7 @@
 		file_size -= offset;
 	}
 
-	soup_server_message_set_encoding (SOUP_SERVER_MESSAGE (message), SOUP_TRANSFER_CHUNKED);
+	soup_message_headers_set_encoding (message->response_headers, SOUP_ENCODING_CHUNKED);
 
 	g_signal_connect (message, "wrote_chunk", G_CALLBACK (write_next_chunk), handle);
 	g_signal_connect (message, "finished", G_CALLBACK (chunked_message_finished), handle);
@@ -1268,11 +1229,9 @@
 		g_warning ("Unable to map file %s: %s", path, error->message);
 		soup_message_set_status (message, SOUP_STATUS_INTERNAL_SERVER_ERROR);
 	} else {
-		message->response.owner = SOUP_BUFFER_USER_OWNED;
-		message->response.length = file_size;
-		message->response.body = g_mapped_file_get_contents (mapped_file) + offset;
-		soup_server_message_set_encoding (SOUP_SERVER_MESSAGE (message),
-						  SOUP_TRANSFER_CONTENT_LENGTH);
+		soup_message_set_response (message, "application/x-dmap-tagged",
+					   SOUP_MEMORY_TEMPORARY,
+					   g_mapped_file_get_contents (mapped_file) + offset, file_size);
 
 		g_signal_connect (message,
 				  "finished",
@@ -1284,22 +1243,21 @@
 #endif
 
 static void
-databases_cb (RBDAAPShare *share,
-	      SoupServerContext *context,
-	      SoupMessage *message)
+databases_cb (SoupServer        *server,
+	      SoupMessage       *message, 
+	      const char        *path,
+	      GHashTable        *query,
+	      SoupClientContext *context,
+	      RBDAAPShare       *share)
 {
-	gchar *path;
-	gchar *rest_of_path;
+	const char *rest_of_path;
 	/*guint revision_number;*/
 
-	if (! session_id_validate (share, context, message, NULL)) {
+	if (! session_id_validate (share, context, message, query, NULL)) {
 		soup_message_set_status (message, SOUP_STATUS_FORBIDDEN);
-		soup_server_message_set_encoding (SOUP_SERVER_MESSAGE (message), SOUP_TRANSFER_CONTENT_LENGTH);
 		return;
 	}
 
-	path = soup_uri_to_string (soup_message_get_uri (message), TRUE);
-
 	rest_of_path = strchr (path + 1, '/');
 
 	if (rest_of_path == NULL) {
@@ -1335,7 +1293,7 @@
 
 		message_set_from_rb_daap_structure (message, avdb);
 		rb_daap_structure_destroy (avdb);
-	} else if (g_ascii_strncasecmp ("/1/items?", rest_of_path, 9) == 0) {
+	} else if (g_ascii_strcasecmp ("/1/items", rest_of_path) == 0) {
 	/* ADBS database songs
 	 * 	MSTT status
 	 * 	MUTY update type
@@ -1351,7 +1309,7 @@
 		gint32 num_songs = rhythmdb_entry_count_by_type (share->priv->db, share->priv->entry_type);
 		struct MLCL_Bits mb = {NULL,0};
 
-		mb.bits = parse_meta (rest_of_path);
+		mb.bits = parse_meta (query);
 
 		adbs = rb_daap_structure_add (NULL, RB_DAAP_CC_ADBS);
 		rb_daap_structure_add (adbs, RB_DAAP_CC_MSTT, (gint32) DMAP_STATUS_OK);
@@ -1365,7 +1323,7 @@
 		message_set_from_rb_daap_structure (message, adbs);
 		rb_daap_structure_destroy (adbs);
 		adbs = NULL;
-	} else if (g_ascii_strncasecmp ("/1/containers?", rest_of_path, 14) == 0) {
+	} else if (g_ascii_strcasecmp ("/1/containers", rest_of_path) == 0) {
 	/* APLY database playlists
 	 * 	MSTT status
 	 * 	MUTY update type
@@ -1420,7 +1378,7 @@
 		struct MLCL_Bits mb = {NULL,0};
 		gint pl_id = atoi (rest_of_path + 14);
 
-		mb.bits = parse_meta (rest_of_path);
+		mb.bits = parse_meta (query);
 
 		apso = rb_daap_structure_add (NULL, RB_DAAP_CC_APSO);
 		rb_daap_structure_add (apso, RB_DAAP_CC_MSTT, (gint32) DMAP_STATUS_OK);
@@ -1447,10 +1405,7 @@
 						  _find_by_id);
 			if (idl == NULL) {
 				soup_message_set_status (message, SOUP_STATUS_NOT_FOUND);
-				soup_server_message_set_encoding (SOUP_SERVER_MESSAGE (message),
-								  SOUP_TRANSFER_CONTENT_LENGTH);
-				soup_message_set_response (message, "text/plain", SOUP_BUFFER_USER_OWNED, "", 0);
-				goto out;
+				return;
 			}
 			id = (RBPlaylistID *)idl->data;
 
@@ -1470,7 +1425,7 @@
 		rb_daap_structure_destroy (apso);
 	} else if (g_ascii_strncasecmp ("/1/items/", rest_of_path, 9) == 0) {
 	/* just the file :) */
-		gchar *id_str;
+		const gchar *id_str;
 		gint id;
 		RhythmDBEntry *entry;
 		const gchar *location;
@@ -1486,9 +1441,9 @@
 		file_size = rhythmdb_entry_get_uint64 (entry, RHYTHMDB_PROP_FILE_SIZE);
 
 		message_add_standard_headers (message);
-		soup_message_add_header (message->response_headers, "Accept-Ranges", "bytes");
+		soup_message_headers_append (message->response_headers, "Accept-Ranges", "bytes");
 
-		range_header = soup_message_get_header (message->request_headers, "Range");
+		range_header = soup_message_headers_get (message->request_headers, "Range");
 		if (range_header) {
 			const gchar *s;
 			gchar *content_range;
@@ -1497,7 +1452,7 @@
 			offset = atoll (s);
 
 			content_range = g_strdup_printf ("bytes %" G_GUINT64_FORMAT "-%" G_GUINT64_FORMAT "/%" G_GUINT64_FORMAT, offset, file_size, file_size);
-			soup_message_add_header (message->response_headers, "Content-Range", content_range);
+			soup_message_headers_append (message->response_headers, "Content-Range", content_range);
 			g_free (content_range);
 
 			soup_message_set_status (message, SOUP_STATUS_PARTIAL_CONTENT);
@@ -1520,54 +1475,9 @@
 	} else {
 		rb_debug ("unhandled: %s\n", path);
 	}
-
-out:
-	g_free (path);
 }
 
-typedef void (* DAAPPathFunction) (RBDAAPShare       *share,
-				   SoupServerContext *context,
-				   SoupMessage       *message);
-
-struct DAAPPath {
-	const gchar *path;
-	guint path_length;
-	DAAPPathFunction function;
-};
-
-static const struct DAAPPath paths_to_functions[] = {
-	{"/server-info", 12, server_info_cb},
-	{"/content-codes", 14, content_codes_cb},
-	{"/login", 6, login_cb},
-	{"/logout", 7, logout_cb},
-	{"/update", 7, update_cb},
-	{"/databases", 10, databases_cb}
-};
-
 static void
-server_cb (SoupServerContext *context,
-	   SoupMessage *message,
-	   RBDAAPShare *share)
-{
-	gchar *path;
-	guint i;
-
-	path = soup_uri_to_string (soup_message_get_uri (message), TRUE);
-	rb_debug ("request for %s", path);
-
-	for (i = 0; i < G_N_ELEMENTS (paths_to_functions); i++) {
-		if (g_ascii_strncasecmp (paths_to_functions[i].path, path, paths_to_functions[i].path_length) == 0) {
-			paths_to_functions[i].function (share, context, message);
-			return;
-		}
-	}
-
-	g_warning ("unhandled path %s\n", path);
-
-	g_free (path);
-}
-
-static void
 db_entry_added_cb (RhythmDB *db,
 		   RhythmDBEntry *entry,
 		   RBDAAPShare *share)
@@ -1604,41 +1514,42 @@
 }
 
 static gboolean
-soup_auth_callback (SoupServerAuthContext *auth_ctx,
-                    SoupServerAuth        *auth,
-                    SoupMessage           *message,
-                    RBDAAPShare           *share)
+soup_auth_filter (SoupAuthDomain *auth_domain,
+		  SoupMessage    *msg,
+		  gpointer        user_data)
 {
-	const char *username;
-	gboolean    allowed;
-	char       *path;
+	const char *path;
 
-	path = soup_uri_to_string (soup_message_get_uri (message), TRUE);
-	rb_debug ("Auth request for %s", path);
-
-	if (auth == NULL) {
-
-		/* This is to workaround libsoup looking up handlers by directory.
-		   We require auth for "/databases?" but not "/databases/" */
-		if (g_str_has_prefix (path, "/databases/")) {
-			allowed = TRUE;
-			goto done;
-		}
-
-		rb_debug ("Auth DENIED: information not provided");
-		allowed = FALSE;
-		goto done;
+	path = soup_message_get_uri (msg)->path;
+	if (g_str_has_prefix (path, "/databases/")) {
+		/* Subdirectories of /databases don't actually require
+		 * authentication
+		 */
+		return FALSE;
+	} else {
+		/* Everything else in auth_domain's paths, including
+		 * /databases itself, does require auth.
+		 */
+		return TRUE;
 	}
+}
 
-	username = soup_server_auth_get_user (auth);
-	rb_debug ("Auth request for user: %s", username);
+static gboolean
+soup_auth_callback (SoupAuthDomain *auth_domain,
+		    SoupMessage    *msg,
+		    const char     *username,
+		    gpointer        password,
+                    RBDAAPShare    *share)
+{
+	gboolean    allowed;
+	const char *path;
 
-	allowed = soup_server_auth_check_passwd (auth, share->priv->password);
+	path = soup_message_get_uri (msg)->path;
+	rb_debug ("Auth request for %s, user %s", path, username);
+
+	allowed = !strcmp (password, share->priv->password);
 	rb_debug ("Auth request: %s", allowed ? "ALLOWED" : "DENIED");
 
- done:
-	g_free (path);
-
 	return allowed;
 }
 
@@ -1647,7 +1558,6 @@
 {
 	int                   port = STANDARD_DAAP_PORT;
 	gboolean              password_required;
-	SoupServerAuthContext auth_ctx = { 0 };
 
 	share->priv->server = soup_server_new (SOUP_SERVER_PORT, port, NULL);
 	if (share->priv->server == NULL) {
@@ -1666,37 +1576,39 @@
 	password_required = (share->priv->auth_method != RB_DAAP_SHARE_AUTH_METHOD_NONE);
 
 	if (password_required) {
-		auth_ctx.types = SOUP_AUTH_TYPE_BASIC;
-		auth_ctx.callback = (SoupServerAuthCallbackFn)soup_auth_callback;
-		auth_ctx.user_data = share;
-		auth_ctx.basic_info.realm = "Music Sharing";
+		SoupAuthDomain *auth_domain;
 
-		soup_server_add_handler (share->priv->server,
-					 "/login",
-					 &auth_ctx,
-					 (SoupServerCallbackFn)server_cb,
-					 NULL,
-					 share);
-		soup_server_add_handler (share->priv->server,
-					 "/update",
-					 &auth_ctx,
-					 (SoupServerCallbackFn)server_cb,
-					 NULL,
-					 share);
-		soup_server_add_handler (share->priv->server,
-					 "/databases",
-					 &auth_ctx,
-					 (SoupServerCallbackFn)server_cb,
-					 NULL,
-					 share);
+		auth_domain = soup_auth_domain_basic_new (SOUP_AUTH_DOMAIN_REALM, "Music Sharing",
+							  SOUP_AUTH_DOMAIN_ADD_PATH, "/login",
+							  SOUP_AUTH_DOMAIN_ADD_PATH, "/update",
+							  SOUP_AUTH_DOMAIN_ADD_PATH, "/databases",
+							  SOUP_AUTH_DOMAIN_FILTER, soup_auth_filter,
+							  NULL);
+		g_signal_connect (auth_domain, "authenticate",
+				  G_CALLBACK (soup_auth_callback), share);
+		soup_server_add_auth_domain (share->priv->server, auth_domain);
+		g_object_unref (auth_domain);
 	}
 
-	soup_server_add_handler (share->priv->server,
-				 NULL,
-				 NULL,
-				 (SoupServerCallbackFn)server_cb,
-				 NULL,
-				 share);
+	soup_server_add_handler (share->priv->server, "/server-info",
+				 (SoupServerCallback)server_info_cb,
+				 share, NULL);
+	soup_server_add_handler (share->priv->server, "/content-codes",
+				 (SoupServerCallback)content_codes_cb,
+				 share, NULL);
+	soup_server_add_handler (share->priv->server, "/login",
+				 (SoupServerCallback)login_cb,
+				 share, NULL);
+	soup_server_add_handler (share->priv->server, "/logout",
+				 (SoupServerCallback)logout_cb,
+				 share, NULL);
+	soup_server_add_handler (share->priv->server, "/update",
+				 (SoupServerCallback)update_cb,
+				 share, NULL);
+	soup_server_add_handler (share->priv->server, "/databases",
+				 (SoupServerCallback)databases_cb,
+				 share, NULL);
+
 	soup_server_run_async (share->priv->server);
 
 	/* using direct since there is no g_uint_hash or g_uint_equal */
Index: plugins/daap/rb-daap-src.c
===================================================================
--- plugins/daap/rb-daap-src.c	(revision 5543)
+++ plugins/daap/rb-daap-src.c	(working copy)
@@ -34,8 +34,7 @@
 #include <unistd.h>
 #include <ctype.h>
 
-#include <libsoup/soup-headers.h>
-#include <libsoup/soup-misc.h>
+#include <libsoup/soup.h>
 
 #include <glib/gi18n.h>
 #include <gst/gst.h>
@@ -432,7 +431,7 @@
 	gchar *host;
 	guint port;
 	gchar *path;
-	GHashTable *header_table;
+	SoupMessageHeaders *header_table;
 	gchar *request;
 	gchar *response;
 	gchar *end_headers;
@@ -441,7 +440,6 @@
 	guint http_status;
 	gchar *http_status_phrase = NULL;
 	gboolean parse_result;
-	char *dup_headers;
 
 	if (src->buffer_base) {
 		g_free (src->buffer_base);
@@ -536,59 +534,34 @@
 		return FALSE;
 	}
 
-	/* for compatibility with older versions of libsoup, we may need to retry
-	 * the soup_headers_parse_response call with slightly different arguments.
-	 * since this function modifies the string passed in, we need to copy it
-	 * before the first call.
-	 *
-	 * > 2.2.99 wants the full response header, including the trailing blank line,
-	 * with the length passed in up to the start of the start of the trailing
-	 * blank line.
-	 */
-	dup_headers = g_strndup (response, (end_headers + 4) - response);
-
-	header_table = g_hash_table_new (soup_str_case_hash, soup_str_case_equal);
-	parse_result = soup_headers_parse_response (dup_headers,
+	header_table = soup_message_headers_new (SOUP_MESSAGE_HEADERS_RESPONSE);
+	parse_result = soup_headers_parse_response (response,
 						    ((end_headers+2) - response),
 						    header_table,
 						    NULL,
 						    &http_status,
 						    &http_status_phrase);
-	g_free (dup_headers);
-	if (parse_result == FALSE) {
-		/*
-		 * < 2.2.98 wants the headers terminated before the trailing blank line.
-		 */
-		end_headers[2] = '\0';
-		parse_result = soup_headers_parse_response (response,
-							    (end_headers+2 - response),
-							    header_table,
-							    NULL,
-							    &http_status,
-							    &http_status_phrase);
-	}
-
 	if (parse_result) {
 		if (http_status == 200 || http_status == 206) {
-			GSList *val;
+			const char *val;
 
-			val = g_hash_table_lookup (header_table, "Transfer-Encoding");
+			val = soup_message_headers_get (header_table, "Transfer-Encoding");
 			if (val) {
-				if (g_strcasecmp ((gchar *)val->data, "chunked") == 0) {
+				if (g_strcasecmp (val, "chunked") == 0) {
 					src->chunked = TRUE;
 				} else {
 					GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
-							   ("Unknown HTTP transfer encoding \"%s\"", val->data));
+							   ("Unknown HTTP transfer encoding \"%s\"", val));
 				}
 			} else {
 				src->chunked = FALSE;
-				val = g_hash_table_lookup (header_table, "Content-Length");
+				val = soup_message_headers_get (header_table, "Content-Length");
 				if (val) {
 					char *e;
-					src->size = strtoul ((char *)val->data, &e, 10);
-					if (e == val->data) {
+					src->size = strtoul (val, &e, 10);
+					if (e == (char *)val) {
 						GST_ELEMENT_ERROR (src, RESOURCE, OPEN_READ, (NULL),
-								   ("Couldn't read HTTP content length \"%s\"", val->data));
+								   ("Couldn't read HTTP content length \"%s\"", val));
 						ok = FALSE;
 					}
 				} else {
@@ -609,8 +582,7 @@
 		ok = FALSE;
 	}
 	g_free (http_status_phrase);
-	soup_message_clear_headers (header_table);
-	g_hash_table_destroy (header_table);
+	soup_message_headers_free (header_table);
 
 	end_headers += 4;
 


Index: rhythmbox.spec
===================================================================
RCS file: /cvs/extras/rpms/rhythmbox/devel/rhythmbox.spec,v
retrieving revision 1.160
retrieving revision 1.161
diff -u -r1.160 -r1.161
--- rhythmbox.spec	18 Jan 2008 05:36:51 -0000	1.160
+++ rhythmbox.spec	29 Jan 2008 20:36:29 -0000	1.161
@@ -3,7 +3,7 @@
 Name: rhythmbox
 Summary: Music Management Application 
 Version: 0.11.4
-Release: 4%{?dist}
+Release: 5%{?dist}
 License: GPLv2+ and GFDL+
 Group: Applications/Multimedia
 URL: http://www.gnome.org/projects/rhythmbox/
@@ -39,7 +39,7 @@
 BuildRequires: gnome-doc-utils
 BuildRequires: python-devel
 BuildRequires: pygtk2-devel
-BuildRequires: libsoup-devel
+BuildRequires: libsoup-devel >= 2.3.0
 BuildRequires: hal-devel
 BuildRequires: lirc-devel
 BuildRequires: libmtp-devel
@@ -57,6 +57,8 @@
 Patch1: rhythmbox-0.11.3-force-python-thread-init.patch
 # http://bugzilla.gnome.org/show_bug.cgi?id=510323
 Patch2: x-content.patch
+# http://bugzilla.gnome.org/show_bug.cgi?id=509701 
+Patch3: soup24.patch
 
 %description
 Rhythmbox is an integrated music management application based on the powerful
@@ -88,6 +90,7 @@
 %patch0 -p0 -b .dont-disable-suspend
 %patch1 -p1 -b .python-threading
 %patch2 -p1 -b .x-content
+%patch3 -p0 -b .soup24
 
 %build
 
@@ -202,6 +205,9 @@
 %{_libdir}/rhythmbox/plugins/upnp_coherence
 
 %changelog
+* Tue Jan 29 2008  Matthias Clasen <mclasen at redhat.com> - 0.11.4-5
+- Port to libsoup 2.4
+
 * Fri Jan 18 2008  Matthias Clasen <mclasen at redhat.com> - 0.11.4-4
 - Add content-type support
 




More information about the fedora-extras-commits mailing list