]>
Commit | Line | Data |
---|---|---|
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" | |
57583275 | 14 | |
15 | #include "../authext/authext.h" | |
16 | ||
c86edd1d Q |
17 | #include <time.h> |
18 | ||
42612890 | 19 | #ifndef MAXNICKEXTS |
27ce0548 | 20 | #define MAXNICKEXTS 6 |
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 CP |
40 | #define AFLAG_STAFF 0x0001 |
41 | #define AFLAG_DEVELOPER 0x0002 | |
42 | ||
c86edd1d Q |
43 | #define IsInvisible(x) ((x)->umodes & UMODE_INV) |
44 | #define IsWallops(x) ((x)->umodes & UMODE_WALLOPS) | |
45 | #define IsDebug(x) ((x)->umodes & UMODE_DEBUG) | |
46 | #define IsOper(x) ((x)->umodes & UMODE_OPER) | |
47 | #define IsService(x) ((x)->umodes & UMODE_SERVICE) | |
48 | #define IsXOper(x) ((x)->umodes & UMODE_XOPER) | |
49 | #define IsDeaf(x) ((x)->umodes & UMODE_DEAF) | |
50 | #define IsAccount(x) ((x)->umodes & UMODE_ACCOUNT) | |
51 | #define IsHideChan(x) ((x)->umodes & UMODE_HIDECHAN) | |
52 | #define IsHideHost(x) ((x)->umodes & UMODE_HIDEHOST) | |
53 | #define IsSetHost(x) ((x)->umodes & UMODE_SETHOST) | |
54 | #define IsRegPriv(x) ((x)->umodes & UMODE_REGPRIV) | |
55 | #define IsHideIdle(x) ((x)->umodes & UMODE_HIDEIDLE) | |
e98d808a | 56 | #define IsParanoid(x) ((x)->umodes & UMODE_PARANOID) |
c86edd1d Q |
57 | |
58 | #define SetInvisible(x) ((x)->umodes |= UMODE_INV) | |
59 | #define SetWallops(x) ((x)->umodes |= UMODE_WALLOPS) | |
60 | #define SetDebug(x) ((x)->umodes |= UMODE_DEBUG) | |
61 | #define SetOper(x) ((x)->umodes |= UMODE_OPER) | |
62 | #define SetService(x) ((x)->umodes |= UMODE_SERVICE) | |
63 | #define SetXOper(x) ((x)->umodes |= UMODE_XOPER) | |
64 | #define SetDeaf(x) ((x)->umodes |= UMODE_DEAF) | |
65 | #define SetAccount(x) ((x)->umodes |= UMODE_ACCOUNT) | |
66 | #define SetHideChan(x) ((x)->umodes |= UMODE_HIDECHAN) | |
67 | #define SetHideHost(x) ((x)->umodes |= UMODE_HIDEHOST) | |
68 | #define SetSetHost(x) ((x)->umodes |= UMODE_SETHOST) | |
69 | #define SetRegPriv(x) ((x)->umodes |= UMODE_REGPRIV) | |
70 | #define SetHideIdle(x) ((x)->umodes |= UMODE_HIDEIDLE) | |
e98d808a | 71 | #define SetParanoid(x) ((x)->umodes |= UMODE_PARANOID) |
c86edd1d Q |
72 | |
73 | #define ClearInvisible(x) ((x)->umodes &= ~UMODE_INV) | |
74 | #define ClearWallops(x) ((x)->umodes &= ~UMODE_WALLOPS) | |
75 | #define ClearDebug(x) ((x)->umodes &= ~UMODE_DEBUG) | |
76 | #define ClearOper(x) ((x)->umodes &= ~UMODE_OPER) | |
77 | #define ClearService(x) ((x)->umodes &= ~UMODE_SERVICE) | |
78 | #define ClearXOper(x) ((x)->umodes &= ~UMODE_XOPER) | |
79 | #define ClearDeaf(x) ((x)->umodes &= ~UMODE_DEAF) | |
80 | #define ClearAccount(x) ((x)->umodes &= ~UMODE_ACCOUNT) | |
81 | #define ClearHideChan(x) ((x)->umodes &= ~UMODE_HIDECHAN) | |
82 | #define ClearHideHost(x) ((x)->umodes &= ~UMODE_HIDEHOST) | |
83 | #define ClearSetHost(x) ((x)->umodes &= ~UMODE_SETHOST) | |
84 | #define ClearRegPriv(x) ((x)->umodes &= ~UMODE_REGPRIV) | |
85 | #define ClearHideIdle(x) ((x)->umodes &= ~UMODE_HIDEIDLE) | |
e98d808a | 86 | #define ClearParanoid(x) ((x)->umodes &= ~UMODE_PARANOID) |
c86edd1d | 87 | |
c153c0dc CP |
88 | #define IsStaff(x) ((x)->umodes & AFLAG_STAFF) |
89 | #define IsDeveloper(x) ((x)->umodes & AFLAG_DEVELOPER) | |
90 | ||
91 | #define SetStaff(x) ((x)->umodes |= AFLAG_STAFF) | |
92 | #define SetDeveloper(x) ((x)->umodes |= AFLAG_DEVELOPER) | |
93 | ||
94 | #define ClearStaff(x) ((x)->umodes &= ~AFLAG_STAFF) | |
95 | #define ClearDeveloper(x) ((x)->umodes &= ~AFLAG_DEVELOPER) | |
96 | ||
c86edd1d Q |
97 | typedef struct host { |
98 | sstring *name; | |
99 | int clonecount; | |
100 | unsigned int marker; | |
101 | struct nick *nicks; | |
102 | struct host *next; | |
103 | } host; | |
104 | ||
105 | typedef struct realname { | |
106 | sstring *name; | |
107 | int usercount; | |
108 | unsigned int marker; | |
109 | struct nick *nicks; | |
110 | struct realname *next; | |
111 | } realname; | |
112 | ||
113 | typedef struct nick { | |
114 | char nick[NICKLEN+1]; | |
115 | long numeric; | |
116 | char ident[USERLEN+1]; | |
117 | host *host; | |
118 | realname *realname; | |
119 | sstring *shident; /* +h users: fake ident/host goes here */ | |
120 | sstring *sethost; | |
121 | flag_t umodes; | |
122 | char authname[ACCOUNTLEN+1]; | |
47657339 | 123 | authname *auth; /* This requires User ID numbers to work */ |
c86edd1d Q |
124 | time_t timestamp; |
125 | time_t accountts; | |
c153c0dc | 126 | flag_t accountflags; |
526e7c1d | 127 | patricia_node_t *ipnode; |
c86edd1d Q |
128 | unsigned int marker; |
129 | struct nick *next; | |
130 | struct nick *nextbyhost; | |
131 | struct nick *nextbyrealname; | |
47657339 | 132 | struct nick *nextbyauthname; |
c86edd1d Q |
133 | /* These are extensions only used by other modules */ |
134 | array *channels; | |
135 | void *exts[MAXNICKEXTS]; | |
136 | } nick; | |
137 | ||
526e7c1d P |
138 | #define p_ipaddr ipnode->prefix->sin |
139 | ||
c86edd1d Q |
140 | #define NICKHASHSIZE 60000 |
141 | #define HOSTHASHSIZE 40000 | |
142 | #define REALNAMEHASHSIZE 40000 | |
143 | ||
144 | extern nick *nicktable[NICKHASHSIZE]; | |
145 | extern nick **servernicks[MAXSERVERS]; | |
146 | extern host *hosttable[HOSTHASHSIZE]; | |
147 | extern realname *realnametable[REALNAMEHASHSIZE]; | |
148 | extern const flag umodeflags[]; | |
c153c0dc | 149 | extern const flag accountflags[]; |
526e7c1d | 150 | extern patricia_tree_t *iptree; |
c86edd1d Q |
151 | |
152 | #define MAXNUMERIC 0x3FFFFFFF | |
153 | ||
154 | #define homeserver(x) (((x)>>18)&(MAXSERVERS-1)) | |
155 | #define gethandlebynumericunsafe(x) (&(servernicks[homeserver(x)][(x)&(serverlist[homeserver(x)].maxusernum)])) | |
156 | #define getnickbynumericunsafe(x) (servernicks[homeserver(x)][(x)&(serverlist[homeserver(x)].maxusernum)]) | |
157 | #define getnickbynumericstr(x) (getnickbynumeric(numerictolong((x),5))) | |
158 | #define gethandlebynumeric(x) ((serverlist[homeserver(x)].linkstate==LS_INVALID) ? NULL : \ | |
159 | (gethandlebynumericunsafe(x))) | |
160 | #define getnickbynumeric(x) ((gethandlebynumeric(x)==NULL)?NULL: \ | |
161 | ((*gethandlebynumeric(x)==NULL)?NULL: \ | |
162 | (((*gethandlebynumeric(x))->numeric==(x&MAXNUMERIC))?(*gethandlebynumeric(x)):NULL))) | |
163 | ||
164 | /* nickalloc.c functions */ | |
165 | void initnickalloc(); | |
166 | realname *newrealname(); | |
167 | void freerealname(realname *rn); | |
168 | nick *newnick(); | |
169 | void freenick (nick *np); | |
170 | host *newhost(); | |
171 | void freehost (host *hp); | |
172 | ||
173 | /* nick.c functions */ | |
174 | void handleserverchange(int hooknum, void *arg); | |
175 | void deletenick(nick *np); | |
176 | void addnicktohash(nick *np); | |
177 | void removenickfromhash(nick *np); | |
178 | nick *getnickbynick(const char *nick); | |
179 | int registernickext(const char *name); | |
180 | int findnickext(const char *name); | |
181 | void releasenickext(int index); | |
182 | char *visiblehostmask(nick *np, char *buf); | |
526e7c1d P |
183 | int registernodeext(const char *name); |
184 | int findnodeext(const char *name); | |
185 | void releasenodeext(int index); | |
c86edd1d Q |
186 | |
187 | /* nickhandlers.c functions */ | |
188 | int handlenickmsg(void *source, int cargc, char **cargv); | |
189 | int handlequitmsg(void *source, int cargc, char **cargv); | |
190 | int handlekillmsg(void *source, int cargc, char **cargv); | |
191 | int handleusermodemsg(void *source, int cargc, char **cargv); | |
192 | int handlewhoismsg(void *source, int cargc, char **cargv); | |
193 | int handleaccountmsg(void *source, int cargc, char **cargv); | |
194 | int handlestatsmsg(void *source, int cargc, char **cargv); | |
195 | ||
196 | /* These functions have been replaced by macros | |
197 | nick **gethandlebynumeric(long numeric); | |
198 | nick *getnickbynumeric(long numeric); | |
199 | nick *getnickbynumericstr(char *numericstr); | |
200 | */ | |
201 | ||
202 | /* nickhelpers.c functions */ | |
203 | void initnickhelpers(); | |
707c5824 | 204 | void fininickhelpers(); |
c86edd1d Q |
205 | host *findhost(const char *hostname); |
206 | host *findorcreatehost(const char *hostname); | |
207 | void releasehost(host *hp); | |
208 | realname *findrealname(const char *name); | |
209 | realname *findorcreaterealname(const char *name); | |
210 | void releaserealname(realname *rnp); | |
211 | ||
212 | unsigned int nexthostmarker(); | |
213 | unsigned int nextrealnamemarker(); | |
214 | unsigned int nextnickmarker(); | |
215 | ||
216 | #endif |