]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/irc-mode.c
- nicht unterstuetzte Channel-Modes entfernt.
[ngircd-alex.git] / src / ngircd / irc-mode.c
index 0b2ea10c70aa054d979d55f9dd19d6ca1ea85890..c47345ae457e693b824b43131408c0036d63d7e9 100644 (file)
@@ -9,36 +9,33 @@
  * 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.2 2002/03/04 01:06:24 alex Exp $
+ * $Id: irc-mode.c,v 1.7 2002/06/02 15:14:22 alex Exp $
  *
  * irc-mode.c: IRC-Befehle zur Mode-Aenderung (MODE, AWAY, ...)
- *
- * $Log: irc-mode.c,v $
- * Revision 1.2  2002/03/04 01:06:24  alex
- * - der AWAY-Mode wurde nicht ueber mehrere Server-Links weitergegeben.
- *
- * 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 "conn.h"
+#include "client.h"
 #include "channel.h"
+#include "defines.h"
 #include "irc-write.h"
 #include "log.h"
+#include "parse.h"
 #include "messages.h"
 
-#include <exp.h>
+#include "exp.h"
 #include "irc-mode.h"
 
 
-GLOBAL BOOLEAN IRC_MODE( CLIENT *Client, REQUEST *Req )
+GLOBAL BOOLEAN
+IRC_MODE( CLIENT *Client, REQUEST *Req )
 {
        CHAR *mode_ptr, the_modes[CLIENT_MODE_LEN], x[2];
        CLIENT *cl, *chan_cl, *prefix;
@@ -115,7 +112,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;
@@ -147,11 +144,6 @@ GLOBAL BOOLEAN IRC_MODE( CLIENT *Client, REQUEST *Req )
                                                /* invisible */
                                                x[0] = 'i';
                                                break;
-                                       case 'r':
-                                               /* restricted (kann nur gesetzt werden) */
-                                               if( set ) x[0] = 'r';
-                                               else ok = IRC_WriteStrClient( Client, ERR_RESTRICTED_MSG, Client_ID( Client ));
-                                               break;
                                        case 'o':
                                                /* operator (kann nur geloescht werden) */
                                                if( ! set )
@@ -161,6 +153,15 @@ GLOBAL BOOLEAN IRC_MODE( CLIENT *Client, REQUEST *Req )
                                                }
                                                else ok = IRC_WriteStrClient( Client, ERR_UMODEUNKNOWNFLAG_MSG, Client_ID( Client ));
                                                break;
+                                       case 'r':
+                                               /* restricted (kann nur gesetzt werden) */
+                                               if( set ) x[0] = 'r';
+                                               else ok = IRC_WriteStrClient( Client, ERR_RESTRICTED_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 );
@@ -202,9 +203,9 @@ GLOBAL BOOLEAN IRC_MODE( CLIENT *Client, REQUEST *Req )
                                        /* Channel-Modes */
                                        switch( *mode_ptr )
                                        {
-                                               case 'a':
-                                                       /* Anonymous */
-                                                       x[0] = 'a';
+                                               case 'i':
+                                                       /* Invite-Only */
+                                                       x[0] = 'i';
                                                        break;
                                                case 'm':
                                                        /* Moderated */
@@ -214,22 +215,14 @@ GLOBAL BOOLEAN IRC_MODE( CLIENT *Client, REQUEST *Req )
                                                        /* kein Schreiben in den Channel von aussen */
                                                        x[0] = 'n';
                                                        break;
-                                               case 'p':
-                                                       /* Private */
-                                                       x[0] = 'p';
-                                                       break;
-                                               case 'q':
-                                                       /* Quiet */
-                                                       x[0] = 'q';
-                                                       break;
-                                               case 's':
-                                                       /* Secret */
-                                                       x[0] = 's';
-                                                       break;
                                                case 't':
                                                        /* Topic Lock */
                                                        x[0] = 't';
                                                        break;
+                                               case 'P':
+                                                       /* Persistent */
+                                                       x[0] = 'P';
+                                                       break;
                                                default:
                                                        Log( LOG_DEBUG, "Unknown channel-mode \"%c%c\" from \"%s\" at %s!?", set ? '+' : '-', *mode_ptr, Client_ID( Client ), Channel_Name( chan ));
                                                        ok = IRC_WriteStrClient( Client, ERR_UMODEUNKNOWNFLAG2_MSG, Client_ID( Client ), set ? '+' : '-', *mode_ptr );
@@ -366,7 +359,8 @@ GLOBAL BOOLEAN IRC_MODE( CLIENT *Client, REQUEST *Req )
 } /* IRC_MODE */
 
 
-GLOBAL BOOLEAN IRC_AWAY( CLIENT *Client, REQUEST *Req )
+GLOBAL BOOLEAN
+IRC_AWAY( CLIENT *Client, REQUEST *Req )
 {
        assert( Client != NULL );
        assert( Req != NULL );