* 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;
/* 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;
/* 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 )
}
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 );
/* Channel-Modes */
switch( *mode_ptr )
{
- case 'a':
- /* Anonymous */
- x[0] = 'a';
+ case 'i':
+ /* Invite-Only */
+ x[0] = 'i';
break;
case 'm':
/* Moderated */
/* 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 );
} /* IRC_MODE */
-GLOBAL BOOLEAN IRC_AWAY( CLIENT *Client, REQUEST *Req )
+GLOBAL BOOLEAN
+IRC_AWAY( CLIENT *Client, REQUEST *Req )
{
assert( Client != NULL );
assert( Req != NULL );