diff options
| author | Nakidai <nakidai@disroot.org> | 2026-02-01 21:04:07 +0300 |
|---|---|---|
| committer | Nakidai <nakidai@disroot.org> | 2026-02-01 21:04:07 +0300 |
| commit | efd4526d3043f82bf349e76031c2607d8f45a64b (patch) | |
| tree | 27534793a86b00ff67c525dedcc00a673363d67b | |
| parent | a7298f097c6e899dfc4cd91468cd3256f024870a (diff) | |
| download | libreircd-efd4526d3043f82bf349e76031c2607d8f45a64b.tar.gz libreircd-efd4526d3043f82bf349e76031c2607d8f45a64b.zip | |
Enhance registration messages
Now ircd responds with all replies up to 4 Plus memchr was wrong, yep
| -rw-r--r-- | config.h | 3 | ||||
| -rw-r--r-- | peer.c | 4 | ||||
| -rw-r--r-- | reply.c | 19 | ||||
| -rw-r--r-- | user.c | 4 |
4 files changed, 26 insertions, 4 deletions
diff --git a/config.h b/config.h index cf86c7d..f960b08 100644 --- a/config.h +++ b/config.h @@ -1,3 +1,6 @@ +#define CREATION_DATE "Thu Jan 1 1970 at 00:00:00 UTC" +#define IRCD_VERSION "0.1.0" + #define PARAM_MAX 15 #define MESSAGE_MAX 512 diff --git a/peer.c b/peer.c index 13d0f2a..e737f82 100644 --- a/peer.c +++ b/peer.c @@ -47,8 +47,8 @@ handle(struct Peer *peer) } *p = 0; - if (memchr(peer->buf, '\n', sizeof(peer->buf)) - || memchr(peer->buf, '\r', sizeof(peer->buf)) + if (strchr(peer->buf, '\n') + || strchr(peer->buf, '\r') || parse_message(peer->buf, &msg)) { warnx("malformed input from %d", peer->fd); diff --git a/reply.c b/reply.c index c8d526b..2cd8c04 100644 --- a/reply.c +++ b/reply.c @@ -67,13 +67,30 @@ vreply(const struct Peer *peer, int number, va_list ap) { #define WRITE(...) writef(peer->fd, __VA_ARGS__) REPLY(1, WRITE( - ":%s 001 %s Welcome to the Internet Relay Network %s!%s@%s", + ":%s 001 %s :Welcome to the Internet Relay Network %s!%s@%s", hostname, getnick(peer), getnick(peer), peer->user, peer->host ), _); + REPLY(2, WRITE( + ":%s 002 %s :Your host is %s, running version " IRCD_VERSION, + hostname, + getnick(peer), + hostname + ), _); + REPLY(3, WRITE( + ":%s 003 %s :This server was created " CREATION_DATE, + hostname, + getnick(peer) + ), _); + REPLY(4, WRITE( + ":%s 004 %s :%s libreircd-" IRCD_VERSION " aiwroOs :", + hostname, + getnick(peer), + hostname + ), _); REPLY(221, WRITE( ":%s 221 %s +%s%s%s%s%s%s%s", hostname, diff --git a/user.c b/user.c index ba88beb..719c60e 100644 --- a/user.c +++ b/user.c @@ -51,6 +51,7 @@ user_reg(struct Peer *peer, const char *nick, const char *user, const char *real { int was_registered; unsigned long m; + size_t i; /* c language is stupid shit: declaring p correctly (as const char *, as mode points * to a const char) causes a warning, so to silence it p should be char * */ char *p; @@ -79,7 +80,8 @@ skip: if (!was_registered && *peer->nick && *peer->user && *peer->real) { peer->type = CLIENT; - reply(peer, 1); + for (i = 1; i < 5; ++i) + reply(peer, i); } } |