Module: ngircd.git Branch: master Commit: 497edbaf3eb51e6c67975713ee5c52d2d1b48105 URL: http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git&a=commit;h=497ed...
Author: Alexander Barton alex@barton.de Date: Fri Nov 2 14:36:29 2012 +0100
IRC_NICK(): Code cleanup, new function Change_Nick()
---
src/ngircd/irc-login.c | 80 +++++++++++++++++++++++++++--------------------- 1 file changed, 45 insertions(+), 35 deletions(-)
diff --git a/src/ngircd/irc-login.c b/src/ngircd/irc-login.c index 7d6e07d..c3f32b7 100644 --- a/src/ngircd/irc-login.c +++ b/src/ngircd/irc-login.c @@ -38,7 +38,10 @@ #include "exp.h" #include "irc-login.h"
-static void Kill_Nick PARAMS(( char *Nick, char *Reason )); +static void Kill_Nick PARAMS((char *Nick, char *Reason)); +static void Change_Nick PARAMS((CLIENT * Origin, CLIENT * Target, + char *NewNick, bool RegisterWhowas)); +
/** * Handler for the IRC "PASS" command. @@ -275,40 +278,8 @@ IRC_NICK( CLIENT *Client, REQUEST *Req ) Client_SetType( Client, CLIENT_GOTNICK ); } else { /* Nickname change */ - if (Client_Conn(target) > NONE) { - /* Local client */ - Log(LOG_INFO, - "%s "%s" changed nick (connection %d): "%s" -> "%s".", - Client_TypeText(target), Client_Mask(target), - Client_Conn(target), Client_ID(target), - Req->argv[0]); - Conn_UpdateIdle(Client_Conn(target)); - } else { - /* Remote client */ - LogDebug("%s "%s" changed nick: "%s" -> "%s".", - Client_TypeText(target), - Client_Mask(target), Client_ID(target), - Req->argv[0]); - } - - /* Inform all users and servers (which have to know) - * of this nickname change */ - if( Client_Type( Client ) == CLIENT_USER ) - IRC_WriteStrClientPrefix( Client, Client, - "NICK :%s", - Req->argv[0] ); - IRC_WriteStrServersPrefix( Client, target, - "NICK :%s", Req->argv[0] ); - IRC_WriteStrRelatedPrefix( target, target, false, - "NICK :%s", Req->argv[0] ); - - /* Register old nickname for WHOWAS queries */ - Client_RegisterWhowas( target ); - - /* Save new nickname */ - Client_SetID( target, Req->argv[0] ); - - IRC_SetPenalty( target, 2 ); + Change_Nick(Client, target, Req->argv[0], true); + IRC_SetPenalty(target, 2); }
return CONNECTED; @@ -925,4 +896,43 @@ Kill_Nick(char *Nick, char *Reason) } /* Kill_Nick */
+/** + * Change the nickname of a client. + * + * @param Origin The client which caused the nickname change. + * @param Target The client of which the nickname should be changed. + * @param NewNick The new nickname. + */ +static void +Change_Nick(CLIENT *Origin, CLIENT *Target, char *NewNick, bool RegisterWhowas) +{ + if (Client_Conn(Target) > NONE) { + /* Local client */ + Log(LOG_INFO, + "%s "%s" changed nick (connection %d): "%s" -> "%s".", + Client_TypeText(Target), Client_Mask(Target), + Client_Conn(Target), Client_ID(Target), NewNick); + Conn_UpdateIdle(Client_Conn(Target)); + } else { + /* Remote client */ + LogDebug("%s "%s" changed nick: "%s" -> "%s".", + Client_TypeText(Target), + Client_Mask(Target), Client_ID(Target), NewNick); + } + + /* Inform all servers and users (which have to know) of the new name */ + if (Client_Type(Origin) == CLIENT_USER) + IRC_WriteStrClientPrefix(Origin, Origin, "NICK :%s", NewNick); + IRC_WriteStrServersPrefix(Origin, Target, "NICK :%s", NewNick); + IRC_WriteStrRelatedPrefix(Target, Target, false, "NICK :%s", NewNick); + + /* Register old nickname for WHOWAS queries, if required */ + if (RegisterWhowas) + Client_RegisterWhowas(Target); + + /* Save new nickname */ + Client_SetID(Target, NewNick); +} + + /* -eof- */