aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ipc.c13
-rw-r--r--irc_user.c4
2 files changed, 17 insertions, 0 deletions
diff --git a/ipc.c b/ipc.c
index aad05bbf..3c98c41e 100644
--- a/ipc.c
+++ b/ipc.c
@@ -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 },
diff --git a/irc_user.c b/irc_user.c
index cb7ea1e7..70f324c7 100644
--- a/irc_user.c
+++ b/irc_user.c
@@ -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;
}