diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-07-10 00:39:25 +0100 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-07-10 00:39:25 +0100 |
commit | f3b6764f269490f11a8adbddeeb06964331917d0 (patch) | |
tree | 503b810a5e9322b444dc7e84e4d8535dc0f4807e /root_commands.c | |
parent | 9a9b520df6044cfc034f9736fb97660a46e879b9 (diff) | |
parent | b556e46f9bfeeb630b45a3c0f0951110ac3de0f2 (diff) |
Only available in ForkDaemon mode for now: If a user connects (and
identifies) while he's already logged in, offer to take over the old
connection.
Diffstat (limited to 'root_commands.c')
-rw-r--r-- | root_commands.c | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/root_commands.c b/root_commands.c index 5c5ead7b..cf448e8d 100644 --- a/root_commands.c +++ b/root_commands.c @@ -104,7 +104,6 @@ static void cmd_account( irc_t *irc, char **cmd ); static void cmd_identify( irc_t *irc, char **cmd ) { storage_status_t status; - char *account_on[] = { "account", "on", NULL }; gboolean load = TRUE; char *password = cmd[1]; @@ -157,8 +156,16 @@ static void cmd_identify( irc_t *irc, char **cmd ) irc->status |= USTATUS_IDENTIFIED; irc_umode_set( irc, "+R", 1 ); irc_channel_auto_joins( irc, NULL ); - if( load && set_getbool( &irc->b->set, "auto_connect" ) ) - cmd_account( irc, account_on ); + + if( ipc_child_identify( irc ) ) + { + if( load && set_getbool( &irc->b->set, "auto_connect" ) ) + irc->login_source_id = b_timeout_add( 200, + cmd_identify_finish, irc ); + } + else if( load && set_getbool( &irc->b->set, "auto_connect" ) ) + cmd_identify_finish( irc, 0, 0 ); + break; case STORAGE_OTHER_ERROR: default: @@ -167,6 +174,17 @@ static void cmd_identify( irc_t *irc, char **cmd ) } } +gboolean cmd_identify_finish( gpointer data, gint fd, b_input_condition cond ) +{ + char *account_on[] = { "account", "on", NULL }; + irc_t *irc = data; + + cmd_account( irc, account_on ); + + irc->login_source_id = -1; + return FALSE; +} + static void cmd_register( irc_t *irc, char **cmd ) { if( global.conf->authmode == AUTHMODE_REGISTERED ) @@ -671,7 +689,7 @@ static void cmd_rename( irc_t *irc, char **cmd ) } else if( iu == irc->user ) { - irc_usermsg( irc, "Nick `%s' can't be changed", cmd[1] ); + irc_usermsg( irc, "Use /nick to change your own nickname" ); } else if( !nick_ok( cmd[2] ) ) { |