aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2008-01-24 22:49:47 +0000
committerWilmer van der Gaast <wilmer@gaast.net>2008-01-24 22:49:47 +0000
commitb5c8a34aeff244ffe7a9f4bd5edf827495d0deea (patch)
tree150af59ea988a4d63e9b9a080db224ffcd84ffab
parent613cc5583465b2fa35288a2f28d0e408904c4fd9 (diff)
Keeping track of valid Jabber connections so _connected() events will be
ignored if the connection's dead already. Necessary if using GLib for event handling for now. :-/
-rw-r--r--protocols/jabber/io.c10
-rw-r--r--protocols/jabber/jabber.c9
-rw-r--r--protocols/jabber/jabber.h2
3 files changed, 20 insertions, 1 deletions
diff --git a/protocols/jabber/io.c b/protocols/jabber/io.c
index 29561b86..86c216ef 100644
--- a/protocols/jabber/io.c
+++ b/protocols/jabber/io.c
@@ -248,6 +248,9 @@ gboolean jabber_connected_plain( gpointer data, gint source, b_input_condition c
{
struct im_connection *ic = data;
+ if( g_slist_find( jabber_connections, ic ) == NULL )
+ return FALSE;
+
if( source == -1 )
{
imcb_error( ic, "Could not connect to server" );
@@ -263,7 +266,12 @@ gboolean jabber_connected_plain( gpointer data, gint source, b_input_condition c
gboolean jabber_connected_ssl( gpointer data, void *source, b_input_condition cond )
{
struct im_connection *ic = data;
- struct jabber_data *jd = ic->proto_data;
+ struct jabber_data *jd;
+
+ if( g_slist_find( jabber_connections, ic ) == NULL )
+ return FALSE;
+
+ jd = ic->proto_data;
if( source == NULL )
{
diff --git a/protocols/jabber/jabber.c b/protocols/jabber/jabber.c
index 264a0308..243ed7fd 100644
--- a/protocols/jabber/jabber.c
+++ b/protocols/jabber/jabber.c
@@ -34,6 +34,8 @@
#include "md5.h"
#include "base64.h"
+GSList *jabber_connections;
+
static void jabber_init( account_t *acc )
{
set_t *s;
@@ -70,6 +72,11 @@ static void jabber_login( account_t *acc )
struct ns_srv_reply *srv = NULL;
char *connect_to, *s;
+ /* For now this is needed in the _connected() handlers if using
+ GLib event handling, to make sure we're not handling events
+ on dead connections. */
+ jabber_connections = g_slist_prepend( jabber_connections, ic );
+
jd->ic = ic;
ic->proto_data = jd;
@@ -262,6 +269,8 @@ static void jabber_logout( struct im_connection *ic )
g_free( jd->away_message );
g_free( jd->username );
g_free( jd );
+
+ jabber_connections = g_slist_remove( jabber_connections, ic );
}
static int jabber_buddy_msg( struct im_connection *ic, char *who, char *message, int flags )
diff --git a/protocols/jabber/jabber.h b/protocols/jabber/jabber.h
index f673ee0d..cf0f8e6a 100644
--- a/protocols/jabber/jabber.h
+++ b/protocols/jabber/jabber.h
@@ -29,6 +29,8 @@
#include "xmltree.h"
#include "bitlbee.h"
+extern GSList *jabber_connections;
+
typedef enum
{
JFLAG_STREAM_STARTED = 1, /* Set when we detected the beginning of the stream