]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/irc-mode.c
- alle Client_GetFromID() durch Client_Search() ersetzt.
[ngircd-alex.git] / src / ngircd / irc-mode.c
index 966f0cc2c822cb19b66f5a259016ffea6124e866..5b086c73817bf07726af3aa4dc013ca99b84bb32 100644 (file)
@@ -9,30 +9,25 @@
  * Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste
  * der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS.
  *
- * $Id: irc-mode.c,v 1.1 2002/02/27 23:26:21 alex Exp $
+ * $Id: irc-mode.c,v 1.4 2002/03/25 17:11:45 alex Exp $
  *
  * irc-mode.c: IRC-Befehle zur Mode-Aenderung (MODE, AWAY, ...)
- *
- * $Log: irc-mode.c,v $
- * Revision 1.1  2002/02/27 23:26:21  alex
- * - Modul aus irc.c bzw. irc.h ausgegliedert.
- *
  */
 
 
-#include <portab.h>
-#include "global.h"
+#include "portab.h"
 
-#include <imp.h>
+#include "imp.h"
 #include <assert.h>
 #include <string.h>
 
 #include "channel.h"
+#include "defines.h"
 #include "irc-write.h"
 #include "log.h"
 #include "messages.h"
 
-#include <exp.h>
+#include "exp.h"
 #include "irc-mode.h"
 
 
@@ -113,7 +108,7 @@ GLOBAL BOOLEAN IRC_MODE( CLIENT *Client, REQUEST *Req )
        /* Prefix fuer Antworten etc. ermitteln */
        if( Client_Type( Client ) == CLIENT_SERVER )
        {
-               prefix = Client_GetFromID( Req->prefix );
+               prefix = Client_Search( Req->prefix );
                if( ! prefix ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix );
        }
        else prefix = Client;
@@ -132,14 +127,6 @@ GLOBAL BOOLEAN IRC_MODE( CLIENT *Client, REQUEST *Req )
                        /* Befehl kommt von einem Server, daher
                         * trauen wir ihm "unbesehen" ... */
                        x[0] = *mode_ptr;
-
-                       if(( cl ) && ( x[0] == 'a' ))
-                       {
-                               /* away */
-                               if( set ) Client_SetAway( cl, "Away" );
-                               else Client_SetAway( cl, NULL );
-                       }
-                       
                }
                else
                {
@@ -167,6 +154,10 @@ GLOBAL BOOLEAN IRC_MODE( CLIENT *Client, REQUEST *Req )
                                                }
                                                else ok = IRC_WriteStrClient( Client, ERR_UMODEUNKNOWNFLAG_MSG, Client_ID( Client ));
                                                break;
+                                       case 's':
+                                               /* server messages */
+                                               x[0] = 's';
+                                               break;
                                        default:
                                                Log( LOG_DEBUG, "Unknown mode \"%c%c\" from \"%s\"!?", set ? '+' : '-', *mode_ptr, Client_ID( Client ));
                                                ok = IRC_WriteStrClient( Client, ERR_UMODEUNKNOWNFLAG2_MSG, Client_ID( Client ), set ? '+' : '-', *mode_ptr );
@@ -257,12 +248,21 @@ GLOBAL BOOLEAN IRC_MODE( CLIENT *Client, REQUEST *Req )
                        {
                                /* Mode setzen. Wenn der Client ihn noch nicht hatte: merken */
                                if( Client_ModeAdd( cl, x[0] )) strcat( the_modes, x );
+                               
                        }
                        else
                        {
                                /* Modes geloescht. Wenn der Client ihn hatte: merken */
                                if( Client_ModeDel( cl, x[0] )) strcat( the_modes, x );
                        }
+
+                       /* "nachbearbeiten" */
+                       if( x[0] == 'a' )
+                       {
+                               /* away */
+                               if( set ) Client_SetAway( cl, DEFAULT_AWAY_MSG );
+                               else Client_SetAway( cl, NULL );
+                       }
                }
                if( chan )
                {