summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorWill Thompson <will.thompson@collabora.co.uk>2012-01-26 13:09:47 +0000
committerWill Thompson <will.thompson@collabora.co.uk>2012-01-26 13:09:47 +0000
commite142bebe3e112d715af2b4784b24730eb9c310a0 (patch)
tree594393ed618bf82b4600f61c624de58ad3340ca1 /lib
parenta2a603bdfb12bc9aa80726bf1f822cc22c76917e (diff)
parent035a6b0a6e8ce1787abf2583bb918436282026fe (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/wocky0
-rw-r--r--lib/gibber/Makefile.am19
-rw-r--r--lib/gibber/gibber-fd-transport.c51
-rw-r--r--lib/gibber/gibber-listener.c2
-rw-r--r--lib/gibber/gibber-sockets-win32.h4
-rw-r--r--lib/gibber/gibber-sockets.c9
-rw-r--r--lib/gibber/gibber-sockets.h2
-rw-r--r--lib/gibber/gibber-tcp-transport.c14
-rw-r--r--lib/loudmouth/Makefile.am12
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) \
+ > $@