src/common.hpp \
src/crypt_blowfish.cpp src/crypt_blowfish.hpp \
src/irc.cpp src/irc.hpp \
+ src/ircdata.hpp \
src/ircfmt.cpp src/ircfmt.hpp \
src/job.cpp src/job.hpp \
src/map.cpp src/map.hpp \
#ifndef ADMIN_H_
#define ADMIN_H_
#ifdef HAVE_LUA
+#include "ircdata.hpp"
void admin_init(void);
void admin_fini(void);
int admin_command(Client *client, char *source, char *command, int argc, char *args[]);
struct tls;
#endif
#include <uv.h>
-
-#include "map.hpp"
-
-#define MAX_NICKLEN 32
-#define MAX_CHANLEN 33
-#define MONITOR_LIMIT 100
-
-#define SETBIT(var, bit, val) ((void)((val) ? ((var)|=(bit)) : ((var)&=~(bit))))
-#define UMODE_INVISIBLE 1
-#define UMODE_OPER 2
-#define UMODE_REGISTERED 8
-#define UMODE_WALLOPS 16
-#define UMODE_SECURE 32
-#define UMODE_BOT 64
-#define REG_INIT 0
-#define REG_CAPLS 1
-#define REG_REGISTERED 2
-#define CAP_302 1
-#define CAP_MULTIPREFIX 2
-#define CAP_EXTENDEDJOIN 4
-#define CAP_AWAYNOTIFY 8
-#define CAP_INVITENOTIFY 16
-#define CAP_EXTENDEDMONITOR 32
-#define CAP_CHGHOST 64
-#define CAP_SETNAME 128
-#define CAP_ACCOUNTNOTIFY 256
-struct Client {
- char *key; // case-mapped nick
- uv_os_sock_t fd;
- struct tls *cctx;
- struct Client *next;
- char *nick;
- char *username;
- char *realname;
- char *hostname;
- char *nuh; // case-mapped nick!user@host
- char *away;
- char *nick_reg;
- char *pass_reg;
- char *peername;
- unsigned short peerport;
- char *saslbuf;
- size_t saslbufLen;
- char *saslusername;
- char *webircpeername;
- char *webirchostname;
- char rbuf[2048];
- size_t rlen;
- char wbuf[8192];
- size_t wlen;
- char umode;
- char regstate;
- channelmap channels;
- channelmap invites;
- stringset monitor;
- int cookie;
- time_t signon;
- time_t lastactivity;
- unsigned int caps;
- unsigned want_write_for_read :1;
- unsigned want_read_for_write :1;
- unsigned want_write_for_write :1;
- unsigned want_read_for_close :1;
- unsigned want_write_for_close :1;
- unsigned dying :1;
- unsigned write_error :1;
- unsigned poll_reg :2;
- unsigned saslexternal :1;
- unsigned passwait :1;
- unsigned webircwait :2;
-};
-struct Channel {
- char *key;
- char *name;
- char *topic;
- char *topic_who;
- time_t topic_when;
- time_t creation;
- clientmap members;
- clientmap o;
- clientmap v;
- int member_count;
- char dmode;
- stringset listb;
- stringset liste;
- stringset listI;
- stringset listq;
- stringset listwo;
- stringset listwv;
- clientmap invitees;
- char *chankey;
- int member_limit;
-};
-#define DMODE_PERSIST 1
-#define DMODE_INVITEONLY 2
-#define DMODE_MODERATED 4
-#define DMODE_NOEXTERNAL 8
-#define DMODE_SECRET 16
-#define DMODE_TOPICPROT 32
-#define is_chanop(chan, client) (!!(chan)->o.has((client)))
-#define is_chanvoice(chan, client) (!!(chan)->v.has((client)))
-extern clientmap client_map;
-extern channelmap channel_map;
-extern stringset autojoin;
-extern Client *clients;
-extern Client *dyingclients;
#endif
// SPDX-License-Identifier: GPL-2.0-or-later
#ifndef IRC_H_
#define IRC_H_
+#include "ircdata.hpp"
#include "net.hpp"
#include "util.hpp"
#define is_registered(cl) ((cl)->regstate == REG_REGISTERED)
--- /dev/null
+// Copyright (c) 2022 Sam Smith
+// Copyright (c) 2022-2025 Egor
+// SPDX-License-Identifier: GPL-2.0-or-later
+#ifndef IRCDATA_H_
+#define IRCDATA_H_
+#include "map.hpp"
+
+#define MAX_NICKLEN 32
+#define MAX_CHANLEN 33
+#define MONITOR_LIMIT 100
+
+#define SETBIT(var, bit, val) ((void)((val) ? ((var)|=(bit)) : ((var)&=~(bit))))
+#define UMODE_INVISIBLE 1
+#define UMODE_OPER 2
+#define UMODE_REGISTERED 8
+#define UMODE_WALLOPS 16
+#define UMODE_SECURE 32
+#define UMODE_BOT 64
+#define REG_INIT 0
+#define REG_CAPLS 1
+#define REG_REGISTERED 2
+#define CAP_302 1
+#define CAP_MULTIPREFIX 2
+#define CAP_EXTENDEDJOIN 4
+#define CAP_AWAYNOTIFY 8
+#define CAP_INVITENOTIFY 16
+#define CAP_EXTENDEDMONITOR 32
+#define CAP_CHGHOST 64
+#define CAP_SETNAME 128
+#define CAP_ACCOUNTNOTIFY 256
+struct Client {
+ char *key; // case-mapped nick
+ uv_os_sock_t fd;
+ struct tls *cctx;
+ struct Client *next;
+ char *nick;
+ char *username;
+ char *realname;
+ char *hostname;
+ char *nuh; // case-mapped nick!user@host
+ char *away;
+ char *nick_reg;
+ char *pass_reg;
+ char *peername;
+ unsigned short peerport;
+ char *saslbuf;
+ size_t saslbufLen;
+ char *saslusername;
+ char *webircpeername;
+ char *webirchostname;
+ char rbuf[2048];
+ size_t rlen;
+ char wbuf[8192];
+ size_t wlen;
+ char umode;
+ char regstate;
+ channelmap channels;
+ channelmap invites;
+ stringset monitor;
+ int cookie;
+ time_t signon;
+ time_t lastactivity;
+ unsigned int caps;
+ unsigned want_write_for_read :1;
+ unsigned want_read_for_write :1;
+ unsigned want_write_for_write :1;
+ unsigned want_read_for_close :1;
+ unsigned want_write_for_close :1;
+ unsigned dying :1;
+ unsigned write_error :1;
+ unsigned poll_reg :2;
+ unsigned saslexternal :1;
+ unsigned passwait :1;
+ unsigned webircwait :2;
+};
+struct Channel {
+ char *key;
+ char *name;
+ char *topic;
+ char *topic_who;
+ time_t topic_when;
+ time_t creation;
+ clientmap members;
+ clientmap o;
+ clientmap v;
+ int member_count;
+ char dmode;
+ stringset listb;
+ stringset liste;
+ stringset listI;
+ stringset listq;
+ stringset listwo;
+ stringset listwv;
+ clientmap invitees;
+ char *chankey;
+ int member_limit;
+};
+#define DMODE_PERSIST 1
+#define DMODE_INVITEONLY 2
+#define DMODE_MODERATED 4
+#define DMODE_NOEXTERNAL 8
+#define DMODE_SECRET 16
+#define DMODE_TOPICPROT 32
+#define is_chanop(chan, client) (!!(chan)->o.has((client)))
+#define is_chanvoice(chan, client) (!!(chan)->v.has((client)))
+extern clientmap client_map;
+extern channelmap channel_map;
+extern stringset autojoin;
+extern Client *clients;
+extern Client *dyingclients;
+#endif
// SPDX-License-Identifier: GPL-2.0-or-later
#ifndef JOB_H_
#define JOB_H_
+#include "ircdata.hpp"
typedef int (*jobproc_t)(Client *cl, const char *data, size_t len);
typedef void (*contproc_t)(Client *cl, int res);
void job_init(void);
// SPDX-License-Identifier: GPL-2.0-or-later
#include "common.hpp"
#include "map.hpp"
+#include "ircdata.hpp"
static int ent_find(map_base *root, const char *key, int *found)
{
auto it = std::partition_point(root->ptr, root->ptr + root->len,
// SPDX-License-Identifier: GPL-2.0-or-later
#ifndef NET_H_
#define NET_H_
+#include "ircdata.hpp"
void sendbuf(Client *client);
void sendbuf_visible(Client *client);
void update_poll_reg(Client *cl);