diff options
| author | Nakidai <nakidai@disroot.org> | 2026-01-06 04:01:24 +0300 |
|---|---|---|
| committer | Nakidai <nakidai@disroot.org> | 2026-01-06 04:01:24 +0300 |
| commit | 833c53b1ad3338677056445c32c490cac0a08875 (patch) | |
| tree | 24e60715c46ff89c26c5efc254e036b84aebcb13 /ircd.h | |
| parent | 78426afe18d9ce730a4d92033ca261f9b2f173a0 (diff) | |
| download | libreircd-833c53b1ad3338677056445c32c490cac0a08875.tar.gz libreircd-833c53b1ad3338677056445c32c490cac0a08875.zip | |
Add basic channels
Though they don't have modes, and JOIN/PART must be able to parse comma separated list of channels
Diffstat (limited to 'ircd.h')
| -rw-r--r-- | ircd.h | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/ircd.h b/ircd.h index 5e787da..8097c26 100644 --- a/ircd.h +++ b/ircd.h @@ -21,11 +21,16 @@ #define PARAM_MAX 15 -#define PEERS_MAX 512 + #define MESSAGE_MAX 512 +#define PEERS_MAX 512 +#define CHANNELS_MAX 512 +#define USERS_PER_CHANNEL 512 +#define MODES_MAX 512 #define BIT(x) x##_BIT, x = 1 << x##_BIT, x##_BIT_ = x##_BIT #define lengthof(X) (sizeof(X) / sizeof(*(X))) +#define ensure(cond, iffalse, doexit) if (!(cond)) { iffalse; if (doexit >= 0) return doexit; } struct Message { @@ -35,13 +40,16 @@ struct Message struct Peer { int fd; - enum ClientType { UNREGED, CLIENT, SERVER, SERVICE } type; + enum ClientType { UNREGD, CLIENT, SERVER, SERVICE } type; char nick[16], user[16], real[32], host[64]; - char **channels; - size_t channels_count; - char modes[52]; + struct Channel *channels[32]; + enum PeerStatus { + BIT(DELETE), + BIT(ANNOUNCE), + } flags; char buf[MESSAGE_MAX]; - size_t recvd; + size_t recvd, channels_c; + char modes[52]; }; struct Channel @@ -51,13 +59,16 @@ struct Channel struct { char mode; char param[MESSAGE_MAX - 1]; - } *modes; - size_t modes_count; + } modes[MODES_MAX]; + struct Peer *users[USERS_PER_CHANNEL]; + size_t modes_c, users_c; }; typedef int Handler(struct Message *msg, struct Peer *peer); +extern struct Channel channels[CHANNELS_MAX]; extern struct Peer peers[PEERS_MAX]; +extern size_t channels_c, peers_c; extern const char *hostname; extern const char *host; extern int port; @@ -65,10 +76,15 @@ extern int port; const char *getnick(const struct Peer *peer); void user_reg(struct Peer *peer, const char *nick, const char *user, const char *real); +int channel_join(struct Channel *channel, struct Peer *peer); +int channel_exit(struct Channel *channel, struct Peer *peer); + int parse_message(char *buf, struct Message *msg); int handle(struct Peer *peer); +int reply(const struct Peer *peer, int number, ...); Handler *find(const char *command); int writef(int fd, const char *fmt, ...); +int writechanf(const struct Peer *except, const struct Channel *channel, const char *fmt, ...); void ircd(void); #endif /* __IRCD_H__ */ |