From: <svn...@op...> - 2009-03-17 18:15:52
|
Author: bellmich Date: Tue Mar 17 19:15:41 2009 New Revision: 988 URL: http://libsyncml.opensync.org/changeset/988 Log: - added workaround for libsoup 2.2 http clients under Solaris (asynchronous http client support does not work under Solaris) - some cosmetical changes for http server code (traces, comments, assertions) Modified: trunk/CMakeLists.txt trunk/config.h.cmake trunk/libsyncml/transports/http_client.c trunk/libsyncml/transports/http_client_internals.h trunk/libsyncml/transports/http_server.c Modified: trunk/CMakeLists.txt ============================================================================== --- trunk/CMakeLists.txt Tue Mar 17 17:52:03 2009 (r987) +++ trunk/CMakeLists.txt Tue Mar 17 19:15:41 2009 (r988) @@ -118,6 +118,7 @@ SET( ENABLE_WBXML ON) ENDIF(LIBWBXML2_FOUND) +OPTION( HAVE_LIBSOUP22_SOLARIS "enable Solaris libsoup workarounds" OFF ) IF(LIBSOUP2_FOUND) OPTION( ENABLE_HTTP "enable http transports" ON ) IF (LIBSOUP24_FOUND) @@ -126,6 +127,9 @@ ELSE (LIBSOUP24_FOUND) OPTION ( HAVE_LIBSOUP24 "building with libsoup 2.4" OFF ) OPTION ( HAVE_LIBSOUP22 "building with libsoup 2.2" ON ) + IF( CMAKE_C_PLATFORM_ID STREQUAL "SunOS" ) + OPTION( HAVE_LIBSOUP22_SOLARIS "enable Solaris libsoup workarounds" ON ) + ENDIF( CMAKE_C_PLATFORM_ID STREQUAL "SunOS" ) ENDIF (LIBSOUP24_FOUND) ELSE(LIBSOUP2_FOUND) SET( ENABLE_HTTP OFF ) @@ -243,6 +247,9 @@ SHOW_STATUS( THREAD_SAFE_CHECK "check is thread safe\t\t" CHECK_VERSION ) SHOW_STATUS( ENABLE_WBXML "WAP Binary XML\t\t" LIBWBXML2_VERSION ) SHOW_STATUS( ENABLE_HTTP "http transports\t\t" LIBSOUP2_VERSION ) +IF( CMAKE_C_PLATFORM_ID STREQUAL "SunOS" ) + SHOW_STATUS( HAVE_LIBSOUP22_SOLARIS "libsoup 2.2 Solaris workaround" ) +ENDIF( CMAKE_C_PLATFORM_ID STREQUAL "SunOS" ) SHOW_STATUS( ENABLE_OBEX "obex transports\t\t" OPENOBEX_VERSION ) SHOW_STATUS( ENABLE_BLUETOOTH "obex over bluetooth transports" BLUEZ_VERSION ) SHOW_STATUS( ENABLE_BLUETOOTH_SDPLIB "bluetooth channel discovery\t" ) Modified: trunk/config.h.cmake ============================================================================== --- trunk/config.h.cmake Tue Mar 17 17:52:03 2009 (r987) +++ trunk/config.h.cmake Tue Mar 17 19:15:41 2009 (r988) @@ -10,6 +10,7 @@ #cmakedefine ENABLE_HTTP /* libsoup version in use */ +#cmakedefine HAVE_LIBSOUP22_SOLARIS #cmakedefine HAVE_LIBSOUP22 #cmakedefine HAVE_LIBSOUP24 Modified: trunk/libsyncml/transports/http_client.c ============================================================================== --- trunk/libsyncml/transports/http_client.c Tue Mar 17 17:52:03 2009 (r987) +++ trunk/libsyncml/transports/http_client.c Tue Mar 17 19:15:41 2009 (r988) @@ -262,8 +262,12 @@ { if (env->cafile != NULL && strlen(env->cafile)) { +#ifdef HAVE_LIBSOUP22_SOLARIS + env->session = soup_session_sync_new_with_options( +#else env->session = soup_session_async_new_with_options( SOUP_SESSION_ASYNC_CONTEXT, env->tsp->context, +#endif SOUP_SESSION_PROXY_URI, env->proxy, SOUP_SESSION_SSL_CA_FILE, env->cafile, NULL); @@ -272,21 +276,33 @@ * FIXME: http://bugzilla.gnome.org/show_bug.cgi?id=547881 */ } else { +#ifdef HAVE_LIBSOUP22_SOLARIS + env->session = soup_session_sync_new_with_options( +#else env->session = soup_session_async_new_with_options( SOUP_SESSION_ASYNC_CONTEXT, env->tsp->context, +#endif SOUP_SESSION_PROXY_URI, env->proxy, NULL); } } else { if (env->cafile != NULL && strlen(env->cafile)) { +#ifdef HAVE_LIBSOUP22_SOLARIS + env->session = soup_session_sync_new_with_options( +#else env->session = soup_session_async_new_with_options( SOUP_SESSION_ASYNC_CONTEXT, env->tsp->context, +#endif SOUP_SESSION_SSL_CA_FILE, env->cafile, NULL); } else { +#ifdef HAVE_LIBSOUP22_SOLARIS + env->session = soup_session_sync_new_with_options( +#else env->session = soup_session_async_new_with_options( SOUP_SESSION_ASYNC_CONTEXT, env->tsp->context, +#endif NULL); } } @@ -427,7 +443,13 @@ smlTrace(TRACE_INTERNAL, "%s: data length: %i", __func__, msg->request_body->length); #endif +#ifdef HAVE_LIBSOUP22_SOLARIS + soup_session_send_message(env->session, msg); + smlTransportHttpClientCallback(msg, userdata); + g_object_unref(msg); /* synchronous mode !!! */ +#else soup_session_queue_message(env->session, msg, smlTransportHttpClientCallback, userdata); +#endif smlTrace(TRACE_EXIT, "%s", __func__); return; @@ -482,6 +504,10 @@ CHECK_ERROR_REF smlAssert(tsp); +#ifdef HAVE_LIBSOUP22_SOLARIS + smlTrace(TRACE_INTERNAL, "%s: Enabled libsoup 2.2 Solaris workarounds", __func__); +#endif + tsp->functions.set_config_option = smlTransportHttpClientSetConfigOption; tsp->functions.set_response_uri = smlTransportHttpClientSetResponseURI; tsp->functions.disconnect = smlTransportHttpClientDisconnect; Modified: trunk/libsyncml/transports/http_client_internals.h ============================================================================== --- trunk/libsyncml/transports/http_client_internals.h Tue Mar 17 17:52:03 2009 (r987) +++ trunk/libsyncml/transports/http_client_internals.h Tue Mar 17 19:15:41 2009 (r988) @@ -22,7 +22,12 @@ #ifndef _HTTP_CLIENT_INTERNALS_H_ #define _HTTP_CLIENT_INTERNALS_H_ +#ifdef HAVE_LIBSOUP22_SOLARIS +#include <libsoup/soup-session-sync.h> +#else #include <libsoup/soup-session-async.h> +#endif + #include <libsoup/soup-uri.h> #ifndef HAVE_LIBSOUP22 #include <libsoup/soup-auth.h> Modified: trunk/libsyncml/transports/http_server.c ============================================================================== --- trunk/libsyncml/transports/http_server.c Tue Mar 17 17:52:03 2009 (r987) +++ trunk/libsyncml/transports/http_server.c Tue Mar 17 19:15:41 2009 (r988) @@ -173,7 +173,7 @@ smlErrorDeref(&error); } -#else /* !HAVE_LIBSOUP22 */ +#else /* !HAVE_LIBSOUP22 == libsoup 2.4 */ static void smlTransportHttpServerCallback( SoupServer *server, @@ -361,6 +361,7 @@ smlTrace(TRACE_ENTRY, "%s(%p, %p)", __func__, tsp, error); CHECK_ERROR_REF smlAssert(tsp); + smlAssert(tsp->context); smlAssert(tsp->transport_data); SmlTransportHttpServerEnv *env = tsp->transport_data; @@ -796,6 +797,7 @@ SmlBool smlTransportHttpServerNew(SmlTransport *tsp, SmlError **error) { + smlTrace(TRACE_ENTRY, "%s(%p, %p)", __func__, tsp, error); CHECK_ERROR_REF smlAssert(tsp); @@ -814,6 +816,7 @@ env->sessionToUri = g_hash_table_new(g_direct_hash, g_direct_equal); env->uriToLink = g_hash_table_new_full(g_str_hash, g_str_equal, smlTransportHttpServerFreeResponseURI, NULL); + smlTrace(TRACE_EXIT, "%s", __func__); return TRUE; } |