* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
- *
- * $Id: client.h 3446 2007-05-14 22:21:16Z jilles $
*/
#ifndef INCLUDED_client_h
#define INCLUDED_client_h
-#include "config.h"
-
-#if !defined(CONFIG_RATBOX_LEVEL_1)
-#error Incorrect config.h for this revision of ircd.
-#endif
+#include "defaults.h"
#include "ircd_defs.h"
#include "channel.h"
struct User;
struct Server;
struct LocalUser;
-struct AuthRequest;
struct PreClient;
struct ListClient;
struct scache_entry;
+struct ws_ctl;
/*
* Client structures
struct LocalUser
{
- rb_dlink_node tnode; /* This is the node for the local list type the client is on*/
+ rb_dlink_node tnode; /* This is the node for the local list type the client is on */
+ rb_dlink_list connids; /* This is the list of connids to free */
+
/*
* The following fields are allocated only for local clients
* (directly connected to *this* server with a socket.
/* Send and receive linebuf queues .. */
buf_head_t buf_sendq;
buf_head_t buf_recvq;
+
/*
* we want to use unsigned int here so the sizes have a better chance of
* staying the same on 64 bit machines. The current trend is to use
* performed on these, it's not safe to allow them to become negative,
* which is possible for long running server connections. Unsigned values
* generally overflow gracefully. --Bleep
+ *
+ * We have modern conveniences. Let's use uint32_t. --Elizafox
*/
- unsigned int sendM; /* Statistics: protocol messages send */
- unsigned int sendK; /* Statistics: total k-bytes send */
- unsigned int receiveM; /* Statistics: protocol messages received */
- unsigned int receiveK; /* Statistics: total k-bytes received */
- unsigned short sendB; /* counters to count upto 1-k lots of bytes */
- unsigned short receiveB; /* sent and received. */
+ uint32_t sendM; /* Statistics: protocol messages send */
+ uint32_t sendK; /* Statistics: total k-bytes send */
+ uint32_t receiveM; /* Statistics: protocol messages received */
+ uint32_t receiveK; /* Statistics: total k-bytes received */
+ uint16_t sendB; /* counters to count upto 1-k lots of bytes */
+ uint16_t receiveB; /* sent and received. */
struct Listener *listener; /* listener accepted from */
struct ConfItem *att_conf; /* attached conf */
struct server_conf *att_sconf;
time_t next_away; /* Don't allow next away before... */
time_t last;
- uint32_t connid;
/* clients allowed to talk through +g */
rb_dlink_list allow_list;
int sent_parsed; /* how many messages we've parsed in this second */
time_t last_knock; /* time of last knock */
unsigned long random_ping;
- struct AuthRequest *auth_request;
/* target change stuff */
/* targets we're aware of (fnv32(use_id(target_p))):
struct _ssl_ctl *ssl_ctl; /* which ssl daemon we're associate with */
struct _ssl_ctl *z_ctl; /* second ctl for ssl+zlib */
- uint32_t zconnid;
+ struct ws_ctl *ws_ctl; /* ctl for wsockd */
uint32_t localflags;
struct ZipStats *zipstats; /* zipstats */
uint16_t cork_count; /* used for corking/uncorking connections */
char spoofuser[USERLEN + 1];
char spoofhost[HOSTLEN + 1];
- rb_dlink_list dnsbl_queries; /* list of struct BlacklistClient * */
- struct Blacklist *dnsbl_listed; /* first dnsbl where it's listed */
+ uint32_t authd_cid; /* authd id */
+ time_t authd_timeout; /* When to terminate authd query */
+ bool authd_accepted; /* did authd accept us? */
+ char authd_cause; /* rejection cause */
+ char *authd_data; /* reason data */
+ char *authd_reason; /* reason we were rejected */
struct rb_sockaddr_storage lip; /* address of our side of the connection */
};
#define FLAGS_TGCHANGE 0x400000 /* we're allowed to clear something */
#define FLAGS_DYNSPOOF 0x800000 /* dynamic spoof, only opers see ip */
#define FLAGS_TGEXCESSIVE 0x1000000 /* whether the client has attemped to change targets excessively fast */
+#define FLAGS_CLICAP_DATA 0x2000000 /* requested CAP LS 302 */
/* flags for local clients, this needs stuff moved from above to here at some point */
#define LFLAGS_SSL 0x00000001
UMODE_WALLOP | UMODE_LOCOPS)
#define DEFAULT_OPER_SNOMASK SNO_GENERAL
-/* XXX make clicap a registry */
-#define CLICAP_MULTI_PREFIX 0x0001
-#define CLICAP_SASL 0x0002
-#define CLICAP_ACCOUNT_NOTIFY 0x0004
-#define CLICAP_EXTENDED_JOIN 0x0008
-#define CLICAP_AWAY_NOTIFY 0x0010
-#define CLICAP_TLS 0x0020
-#define CLICAP_USERHOST_IN_NAMES 0x0040
-#define CLICAP_CAP_NOTIFY 0x0080
-#define CLICAP_CHGHOST 0x0100
-#define CLICAP_ACCOUNT_TAG 0x0200
-
/*
* flags macros.
*/
extern void error_exit_client(struct Client *, int);
-
-
extern void count_local_client_memory(size_t * count, size_t * memory);
extern void count_remote_client_memory(size_t * count, size_t * memory);
extern int show_ip_conf(struct ConfItem *aconf, struct Client *source_p);
extern int show_ip_whowas(struct Whowas *whowas, struct Client *source_p);
-extern void initUser(void);
extern void free_user(struct User *, struct Client *);
extern struct User *make_user(struct Client *);
extern struct Server *make_server(struct Client *);
void allocate_away(struct Client *);
void free_away(struct Client *);
+uint32_t connid_get(struct Client *client_p);
+void connid_put(uint32_t id);
+void client_release_connids(struct Client *client_p);
+
#endif /* INCLUDED_client_h */