diff options
author | Wilmer van der Gaast <wilmer@gaast.net> | 2010-07-09 22:06:38 +0100 |
---|---|---|
committer | Wilmer van der Gaast <wilmer@gaast.net> | 2010-07-09 22:06:38 +0100 |
commit | debe871bbd96a1d4215983265d97b8f0df7a4fbf (patch) | |
tree | 25d2d02d49319ead7c0c296a65f2413c3c72d1f5 | |
parent | 9595d2b9420afc1044c0d5ee93311b8c4ee6dec2 (diff) |
Inform IPC master about nick changes.
-rw-r--r-- | ipc.c | 13 | ||||
-rw-r--r-- | irc_user.c | 4 |
2 files changed, 17 insertions, 0 deletions
@@ -49,11 +49,23 @@ static void ipc_master_cmd_client( irc_t *data, char **cmd ) child->realname = g_strdup( cmd[3] ); } + /* CLIENT == On initial connects, HELLO is after /RESTARTs. */ if( g_strcasecmp( cmd[0], "CLIENT" ) == 0 ) ipc_to_children_str( "OPERMSG :Client connecting (PID=%d): %s@%s (%s)\r\n", (int) ( child ? child->pid : -1 ), cmd[2], cmd[1], cmd[3] ); } +static void ipc_master_cmd_nick( irc_t *data, char **cmd ) +{ + struct bitlbee_child *child = (void*) data; + + if( child && cmd[1] ) + { + g_free( child->nick ); + child->nick = g_strdup( cmd[1] ); + } +} + static void ipc_master_cmd_die( irc_t *data, char **cmd ) { if( global.conf->runmode == RUNMODE_FORKDAEMON ) @@ -207,6 +219,7 @@ void ipc_master_cmd_takeover( irc_t *data, char **cmd ) static const command_t ipc_master_commands[] = { { "client", 3, ipc_master_cmd_client, 0 }, { "hello", 0, ipc_master_cmd_client, 0 }, + { "nick", 1, ipc_master_cmd_nick, 0 }, { "die", 0, ipc_master_cmd_die, 0 }, { "deaf", 0, ipc_master_cmd_deaf, 0 }, { "wallops", 1, NULL, IPC_CMD_TO_CHILDREN }, @@ -24,6 +24,7 @@ */ #include "bitlbee.h" +#include "ipc.h" irc_user_t *irc_user_new( irc_t *irc, const char *nick ) { @@ -157,6 +158,9 @@ int irc_user_set_nick( irc_user_t *iu, const char *new ) g_hash_table_insert( irc->nick_user_hash, iu->key, iu ); irc->users = g_slist_insert_sorted( irc->users, iu, irc_user_cmp ); + if( iu == irc->user ) + ipc_to_master_str( "NICK :%s\r\n", new ); + return 1; } |