diff options
author | Will Thompson <will.thompson@collabora.co.uk> | 2012-01-26 13:09:47 +0000 |
---|---|---|
committer | Will Thompson <will.thompson@collabora.co.uk> | 2012-01-26 13:09:47 +0000 |
commit | e142bebe3e112d715af2b4784b24730eb9c310a0 (patch) | |
tree | 594393ed618bf82b4600f61c624de58ad3340ca1 /lib | |
parent | a2a603bdfb12bc9aa80726bf1f822cc22c76917e (diff) | |
parent | 035a6b0a6e8ce1787abf2583bb918436282026fe (diff) |
Merge branch 'master' into BYE-BYE-LOUDMOUTH
Conflicts:
src/connection.c
src/connection.h
src/ft-manager.c
src/jingle-content.c
src/jingle-factory.c
src/jingle-session.c
src/message-util.c
src/muc-channel.c
src/muc-channel.h
Diffstat (limited to 'lib')
m--------- | lib/ext/wocky | 0 | ||||
-rw-r--r-- | lib/gibber/Makefile.am | 19 | ||||
-rw-r--r-- | lib/gibber/gibber-fd-transport.c | 51 | ||||
-rw-r--r-- | lib/gibber/gibber-listener.c | 2 | ||||
-rw-r--r-- | lib/gibber/gibber-sockets-win32.h | 4 | ||||
-rw-r--r-- | lib/gibber/gibber-sockets.c | 9 | ||||
-rw-r--r-- | lib/gibber/gibber-sockets.h | 2 | ||||
-rw-r--r-- | lib/gibber/gibber-tcp-transport.c | 14 | ||||
-rw-r--r-- | lib/loudmouth/Makefile.am | 12 |
9 files changed, 96 insertions, 17 deletions
diff --git a/lib/ext/wocky b/lib/ext/wocky -Subproject 3d127bedd7da28a6af3e32334ce8545f1cb7369 +Subproject 8a1a8d94d40d731a8045d4fb2a67a65484a7983 diff --git a/lib/gibber/Makefile.am b/lib/gibber/Makefile.am index 7ae59bec2..0685be90a 100644 --- a/lib/gibber/Makefile.am +++ b/lib/gibber/Makefile.am @@ -20,8 +20,6 @@ OUR_SOURCES = \ gibber-linklocal-transport.h \ gibber-listener.c \ gibber-listener.h \ - gibber-linklocal-transport.c \ - gibber-linklocal-transport.h \ gibber-sockets.c \ gibber-sockets.h \ gibber-sockets-unix.h \ @@ -63,6 +61,21 @@ gibber-signals-marshal.list: $(OUR_SOURCES) Makefile.am } > $@ -AM_CFLAGS = $(ERROR_CFLAGS) $(GCOV_CFLAGS) @GLIB_CFLAGS@ -fno-strict-aliasing +AM_CFLAGS = $(ERROR_CFLAGS) $(GCOV_CFLAGS) @GLIB_CFLAGS@ @GMODULE_CFLAGS@ -fno-strict-aliasing + +# following flag is requied to make getnameinfo work +if WINDOWS + AM_CFLAGS += -D_WIN32_WINNT=0x0501 +endif AM_LDFLAGS = $(GCOV_LIBS) @GLIB_LIBS@ + +Android.mk: Makefile.am $(BUILT_SOURCES) + androgenizer -:PROJECT telepathy-gabble -:STATIC gibber -:TAGS eng debug \ + -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ + -:SOURCES $(libgibber_la_SOURCES) \ + -:CFLAGS $(DEFS) $(CFLAGS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CFLAGS) \ + -:CPPFLAGS $(CPPFLAGS) $(AM_CPPFLAGS) \ + -:LDFLAGS $(AM_LDFLAGS) \ + > $@ diff --git a/lib/gibber/gibber-fd-transport.c b/lib/gibber/gibber-fd-transport.c index e23f1bc4a..b4dbe30bd 100644 --- a/lib/gibber/gibber-fd-transport.c +++ b/lib/gibber/gibber-fd-transport.c @@ -177,7 +177,9 @@ _do_disconnect (GibberFdTransport *self) if (priv->watch_out) g_source_remove (priv->watch_out); - g_source_remove (priv->watch_err); + if (priv->watch_err) + g_source_remove (priv->watch_err); + g_io_channel_shutdown (priv->channel, FALSE, NULL); g_io_channel_unref (priv->channel); priv->channel = NULL; @@ -362,6 +364,27 @@ _channel_io_err (GIOChannel *source, GIOCondition condition, gpointer data) return FALSE; } +#ifdef G_OS_WIN32 + +/* workaround for GLib bug #338943 */ + +static gboolean +_channel_io_in_dispatcher (GIOChannel *source, GIOCondition condition, gpointer data) +{ + if (condition & G_IO_ERR) + { + return _channel_io_err (source, condition, data); + } + if (condition == G_IO_IN) + { + return _channel_io_in (source, condition, data); + } + + g_assert_not_reached (); +} + +#endif + /* Default read and write implementations */ static GibberFdIOResult gibber_fd_transport_write (GibberFdTransport *fd_transport, @@ -448,6 +471,19 @@ gibber_fd_transport_set_fd (GibberFdTransport *self, int fd, g_io_channel_set_encoding (priv->channel, NULL, NULL); g_io_channel_set_buffered (priv->channel, FALSE); +#ifdef G_OS_WIN32 + /* workaround for GLib bug #338943 */ + if (!priv->receiving_blocked) + { + priv->watch_in = + g_io_add_watch (priv->channel, G_IO_IN | G_IO_ERR, _channel_io_in_dispatcher, self); + } + else + { + priv->watch_err = + g_io_add_watch (priv->channel, G_IO_ERR, _channel_io_err, self); + } +#else if (!priv->receiving_blocked) { priv->watch_in = @@ -456,6 +492,7 @@ gibber_fd_transport_set_fd (GibberFdTransport *self, int fd, priv->watch_err = g_io_add_watch (priv->channel, G_IO_ERR, _channel_io_err, self); +#endif gibber_transport_set_state (GIBBER_TRANSPORT(self), GIBBER_TRANSPORT_CONNECTED); @@ -538,8 +575,20 @@ gibber_fd_transport_block_receiving (GibberTransport *transport, DEBUG ("unblock receiving from the transport"); if (priv->channel != NULL) { +#ifdef G_OS_WIN32 + /* workaround for GLib bug #338943 */ + if (priv->watch_err) + { + g_source_remove (priv->watch_err); + priv->watch_err = 0; + } + + priv->watch_in = g_io_add_watch (priv->channel, G_IO_IN | G_IO_ERR, + _channel_io_in_dispatcher, self); +#else priv->watch_in = g_io_add_watch (priv->channel, G_IO_IN, _channel_io_in, self); +#endif } /* else the transport isn't connected yet */ } diff --git a/lib/gibber/gibber-listener.c b/lib/gibber/gibber-listener.c index 40d4610d7..a885294cb 100644 --- a/lib/gibber/gibber-listener.c +++ b/lib/gibber/gibber-listener.c @@ -259,7 +259,7 @@ add_listener (GibberListener *self, int family, int type, int protocol, goto error; } - ret = setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof (int)); + ret = setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, (char *) &yes, sizeof (int)); if (ret == -1) { gibber_socket_set_error (error, "setsockopt failed", diff --git a/lib/gibber/gibber-sockets-win32.h b/lib/gibber/gibber-sockets-win32.h index d35e3cbdf..e61e28451 100644 --- a/lib/gibber/gibber-sockets-win32.h +++ b/lib/gibber/gibber-sockets-win32.h @@ -22,8 +22,8 @@ #include <winsock2.h> #include <ws2tcpip.h> -#include <Windows.h> -#include <Winbase.h> +#include <windows.h> +#include <winbase.h> /* Winsock makes some inappropriately-namespaced definitions */ #undef ERROR #undef interface diff --git a/lib/gibber/gibber-sockets.c b/lib/gibber/gibber-sockets.c index bcedeb53b..b926f9027 100644 --- a/lib/gibber/gibber-sockets.c +++ b/lib/gibber/gibber-sockets.c @@ -27,14 +27,13 @@ #include "gibber-debug.h" gboolean -gibber_connect_errno_requires_retry (void) +gibber_connect_errno_requires_retry (int err) { #ifdef G_OS_WIN32 - int err = WSAGetLastError (); - - return (err == WSAEINPROGRESS || err == WSAEALREADY); + return (err == WSAEINPROGRESS || err == WSAEALREADY || + err == WSAEWOULDBLOCK || err == WSAEINVAL); #else - return (errno == EINPROGRESS || errno == EALREADY); + return (err == EINPROGRESS || err == EALREADY); #endif } diff --git a/lib/gibber/gibber-sockets.h b/lib/gibber/gibber-sockets.h index 5cfb3c8b3..48ec43424 100644 --- a/lib/gibber/gibber-sockets.h +++ b/lib/gibber/gibber-sockets.h @@ -32,7 +32,7 @@ G_BEGIN_DECLS -gboolean gibber_connect_errno_requires_retry (void); +gboolean gibber_connect_errno_requires_retry (int err); gboolean gibber_socket_errno_is_eafnosupport (void); gboolean gibber_socket_errno_is_eaddrinuse (void); void gibber_socket_set_error (GError **error, const gchar *context, diff --git a/lib/gibber/gibber-tcp-transport.c b/lib/gibber/gibber-tcp-transport.c index 3fb1723d5..a33601bad 100644 --- a/lib/gibber/gibber-tcp-transport.c +++ b/lib/gibber/gibber-tcp-transport.c @@ -165,6 +165,8 @@ try_to_connect (GibberTCPTransport *self) gssize native_size; gint fd; int ret; + int err; + gboolean connected = FALSE; g_assert (priv->channel != NULL); @@ -182,9 +184,17 @@ try_to_connect (GibberTCPTransport *self) g_socket_address_to_native (gaddr, &addr, sizeof (addr), NULL); ret = connect (fd, (struct sockaddr *)&addr, (gsize) native_size); +#ifdef G_OS_WIN32 + err = WSAGetLastError (); + connected = (ret == 0 || err == WSAEISCONN); +#else + err = errno; + connected = (ret == 0); +#endif + g_object_unref (gaddr); - if (ret == 0) + if (connected) { DEBUG ("connect succeeded"); @@ -193,7 +203,7 @@ try_to_connect (GibberTCPTransport *self) return FALSE; } - if (gibber_connect_errno_requires_retry ()) + if (gibber_connect_errno_requires_retry (err)) { /* We have to wait longer */ return TRUE; diff --git a/lib/loudmouth/Makefile.am b/lib/loudmouth/Makefile.am index af6f61d24..7d58434f8 100644 --- a/lib/loudmouth/Makefile.am +++ b/lib/loudmouth/Makefile.am @@ -8,8 +8,6 @@ BUILT_SOURCES = \ OUR_SOURCES = \ loudmouth.h \ lm-types.h \ - lm-connection.c \ - lm-connection.h \ lm-message.c \ lm-message.h \ lm-message-handler.c \ @@ -63,3 +61,13 @@ loudmouth-signals-marshal.list: $(OUR_SOURCES) Makefile.am AM_CFLAGS = $(ERROR_CFLAGS) $(GCOV_CFLAGS) @GLIB_CFLAGS@ @WOCKY_CFLAGS@ AM_LDFLAGS = $(GCOV_LIBS) @GLIB_LIBS@ @WOCKY_LIBS@ + +Android.mk: Makefile.am $(BUILT_SOURCES) + androgenizer -:PROJECT telepathy-gabble -:STATIC loudmouth -:TAGS eng debug \ + -:REL_TOP $(top_srcdir) -:ABS_TOP $(abs_top_srcdir) \ + -:SOURCES $(libloudmouth_la_SOURCES) \ + -:CFLAGS $(DEFS) $(CFLAGS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CFLAGS) \ + -:CPPFLAGS $(CPPFLAGS) $(AM_CPPFLAGS) \ + -:LDFLAGS $(libloudmouth_la_LIBADD) \ + > $@ |