| 156 |
|
* gcos field in /etc/passwd but anything can go here. |
| 157 |
|
*/ |
| 158 |
|
char info[REALLEN + 1]; /* Free form additional client info */ |
| 159 |
+ |
char client_host[HOSTLEN + 1]; |
| 160 |
+ |
char client_server[HOSTLEN + 1]; |
| 161 |
|
|
| 162 |
|
/* client->sockhost contains the ip address gotten from the socket as a |
| 163 |
|
* string, this field should be considered read-only once the connection |
| 173 |
|
dlink_list on_allow_list; /* clients that have =me= on their allow list*/ |
| 174 |
|
|
| 175 |
|
dlink_list channel; /* chain of channel pointer blocks */ |
| 174 |
– |
dlink_list invited; /* chain of invite pointer blocks */ |
| 176 |
|
|
| 177 |
|
struct LocalUser *localClient; |
| 178 |
|
}; |
| 183 |
|
* The following fields are allocated only for local clients |
| 184 |
|
* (directly connected to *this* server with a socket. |
| 185 |
|
*/ |
| 186 |
+ |
unsigned int registration; |
| 187 |
+ |
unsigned int cap_client; /* Client capabilities (from us) */ |
| 188 |
+ |
unsigned int cap_active; /* Active capabilities (to us) */ |
| 189 |
+ |
|
| 190 |
|
/* Anti flooding part, all because of lamers... */ |
| 191 |
|
time_t last_away; /* Away since... */ |
| 192 |
|
time_t last_join_time; /* when this client last |
| 218 |
|
} recv, send; |
| 219 |
|
|
| 220 |
|
struct Listener *listener; /* listener accepted from */ |
| 221 |
< |
dlink_list confs; /* Configuration record associated */ |
| 222 |
< |
|
| 221 |
> |
dlink_list confs; /* Configuration record associated */ |
| 222 |
> |
dlink_list invited; /* chain of invite pointer blocks */ |
| 223 |
|
struct irc_ssaddr ip; |
| 219 |
– |
unsigned short port; /* and the remote port# too :-) */ |
| 224 |
|
int aftype; /* Makes life easier for DNS res in IPV6 */ |
| 225 |
< |
struct DNSQuery *dns_query; /* result returned from resolver query */ |
| 225 |
> |
struct DNSQuery *dns_query; /* result returned from resolver query */ |
| 226 |
|
unsigned long serverMask; /* Only used for Lazy Links */ |
| 227 |
|
time_t last; /* Last time we got a PRIVMSG */ |
| 228 |
|
time_t last_nick_change; |
| 275 |
|
#define STAT_SERVER 0x10 |
| 276 |
|
#define STAT_CLIENT 0x20 |
| 277 |
|
|
| 278 |
+ |
#define REG_NEED_USER 0x1 |
| 279 |
+ |
#define REG_NEED_NICK 0x2 |
| 280 |
+ |
#define REG_NEED_CAP 0x4 |
| 281 |
+ |
#define REG_INIT (REG_NEED_USER|REG_NEED_NICK) |
| 282 |
+ |
|
| 283 |
|
#define HasID(x) ((x)->id[0] != '\0') |
| 284 |
|
#define ID(x) (HasID(x) ? (x)->id : (x)->name) |
| 285 |
|
#define ID_or_name(x,client_p) ((IsCapable(client_p, CAP_TS6) && HasID(x)) ? (x)->id : (x)->name) |
| 330 |
|
#define DoesTS(x) ((x)->tsinfo == TS_DOESTS) |
| 331 |
|
|
| 332 |
|
|
| 333 |
+ |
|
| 334 |
+ |
#define CAP_MULTI_PREFIX 0x00000001 |
| 335 |
+ |
|
| 336 |
|
/* housekeeping flags */ |
| 337 |
< |
#define FLAGS_PINGSENT 0x00000001 /* Unreplied ping sent */ |
| 338 |
< |
#define FLAGS_DEADSOCKET 0x00000002 /* Local socket is dead--Exiting soon */ |
| 339 |
< |
#define FLAGS_KILLED 0x00000004 /* Prevents "QUIT" from being sent for this */ |
| 340 |
< |
#define FLAGS_CLOSING 0x00000008 /* set when closing to suppress errors */ |
| 341 |
< |
#define FLAGS_GOTID 0x00000010 /* successful ident lookup achieved */ |
| 342 |
< |
#define FLAGS_NEEDID 0x00000020 /* I-lines say must use ident return */ |
| 343 |
< |
#define FLAGS_SENDQEX 0x00000040 /* Sendq exceeded */ |
| 344 |
< |
#define FLAGS_IPHASH 0x00000080 /* iphashed this client */ |
| 345 |
< |
#define FLAGS_CRYPTIN 0x00000100 /* incoming data must be decrypted */ |
| 346 |
< |
#define FLAGS_CRYPTOUT 0x00000200 /* outgoing data must be encrypted */ |
| 347 |
< |
#define FLAGS_WAITAUTH 0x00000400 /* waiting for CRYPTLINK AUTH command */ |
| 348 |
< |
#define FLAGS_SERVLINK 0x00000800 /* servlink has servlink process */ |
| 349 |
< |
#define FLAGS_MARK 0x00001000 /* marked client */ |
| 350 |
< |
#define FLAGS_CANFLOOD 0x00002000 /* client has the ability to flood */ |
| 351 |
< |
#define FLAGS_EXEMPTGLINE 0x00004000 /* client can't be G-lined */ |
| 352 |
< |
#define FLAGS_EXEMPTKLINE 0x00008000 /* client is exempt from kline */ |
| 353 |
< |
#define FLAGS_NOLIMIT 0x00010000 /* client is exempt from limits */ |
| 354 |
< |
#define FLAGS_RESTRICTED 0x00020000 /* client cannot op others */ |
| 355 |
< |
#define FLAGS_PING_COOKIE 0x00040000 /* PING Cookie */ |
| 356 |
< |
#define FLAGS_IDLE_LINED 0x00080000 /* client is exempt from idle-time limits */ |
| 357 |
< |
#define FLAGS_IP_SPOOFING 0x00100000 /* client IP is spoofed */ |
| 358 |
< |
#define FLAGS_FLOODDONE 0x00200000 /* Flood grace period has been ended. */ |
| 359 |
< |
#define FLAGS_EOB 0x00400000 /* server has received EOB */ |
| 360 |
< |
#define FLAGS_HIDDEN 0x00800000 /* a hidden server. not shown in /links */ |
| 361 |
< |
#define FLAGS_BLOCKED 0x01000000 /* must wait for COMM_SELECT_WRITE */ |
| 362 |
< |
#define FLAGS_SBLOCKED 0x02000000 /* slinkq is blocked */ |
| 363 |
< |
#define FLAGS_USERHOST 0x04000000 /* client is in userhost hash */ |
| 364 |
< |
#define FLAGS_BURSTED 0x08000000 /* user was already bursted */ |
| 365 |
< |
#define FLAGS_EXEMPTRESV 0x10000000 /* client is exempt from RESV */ |
| 366 |
< |
#define FLAGS_GOTUSER 0x20000000 /* if we received a USER command */ |
| 367 |
< |
#define FLAGS_PINGWARNING 0x40000000 /* unreplied ping warning already sent */ |
| 368 |
< |
/* 0x80000000 */ |
| 337 |
> |
#define FLAGS_PINGSENT 0x00000001 /* Unreplied ping sent */ |
| 338 |
> |
#define FLAGS_DEADSOCKET 0x00000002 /* Local socket is dead--Exiting soon */ |
| 339 |
> |
#define FLAGS_KILLED 0x00000004 /* Prevents "QUIT" from being sent for this */ |
| 340 |
> |
#define FLAGS_CLOSING 0x00000008 /* set when closing to suppress errors */ |
| 341 |
> |
#define FLAGS_GOTID 0x00000010 /* successful ident lookup achieved */ |
| 342 |
> |
#define FLAGS_NEEDID 0x00000020 /* I-lines say must use ident return */ |
| 343 |
> |
#define FLAGS_SENDQEX 0x00000040 /* Sendq exceeded */ |
| 344 |
> |
#define FLAGS_IPHASH 0x00000080 /* iphashed this client */ |
| 345 |
> |
#define FLAGS_CRYPTIN 0x00000100 /* incoming data must be decrypted */ |
| 346 |
> |
#define FLAGS_CRYPTOUT 0x00000200 /* outgoing data must be encrypted */ |
| 347 |
> |
#define FLAGS_WAITAUTH 0x00000400 /* waiting for CRYPTLINK AUTH command */ |
| 348 |
> |
#define FLAGS_SERVLINK 0x00000800 /* servlink has servlink process */ |
| 349 |
> |
#define FLAGS_MARK 0x00001000 /* marked client */ |
| 350 |
> |
#define FLAGS_CANFLOOD 0x00002000 /* client has the ability to flood */ |
| 351 |
> |
#define FLAGS_EXEMPTGLINE 0x00004000 /* client can't be G-lined */ |
| 352 |
> |
#define FLAGS_EXEMPTKLINE 0x00008000 /* client is exempt from kline */ |
| 353 |
> |
#define FLAGS_NOLIMIT 0x00010000 /* client is exempt from limits */ |
| 354 |
> |
#define FLAGS_RESTRICTED 0x00020000 /* client cannot op others */ |
| 355 |
> |
#define FLAGS_PING_COOKIE 0x00040000 /* PING Cookie */ |
| 356 |
> |
#define FLAGS_IDLE_LINED 0x00080000 /* client is exempt from idle-time limits */ |
| 357 |
> |
#define FLAGS_IP_SPOOFING 0x00100000 /* client IP is spoofed */ |
| 358 |
> |
#define FLAGS_FLOODDONE 0x00200000 /* Flood grace period has been ended. */ |
| 359 |
> |
#define FLAGS_EOB 0x00400000 /* server has received EOB */ |
| 360 |
> |
#define FLAGS_HIDDEN 0x00800000 /* a hidden server. not shown in /links */ |
| 361 |
> |
#define FLAGS_BLOCKED 0x01000000 /* must wait for COMM_SELECT_WRITE */ |
| 362 |
> |
#define FLAGS_SBLOCKED 0x02000000 /* slinkq is blocked */ |
| 363 |
> |
#define FLAGS_USERHOST 0x04000000 /* client is in userhost hash */ |
| 364 |
> |
#define FLAGS_BURSTED 0x08000000 /* user was already bursted */ |
| 365 |
> |
#define FLAGS_EXEMPTRESV 0x10000000 /* client is exempt from RESV */ |
| 366 |
> |
#define FLAGS_GOTUSER 0x20000000 /* if we received a USER command */ |
| 367 |
> |
#define FLAGS_PINGWARNING 0x40000000 /* unreplied ping warning already sent */ |
| 368 |
> |
#define FLAGS_FINISHED_AUTH 0x80000000 /* Client has been released from auth */ |
| 369 |
|
|
| 370 |
|
|
| 371 |
|
/* umodes, settable flags */ |
| 372 |
< |
#define UMODE_SERVNOTICE 0x00001 /* server notices such as kill */ |
| 373 |
< |
#define UMODE_CCONN 0x00002 /* Client Connections */ |
| 374 |
< |
#define UMODE_REJ 0x00004 /* Bot Rejections */ |
| 375 |
< |
#define UMODE_SKILL 0x00008 /* Server Killed */ |
| 376 |
< |
#define UMODE_FULL 0x00010 /* Full messages */ |
| 377 |
< |
#define UMODE_SPY 0x00020 /* see STATS / LINKS */ |
| 378 |
< |
#define UMODE_DEBUG 0x00040 /* 'debugging' info */ |
| 379 |
< |
#define UMODE_NCHANGE 0x00080 /* Nick change notice */ |
| 380 |
< |
#define UMODE_WALLOP 0x00100 /* send wallops to them */ |
| 381 |
< |
#define UMODE_OPERWALL 0x00200 /* Operwalls */ |
| 382 |
< |
#define UMODE_INVISIBLE 0x00400 /* makes user invisible */ |
| 383 |
< |
#define UMODE_BOTS 0x00800 /* shows bots */ |
| 384 |
< |
#define UMODE_EXTERNAL 0x01000 /* show servers introduced and splitting */ |
| 385 |
< |
#define UMODE_CALLERID 0x02000 /* block unless caller id's */ |
| 386 |
< |
#define UMODE_SOFTCALLERID 0x04000 /* block unless on common channel */ |
| 387 |
< |
#define UMODE_UNAUTH 0x08000 /* show unauth connects here */ |
| 388 |
< |
#define UMODE_LOCOPS 0x10000 /* show locops */ |
| 389 |
< |
#define UMODE_DEAF 0x20000 /* don't receive channel messages */ |
| 372 |
> |
#define UMODE_SERVNOTICE 0x00000001 /* server notices such as kill */ |
| 373 |
> |
#define UMODE_CCONN 0x00000002 /* Client Connections */ |
| 374 |
> |
#define UMODE_REJ 0x00000004 /* Bot Rejections */ |
| 375 |
> |
#define UMODE_SKILL 0x00000008 /* Server Killed */ |
| 376 |
> |
#define UMODE_FULL 0x00000010 /* Full messages */ |
| 377 |
> |
#define UMODE_SPY 0x00000020 /* see STATS / LINKS */ |
| 378 |
> |
#define UMODE_DEBUG 0x00000040 /* 'debugging' info */ |
| 379 |
> |
#define UMODE_NCHANGE 0x00000080 /* Nick change notice */ |
| 380 |
> |
#define UMODE_WALLOP 0x00000100 /* send wallops to them */ |
| 381 |
> |
#define UMODE_OPERWALL 0x00000200 /* Operwalls */ |
| 382 |
> |
#define UMODE_INVISIBLE 0x00000400 /* makes user invisible */ |
| 383 |
> |
#define UMODE_BOTS 0x00000800 /* shows bots */ |
| 384 |
> |
#define UMODE_EXTERNAL 0x00001000 /* show servers introduced and splitting */ |
| 385 |
> |
#define UMODE_CALLERID 0x00002000 /* block unless caller id's */ |
| 386 |
> |
#define UMODE_SOFTCALLERID 0x00004000 /* block unless on common channel */ |
| 387 |
> |
#define UMODE_UNAUTH 0x00008000 /* show unauth connects here */ |
| 388 |
> |
#define UMODE_LOCOPS 0x00010000 /* show locops */ |
| 389 |
> |
#define UMODE_DEAF 0x00020000 /* don't receive channel messages */ |
| 390 |
> |
#define UMODE_CCONN_FULL 0x00040000 /* add unused fields to connection monitoring */ |
| 391 |
|
|
| 392 |
|
/* user information flags, only settable by remote mode or local oper */ |
| 393 |
< |
#define UMODE_OPER 0x40000 /* Operator */ |
| 394 |
< |
#define UMODE_ADMIN 0x80000 /* Admin on server */ |
| 393 |
> |
#define UMODE_OPER 0x40000000 /* Operator */ |
| 394 |
> |
#define UMODE_ADMIN 0x80000000 /* Admin on server */ |
| 395 |
> |
|
| 396 |
|
#define UMODE_ALL UMODE_SERVNOTICE |
| 397 |
|
|
| 398 |
|
#define SEND_UMODES (UMODE_INVISIBLE | UMODE_OPER | UMODE_WALLOP | \ |
| 420 |
|
|
| 421 |
|
|
| 422 |
|
/* flags macros. */ |
| 423 |
+ |
#define IsAuthFinished(x) ((x)->flags & FLAGS_FINISHED_AUTH) |
| 424 |
|
#define IsDead(x) ((x)->flags & FLAGS_DEADSOCKET) |
| 425 |
|
#define SetDead(x) ((x)->flags |= FLAGS_DEADSOCKET) |
| 426 |
|
#define IsClosing(x) ((x)->flags & FLAGS_CLOSING) |
| 465 |
|
(UMODE_CALLERID|UMODE_SOFTCALLERID)) |
| 466 |
|
#define IsSoftCallerId(x) ((x)->umodes & UMODE_SOFTCALLERID) |
| 467 |
|
#define IsDeaf(x) ((x)->umodes & UMODE_DEAF) |
| 468 |
+ |
#define IsFull(x) ((x)->umodes & UMODE_CCONN_FULL) |
| 469 |
|
|
| 470 |
|
#define SetSendQExceeded(x) ((x)->flags |= FLAGS_SENDQEX) |
| 471 |
|
#define IsSendQExceeded(x) ((x)->flags & FLAGS_SENDQEX) |