]> jfr.im git - irc/quakenet/newserv.git/blame - nick/nick.h
NICK: Add "away" functionality.
[irc/quakenet/newserv.git] / nick / nick.h
CommitLineData
c86edd1d
Q
1/* nick.h */
2
3#ifndef __NICK_H
4#define __NICK_H
5
6#include "../lib/sstring.h"
7#include "../irc/irc_config.h"
8#include "../lib/flags.h"
9#include "../lib/array.h"
10#include "../server/server.h"
11#include "../lib/base64.h"
526e7c1d 12#include "../lib/irc_ipv6.h"
024c3d57 13#include "../patricia/patricia.h"
57583275 14
15#include "../authext/authext.h"
16
c86edd1d
Q
17#include <time.h>
18
42612890 19#ifndef MAXNICKEXTS
b28a184d 20#define MAXNICKEXTS 10
42612890 21#endif
c86edd1d
Q
22
23#define UMODE_INV 0x0001
24#define UMODE_WALLOPS 0x0002
25#define UMODE_DEBUG 0x0004
26#define UMODE_OPER 0x0008
27#define UMODE_SERVICE 0x0010
28#define UMODE_XOPER 0x0020
29#define UMODE_DEAF 0x0040
30#define UMODE_ACCOUNT 0x0080
31#define UMODE_HIDECHAN 0x0100
32#define UMODE_HIDEHOST 0x0200
33#define UMODE_SETHOST 0x0400
34#define UMODE_REGPRIV 0x0800
35#define UMODE_HIDEIDLE 0x1000
e98d808a 36#define UMODE_PARANOID 0x2000
c86edd1d 37
e98d808a 38#define UMODE_ALL 0x3FFF
c86edd1d 39
c153c0dc 40#define AFLAG_STAFF 0x0001
c4ffdb9b
CP
41#define AFLAG_SUPPORT 0x0002
42#define AFLAG_OPER 0x0004
43#define AFLAG_ADMIN 0x0008
44#define AFLAG_DEVELOPER 0x0010
45
46#define AFLAG_ALL 0x001F
c153c0dc 47
c86edd1d
Q
48#define IsInvisible(x) ((x)->umodes & UMODE_INV)
49#define IsWallops(x) ((x)->umodes & UMODE_WALLOPS)
50#define IsDebug(x) ((x)->umodes & UMODE_DEBUG)
51#define IsOper(x) ((x)->umodes & UMODE_OPER)
52#define IsService(x) ((x)->umodes & UMODE_SERVICE)
53#define IsXOper(x) ((x)->umodes & UMODE_XOPER)
54#define IsDeaf(x) ((x)->umodes & UMODE_DEAF)
55#define IsAccount(x) ((x)->umodes & UMODE_ACCOUNT)
56#define IsHideChan(x) ((x)->umodes & UMODE_HIDECHAN)
57#define IsHideHost(x) ((x)->umodes & UMODE_HIDEHOST)
58#define IsSetHost(x) ((x)->umodes & UMODE_SETHOST)
59#define IsRegPriv(x) ((x)->umodes & UMODE_REGPRIV)
60#define IsHideIdle(x) ((x)->umodes & UMODE_HIDEIDLE)
e98d808a 61#define IsParanoid(x) ((x)->umodes & UMODE_PARANOID)
c86edd1d
Q
62
63#define SetInvisible(x) ((x)->umodes |= UMODE_INV)
64#define SetWallops(x) ((x)->umodes |= UMODE_WALLOPS)
65#define SetDebug(x) ((x)->umodes |= UMODE_DEBUG)
66#define SetOper(x) ((x)->umodes |= UMODE_OPER)
67#define SetService(x) ((x)->umodes |= UMODE_SERVICE)
68#define SetXOper(x) ((x)->umodes |= UMODE_XOPER)
69#define SetDeaf(x) ((x)->umodes |= UMODE_DEAF)
70#define SetAccount(x) ((x)->umodes |= UMODE_ACCOUNT)
71#define SetHideChan(x) ((x)->umodes |= UMODE_HIDECHAN)
72#define SetHideHost(x) ((x)->umodes |= UMODE_HIDEHOST)
73#define SetSetHost(x) ((x)->umodes |= UMODE_SETHOST)
74#define SetRegPriv(x) ((x)->umodes |= UMODE_REGPRIV)
75#define SetHideIdle(x) ((x)->umodes |= UMODE_HIDEIDLE)
e98d808a 76#define SetParanoid(x) ((x)->umodes |= UMODE_PARANOID)
c86edd1d
Q
77
78#define ClearInvisible(x) ((x)->umodes &= ~UMODE_INV)
79#define ClearWallops(x) ((x)->umodes &= ~UMODE_WALLOPS)
80#define ClearDebug(x) ((x)->umodes &= ~UMODE_DEBUG)
81#define ClearOper(x) ((x)->umodes &= ~UMODE_OPER)
82#define ClearService(x) ((x)->umodes &= ~UMODE_SERVICE)
83#define ClearXOper(x) ((x)->umodes &= ~UMODE_XOPER)
84#define ClearDeaf(x) ((x)->umodes &= ~UMODE_DEAF)
85#define ClearAccount(x) ((x)->umodes &= ~UMODE_ACCOUNT)
86#define ClearHideChan(x) ((x)->umodes &= ~UMODE_HIDECHAN)
87#define ClearHideHost(x) ((x)->umodes &= ~UMODE_HIDEHOST)
88#define ClearSetHost(x) ((x)->umodes &= ~UMODE_SETHOST)
89#define ClearRegPriv(x) ((x)->umodes &= ~UMODE_REGPRIV)
90#define ClearHideIdle(x) ((x)->umodes &= ~UMODE_HIDEIDLE)
e98d808a 91#define ClearParanoid(x) ((x)->umodes &= ~UMODE_PARANOID)
c86edd1d 92
3294b10b
CP
93#define IsStaff(x) ((x)->flags & AFLAG_STAFF)
94#define IsDeveloper(x) ((x)->flags & AFLAG_DEVELOPER)
95#define IsSupport(x) ((x)->flags & AFLAG_SUPPORT)
96#define IsAdmin(x) ((x)->flags & AFLAG_ADMIN)
97#define IsOperFlag(x) ((x)->flags & AFLAG_OPER)
98
99#define SetStaff(x) ((x)->flags |= AFLAG_STAFF)
100#define SetDeveloper(x) ((x)->flags |= AFLAG_DEVELOPER)
101#define SetSupport(x) ((x)->flags |= AFLAG_SUPPORT)
102#define SetAdmin(x) ((x)->flags |= AFLAG_ADMIN)
103#define SetOperFlag(x) ((x)->flags |= AFLAG_OPER)
104
105#define ClearStaff(x) ((x)->flags &= ~AFLAG_STAFF)
106#define ClearDeveloper(x) ((x)->flags &= ~AFLAG_DEVELOPER)
107#define ClearSupport(x) ((x)->flags &= ~AFLAG_SUPPORT)
108#define ClearAdmin(x) ((x)->flags &= ~AFLAG_ADMIN)
109#define ClearOperFlag(x) ((x)->flags &= ~AFLAG_OPER)
c153c0dc 110
f1e7c41c
CP
111#define NickOnServiceServer(target) SIsService(&serverlist[homeserver((target)->numeric)])
112
c86edd1d
Q
113typedef struct host {
114 sstring *name;
115 int clonecount;
116 unsigned int marker;
117 struct nick *nicks;
118 struct host *next;
119} host;
120
121typedef struct realname {
122 sstring *name;
123 int usercount;
124 unsigned int marker;
125 struct nick *nicks;
126 struct realname *next;
127} realname;
128
129typedef struct nick {
130 char nick[NICKLEN+1];
131 long numeric;
132 char ident[USERLEN+1];
133 host *host;
134 realname *realname;
135 sstring *shident; /* +h users: fake ident/host goes here */
136 sstring *sethost;
843184e3 137 sstring *opername;
c86edd1d 138 flag_t umodes;
3294b10b 139 char *authname;
47657339 140 authname *auth; /* This requires User ID numbers to work */
c86edd1d
Q
141 time_t timestamp;
142 time_t accountts;
5144ddc4 143 sstring *away;
526e7c1d 144 patricia_node_t *ipnode;
c86edd1d
Q
145 unsigned int marker;
146 struct nick *next;
147 struct nick *nextbyhost;
148 struct nick *nextbyrealname;
47657339 149 struct nick *nextbyauthname;
c86edd1d
Q
150 /* These are extensions only used by other modules */
151 array *channels;
152 void *exts[MAXNICKEXTS];
153} nick;
154
526e7c1d
P
155#define p_ipaddr ipnode->prefix->sin
156
c86edd1d
Q
157#define NICKHASHSIZE 60000
158#define HOSTHASHSIZE 40000
159#define REALNAMEHASHSIZE 40000
160
161extern nick *nicktable[NICKHASHSIZE];
162extern nick **servernicks[MAXSERVERS];
163extern host *hosttable[HOSTHASHSIZE];
164extern realname *realnametable[REALNAMEHASHSIZE];
165extern const flag umodeflags[];
c153c0dc 166extern const flag accountflags[];
3404a8f0 167extern char *NULLAUTHNAME;
c86edd1d
Q
168
169#define MAXNUMERIC 0x3FFFFFFF
170
171#define homeserver(x) (((x)>>18)&(MAXSERVERS-1))
172#define gethandlebynumericunsafe(x) (&(servernicks[homeserver(x)][(x)&(serverlist[homeserver(x)].maxusernum)]))
173#define getnickbynumericunsafe(x) (servernicks[homeserver(x)][(x)&(serverlist[homeserver(x)].maxusernum)])
174#define getnickbynumericstr(x) (getnickbynumeric(numerictolong((x),5)))
175#define gethandlebynumeric(x) ((serverlist[homeserver(x)].linkstate==LS_INVALID) ? NULL : \
176 (gethandlebynumericunsafe(x)))
177#define getnickbynumeric(x) ((gethandlebynumeric(x)==NULL)?NULL: \
178 ((*gethandlebynumeric(x)==NULL)?NULL: \
179 (((*gethandlebynumeric(x))->numeric==(x&MAXNUMERIC))?(*gethandlebynumeric(x)):NULL)))
180
181/* nickalloc.c functions */
182void initnickalloc();
183realname *newrealname();
184void freerealname(realname *rn);
185nick *newnick();
186void freenick (nick *np);
187host *newhost();
188void freehost (host *hp);
189
190/* nick.c functions */
191void handleserverchange(int hooknum, void *arg);
192void deletenick(nick *np);
193void addnicktohash(nick *np);
194void removenickfromhash(nick *np);
195nick *getnickbynick(const char *nick);
196int registernickext(const char *name);
197int findnickext(const char *name);
198void releasenickext(int index);
199char *visiblehostmask(nick *np, char *buf);
28252fef 200char *visibleuserhost(nick *np, char *buf);
c86edd1d
Q
201
202/* nickhandlers.c functions */
203int handlenickmsg(void *source, int cargc, char **cargv);
204int handlequitmsg(void *source, int cargc, char **cargv);
205int handlekillmsg(void *source, int cargc, char **cargv);
206int handleusermodemsg(void *source, int cargc, char **cargv);
207int handlewhoismsg(void *source, int cargc, char **cargv);
208int handleaccountmsg(void *source, int cargc, char **cargv);
209int handlestatsmsg(void *source, int cargc, char **cargv);
6885ae9c 210int handleprivmsg(void *source, int cargc, char **cargv);
5144ddc4 211int handleawaymsg(void *source, int cargc, char **cargv);
c86edd1d
Q
212
213/* These functions have been replaced by macros
214nick **gethandlebynumeric(long numeric);
215nick *getnickbynumeric(long numeric);
216nick *getnickbynumericstr(char *numericstr);
217*/
218
219/* nickhelpers.c functions */
220void initnickhelpers();
707c5824 221void fininickhelpers();
c86edd1d
Q
222host *findhost(const char *hostname);
223host *findorcreatehost(const char *hostname);
224void releasehost(host *hp);
225realname *findrealname(const char *name);
226realname *findorcreaterealname(const char *name);
227void releaserealname(realname *rnp);
228
229unsigned int nexthostmarker();
230unsigned int nextrealnamemarker();
231unsigned int nextnickmarker();
232
233#endif