diff options
-rw-r--r-- | irc.c | 2 | ||||
-rw-r--r-- | irc.h | 5 | ||||
-rw-r--r-- | irc_commands.c | 18 | ||||
-rw-r--r-- | irc_im.c | 31 | ||||
-rw-r--r-- | protocols/bee.h | 12 | ||||
-rw-r--r-- | protocols/bee_user.c | 184 | ||||
-rw-r--r-- | protocols/nogaim.c | 182 | ||||
-rw-r--r-- | protocols/nogaim.h | 13 | ||||
-rw-r--r-- | root_commands.c | 39 | ||||
-rw-r--r-- | unix.c | 2 |
10 files changed, 262 insertions, 226 deletions
@@ -93,6 +93,8 @@ irc_t *irc_new( int fd ) irc_connection_list = g_slist_append( irc_connection_list, irc ); b = irc->b = bee_new(); + b->ui_data = irc; + b->ui = &irc_ui_funcs; s = set_add( &b->set, "away_devoice", "true", NULL/*set_eval_away_devoice*/, irc ); s = set_add( &b->set, "buddy_sendbuffer", "false", set_eval_bool, irc ); @@ -74,7 +74,6 @@ typedef struct irc char umode[8]; struct query *queries; - struct account *accounts; GSList *file_transfers; GSList *users, *channels; @@ -112,7 +111,7 @@ typedef struct irc_user guint sendbuf_timer; //int sendbuf_flags; - //struct user *b; + struct bee_user *bu; const struct irc_user_funcs *f; } irc_user_t; @@ -152,6 +151,8 @@ struct irc_channel_funcs gboolean (*privmsg)( irc_channel_t *iu, const char *msg ); }; +extern const struct bee_ui_funcs irc_ui_funcs; + /* irc.c */ extern GSList *irc_connection_list; diff --git a/irc_commands.c b/irc_commands.c index 858b5bdd..03d05417 100644 --- a/irc_commands.c +++ b/irc_commands.c @@ -308,6 +308,13 @@ static void irc_cmd_privmsg( irc_t *irc, char **cmd ) #endif } +static void irc_cmd_nickserv( irc_t *irc, char **cmd ) +{ + /* [SH] This aliases the NickServ command to PRIVMSG root */ + /* [TV] This aliases the NS command to PRIVMSG root as well */ + root_command( irc, cmd + 1 ); +} + #if 0 @@ -517,13 +524,6 @@ static void irc_cmd_away( irc_t *irc, char **cmd ) set_setstr( &irc->set, "away", u->away ); } -static void irc_cmd_nickserv( irc_t *irc, char **cmd ) -{ - /* [SH] This aliases the NickServ command to PRIVMSG root */ - /* [TV] This aliases the NS command to PRIVMSG root as well */ - root_command( irc, cmd + 1 ); -} - static void irc_cmd_version( irc_t *irc, char **cmd ) { irc_send_num( irc, 351, "bitlbee-%s. %s :%s/%s ", BITLBEE_VERSION, irc->myhost, ARCH, CPU ); @@ -577,6 +577,8 @@ static const command_t irc_commands[] = { { "mode", 1, irc_cmd_mode, IRC_CMD_LOGGED_IN }, { "who", 0, irc_cmd_who, IRC_CMD_LOGGED_IN }, { "privmsg", 1, irc_cmd_privmsg, IRC_CMD_LOGGED_IN }, + { "nickserv", 1, irc_cmd_nickserv, IRC_CMD_LOGGED_IN }, + { "ns", 1, irc_cmd_nickserv, IRC_CMD_LOGGED_IN }, #if 0 { "oper", 2, irc_cmd_oper, IRC_CMD_LOGGED_IN }, { "invite", 2, irc_cmd_invite, IRC_CMD_LOGGED_IN }, @@ -586,8 +588,6 @@ static const command_t irc_commands[] = { { "watch", 1, irc_cmd_watch, IRC_CMD_LOGGED_IN }, { "topic", 1, irc_cmd_topic, IRC_CMD_LOGGED_IN }, { "away", 0, irc_cmd_away, IRC_CMD_LOGGED_IN }, - { "nickserv", 1, irc_cmd_nickserv, IRC_CMD_LOGGED_IN }, - { "ns", 1, irc_cmd_nickserv, IRC_CMD_LOGGED_IN }, { "version", 0, irc_cmd_version, IRC_CMD_LOGGED_IN }, { "completions", 0, irc_cmd_completions, IRC_CMD_LOGGED_IN }, { "die", 0, NULL, IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER }, @@ -25,8 +25,10 @@ #include "bitlbee.h" + +/* IM->IRC callbacks */ + static const struct irc_user_funcs irc_user_im_funcs; -static const struct bee_ui_funcs irc_ui_funcs; static gboolean bee_irc_user_new( bee_t *bee, bee_user_t *bu ) { @@ -36,7 +38,8 @@ static gboolean bee_irc_user_new( bee_t *bee, bee_user_t *bu ) memset( nick, 0, MAX_NICK_LENGTH + 1 ); strcpy( nick, nick_get( bu->ic->acc, bu->handle ) ); - iu = irc_user_new( (irc_t*) bee->ui_data, nick ); + bu->ui_data = iu = irc_user_new( (irc_t*) bee->ui_data, nick ); + iu->bu = bu; if( ( s = strchr( bu->handle, '@' ) ) ) { @@ -65,11 +68,33 @@ static gboolean bee_irc_user_new( bee_t *bee, bee_user_t *bu ) return TRUE; } +static gboolean bee_irc_user_free( bee_t *bee, bee_user_t *bu ) +{ + return irc_user_free( bee->ui_data, bu->ui_data ); +} +static gboolean bee_irc_user_status( bee_t *bee, bee_user_t *bu, bee_user_t *old ) +{ + return TRUE; +} -static const struct bee_ui_funcs irc_ui_funcs = { +const struct bee_ui_funcs irc_ui_funcs = { bee_irc_user_new, + bee_irc_user_free, + bee_irc_user_status, }; + +/* IRC->IM calls */ + +static gboolean bee_irc_user_privmsg( irc_user_t *iu, const char *msg ) +{ + if( iu->bu ) + return bee_user_msg( iu->irc->b, iu->bu, msg, 0 ); + else + return FALSE; +} + static const struct irc_user_funcs irc_user_im_funcs = { + bee_irc_user_privmsg, }; diff --git a/protocols/bee.h b/protocols/bee.h index e76e7988..c36a6b16 100644 --- a/protocols/bee.h +++ b/protocols/bee.h @@ -79,5 +79,17 @@ void bee_free( bee_t *b ); bee_user_t *bee_user_new( bee_t *bee, struct im_connection *ic, const char *handle ); int bee_user_free( bee_t *bee, struct im_connection *ic, const char *handle ); bee_user_t *bee_user_by_handle( bee_t *bee, struct im_connection *ic, const char *handle ); +int bee_user_msg( bee_t *bee, bee_user_t *bu, const char *msg, int flags ); + +/* Callbacks from IM modules to core: */ +/* Buddy activity */ +/* To manipulate the status of a handle. + * - flags can be |='d with OPT_* constants. You will need at least: + * OPT_LOGGED_IN and OPT_AWAY. + * - 'state' and 'message' can be NULL */ +G_MODULE_EXPORT void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags, const char *state, const char *message ); +/* Not implemented yet! */ G_MODULE_EXPORT void imcb_buddy_times( struct im_connection *ic, const char *handle, time_t login, time_t idle ); +/* Call when a handle says something. 'flags' and 'sent_at may be just 0. */ +G_MODULE_EXPORT void imcb_buddy_msg( struct im_connection *ic, const char *handle, char *msg, uint32_t flags, time_t sent_at ); #endif /* __BEE_H__ */ diff --git a/protocols/bee_user.c b/protocols/bee_user.c index 4356c141..66e25faf 100644 --- a/protocols/bee_user.c +++ b/protocols/bee_user.c @@ -80,3 +80,187 @@ bee_user_t *bee_user_by_handle( bee_t *bee, struct im_connection *ic, const char return NULL; } + +int bee_user_msg( bee_t *bee, bee_user_t *bu, const char *msg, int flags ) +{ + char *buf = NULL; + int st; + + if( ( bu->ic->flags & OPT_DOES_HTML ) && ( g_strncasecmp( msg, "<html>", 6 ) != 0 ) ) + { + buf = escape_html( msg ); + msg = buf; + } + + st = bu->ic->acc->prpl->buddy_msg( bu->ic, bu->handle, msg, flags ); + g_free( buf ); + + return st; +} + + +/* IM->UI callbacks */ +void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags, const char *state, const char *message ) +{ + bee_t *bee = ic->bee; + bee_user_t *bu, *old; + + if( !( bu = bee_user_by_handle( bee, ic, handle ) ) ) + { + if( g_strcasecmp( set_getstr( &ic->bee->set, "handle_unknown" ), "add" ) == 0 ) + { + bu = bee_user_new( bee, ic, handle ); + } + else + { + if( set_getbool( &ic->bee->set, "debug" ) || g_strcasecmp( set_getstr( &ic->bee->set, "handle_unknown" ), "ignore" ) != 0 ) + { + imcb_log( ic, "imcb_buddy_status() for unknown handle %s:", handle ); + imcb_log( ic, "flags = %d, state = %s, message = %s", flags, + state ? state : "NULL", message ? message : "NULL" ); + } + + return; + } + } + + /* May be nice to give the UI something to compare against. */ + old = g_memdup( bu, sizeof( bee_user_t ) ); + + /* TODO(wilmer): OPT_AWAY, or just state == NULL ? */ + bu->flags = ( flags & OPT_LOGGED_IN ? BEE_USER_ONLINE : 0 ) | + ( flags & OPT_AWAY ? BEE_USER_AWAY : 0 ); + bu->status = g_strdup( ( flags & OPT_AWAY ) && state == NULL ? "Away" : state ); + bu->status_msg = g_strdup( message ); + + if( bee->ui->user_status ) + bee->ui->user_status( bee, bu, old ); + + g_free( old->status_msg ); + g_free( old->status ); + g_free( old ); +#if 0 + oa = u->away != NULL; + oo = u->online; + + g_free( u->away ); + g_free( u->status_msg ); + u->away = u->status_msg = NULL; + + if( ( flags & OPT_LOGGED_IN ) && !u->online ) + { + irc_spawn( ic->irc, u ); + u->online = 1; + } + else if( !( flags & OPT_LOGGED_IN ) && u->online ) + { + struct groupchat *c; + + irc_kill( ic->irc, u ); + u->online = 0; + + /* Remove him/her from the groupchats to prevent PART messages after he/she QUIT already */ + for( c = ic->groupchats; c; c = c->next ) + remove_chat_buddy_silent( c, handle ); + } + + if( flags & OPT_AWAY ) + { + if( state && message ) + { + u->away = g_strdup_printf( "%s (%s)", state, message ); + } + else if( state ) + { + u->away = g_strdup( state ); + } + else if( message ) + { + u->away = g_strdup( message ); + } + else + { + u->away = g_strdup( "Away" ); + } + } + else + { + u->status_msg = g_strdup( message ); + } + + /* LISPy... */ + if( ( set_getbool( &ic->bee->set, "away_devoice" ) ) && /* Don't do a thing when user doesn't want it */ + ( u->online ) && /* Don't touch offline people */ + ( ( ( u->online != oo ) && !u->away ) || /* Voice joining people */ + ( ( u->online == oo ) && ( oa == !u->away ) ) ) ) /* (De)voice people changing state */ + { + char *from; + + if( set_getbool( &ic->bee->set, "simulate_netsplit" ) ) + { + from = g_strdup( ic->irc->myhost ); + } + else + { + from = g_strdup_printf( "%s!%s@%s", ic->irc->mynick, ic->irc->mynick, + ic->irc->myhost ); + } + irc_write( ic->irc, ":%s MODE %s %cv %s", from, ic->irc->channel, + u->away?'-':'+', u->nick ); + g_free( from ); + } +#endif +} + +void imcb_buddy_msg( struct im_connection *ic, const char *handle, char *msg, uint32_t flags, time_t sent_at ) +{ +#if 0 + bee_t *bee = ic->bee; + char *wrapped; + user_t *u; + + u = user_findhandle( ic, handle ); + + if( !u ) + { + char *h = set_getstr( &bee->set, "handle_unknown" ); + + if( g_strcasecmp( h, "ignore" ) == 0 ) + { + if( set_getbool( &bee->set, "debug" ) ) + imcb_log( ic, "Ignoring message from unknown handle %s", handle ); + + return; + } + else if( g_strncasecmp( h, "add", 3 ) == 0 ) + { + int private = set_getbool( &bee->set, "private" ); + + if( h[3] ) + { + if( g_strcasecmp( h + 3, "_private" ) == 0 ) + private = 1; + else if( g_strcasecmp( h + 3, "_channel" ) == 0 ) + private = 0; + } + + imcb_add_buddy( ic, handle, NULL ); + u = user_findhandle( ic, handle ); + u->is_private = private; + } + else + { + imcb_log( ic, "Message from unknown handle %s:", handle ); + u = user_find( irc, irc->mynick ); + } + } + + if( ( g_strcasecmp( set_getstr( &ic->bee->set, "strip_html" ), "always" ) == 0 ) || + ( ( ic->flags & OPT_DOES_HTML ) && set_getbool( &ic->bee->set, "strip_html" ) ) ) + strip_html( msg ); + + wrapped = word_wrap( msg, 425 ); + irc_msgfrom( irc, u->nick, wrapped ); + g_free( wrapped ); +#endif +} diff --git a/protocols/nogaim.c b/protocols/nogaim.c index 2edc8e75..741bdb76 100644 --- a/protocols/nogaim.c +++ b/protocols/nogaim.c @@ -548,171 +548,6 @@ void imcb_ask_add( struct im_connection *ic, const char *handle, const char *rea #endif } -void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags, const char *state, const char *message ) -{ - bee_t *bee = ic->bee; - bee_user_t *bu, *old; - - if( !( bu = bee_user_by_handle( bee, ic, handle ) ) ) - { - if( g_strcasecmp( set_getstr( &ic->bee->set, "handle_unknown" ), "add" ) == 0 ) - { - bu = bee_user_new( bee, ic, handle ); - } - else - { - if( set_getbool( &ic->bee->set, "debug" ) || g_strcasecmp( set_getstr( &ic->bee->set, "handle_unknown" ), "ignore" ) != 0 ) - { - imcb_log( ic, "imcb_buddy_status() for unknown handle %s:", handle ); - imcb_log( ic, "flags = %d, state = %s, message = %s", flags, - state ? state : "NULL", message ? message : "NULL" ); - } - - return; - } - } - - /* May be nice to give the UI something to compare against. */ - old = g_memdup( bu, sizeof( bee_user_t ) ); - - /* TODO(wilmer): OPT_AWAY, or just state == NULL ? */ - bu->flags = ( flags & OPT_LOGGED_IN ? BEE_USER_ONLINE : 0 ) | - ( flags & OPT_AWAY ? BEE_USER_AWAY : 0 ); - bu->status = g_strdup( ( flags & OPT_AWAY ) && state == NULL ? "Away" : state ); - bu->status_msg = g_strdup( message ); - - if( bee->ui->user_status ) - bee->ui->user_status( bee, bu, old ); - - g_free( old->status_msg ); - g_free( old->status ); - g_free( old ); -#if 0 - oa = u->away != NULL; - oo = u->online; - - g_free( u->away ); - g_free( u->status_msg ); - u->away = u->status_msg = NULL; - - if( ( flags & OPT_LOGGED_IN ) && !u->online ) - { - irc_spawn( ic->irc, u ); - u->online = 1; - } - else if( !( flags & OPT_LOGGED_IN ) && u->online ) - { - struct groupchat *c; - - irc_kill( ic->irc, u ); - u->online = 0; - - /* Remove him/her from the groupchats to prevent PART messages after he/she QUIT already */ - for( c = ic->groupchats; c; c = c->next ) - remove_chat_buddy_silent( c, handle ); - } - - if( flags & OPT_AWAY ) - { - if( state && message ) - { - u->away = g_strdup_printf( "%s (%s)", state, message ); - } - else if( state ) - { - u->away = g_strdup( state ); - } - else if( message ) - { - u->away = g_strdup( message ); - } - else - { - u->away = g_strdup( "Away" ); - } - } - else - { - u->status_msg = g_strdup( message ); - } - - /* LISPy... */ - if( ( set_getbool( &ic->bee->set, "away_devoice" ) ) && /* Don't do a thing when user doesn't want it */ - ( u->online ) && /* Don't touch offline people */ - ( ( ( u->online != oo ) && !u->away ) || /* Voice joining people */ - ( ( u->online == oo ) && ( oa == !u->away ) ) ) ) /* (De)voice people changing state */ - { - char *from; - - if( set_getbool( &ic->bee->set, "simulate_netsplit" ) ) - { - from = g_strdup( ic->irc->myhost ); - } - else - { - from = g_strdup_printf( "%s!%s@%s", ic->irc->mynick, ic->irc->mynick, - ic->irc->myhost ); - } - irc_write( ic->irc, ":%s MODE %s %cv %s", from, ic->irc->channel, - u->away?'-':'+', u->nick ); - g_free( from ); - } -#endif -} - -void imcb_buddy_msg( struct im_connection *ic, const char *handle, char *msg, uint32_t flags, time_t sent_at ) -{ -#if 0 - bee_t *bee = ic->bee; - char *wrapped; - user_t *u; - - u = user_findhandle( ic, handle ); - - if( !u ) - { - char *h = set_getstr( &bee->set, "handle_unknown" ); - - if( g_strcasecmp( h, "ignore" ) == 0 ) - { - if( set_getbool( &bee->set, "debug" ) ) - imcb_log( ic, "Ignoring message from unknown handle %s", handle ); - - return; - } - else if( g_strncasecmp( h, "add", 3 ) == 0 ) - { - int private = set_getbool( &bee->set, "private" ); - - if( h[3] ) - { - if( g_strcasecmp( h + 3, "_private" ) == 0 ) - private = 1; - else if( g_strcasecmp( h + 3, "_channel" ) == 0 ) - private = 0; - } - - imcb_add_buddy( ic, handle, NULL ); - u = user_findhandle( ic, handle ); - u->is_private = private; - } - else - { - imcb_log( ic, "Message from unknown handle %s:", handle ); - u = user_find( irc, irc->mynick ); - } - } - - if( ( g_strcasecmp( set_getstr( &ic->bee->set, "strip_html" ), "always" ) == 0 ) || - ( ( ic->flags & OPT_DOES_HTML ) && set_getbool( &ic->bee->set, "strip_html" ) ) ) - strip_html( msg ); - - wrapped = word_wrap( msg, 425 ); - irc_msgfrom( irc, u->nick, wrapped ); - g_free( wrapped ); -#endif -} - void imcb_buddy_typing( struct im_connection *ic, char *handle, uint32_t flags ) { #if 0 @@ -1034,23 +869,6 @@ char *set_eval_away_devoice( set_t *set, char *value ) /* The plan is to not allow straight calls to prpl functions anymore, but do them all from some wrappers. We'll start to define some down here: */ -int imc_buddy_msg( struct im_connection *ic, char *handle, char *msg, int flags ) -{ - char *buf = NULL; - int st; - - if( ( ic->flags & OPT_DOES_HTML ) && ( g_strncasecmp( msg, "<html>", 6 ) != 0 ) ) - { - buf = escape_html( msg ); - msg = buf; - } - - st = ic->acc->prpl->buddy_msg( ic, handle, msg, flags ); - g_free( buf ); - - return st; -} - int imc_chat_msg( struct groupchat *c, char *msg, int flags ) { char *buf = NULL; diff --git a/protocols/nogaim.h b/protocols/nogaim.h index 4a334bf2..a93dc5d2 100644 --- a/protocols/nogaim.h +++ b/protocols/nogaim.h @@ -1,7 +1,7 @@ /********************************************************************\ * BitlBee -- An IRC to other IM-networks gateway * * * - * Copyright 2002-2004 Wilmer van der Gaast and others * + * Copyright 2002-2010 Wilmer van der Gaast and others * \********************************************************************/ /* @@ -285,16 +285,8 @@ G_MODULE_EXPORT struct buddy *imcb_find_buddy( struct im_connection *ic, char *h G_MODULE_EXPORT void imcb_rename_buddy( struct im_connection *ic, const char *handle, const char *realname ); G_MODULE_EXPORT void imcb_buddy_nick_hint( struct im_connection *ic, const char *handle, const char *nick ); -/* Buddy activity */ -/* To manipulate the status of a handle. - * - flags can be |='d with OPT_* constants. You will need at least: - * OPT_LOGGED_IN and OPT_AWAY. - * - 'state' and 'message' can be NULL */ -G_MODULE_EXPORT void imcb_buddy_status( struct im_connection *ic, const char *handle, int flags, const char *state, const char *message ); -/* Not implemented yet! */ G_MODULE_EXPORT void imcb_buddy_times( struct im_connection *ic, const char *handle, time_t login, time_t idle ); -/* Call when a handle says something. 'flags' and 'sent_at may be just 0. */ -G_MODULE_EXPORT void imcb_buddy_msg( struct im_connection *ic, const char *handle, char *msg, uint32_t flags, time_t sent_at ); G_MODULE_EXPORT void imcb_buddy_typing( struct im_connection *ic, char *handle, uint32_t flags ); +G_MODULE_EXPORT struct bee_user *imcb_buddy_by_handle( struct im_connection *ic, const char *handle ); G_MODULE_EXPORT void imcb_clean_handle( struct im_connection *ic, char *handle ); /* Groupchats */ @@ -319,7 +311,6 @@ G_MODULE_EXPORT void imcb_chat_free( struct groupchat *c ); /* Actions, or whatever. */ int imc_away_send_update( struct im_connection *ic ); -int imc_buddy_msg( struct im_connection *ic, char *handle, char *msg, int flags ); int imc_chat_msg( struct groupchat *c, char *msg, int flags ); void imc_add_allow( struct im_connection *ic, char *handle ); diff --git a/root_commands.c b/root_commands.c index 9b396379..75f3af81 100644 --- a/root_commands.c +++ b/root_commands.c @@ -220,6 +220,7 @@ static void cmd_drop( irc_t *irc, char **cmd ) break; } } +#endif struct cmd_account_del_data { @@ -232,7 +233,7 @@ void cmd_account_del_yes( void *data ) struct cmd_account_del_data *cad = data; account_t *a; - for( a = cad->irc->accounts; a && a != cad->a; a = a->next ); + for( a = cad->irc->b->accounts; a && a != cad->a; a = a->next ); if( a == NULL ) { @@ -244,7 +245,7 @@ void cmd_account_del_yes( void *data ) } else { - account_del( cad->irc, a ); + account_del( cad->irc->b, a ); irc_usermsg( cad->irc, "Account deleted" ); } g_free( data ); @@ -285,7 +286,7 @@ static int cmd_set_real( irc_t *irc, char **cmd, cmd_set_findhead findhead, cmd_ { set_name = set_full; - head = &irc->set; + head = &irc->b->set; } else { @@ -356,7 +357,7 @@ static set_t **cmd_account_set_findhead( irc_t *irc, char *id ) { account_t *a; - if( ( a = account_get( irc, id ) ) ) + if( ( a = account_get( irc->b, id ) ) ) return &a->set; else return NULL; @@ -404,7 +405,7 @@ static void cmd_account( irc_t *irc, char **cmd ) return; } - a = account_add( irc, prpl, cmd[3], cmd[4] ); + a = account_add( irc->b, prpl, cmd[3], cmd[4] ); if( cmd[5] ) { irc_usermsg( irc, "Warning: Passing a servername/other flags to `account add' " @@ -418,7 +419,7 @@ static void cmd_account( irc_t *irc, char **cmd ) { MIN_ARGS( 2 ); - if( !( a = account_get( irc, cmd[2] ) ) ) + if( !( a = account_get( irc->b, cmd[2] ) ) ) { irc_usermsg( irc, "Invalid account" ); } @@ -440,7 +441,7 @@ static void cmd_account( irc_t *irc, char **cmd ) "to change your username/password, use the `account " "set' command. Are you sure you want to delete this " "account?", a->prpl->name, a->user ); - query_add( irc, NULL, msg, cmd_account_del_yes, cmd_account_del_no, cad ); + //query_add( irc, NULL, msg, cmd_account_del_yes, cmd_account_del_no, cad ); g_free( msg ); } } @@ -451,7 +452,7 @@ static void cmd_account( irc_t *irc, char **cmd ) if( strchr( irc->umode, 'b' ) ) irc_usermsg( irc, "Account list:" ); - for( a = irc->accounts; a; a = a->next ) + for( a = irc->b->accounts; a; a = a->next ) { char *con; @@ -474,7 +475,7 @@ static void cmd_account( irc_t *irc, char **cmd ) { if( cmd[2] ) { - if( ( a = account_get( irc, cmd[2] ) ) ) + if( ( a = account_get( irc->b, cmd[2] ) ) ) { if( a->ic ) { @@ -483,7 +484,7 @@ static void cmd_account( irc_t *irc, char **cmd ) } else { - account_on( irc, a ); + account_on( irc->b, a ); } } else @@ -494,12 +495,13 @@ static void cmd_account( irc_t *irc, char **cmd ) } else { - if ( irc->accounts ) { + if ( irc->b->accounts ) + { irc_usermsg( irc, "Trying to get all accounts connected..." ); - for( a = irc->accounts; a; a = a->next ) + for( a = irc->b->accounts; a; a = a->next ) if( !a->ic && a->auto_connect ) - account_on( irc, a ); + account_on( irc->b, a ); } else { @@ -513,19 +515,19 @@ static void cmd_account( irc_t *irc, char **cmd ) { irc_usermsg( irc, "Deactivating all active (re)connections..." ); - for( a = irc->accounts; a; a = a->next ) + for( a = irc->b->accounts; a; a = a->next ) { if( a->ic ) - account_off( irc, a ); + account_off( irc->b, a ); else if( a->reconnect ) cancel_auto_reconnect( a ); } } - else if( ( a = account_get( irc, cmd[2] ) ) ) + else if( ( a = account_get( irc->b, cmd[2] ) ) ) { if( a->ic ) { - account_off( irc, a ); + account_off( irc->b, a ); } else if( a->reconnect ) { @@ -556,6 +558,7 @@ static void cmd_account( irc_t *irc, char **cmd ) } } +#if 0 static void cmd_add( irc_t *irc, char **cmd ) { account_t *a; @@ -1221,11 +1224,11 @@ static void cmd_transfer( irc_t *irc, char **cmd ) const command_t commands[] = { { "help", 0, cmd_help, 0 }, + { "account", 1, cmd_account, 0 }, #if 0 { "identify", 1, cmd_identify, 0 }, { "register", 1, cmd_register, 0 }, { "drop", 1, cmd_drop, 0 }, - { "account", 1, cmd_account, 0 }, { "add", 2, cmd_add, 0 }, { "info", 1, cmd_info, 0 }, { "rename", 2, cmd_rename, 0 }, @@ -61,7 +61,7 @@ int main( int argc, char *argv[] ) return( 1 ); b_main_init(); - //nogaim_init(); + nogaim_init(); srand( time( NULL ) ^ getpid() ); global.helpfile = g_strdup( HELP_FILE ); |