]> jfr.im git - irc/quakenet/newserv.git/blame - nick/nick.h
Added support for remembering the oldest-ever timestamp seen for a channel.
[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
P
12#include "../lib/irc_ipv6.h"
13#include "../lib/patricia.h"
c86edd1d
Q
14#include <time.h>
15
526e7c1d 16#define MAXNICKEXTS 6
c86edd1d
Q
17
18#define UMODE_INV 0x0001
19#define UMODE_WALLOPS 0x0002
20#define UMODE_DEBUG 0x0004
21#define UMODE_OPER 0x0008
22#define UMODE_SERVICE 0x0010
23#define UMODE_XOPER 0x0020
24#define UMODE_DEAF 0x0040
25#define UMODE_ACCOUNT 0x0080
26#define UMODE_HIDECHAN 0x0100
27#define UMODE_HIDEHOST 0x0200
28#define UMODE_SETHOST 0x0400
29#define UMODE_REGPRIV 0x0800
30#define UMODE_HIDEIDLE 0x1000
31
32#define UMODE_ALL 0x1FFF
33
34#define IsInvisible(x) ((x)->umodes & UMODE_INV)
35#define IsWallops(x) ((x)->umodes & UMODE_WALLOPS)
36#define IsDebug(x) ((x)->umodes & UMODE_DEBUG)
37#define IsOper(x) ((x)->umodes & UMODE_OPER)
38#define IsService(x) ((x)->umodes & UMODE_SERVICE)
39#define IsXOper(x) ((x)->umodes & UMODE_XOPER)
40#define IsDeaf(x) ((x)->umodes & UMODE_DEAF)
41#define IsAccount(x) ((x)->umodes & UMODE_ACCOUNT)
42#define IsHideChan(x) ((x)->umodes & UMODE_HIDECHAN)
43#define IsHideHost(x) ((x)->umodes & UMODE_HIDEHOST)
44#define IsSetHost(x) ((x)->umodes & UMODE_SETHOST)
45#define IsRegPriv(x) ((x)->umodes & UMODE_REGPRIV)
46#define IsHideIdle(x) ((x)->umodes & UMODE_HIDEIDLE)
47
48#define SetInvisible(x) ((x)->umodes |= UMODE_INV)
49#define SetWallops(x) ((x)->umodes |= UMODE_WALLOPS)
50#define SetDebug(x) ((x)->umodes |= UMODE_DEBUG)
51#define SetOper(x) ((x)->umodes |= UMODE_OPER)
52#define SetService(x) ((x)->umodes |= UMODE_SERVICE)
53#define SetXOper(x) ((x)->umodes |= UMODE_XOPER)
54#define SetDeaf(x) ((x)->umodes |= UMODE_DEAF)
55#define SetAccount(x) ((x)->umodes |= UMODE_ACCOUNT)
56#define SetHideChan(x) ((x)->umodes |= UMODE_HIDECHAN)
57#define SetHideHost(x) ((x)->umodes |= UMODE_HIDEHOST)
58#define SetSetHost(x) ((x)->umodes |= UMODE_SETHOST)
59#define SetRegPriv(x) ((x)->umodes |= UMODE_REGPRIV)
60#define SetHideIdle(x) ((x)->umodes |= UMODE_HIDEIDLE)
61
62#define ClearInvisible(x) ((x)->umodes &= ~UMODE_INV)
63#define ClearWallops(x) ((x)->umodes &= ~UMODE_WALLOPS)
64#define ClearDebug(x) ((x)->umodes &= ~UMODE_DEBUG)
65#define ClearOper(x) ((x)->umodes &= ~UMODE_OPER)
66#define ClearService(x) ((x)->umodes &= ~UMODE_SERVICE)
67#define ClearXOper(x) ((x)->umodes &= ~UMODE_XOPER)
68#define ClearDeaf(x) ((x)->umodes &= ~UMODE_DEAF)
69#define ClearAccount(x) ((x)->umodes &= ~UMODE_ACCOUNT)
70#define ClearHideChan(x) ((x)->umodes &= ~UMODE_HIDECHAN)
71#define ClearHideHost(x) ((x)->umodes &= ~UMODE_HIDEHOST)
72#define ClearSetHost(x) ((x)->umodes &= ~UMODE_SETHOST)
73#define ClearRegPriv(x) ((x)->umodes &= ~UMODE_REGPRIV)
74#define ClearHideIdle(x) ((x)->umodes &= ~UMODE_HIDEIDLE)
75
76typedef struct host {
77 sstring *name;
78 int clonecount;
79 unsigned int marker;
80 struct nick *nicks;
81 struct host *next;
82} host;
83
84typedef struct realname {
85 sstring *name;
86 int usercount;
87 unsigned int marker;
88 struct nick *nicks;
89 struct realname *next;
90} realname;
91
92typedef struct nick {
93 char nick[NICKLEN+1];
94 long numeric;
95 char ident[USERLEN+1];
96 host *host;
97 realname *realname;
98 sstring *shident; /* +h users: fake ident/host goes here */
99 sstring *sethost;
100 flag_t umodes;
101 char authname[ACCOUNTLEN+1];
102 time_t timestamp;
103 time_t accountts;
526e7c1d 104 patricia_node_t *ipnode;
c86edd1d
Q
105 unsigned int marker;
106 struct nick *next;
107 struct nick *nextbyhost;
108 struct nick *nextbyrealname;
109 /* These are extensions only used by other modules */
110 array *channels;
111 void *exts[MAXNICKEXTS];
112} nick;
113
526e7c1d
P
114#define p_ipaddr ipnode->prefix->sin
115
c86edd1d
Q
116#define NICKHASHSIZE 60000
117#define HOSTHASHSIZE 40000
118#define REALNAMEHASHSIZE 40000
119
120extern nick *nicktable[NICKHASHSIZE];
121extern nick **servernicks[MAXSERVERS];
122extern host *hosttable[HOSTHASHSIZE];
123extern realname *realnametable[REALNAMEHASHSIZE];
124extern const flag umodeflags[];
526e7c1d 125extern patricia_tree_t *iptree;
c86edd1d
Q
126
127#define MAXNUMERIC 0x3FFFFFFF
128
129#define homeserver(x) (((x)>>18)&(MAXSERVERS-1))
130#define gethandlebynumericunsafe(x) (&(servernicks[homeserver(x)][(x)&(serverlist[homeserver(x)].maxusernum)]))
131#define getnickbynumericunsafe(x) (servernicks[homeserver(x)][(x)&(serverlist[homeserver(x)].maxusernum)])
132#define getnickbynumericstr(x) (getnickbynumeric(numerictolong((x),5)))
133#define gethandlebynumeric(x) ((serverlist[homeserver(x)].linkstate==LS_INVALID) ? NULL : \
134 (gethandlebynumericunsafe(x)))
135#define getnickbynumeric(x) ((gethandlebynumeric(x)==NULL)?NULL: \
136 ((*gethandlebynumeric(x)==NULL)?NULL: \
137 (((*gethandlebynumeric(x))->numeric==(x&MAXNUMERIC))?(*gethandlebynumeric(x)):NULL)))
138
139/* nickalloc.c functions */
140void initnickalloc();
141realname *newrealname();
142void freerealname(realname *rn);
143nick *newnick();
144void freenick (nick *np);
145host *newhost();
146void freehost (host *hp);
147
148/* nick.c functions */
149void handleserverchange(int hooknum, void *arg);
150void deletenick(nick *np);
151void addnicktohash(nick *np);
152void removenickfromhash(nick *np);
153nick *getnickbynick(const char *nick);
154int registernickext(const char *name);
155int findnickext(const char *name);
156void releasenickext(int index);
157char *visiblehostmask(nick *np, char *buf);
526e7c1d
P
158int registernodeext(const char *name);
159int findnodeext(const char *name);
160void releasenodeext(int index);
c86edd1d
Q
161
162/* nickhandlers.c functions */
163int handlenickmsg(void *source, int cargc, char **cargv);
164int handlequitmsg(void *source, int cargc, char **cargv);
165int handlekillmsg(void *source, int cargc, char **cargv);
166int handleusermodemsg(void *source, int cargc, char **cargv);
167int handlewhoismsg(void *source, int cargc, char **cargv);
168int handleaccountmsg(void *source, int cargc, char **cargv);
169int handlestatsmsg(void *source, int cargc, char **cargv);
170
171/* These functions have been replaced by macros
172nick **gethandlebynumeric(long numeric);
173nick *getnickbynumeric(long numeric);
174nick *getnickbynumericstr(char *numericstr);
175*/
176
177/* nickhelpers.c functions */
178void initnickhelpers();
179host *findhost(const char *hostname);
180host *findorcreatehost(const char *hostname);
181void releasehost(host *hp);
182realname *findrealname(const char *name);
183realname *findorcreaterealname(const char *name);
184void releaserealname(realname *rnp);
185
186unsigned int nexthostmarker();
187unsigned int nextrealnamemarker();
188unsigned int nextnickmarker();
189
190#endif