]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/client.c
Mac OS X: fix test for packagemaker(1) tool in Makefile
[ngircd-alex.git] / src / ngircd / client.c
index 076a0cb425f17c976be9b92e0e38649b9f688ab0..1edc7550e1f4e8c3ec9db65f952ca32d766ab241 100644 (file)
@@ -49,7 +49,6 @@
 
 
 static CLIENT *This_Server, *My_Clients;
-static char GetID_Buffer[GETID_LEN];
 
 static WHOWAS My_Whowas[MAX_WHOWAS];
 static int Last_Whowas = -1;
@@ -194,7 +193,6 @@ Init_New_Client(CONN_ID Idx, CLIENT *Introducer, CLIENT *TopServer,
        client = New_Client_Struct( );
        if( ! client ) return NULL;
 
-       /* Initialisieren */
        client->starttime = time(NULL);
        client->conn_id = Idx;
        client->introducer = Introducer;
@@ -212,11 +210,9 @@ Init_New_Client(CONN_ID Idx, CLIENT *Introducer, CLIENT *TopServer,
        if( strchr( client->modes, 'a' ))
                strlcpy( client->away, DEFAULT_AWAY_MSG, sizeof( client->away ));
 
-       /* Verketten */
        client->next = (POINTER *)My_Clients;
        My_Clients = client;
 
-       /* Adjust counters */
        Adjust_Counters( client );
 
        return client;
@@ -226,7 +222,7 @@ Init_New_Client(CONN_ID Idx, CLIENT *Introducer, CLIENT *TopServer,
 GLOBAL void
 Client_Destroy( CLIENT *Client, const char *LogMsg, const char *FwdMsg, bool SendQuit )
 {
-       /* Client entfernen. */
+       /* remove a client */
        
        CLIENT *last, *c;
        char msg[LINE_LEN];
@@ -238,7 +234,7 @@ Client_Destroy( CLIENT *Client, const char *LogMsg, const char *FwdMsg, bool Sen
        else txt = FwdMsg;
        if( ! txt ) txt = "Reason unknown.";
 
-       /* Netz-Split-Nachricht vorbereiten (noch nicht optimal) */
+       /* netsplit message */
        if( Client->type == CLIENT_SERVER ) {
                strlcpy(msg, This_Server->id, sizeof (msg));
                strlcat(msg, " ", sizeof (msg));
@@ -251,8 +247,16 @@ Client_Destroy( CLIENT *Client, const char *LogMsg, const char *FwdMsg, bool Sen
        {
                if(( Client->type == CLIENT_SERVER ) && ( c->introducer == Client ) && ( c != Client ))
                {
-                       /* der Client, der geloescht wird ist ein Server. Der Client, den wir gerade
-                        * pruefen, ist ein Child von diesem und muss daher auch entfernt werden */
+                       /*
+                        * The client that is about to be removed is a server,
+                        * the client we are checking right now is a child of that
+                        * server and thus has to be removed, too.
+                        *
+                        * Call Client_Destroy() recursively with the server as the
+                        * new "object to be removed". This starts the cycle again, until
+                        * all servers that are linked via the original server have been
+                        * removed.
+                        */
                        Client_Destroy( c, NULL, msg, false );
                        last = NULL;
                        c = My_Clients;
@@ -260,7 +264,7 @@ Client_Destroy( CLIENT *Client, const char *LogMsg, const char *FwdMsg, bool Sen
                }
                if( c == Client )
                {
-                       /* Wir haben den Client gefunden: entfernen */
+                       /* found  the client: remove it */
                        if( last ) last->next = c->next;
                        else My_Clients = (CLIENT *)c->next;
 
@@ -274,7 +278,7 @@ Client_Destroy( CLIENT *Client, const char *LogMsg, const char *FwdMsg, bool Sen
                                        else Log( LOG_NOTICE|LOG_snotice, "Server \"%s\" unregistered: %s", c->id, txt );
                                }
 
-                               /* andere Server informieren */
+                               /* inform other servers */
                                if( ! NGIRCd_SignalQuit )
                                {
                                        if( FwdMsg ) IRC_WriteStrServersPrefix( Client_NextHop( c ), c, "SQUIT %s :%s", c->id, FwdMsg );
@@ -305,8 +309,6 @@ Client_Destroy( CLIENT *Client, const char *LogMsg, const char *FwdMsg, bool Sen
 GLOBAL void
 Client_SetHostname( CLIENT *Client, const char *Hostname )
 {
-       /* Hostname eines Clients setzen */
-
        assert( Client != NULL );
        assert( Hostname != NULL );
 
@@ -317,8 +319,6 @@ Client_SetHostname( CLIENT *Client, const char *Hostname )
 GLOBAL void
 Client_SetID( CLIENT *Client, const char *ID )
 {
-       /* Hostname eines Clients setzen, Hash-Wert berechnen */
-
        assert( Client != NULL );
        assert( ID != NULL );
        
@@ -332,16 +332,16 @@ Client_SetID( CLIENT *Client, const char *ID )
 GLOBAL void
 Client_SetUser( CLIENT *Client, const char *User, bool Idented )
 {
-       /* Username eines Clients setzen */
+       /* set clients username */
 
        assert( Client != NULL );
        assert( User != NULL );
 
-       if( Idented ) strlcpy( Client->user, User, sizeof( Client->user ));
-       else
-       {
+       if (Idented) {
+               strlcpy(Client->user, User, sizeof(Client->user));
+       } else {
                Client->user[0] = '~';
-               strlcpy( Client->user + 1, User, sizeof( Client->user ) - 1 );
+               strlcpy(Client->user + 1, User, sizeof(Client->user) - 1);
        }
 } /* Client_SetUser */
 
@@ -349,48 +349,44 @@ Client_SetUser( CLIENT *Client, const char *User, bool Idented )
 GLOBAL void
 Client_SetInfo( CLIENT *Client, const char *Info )
 {
-       /* Hostname eines Clients setzen */
+       /* set client hostname */
 
        assert( Client != NULL );
        assert( Info != NULL );
 
-       strlcpy( Client->info, Info, sizeof( Client->info ));
+       strlcpy(Client->info, Info, sizeof(Client->info));
 } /* Client_SetInfo */
 
 
 GLOBAL void
 Client_SetModes( CLIENT *Client, const char *Modes )
 {
-       /* Modes eines Clients setzen */
-
        assert( Client != NULL );
        assert( Modes != NULL );
 
-       strlcpy( Client->modes, Modes, sizeof( Client->modes ));
+       strlcpy(Client->modes, Modes, sizeof( Client->modes ));
 } /* Client_SetModes */
 
 
 GLOBAL void
 Client_SetFlags( CLIENT *Client, const char *Flags )
 {
-       /* Flags eines Clients setzen */
-
        assert( Client != NULL );
        assert( Flags != NULL );
 
-       strlcpy( Client->flags, Flags, sizeof( Client->flags ));
+       strlcpy(Client->flags, Flags, sizeof(Client->flags));
 } /* Client_SetFlags */
 
 
 GLOBAL void
 Client_SetPassword( CLIENT *Client, const char *Pwd )
 {
-       /* Von einem Client geliefertes Passwort */
+       /* set password sent by client */
 
        assert( Client != NULL );
        assert( Pwd != NULL );
 
-       strlcpy( Client->pwd, Pwd, sizeof( Client->pwd ));
+       strlcpy(Client->pwd, Pwd, sizeof(Client->pwd));
 } /* Client_SetPassword */
 
 
@@ -464,9 +460,7 @@ Client_ModeAdd( CLIENT *Client, char Mode )
        assert( Client != NULL );
 
        x[0] = Mode; x[1] = '\0';
-       if( ! strchr( Client->modes, x[0] ))
-       {
-               /* Client hat den Mode noch nicht -> setzen */
+       if (!strchr( Client->modes, x[0])) {
                strlcat( Client->modes, x, sizeof( Client->modes ));
                return true;
        }
@@ -519,16 +513,12 @@ Client_Search( const char *Nick )
        ptr = strchr( search_id, '!' );
        if( ptr ) *ptr = '\0';
 
-       search_hash = Hash( search_id );
+       search_hash = Hash(search_id);
 
        c = My_Clients;
-       while( c )
-       {
-               if( c->hash == search_hash )
-               {
-                       /* lt. Hash-Wert: Treffer! */
-                       if( strcasecmp( c->id, search_id ) == 0 ) return c;
-               }
+       while (c) {
+               if (c->hash == search_hash && strcasecmp(c->id, search_id) == 0)
+                       return c;
                c = (CLIENT *)c->next;
        }
        return NULL;
@@ -548,9 +538,10 @@ Client_GetFromToken( CLIENT *Client, int Token )
        assert( Token > 0 );
 
        c = My_Clients;
-       while( c )
-       {
-               if(( c->type == CLIENT_SERVER ) && ( c->introducer == Client ) && ( c->token == Token )) return c;
+       while (c) {
+               if ((c->type == CLIENT_SERVER) && (c->introducer == Client) &&
+                       (c->token == Token))
+                               return c;
                c = (CLIENT *)c->next;
        }
        return NULL;
@@ -683,17 +674,20 @@ Client_NextHop( CLIENT *Client )
 } /* Client_NextHop */
 
 
+/**
+ * return Client-ID ("client!user@host"), this ID is needed for e.g.
+ * prefixes.  Returnes pointer to static buffer.
+ */
 GLOBAL char *
 Client_Mask( CLIENT *Client )
 {
-       /* Client-"ID" liefern, wie sie z.B. fuer
-        * Prefixe benoetigt wird. */
+       static char GetID_Buffer[GETID_LEN];
 
        assert( Client != NULL );
 
        if( Client->type == CLIENT_SERVER ) return Client->id;
 
-       snprintf( GetID_Buffer, GETID_LEN, "%s!%s@%s", Client->id, Client->user, Client->host );
+       snprintf(GetID_Buffer, GETID_LEN, "%s!%s@%s", Client->id, Client->user, Client->host);
        return GetID_Buffer;
 } /* Client_Mask */
 
@@ -725,8 +719,6 @@ Client_HasMode( CLIENT *Client, char Mode )
 GLOBAL char *
 Client_Away( CLIENT *Client )
 {
-       /* AWAY-Text liefern */
-
        assert( Client != NULL );
        return Client->away;
 } /* Client_Away */
@@ -738,7 +730,7 @@ Client_CheckNick( CLIENT *Client, char *Nick )
        assert( Client != NULL );
        assert( Nick != NULL );
 
-       if! Client_IsValidNick( Nick ))
+       if (! Client_IsValidNick( Nick ))
        {
                IRC_WriteStrClient( Client, ERR_ERRONEUSNICKNAME_MSG, Client_ID( Client ), Nick );
                return false;
@@ -759,8 +751,6 @@ Client_CheckNick( CLIENT *Client, char *Nick )
 GLOBAL bool
 Client_CheckID( CLIENT *Client, char *ID )
 {
-       /* Nick ueberpruefen */
-
        char str[COMMAND_LEN];
        CLIENT *c;
 
@@ -768,24 +758,22 @@ Client_CheckID( CLIENT *Client, char *ID )
        assert( Client->conn_id > NONE );
        assert( ID != NULL );
 
-       /* Nick zu lang? */
-       if( strlen( ID ) > CLIENT_ID_LEN )
-       {
-               IRC_WriteStrClient( Client, ERR_ERRONEUSNICKNAME_MSG, Client_ID( Client ), ID );
+       /* ID too long? */
+       if (strlen(ID) > CLIENT_ID_LEN) {
+               IRC_WriteStrClient(Client, ERR_ERRONEUSNICKNAME_MSG, Client_ID(Client), ID);
                return false;
        }
 
-       /* ID bereits vergeben? */
+       /* ID already in use? */
        c = My_Clients;
-       while( c )
-       {
-               if( strcasecmp( c->id, ID ) == 0 )
-               {
-                       /* die Server-ID gibt es bereits */
-                       snprintf( str, sizeof( str ), "ID \"%s\" already registered", ID );
-                       if( Client->conn_id != c->conn_id ) Log( LOG_ERR, "%s (on connection %d)!", str, c->conn_id );
-                       else Log( LOG_ERR, "%s (via network)!", str );
-                       Conn_Close( Client->conn_id, str, str, true);
+       while (c) {
+               if (strcasecmp(c->id, ID) == 0) {
+                       snprintf(str, sizeof(str), "ID \"%s\" already registered", ID);
+                       if (c->conn_id != NONE)
+                               Log(LOG_ERR, "%s (on connection %d)!", str, c->conn_id);
+                       else
+                               Log(LOG_ERR, "%s (via network)!", str);
+                       Conn_Close(Client->conn_id, str, str, true);
                        return false;
                }
                c = (CLIENT *)c->next;
@@ -798,8 +786,6 @@ Client_CheckID( CLIENT *Client, char *ID )
 GLOBAL CLIENT *
 Client_First( void )
 {
-       /* Ersten Client liefern. */
-
        return My_Clients;
 } /* Client_First */
 
@@ -807,9 +793,6 @@ Client_First( void )
 GLOBAL CLIENT *
 Client_Next( CLIENT *c )
 {
-       /* Naechsten Client liefern. Existiert keiner,
-        * so wird NULL geliefert. */
-
        assert( c != NULL );
        return (CLIENT *)c->next;
 } /* Client_Next */