/*
- * charybdis: A useful ircd.
+ * Solanum: a slightly advanced ircd
* client.h: The ircd client header.
*
* Copyright (C) 1990 Jarkko Oikarinen and University of Oulu, Co Center
* Copyright (C) 1996-2002 Hybrid Development Team
* Copyright (C) 2002-2004 ircd-ratbox development team
- * Copyright (C) 2005 William Pitcock and Jilles Tjoelker
+ * Copyright (C) 2005 Ariadne Conill and Jilles Tjoelker
*
* 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
struct scache_entry *nameinfo;
};
-struct ZipStats
-{
- unsigned long long in;
- unsigned long long in_wire;
- unsigned long long out;
- unsigned long long out_wire;
- double in_ratio;
- double out_ratio;
-};
-
struct Client
{
rb_dlink_node node;
struct ws_ctl *ws_ctl; /* ctl for wsockd */
SSL_OPEN_CB *ssl_callback; /* ssl connection is now open */
uint32_t localflags;
- struct ZipStats *zipstats; /* zipstats */
uint16_t cork_count; /* used for corking/uncorking connections */
struct ev_entry *event; /* used for associated events */
struct ListClient
{
- char *chname;
+ char *chname, *mask, *nomask;
unsigned int users_min, users_max;
time_t created_min, created_max, topic_min, topic_max;
int operspy;
(x)->handler = SERVER_HANDLER; }
#define SetClient(x) {(x)->status = STAT_CLIENT; \
- (x)->handler = IsOper((x)) ? \
+ (x)->handler = IsOperGeneral((x)) ? \
OPER_HANDLER : CLIENT_HANDLER; }
#define SetRemoteClient(x) {(x)->status = STAT_CLIENT; \
(x)->handler = RCLIENT_HANDLER; }
#define FLAGS_EXEMPTSPAMBOT 0x02000000
#define FLAGS_EXEMPTSHIDE 0x04000000
#define FLAGS_EXEMPTJUPE 0x08000000
+#define FLAGS_IDENTIFIED 0x10000000 /* owns their current nick */
/* flags for local clients, this needs stuff moved from above to here at some point */
#define LFLAGS_FLUSH 0x00000002
#define LFLAGS_CORK 0x00000004
#define LFLAGS_SCTP 0x00000008
-#define LFLAGS_INSECURE 0x00000010 /* for marking SSL clients as insecure before registration */
+#define LFLAGS_SECURE 0x00000010 /* for marking SSL clients as secure before registration */
+/* LFLAGS_FAKE: client may not have the usually expected machinery plugged in; don't assert on it. For tests only. */
+#define LFLAGS_FAKE 0x00000020
/* umodes, settable flags */
/* lots of this moved to snomask -- jilles */
/* user information flags, only settable by remote mode or local oper */
#define UMODE_OPER 0x1000 /* Operator */
#define UMODE_ADMIN 0x2000 /* Admin on server */
-#define UMODE_SSLCLIENT 0x4000 /* using SSL */
+#define UMODE_SECURE 0x4000 /* has a secure connection */
#define DEFAULT_OPER_UMODES (UMODE_SERVNOTICE | UMODE_OPERWALL | \
UMODE_WALLOP | UMODE_LOCOPS)
#define IsTGExcessive(x) ((x)->flags & FLAGS_TGEXCESSIVE)
#define SetTGExcessive(x) ((x)->flags |= FLAGS_TGEXCESSIVE)
#define ClearTGExcessive(x) ((x)->flags &= ~FLAGS_TGEXCESSIVE)
+#define IsIdentified(x) ((x)->flags & FLAGS_IDENTIFIED)
+#define SetIdentified(x) ((x)->flags |= FLAGS_IDENTIFIED)
+#define ClearIdentified(x) ((x)->flags &= ~FLAGS_IDENTIFIED)
/* local flags */
#define SetSCTP(x) ((x)->localClient->localflags |= LFLAGS_SCTP)
#define ClearSCTP(x) ((x)->localClient->localflags &= ~LFLAGS_SCTP)
-#define IsInsecure(x) ((x)->localClient->localflags & LFLAGS_INSECURE)
-#define SetInsecure(x) ((x)->localClient->localflags |= LFLAGS_INSECURE)
-#define ClearInsecure(x) ((x)->localClient->localflags &= ~LFLAGS_INSECURE)
+#define IsSecure(x) ((x)->localClient->localflags & LFLAGS_SECURE)
+#define SetSecure(x) ((x)->localClient->localflags |= LFLAGS_SECURE)
+#define ClearSecure(x) ((x)->localClient->localflags &= ~LFLAGS_SECURE)
/* oper flags */
#define MyOper(x) (MyConnect(x) && IsOper(x))
-#define SetOper(x) {(x)->umodes |= UMODE_OPER; \
- if (MyClient((x))) (x)->handler = OPER_HANDLER;}
-
-#define ClearOper(x) {(x)->umodes &= ~(UMODE_OPER|UMODE_ADMIN); \
- if (MyClient((x)) && !IsOper((x)) && !IsServer((x))) \
- (x)->handler = CLIENT_HANDLER; }
+#define SetOper(x) ((x)->umodes |= UMODE_OPER)
+#define ClearOper(x) ((x)->umodes &= ~(UMODE_OPER|UMODE_ADMIN))
/* umode flags */
#define IsInvisible(x) ((x)->umodes & UMODE_INVISIBLE)
#define SetInvisible(x) ((x)->umodes |= UMODE_INVISIBLE)
#define ClearInvisible(x) ((x)->umodes &= ~UMODE_INVISIBLE)
-#define IsSSLClient(x) ((x)->umodes & UMODE_SSLCLIENT)
-#define SetSSLClient(x) ((x)->umodes |= UMODE_SSLCLIENT)
-#define ClearSSLClient(x) ((x)->umodes &= ~UMODE_SSLCLIENT)
+#define IsSecureClient(x) ((x)->umodes & UMODE_SECURE)
#define SendWallops(x) ((x)->umodes & UMODE_WALLOP)
#define SendLocops(x) ((x)->umodes & UMODE_LOCOPS)
#define SendServNotice(x) ((x)->umodes & UMODE_SERVNOTICE)
#define SendOperwall(x) ((x)->umodes & UMODE_OPERWALL)
-#define IsService(x) ((x)->umodes & UMODE_SERVICE)
-#define IsDeaf(x) ((x)->umodes & UMODE_DEAF)
-#define IsNoForward(x) ((x)->umodes & UMODE_NOFORWARD)
+#define IsService(x) ((x)->umodes & UMODE_SERVICE)
+#define IsDeaf(x) ((x)->umodes & UMODE_DEAF)
+#define IsNoForward(x) ((x)->umodes & UMODE_NOFORWARD)
#define SetGotId(x) ((x)->flags |= FLAGS_GOTID)
+#define ClearGotId(x) ((x)->flags &= ~FLAGS_GOTID)
#define IsGotId(x) (((x)->flags & FLAGS_GOTID) != 0)
#define IsExemptKline(x) ((x)->flags & FLAGS_EXEMPTKLINE)