aboutsummaryrefslogtreecommitdiffstats
path: root/protocols
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2009-10-11 00:25:54 +0100
committerWilmer van der Gaast <wilmer@gaast.net>2009-10-11 00:25:54 +0100
commite046390da36e369c94af607fdedfe7b9f99d9e47 (patch)
tree7955564156898b8ca738c383ae561f91cc347f17 /protocols
parent0cbef26bd1f82787a8107e92b14839a59187e0c2 (diff)
Make purple use BitlBee's event handling API. Since the APIs never really
diverged too much this is fairly transparent. I did rename and redefine GAIM_INPUT_* variables to really make it work without adding another stupid layer in between. One problem left, the new libpurple input API doesn't care about return values. Fixing that in the next CL.
Diffstat (limited to 'protocols')
-rw-r--r--protocols/jabber/io.c4
-rw-r--r--protocols/msn/ns.c2
-rw-r--r--protocols/msn/sb.c2
-rw-r--r--protocols/oscar/oscar.c14
-rw-r--r--protocols/purple/purple.c72
-rw-r--r--protocols/yahoo/yahoo.c4
6 files changed, 30 insertions, 68 deletions
diff --git a/protocols/jabber/io.c b/protocols/jabber/io.c
index 10efad37..3b0ef3ef 100644
--- a/protocols/jabber/io.c
+++ b/protocols/jabber/io.c
@@ -63,7 +63,7 @@ int jabber_write( struct im_connection *ic, char *buf, int len )
it via the event handler. If not, add the handler. (In
most cases it probably won't be necessary.) */
if( ( ret = jabber_write_queue( ic ) ) && jd->tx_len > 0 )
- jd->w_inpa = b_input_add( jd->fd, GAIM_INPUT_WRITE, jabber_write_callback, ic );
+ jd->w_inpa = b_input_add( jd->fd, B_EV_IO_WRITE, jabber_write_callback, ic );
}
else
{
@@ -528,7 +528,7 @@ gboolean jabber_start_stream( struct im_connection *ic )
jd->xt = xt_new( jabber_handlers, ic );
if( jd->r_inpa <= 0 )
- jd->r_inpa = b_input_add( jd->fd, GAIM_INPUT_READ, jabber_read_callback, ic );
+ jd->r_inpa = b_input_add( jd->fd, B_EV_IO_READ, jabber_read_callback, ic );
greet = g_strdup_printf( "<?xml version='1.0' ?>"
"<stream:stream to=\"%s\" xmlns=\"jabber:client\" "
diff --git a/protocols/msn/ns.c b/protocols/msn/ns.c
index fe48f96d..6928186a 100644
--- a/protocols/msn/ns.c
+++ b/protocols/msn/ns.c
@@ -74,7 +74,7 @@ gboolean msn_ns_connected( gpointer data, gint source, b_input_condition cond )
g_snprintf( s, sizeof( s ), "VER %d MSNP8 CVR0\r\n", ++md->trId );
if( msn_write( ic, s, strlen( s ) ) )
{
- ic->inpa = b_input_add( md->fd, GAIM_INPUT_READ, msn_ns_callback, ic );
+ ic->inpa = b_input_add( md->fd, B_EV_IO_READ, msn_ns_callback, ic );
imcb_log( ic, "Connected to server, waiting for reply" );
}
diff --git a/protocols/msn/sb.c b/protocols/msn/sb.c
index e9526234..b0f7a2c5 100644
--- a/protocols/msn/sb.c
+++ b/protocols/msn/sb.c
@@ -308,7 +308,7 @@ gboolean msn_sb_connected( gpointer data, gint source, b_input_condition cond )
g_snprintf( buf, sizeof( buf ), "ANS %d %s %s %d\r\n", ++sb->trId, ic->acc->user, sb->key, sb->session );
if( msn_sb_write( sb, buf, strlen( buf ) ) )
- sb->inp = b_input_add( sb->fd, GAIM_INPUT_READ, msn_sb_callback, sb );
+ sb->inp = b_input_add( sb->fd, B_EV_IO_READ, msn_sb_callback, sb );
else
debug( "Error %d while connecting to switchboard server", 2 );
diff --git a/protocols/oscar/oscar.c b/protocols/oscar/oscar.c
index 1118c26d..06b8100f 100644
--- a/protocols/oscar/oscar.c
+++ b/protocols/oscar/oscar.c
@@ -290,7 +290,7 @@ static gboolean oscar_callback(gpointer data, gint source,
odata = (struct oscar_data *)ic->proto_data;
- if (condition & GAIM_INPUT_READ) {
+ if (condition & B_EV_IO_READ) {
if (aim_get_command(odata->sess, conn) >= 0) {
aim_rxdispatch(odata->sess);
if (odata->killme)
@@ -362,7 +362,7 @@ static gboolean oscar_login_connect(gpointer data, gint source, b_input_conditio
}
aim_conn_completeconnect(sess, conn);
- ic->inpa = b_input_add(conn->fd, GAIM_INPUT_READ,
+ ic->inpa = b_input_add(conn->fd, B_EV_IO_READ,
oscar_callback, conn);
return FALSE;
@@ -486,7 +486,7 @@ static gboolean oscar_bos_connect(gpointer data, gint source, b_input_condition
}
aim_conn_completeconnect(sess, bosconn);
- ic->inpa = b_input_add(bosconn->fd, GAIM_INPUT_READ,
+ ic->inpa = b_input_add(bosconn->fd, B_EV_IO_READ,
oscar_callback, bosconn);
imcb_log(ic, _("Connection established, cookie sent"));
@@ -662,7 +662,7 @@ static gboolean straight_to_hell(gpointer data, gint source, b_input_condition c
write(pos->fd, buf, strlen(buf));
if (pos->modname)
g_free(pos->modname);
- pos->inpa = b_input_add(pos->fd, GAIM_INPUT_READ, damn_you, pos);
+ pos->inpa = b_input_add(pos->fd, B_EV_IO_READ, damn_you, pos);
return FALSE;
}
@@ -831,7 +831,7 @@ static gboolean oscar_chatnav_connect(gpointer data, gint source, b_input_condit
}
aim_conn_completeconnect(sess, tstconn);
- odata->cnpa = b_input_add(tstconn->fd, GAIM_INPUT_READ,
+ odata->cnpa = b_input_add(tstconn->fd, B_EV_IO_READ,
oscar_callback, tstconn);
return FALSE;
@@ -859,7 +859,7 @@ static gboolean oscar_auth_connect(gpointer data, gint source, b_input_condition
}
aim_conn_completeconnect(sess, tstconn);
- odata->paspa = b_input_add(tstconn->fd, GAIM_INPUT_READ,
+ odata->paspa = b_input_add(tstconn->fd, B_EV_IO_READ,
oscar_callback, tstconn);
return FALSE;
@@ -895,7 +895,7 @@ static gboolean oscar_chat_connect(gpointer data, gint source, b_input_condition
aim_conn_completeconnect(sess, ccon->conn);
ccon->inpa = b_input_add(tstconn->fd,
- GAIM_INPUT_READ,
+ B_EV_IO_READ,
oscar_callback, tstconn);
odata->oscar_chats = g_slist_append(odata->oscar_chats, ccon);
diff --git a/protocols/purple/purple.c b/protocols/purple/purple.c
index cd908832..08c14edf 100644
--- a/protocols/purple/purple.c
+++ b/protocols/purple/purple.c
@@ -62,67 +62,22 @@ static struct im_connection *purple_ic_by_gc( PurpleConnection *gc )
return purple_ic_by_pa( purple_connection_get_account( gc ) );
}
-static void purple_glib_io_destroy(gpointer data)
+static guint prplcb_ev_timeout_add( guint interval, GSourceFunc func, gpointer udata )
{
- g_free(data);
+ return b_timeout_add( interval, (b_event_handler) func, udata );
}
-static gboolean purple_glib_io_invoke(GIOChannel *source, GIOCondition condition, gpointer data)
+static guint prplcb_ev_input_add( int fd, PurpleInputCondition cond, PurpleInputFunction func, gpointer udata )
{
- PurpleGLibIOClosure *closure = data;
- PurpleInputCondition purple_cond = 0;
-
- if (condition & PURPLE_GLIB_READ_COND)
- purple_cond |= PURPLE_INPUT_READ;
- if (condition & PURPLE_GLIB_WRITE_COND)
- purple_cond |= PURPLE_INPUT_WRITE;
-
- closure->function(closure->data, g_io_channel_unix_get_fd(source),
- purple_cond);
-
- return TRUE;
-}
-
-static guint glib_input_add(gint fd, PurpleInputCondition condition, PurpleInputFunction function,
- gpointer data)
-{
- PurpleGLibIOClosure *closure = g_new0(PurpleGLibIOClosure, 1);
- GIOChannel *channel;
- GIOCondition cond = 0;
-
- closure->function = function;
- closure->data = data;
-
- if (condition & PURPLE_INPUT_READ)
- cond |= PURPLE_GLIB_READ_COND;
- if (condition & PURPLE_INPUT_WRITE)
- cond |= PURPLE_GLIB_WRITE_COND;
-
- channel = g_io_channel_unix_new(fd);
- closure->result = g_io_add_watch_full(channel, G_PRIORITY_DEFAULT, cond,
- purple_glib_io_invoke, closure, purple_glib_io_destroy);
-
- g_io_channel_unref(channel);
- return closure->result;
+ return (guint) b_input_add( fd, cond, (b_event_handler) func, udata );
}
static PurpleEventLoopUiOps glib_eventloops =
{
- g_timeout_add,
- g_source_remove,
- glib_input_add,
- g_source_remove,
- NULL,
-#if GLIB_CHECK_VERSION(2,14,0)
- g_timeout_add_seconds,
-#else
- NULL,
-#endif
-
- /* padding */
- NULL,
- NULL,
- NULL
+ prplcb_ev_timeout_add,
+ b_event_remove,
+ prplcb_ev_input_add,
+ b_event_remove,
};
static void purple_init( account_t *acc )
@@ -136,7 +91,7 @@ static void purple_login( account_t *acc )
struct im_connection *ic = imcb_new( acc );
PurpleAccount *pa;
//PurpleSavedStatus *ps;
- GList *i;
+ //GList *i;
/* For now this is needed in the _connected() handlers if using
GLib event handling, to make sure we're not handling events
@@ -342,7 +297,7 @@ static PurpleConversationUiOps bee_conv_uiops =
NULL, /* destroy_conversation */
NULL, /* write_chat */
prplcb_conv_im, /* write_im */
- NULL, //null_write_conv, /* write_conv */
+ NULL, /* write_conv */
NULL, /* chat_add_users */
NULL, /* chat_rename_user */
NULL, /* chat_remove_users */
@@ -381,6 +336,13 @@ void purple_initmodule()
{
GList *prots;
+ if( B_EV_IO_READ != PURPLE_INPUT_READ ||
+ B_EV_IO_WRITE != PURPLE_INPUT_WRITE )
+ {
+ /* FIXME FIXME FIXME FIXME FIXME :-) */
+ exit( 1 );
+ }
+
purple_util_set_user_dir("/tmp");
purple_debug_set_enabled(FALSE);
purple_core_set_ui_ops(&bee_core_uiops);
diff --git a/protocols/yahoo/yahoo.c b/protocols/yahoo/yahoo.c
index 3e844c55..65993d9d 100644
--- a/protocols/yahoo/yahoo.c
+++ b/protocols/yahoo/yahoo.c
@@ -681,7 +681,7 @@ int ext_yahoo_add_handler( int id, int fd, yahoo_input_condition cond, void *dat
d->data = data;
inp->d = d;
- d->tag = inp->h = b_input_add( fd, GAIM_INPUT_READ, (b_event_handler) byahoo_read_ready_callback, (gpointer) d );
+ d->tag = inp->h = b_input_add( fd, B_EV_IO_READ, (b_event_handler) byahoo_read_ready_callback, (gpointer) d );
}
else if( cond == YAHOO_INPUT_WRITE )
{
@@ -692,7 +692,7 @@ int ext_yahoo_add_handler( int id, int fd, yahoo_input_condition cond, void *dat
d->data = data;
inp->d = d;
- d->tag = inp->h = b_input_add( fd, GAIM_INPUT_WRITE, (b_event_handler) byahoo_write_ready_callback, (gpointer) d );
+ d->tag = inp->h = b_input_add( fd, B_EV_IO_WRITE, (b_event_handler) byahoo_write_ready_callback, (gpointer) d );
}
else
{