diff -up bmpx-0.40.13/configure.ac.libsoup24 bmpx-0.40.13/configure.ac --- bmpx-0.40.13/configure.ac.libsoup24 2007-10-18 19:17:17.000000000 +0200 +++ bmpx-0.40.13/configure.ac 2008-02-15 20:26:58.000000000 +0100 @@ -240,8 +240,7 @@ AC_ARG_WITH([pkgconfig-dir], AC_SUBST([pkgconfigdir]) # libsoup -PKG_CHECK_MODULES([SOUP], [libsoup-2.2 >= 2.2.100]) -BMP_CHECK_SOUP_EXTERN_C +PKG_CHECK_MODULES([SOUP], [libsoup-2.4 >= 2.3.0.1]) # sqlite PKG_CHECK_MODULES([SQLITE], [sqlite3 >= 3.3]) diff -up bmpx-0.40.13/sentinel/beep-media-player-2-sentinel.cc.libsoup24 bmpx-0.40.13/sentinel/beep-media-player-2-sentinel.cc --- bmpx-0.40.13/sentinel/beep-media-player-2-sentinel.cc.libsoup24 2007-10-18 19:17:06.000000000 +0200 +++ bmpx-0.40.13/sentinel/beep-media-player-2-sentinel.cc 2008-02-15 20:26:58.000000000 +0100 @@ -68,13 +68,7 @@ #include #include -#ifndef LIBSOUP_HAS_EXTERN_C -G_BEGIN_DECLS -#endif #include -#ifndef LIBSOUP_HAS_EXTERN_C -G_END_DECLS -#endif #define SERVER_NAME "beep-media-player.org" diff -up bmpx-0.40.13/src/minisoup.hh.libsoup24 bmpx-0.40.13/src/minisoup.hh --- bmpx-0.40.13/src/minisoup.hh.libsoup24 2007-10-18 19:17:08.000000000 +0200 +++ bmpx-0.40.13/src/minisoup.hh 2008-02-15 20:26:58.000000000 +0100 @@ -33,13 +33,7 @@ #include #include -#ifndef LIBSOUP_HAS_EXTERN_C -G_BEGIN_DECLS -# include -G_END_DECLS -#else -# include -#endif // !LIBSOUP_HAS_EXTERN_C +#include namespace Bmp { @@ -111,7 +105,7 @@ namespace Bmp restarted (SoupMessage* /*message*/, gpointer /*data*/); static void - got_chunk (SoupMessage* /*message*/, gpointer /*data*/); + got_chunk (SoupMessage* /*message*/, SoupBuffer* /*chunk*/, gpointer /*data*/); static void got_content_length (SoupMessage* /*message*/, gpointer /*data*/); @@ -161,7 +155,7 @@ namespace Bmp restarted (SoupMessage* /*message*/, gpointer /*data*/); static void - got_answer (SoupMessage* /*message*/, gpointer /*data*/); + got_answer (SoupSession* /*session*/, SoupMessage* /*message*/, gpointer /*data*/); }; @@ -224,10 +218,10 @@ namespace Bmp restarted (SoupMessage* /*message*/, gpointer /*data*/); static void - got_answer (SoupMessage* /*message*/, gpointer /*data*/); + got_answer (SoupSession* /*session*/, SoupMessage* /*message*/, gpointer /*data*/); static void - got_chunk (SoupMessage* /*message*/, gpointer /*data*/); + got_chunk (SoupMessage* /*message*/, SoupBuffer* /*chunk*/, gpointer /*data*/); static void got_content_length (SoupMessage* /*message*/, gpointer /*data*/); diff -up bmpx-0.40.13/src/minisoup.cc.libsoup24 bmpx-0.40.13/src/minisoup.cc --- bmpx-0.40.13/src/minisoup.cc.libsoup24 2007-10-18 19:17:08.000000000 +0200 +++ bmpx-0.40.13/src/minisoup.cc 2008-02-15 20:26:58.000000000 +0100 @@ -60,8 +60,8 @@ namespace Bmp { g_signal_connect (G_OBJECT (m_message), "got-chunk", G_CALLBACK (got_chunk), this); g_signal_connect (G_OBJECT (m_message), "restarted", G_CALLBACK (restarted), this); - soup_message_add_header_handler (m_message, "content-length", SOUP_HANDLER_PRE_BODY, - SoupMessageCallbackFn (got_content_length), this); + soup_message_add_header_handler (m_message, "got-headers", "content-length", + G_CALLBACK (got_content_length), this); return soup_session_send_message (m_session, m_message); } @@ -75,26 +75,26 @@ namespace Bmp RequestSync::get_data () { std::string buffer; - buffer.append (m_message->response.body, m_message->response.length); + buffer.append (m_message->response_body->data, m_message->response_body->length); return buffer; } void RequestSync::get_data (std::string & buffer) { - buffer.append (m_message->response.body, m_message->response.length); + buffer.append (m_message->response_body->data, m_message->response_body->length); } char const* RequestSync::get_data_raw () { - return m_message->response.body; + return m_message->response_body->data; } guint RequestSync::get_data_size () { - return m_message->response.length; + return m_message->response_body->length; } @@ -102,15 +102,15 @@ namespace Bmp RequestSync::add_header (std::string const& name, std::string const& value) { - soup_message_add_header (m_message->request_headers, name.c_str(), value.c_str()); + soup_message_headers_append (m_message->request_headers, name.c_str(), value.c_str()); } void RequestSync::add_request (std::string const& type, std::string const& request) { - soup_message_set_request (m_message, type.c_str(), SOUP_BUFFER_SYSTEM_OWNED /* we can't rely on the std::string not being destroyed */, - g_strdup (const_cast(request.c_str())), strlen (request.c_str())); + soup_message_set_request (m_message, type.c_str(), SOUP_MEMORY_COPY, + request.c_str(), strlen (request.c_str())); m_post = true; } @@ -125,11 +125,11 @@ namespace Bmp } void - RequestSync::got_chunk (SoupMessage* message, gpointer data) + RequestSync::got_chunk (SoupMessage* message, SoupBuffer* chunk, gpointer data) { RequestSync & request = (*(reinterpret_cast(data))); - request.m_read += message->response.length; + request.m_read += chunk->length; double percent = (double (request.m_read) / double (request.m_size)); if(percent >= 0. && percent <= 1.) { @@ -141,7 +141,7 @@ namespace Bmp RequestSync::got_content_length (SoupMessage* message, gpointer data) { RequestSync & request = (*(reinterpret_cast(data))); - request.m_size = g_ascii_strtoull (soup_message_get_header (message->response_headers, "content-length"), NULL, 10); + request.m_size = soup_message_headers_get_content_length (message->response_headers); } @@ -180,17 +180,17 @@ namespace Bmp return m_message->status_code; } - guint - Request::message_status () - { - return m_message->status; - } + //guint + //Request::message_status () + //{ + // return m_message->status; + //} void Request::run () { g_signal_connect (G_OBJECT (m_message), "restarted", G_CALLBACK (restarted), this); - soup_session_queue_message (m_session, m_message, SoupMessageCallbackFn (got_answer), this); + soup_session_queue_message (m_session, m_message, SoupSessionCallback (got_answer), this); } void @@ -199,9 +199,6 @@ namespace Bmp if (G_IS_OBJECT(m_session)) { soup_session_abort (m_session); - //soup_message_set_status (m_message, SOUP_STATUS_CANCELLED); - //soup_session_cancel_message (m_session, m_message); - //m_message = 0; } } @@ -210,15 +207,15 @@ namespace Bmp Request::add_header (std::string const& name, std::string const& value) { - soup_message_add_header (m_message->request_headers, name.c_str(), value.c_str()); + soup_message_headers_append (m_message->request_headers, name.c_str(), value.c_str()); } void Request::add_request (std::string const& type, std::string const& request) { - soup_message_set_request (m_message, type.c_str(), SOUP_BUFFER_SYSTEM_OWNED /* we can't rely on the std::string not being destroyed */, - g_strdup (const_cast(request.c_str())), strlen (request.c_str())); + soup_message_set_request (m_message, type.c_str(), SOUP_MEMORY_COPY, + request.c_str(), strlen (request.c_str())); m_post = true; } @@ -230,7 +227,7 @@ namespace Bmp } void - Request::got_answer (SoupMessage* message, gpointer data) + Request::got_answer (SoupSession* session, SoupMessage* message, gpointer data) { Request & request = (*(reinterpret_cast(data))); @@ -241,15 +238,12 @@ namespace Bmp if( block ) return; - if( request.m_message->status != SOUP_MESSAGE_STATUS_FINISHED ) - return; - //if( request.m_message->status_code == SOUP_STATUS_CANCELLED ) //return; request.Signals.Callback.emit( - request.m_message->response.body, - request.m_message->response.length, + request.m_message->response_body->data, + request.m_message->response_body->length, request.m_message->status_code ); } @@ -269,6 +263,7 @@ namespace Bmp m_session = soup_session_async_new (); m_message = soup_message_new ("GET", m_url.c_str()); + soup_message_set_flags (m_message, SOUP_MESSAGE_OVERWRITE_CHUNKS); } Glib::RefPtr @@ -279,9 +274,9 @@ namespace Bmp RequestFile::~RequestFile () { - if (G_IS_OBJECT(m_message) && m_message->status == SOUP_MESSAGE_STATUS_RUNNING) + if (m_file.is_open()) { - cancel (); + cancel (); Signals.Aborted.emit ((boost::format (_("Download of file '%s' was cancelled prematurely!")) % filename_to_utf8 (m_filename).c_str()).str()); } g_object_unref (m_session); @@ -316,9 +311,9 @@ namespace Bmp { g_signal_connect (G_OBJECT (m_message), "got-chunk", G_CALLBACK (got_chunk), this); g_signal_connect (G_OBJECT (m_message), "restarted", G_CALLBACK (restarted), this); - soup_message_add_header_handler (m_message, "content-length", SOUP_HANDLER_PRE_BODY, - SoupMessageCallbackFn (got_content_length), this); - soup_session_queue_message (m_session, m_message, SoupMessageCallbackFn (got_answer), this); + soup_message_add_header_handler (m_message, "got-headers", "content-length", + G_CALLBACK (got_content_length), this); + soup_session_queue_message (m_session, m_message, SoupSessionCallback (got_answer), this); fileOpen (); } @@ -327,8 +322,7 @@ namespace Bmp { if (G_IS_OBJECT(m_message)) { - soup_message_set_status (m_message, SOUP_STATUS_CANCELLED); - soup_session_cancel_message (m_session, m_message); + soup_session_cancel_message (m_session, m_message, SOUP_STATUS_CANCELLED); m_message = 0; } @@ -340,7 +334,7 @@ namespace Bmp RequestFile::add_header (std::string const& name, std::string const& value) { - soup_message_add_header (m_message->request_headers, name.c_str(), value.c_str()); + soup_message_headers_append (m_message->request_headers, name.c_str(), value.c_str()); } @@ -356,7 +350,7 @@ namespace Bmp } void - RequestFile::got_answer (SoupMessage* message, gpointer data) + RequestFile::got_answer (SoupSession* session, SoupMessage* message, gpointer data) { RequestFile & request = (*(reinterpret_cast(data))); @@ -368,25 +362,22 @@ namespace Bmp return; } - if( request.m_message->status != SOUP_MESSAGE_STATUS_FINISHED ) - return; - if( request.m_message->status_code == SOUP_STATUS_CANCELLED) return; - debug("soup","%s: status: %d, status_code: %d", G_STRLOC, request.m_message->status, request.m_message->status_code); + debug("soup","%s: status_code: %d", G_STRLOC, request.m_message->status_code); request.fileClose (); request.Signals.Done.emit (request.m_filename); } void - RequestFile::got_chunk (SoupMessage* message, gpointer data) + RequestFile::got_chunk (SoupMessage* message, SoupBuffer* chunk, gpointer data) { RequestFile & request = (*(reinterpret_cast(data))); - request.m_file.write (message->response.body, message->response.length); - request.m_read += message->response.length; + request.m_file.write (chunk->data, chunk->length); + request.m_read += chunk->length; double percent = (double (request.m_read) / double (request.m_size)); if(percent >= 0. && percent <= 1.) @@ -399,7 +390,7 @@ namespace Bmp RequestFile::got_content_length (SoupMessage* message, gpointer data) { RequestFile & request = (*(reinterpret_cast(data))); - request.m_size = g_ascii_strtoull (soup_message_get_header (message->response_headers, "content-length"), NULL, 10); + request.m_size = soup_message_headers_get_content_length (message->response_headers); } } } diff -up bmpx-0.40.13/README.libsoup24 bmpx-0.40.13/README --- bmpx-0.40.13/README.libsoup24 2007-10-18 19:17:17.000000000 +0200 +++ bmpx-0.40.13/README 2008-02-15 20:26:58.000000000 +0100 @@ -16,7 +16,7 @@ Requirements: * libglademm-2.4 >= 2.6.2 * libsexymm >= 0.1.9 * librsvg >= 2.14.0 - * libsoup >= 2.2.100 + * libsoup >= 2.3.0.1 * libofa >= 0.9.3 * sqlite >= 3.3.11 * libxml >= 2.6.1 diff -up bmpx-0.40.13/m4/soup.m4.libsoup24 bmpx-0.40.13/m4/soup.m4 --- bmpx-0.40.13/m4/soup.m4.libsoup24 2007-10-18 19:17:06.000000000 +0200 +++ bmpx-0.40.13/m4/soup.m4 2008-02-15 20:26:58.000000000 +0100 @@ -1,4 +1,34 @@ dnl -*- Mode: Autoconf; -*- +dnl -*- Mode: Autoconf; -*- + +AC_DEFUN([BMP_CHECK_SOUP_EXTERN_C], +[ + CPPFLAGS_SAVED="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $SOUP_CFLAGS" + export CPPFLAGS + + LDFLAGS_SAVED="$LDFLAGS" + LDFLAGS="$LDFLAGS $SOUP_LDFLAGS" + export LDFLAGS + + AC_MSG_CHECKING(for extern in libsoup headers) + + AC_LANG_PUSH(C++) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + ]], [[ + SoupSession * session = soup_session_sync_new (); + ]])],[ + AC_MSG_RESULT(no) + ],[ + AC_MSG_RESULT(yes) + AC_DEFINE(LIBSOUP_HAS_EXTERN_C,,[define if libsoup has extern c]) + ]) + AC_LANG_POP([C++]) + + CPPFLAGS="$CPPFLAGS_SAVED" + LDFLAGS="$LDFLAGS_SAVED" +]) AC_DEFUN([BMP_CHECK_SOUP_EXTERN_C], [