diff options
| -rw-r--r-- | ipc.c | 20 | ||||
| -rw-r--r-- | irc.c | 6 | ||||
| -rw-r--r-- | irc_commands.c | 1 | 
3 files changed, 26 insertions, 1 deletions
| @@ -62,6 +62,25 @@ static void ipc_master_cmd_die( irc_t *data, char **cmd )  	bitlbee_shutdown( NULL, -1, 0 );  } +static void ipc_master_cmd_deaf( irc_t *data, char **cmd ) +{ +	if( global.conf->runmode == RUNMODE_DAEMON ) +	{ +		b_event_remove( global.listen_watch_source_id ); +		close( global.listen_socket ); +		 +		global.listen_socket = global.listen_watch_source_id = -1; +	 +		ipc_to_children_str( "OPERMSG :Closed listening socket, waiting " +		                     "for all users to disconnect." ); +	} +	else +	{ +		ipc_to_children_str( "OPERMSG :The DEAF command only works in " +		                     "normal daemon mode. Try DIE instead." ); +	} +} +  void ipc_master_cmd_rehash( irc_t *data, char **cmd )  {  	runmode_t oldmode; @@ -97,6 +116,7 @@ static const command_t ipc_master_commands[] = {  	{ "client",     3, ipc_master_cmd_client,     0 },  	{ "hello",      0, ipc_master_cmd_client,     0 },  	{ "die",        0, ipc_master_cmd_die,        0 }, +	{ "deaf",       0, ipc_master_cmd_deaf,       0 },  	{ "wallops",    1, NULL,                      IPC_CMD_TO_CHILDREN },  	{ "wall",       1, NULL,                      IPC_CMD_TO_CHILDREN },  	{ "opermsg",    1, NULL,                      IPC_CMD_TO_CHILDREN }, @@ -313,7 +313,11 @@ void irc_free( irc_t * irc )  	g_free( irc ); -	if( global.conf->runmode == RUNMODE_INETD || global.conf->runmode == RUNMODE_FORKDAEMON ) +	if( global.conf->runmode == RUNMODE_INETD || +	    global.conf->runmode == RUNMODE_FORKDAEMON || +	    ( global.conf->runmode == RUNMODE_DAEMON && +	      global.listen_socket == -1 && +	      irc_connection_list == NULL ) )  		b_main_quit();  } diff --git a/irc_commands.c b/irc_commands.c index 6a47007a..fb2bc7cf 100644 --- a/irc_commands.c +++ b/irc_commands.c @@ -625,6 +625,7 @@ static const command_t irc_commands[] = {  	{ "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 }, +	{ "deaf",        0, NULL,                IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER },  	{ "wallops",     1, NULL,                IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER },  	{ "wall",        1, NULL,                IRC_CMD_OPER_ONLY | IRC_CMD_TO_MASTER },  	{ "rehash",      0, irc_cmd_rehash,      IRC_CMD_OPER_ONLY }, | 
