X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?p=ngircd-alex.git;a=blobdiff_plain;f=src%2Fngircd%2Firc-info.c;h=efffad8dc9f0014c37bfc28368f341011dc7e323;hp=fe7246bd19e9d6b436e0172aaf0b38f8ee628d7d;hb=4f6f84e7e1bc015e201e8a79e13b0906dcb23ec1;hpb=f0349f526612ea7bd0e4c0031c97b6452ad9e6f4 diff --git a/src/ngircd/irc-info.c b/src/ngircd/irc-info.c index fe7246bd..efffad8d 100644 --- a/src/ngircd/irc-info.c +++ b/src/ngircd/irc-info.c @@ -2,21 +2,20 @@ * ngIRCd -- The Next Generation IRC Daemon * Copyright (c)2001,2002 by Alexander Barton (alex@barton.de) * - * Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen - * der GNU General Public License (GPL), wie von der Free Software Foundation - * herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2 - * der Lizenz oder (wenn Sie es wuenschen) jeder spaeteren Version. - * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste - * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: irc-info.c,v 1.4 2002/12/02 13:45:51 alex Exp $ - * - * irc-info.c: IRC-Info-Befehle + * IRC info commands */ #include "portab.h" +static char UNUSED id[] = "$Id: irc-info.c,v 1.9 2002/12/22 23:30:33 alex Exp $"; + #include "imp.h" #include #include @@ -58,12 +57,12 @@ IRC_ADMIN(CLIENT *Client, REQUEST *Req ) /* Prefix ermitteln */ if( Client_Type( Client ) == CLIENT_SERVER ) prefix = Client_Search( Req->prefix ); else prefix = Client; - if( ! prefix ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->prefix ); + if( ! prefix ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix ); /* An anderen Server weiterleiten? */ if( target != Client_ThisServer( )) { - if( ! target ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[0] ); + if( ! target ) return IRC_WriteStrClient( prefix, ERR_NOSUCHSERVER_MSG, Client_ID( prefix ), Req->argv[0] ); /* forwarden */ IRC_WriteStrClientPrefix( target, prefix, "ADMIN %s", Req->argv[0] ); @@ -142,7 +141,7 @@ IRC_LINKS( CLIENT *Client, REQUEST *Req ) if( Req->argc == 2 ) { target = Client_Search( Req->argv[0] ); - if( ! target ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[0] ); + if( ! target ) return IRC_WriteStrClient( from, ERR_NOSUCHSERVER_MSG, Client_ID( from ), Req->argv[0] ); else if( target != Client_ThisServer( )) return IRC_WriteStrClientPrefix( target, from, "LINKS %s %s", Req->argv[0], Req->argv[1] ); } @@ -185,7 +184,7 @@ IRC_LUSERS( CLIENT *Client, REQUEST *Req ) if( Req->argc == 2 ) { target = Client_Search( Req->argv[1] ); - if( ! target ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[1] ); + if( ! target ) return IRC_WriteStrClient( from, ERR_NOSUCHSERVER_MSG, Client_ID( from ), Req->argv[1] ); else if( target != Client_ThisServer( )) return IRC_WriteStrClientPrefix( target, from, "LUSERS %s %s", Req->argv[0], Req->argv[1] ); } @@ -214,13 +213,13 @@ IRC_MOTD( CLIENT *Client, REQUEST *Req ) /* From aus Prefix ermitteln */ if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_Search( Req->prefix ); else from = Client; - if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->prefix ); + if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix ); if( Req->argc == 1 ) { /* an anderen Server forwarden */ target = Client_Search( Req->argv[0] ); - if( ! target ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[0] ); + if( ! target ) return IRC_WriteStrClient( from, ERR_NOSUCHSERVER_MSG, Client_ID( from ), Req->argv[0] ); if( target != Client_ThisServer( )) { @@ -249,13 +248,13 @@ IRC_NAMES( CLIENT *Client, REQUEST *Req ) /* From aus Prefix ermitteln */ if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_Search( Req->prefix ); else from = Client; - if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->prefix ); + if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix ); if( Req->argc == 2 ) { /* an anderen Server forwarden */ target = Client_Search( Req->argv[1] ); - if( ! target ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[1] ); + if( ! target ) return IRC_WriteStrClient( from, ERR_NOSUCHSERVER_MSG, Client_ID( from ), Req->argv[1] ); if( target != Client_ThisServer( )) { @@ -333,6 +332,7 @@ IRC_STATS( CLIENT *Client, REQUEST *Req ) CLIENT *from, *target, *cl; CONN_ID con; CHAR query; + COMMAND *cmd; assert( Client != NULL ); assert( Req != NULL ); @@ -343,18 +343,18 @@ IRC_STATS( CLIENT *Client, REQUEST *Req ) /* From aus Prefix ermitteln */ if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_Search( Req->prefix ); else from = Client; - if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->prefix ); + if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix ); if( Req->argc == 2 ) { /* an anderen Server forwarden */ target = Client_Search( Req->argv[1] ); - if( ! target ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[1] ); + if( ! target ) return IRC_WriteStrClient( from, ERR_NOSUCHSERVER_MSG, Client_ID( from ), Req->argv[1] ); if( target != Client_ThisServer( )) { /* Ok, anderer Server ist das Ziel: forwarden */ - return IRC_WriteStrClientPrefix( target, from, "STATS %s", Req->argv[0], Req->argv[1] ); + return IRC_WriteStrClientPrefix( target, from, "STATS %s %s", Req->argv[0], Req->argv[1] ); } } @@ -369,8 +369,9 @@ IRC_STATS( CLIENT *Client, REQUEST *Req ) while( con != NONE ) { cl = Client_GetFromConn( con ); - if( cl ) + if( cl && (( Client_Type( cl ) == CLIENT_SERVER ) || ( cl == Client ))) { + /* Server link or our own connection */ #ifdef USE_ZLIB if( Conn_Options( con ) & CONN_ZIP ) { @@ -387,6 +388,15 @@ IRC_STATS( CLIENT *Client, REQUEST *Req ) break; case 'm': /* IRC-Befehle */ case 'M': + cmd = Parse_GetCommandStruct( ); + while( cmd->name ) + { + if( cmd->lcount > 0 || cmd->rcount > 0 ) + { + if( ! IRC_WriteStrClient( from, RPL_STATSCOMMANDS_MSG, Client_ID( from ), cmd->name, cmd->lcount, cmd->bytes, cmd->rcount )) return DISCONNECTED; + } + cmd++; + } break; } @@ -410,7 +420,7 @@ IRC_TIME( CLIENT *Client, REQUEST *Req ) /* From aus Prefix ermitteln */ if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_Search( Req->prefix ); else from = Client; - if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->prefix ); + if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix ); if( Req->argc == 1 ) { @@ -489,12 +499,12 @@ IRC_VERSION( CLIENT *Client, REQUEST *Req ) /* Prefix ermitteln */ if( Client_Type( Client ) == CLIENT_SERVER ) prefix = Client_Search( Req->prefix ); else prefix = Client; - if( ! prefix ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->prefix ); + if( ! prefix ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix ); /* An anderen Server weiterleiten? */ if( target != Client_ThisServer( )) { - if( ! target ) return IRC_WriteStrClient( Client, ERR_NOSUCHSERVER_MSG, Client_ID( Client ), Req->argv[0] ); + if( ! target ) return IRC_WriteStrClient( prefix, ERR_NOSUCHSERVER_MSG, Client_ID( prefix ), Req->argv[0] ); /* forwarden */ IRC_WriteStrClientPrefix( target, prefix, "VERSION %s", Req->argv[0] ); @@ -700,29 +710,36 @@ IRC_Send_LUSERS( CLIENT *Client ) assert( Client != NULL ); - /* Users, Services und Serevr im Netz */ + /* Users, services and serevers in the network */ if( ! IRC_WriteStrClient( Client, RPL_LUSERCLIENT_MSG, Client_ID( Client ), Client_UserCount( ), Client_ServiceCount( ), Client_ServerCount( ))) return DISCONNECTED; - /* IRC-Operatoren im Netz */ + /* Number of IRC operators */ cnt = Client_OperCount( ); if( cnt > 0 ) { if( ! IRC_WriteStrClient( Client, RPL_LUSEROP_MSG, Client_ID( Client ), cnt )) return DISCONNECTED; } - /* Unbekannt Verbindungen */ + /* Unknown connections */ cnt = Client_UnknownCount( ); if( cnt > 0 ) { if( ! IRC_WriteStrClient( Client, RPL_LUSERUNKNOWN_MSG, Client_ID( Client ), cnt )) return DISCONNECTED; } - /* Channels im Netz */ + /* Number of created channels */ if( ! IRC_WriteStrClient( Client, RPL_LUSERCHANNELS_MSG, Client_ID( Client ), Channel_Count( ))) return DISCONNECTED; - /* Channels im Netz */ + /* Number of local users, services and servers */ if( ! IRC_WriteStrClient( Client, RPL_LUSERME_MSG, Client_ID( Client ), Client_MyUserCount( ), Client_MyServiceCount( ), Client_MyServerCount( ))) return DISCONNECTED; +#ifndef STRICT_RFC + /* Maximum number of local users */ + if( ! IRC_WriteStrClient( Client, RPL_LOCALUSERS_MSG, Client_ID( Client ), Client_MyUserCount( ), Client_MyMaxUserCount( ))) return DISCONNECTED; + /* Maximum number of users in the network */ + if( ! IRC_WriteStrClient( Client, RPL_NETUSERS_MSG, Client_ID( Client ), Client_UserCount( ), Client_MaxUserCount( ))) return DISCONNECTED; +#endif + return CONNECTED; } /* IRC_Send_LUSERS */