Module: ngircd.git Branch: master Commit: bce16c2864309d5fc7da8d0591120466303aa966 URL: http://ngircd.barton.de/cgi-bin/gitweb.cgi?p=ngircd.git&a=commit;h=bce16...
Author: Alexander Barton alex@barton.de Date: Wed Apr 9 19:49:34 2008 +0200
Code cleanup of IRC_SQUIT() in preparation to deal with bug #73.
---
src/ngircd/irc-server.c | 63 +++++++++++++++++++++++++++------------------- 1 files changed, 37 insertions(+), 26 deletions(-)
diff --git a/src/ngircd/irc-server.c b/src/ngircd/irc-server.c index 3c34c20..b75a34f 100644 --- a/src/ngircd/irc-server.c +++ b/src/ngircd/irc-server.c @@ -266,44 +266,55 @@ IRC_NJOIN( CLIENT *Client, REQUEST *Req ) } /* IRC_NJOIN */
+/** + * Handler for the IRC command "SQUIT". + * See RFC 2813 section 4.1.2 and RFC 2812 section 3.1.8. + */ GLOBAL bool -IRC_SQUIT( CLIENT *Client, REQUEST *Req ) +IRC_SQUIT(CLIENT * Client, REQUEST * Req) { CLIENT *target; char msg[LINE_LEN + 64];
- assert( Client != NULL ); - assert( Req != NULL ); + assert(Client != NULL); + assert(Req != NULL);
- if( Req->argc != 2 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); + /* Bad number of arguments? */ + if (Req->argc != 2) + return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, + Client_ID(Client), Req->command);
- Log( LOG_DEBUG, "Got SQUIT from %s for "%s": "%s" ...", Client_ID( Client ), Req->argv[0], Req->argv[1] ); + Log(LOG_DEBUG, "Got SQUIT from %s for "%s": "%s" ...", + Client_ID(Client), Req->argv[0], Req->argv[1]);
- target = Client_Search( Req->argv[0] ); - if( ! target ) - { - Log( LOG_WARNING, "Got SQUIT from %s for unknown server "%s"!?", Client_ID( Client ), Req->argv[0] ); + target = Client_Search(Req->argv[0]); + if (!target) { + /* The server is (already) unknown */ + Log(LOG_WARNING, + "Got SQUIT from %s for unknown server "%s"!?", + Client_ID(Client), Req->argv[0]); return CONNECTED; }
- if( Req->argv[1][0] ) - { - if( strlen( Req->argv[1] ) > LINE_LEN ) Req->argv[1][LINE_LEN] = '\0'; - snprintf( msg, sizeof( msg ), "%s (SQUIT from %s).", Req->argv[1], Client_ID( Client )); - } - else snprintf( msg, sizeof( msg ), "Got SQUIT from %s.", Client_ID( Client )); - - if( Client_Conn( target ) > NONE ) - { - /* This server has the connection */ - if( Req->argv[1][0] ) Conn_Close( Client_Conn( target ), msg, Req->argv[1], true); - else Conn_Close( Client_Conn( target ), msg, NULL, true); + if (Req->argv[1][0]) { + if (strlen(Req->argv[1]) > LINE_LEN) + Req->argv[1][LINE_LEN] = '\0'; + snprintf(msg, sizeof(msg), "%s (SQUIT from %s).", Req->argv[1], + Client_ID(Client)); + } else + snprintf(msg, sizeof(msg), "Got SQUIT from %s.", + Client_ID(Client)); + + if (Client_Conn(target) > NONE) { + /* We are directly connected to this server */ + if (Req->argv[1][0]) + Conn_Close(Client_Conn(target), msg, Req->argv[1], + true); + else + Conn_Close(Client_Conn(target), msg, NULL, true); return DISCONNECTED; - } - else - { - /* connection was on another server */ - Client_Destroy( target, msg, Req->argv[1], false ); + } else { + Client_Destroy(target, msg, Req->argv[1], false); return CONNECTED; } } /* IRC_SQUIT */
ngircd-commits@lists.barton.de