ref: a80ed8b66a6fe7445c83907cbfdc82a397d29c52
parent: b7b579414649750ca39b3ba85bb17dc32bdfb6da
author: sirjofri <sirjofri@sirjofri.de>
date: Mon Jul 21 18:27:38 EDT 2025
implements ll for client handling
--- a/client.c
+++ b/client.c
@@ -3,11 +3,10 @@
#include <String.h>
#include "dat.h"
#include "fns.h"
+#include "ll.h"
-// TODO: generalize doubly linked list, or use other structure
+static Linked *clients = nil;
-static Client *first = nil;
-
Client*
addclient(ulong fid)
{
@@ -16,50 +15,51 @@
n->fid = fid;
n->replies.reply = s_new();
- if (!first) {
- first = n;
- return n;
- }
- n->next = first;
- first->prev = n;
- first = n;
+ ladd(&clients, n);
return n;
}
-void
-delclient(Client *c)
+static void
+freeclient(void *ptr)
{
String *s;
- if (!c->prev) {
- first = c->next;
- if (c->next)
- c->next->prev = nil;
- } else {
- c->prev->next = c->next;
- if (c->next)
- c->next->prev = c->prev;
- }
+ Client *c = ptr;
s = c->replies.reply;
s_free(s);
free(c);
}
+void
+delclient(Client *c)
+{
+ ldel(&clients, c, freeclient);
+}
+
+static int
+findbyfid(void *ptr, void *aux)
+{
+ ulong *fid = aux;
+ Client *c = ptr;
+ return *fid == c->fid;
+}
+
Client*
findclient(ulong fid)
{
- for (Client *c = first; c; c = c->next) {
- if (fid == c->fid)
- return c;
- }
- return nil;
+ Client *c = lfind(&clients, findbyfid, &fid);
+ return c;
}
+static int
+findbynick(void *ptr, void *aux)
+{
+ char *nick = aux;
+ Client *c = ptr;
+ return c->nick && strcmp(c->nick, nick) == 0;
+}
+
Client*
findnick(char *nick)
{
- for (Client *c = first; c; c = c->next) {
- if (c->nick && strcmp(c->nick, nick) == 0)
- return c;
- }
- return nil;
+ return lfind(&clients, findbynick, nick);
}
--- a/ircd.c
+++ b/ircd.c
@@ -105,6 +105,10 @@
}
cl = getclient(r);
+ if (!cl) {
+ respond(r, "client not found!");
+ return;
+ }
if (r->ifcall.count > 512) {
respond(r, "too many bytes");
return;
--- a/reply.c
+++ b/reply.c
@@ -35,5 +35,8 @@
va_end(arg);
snprint(&buf[i], sizeof(buf) - i, "\r\n");
+
+ if (debug > 1)
+ fprint(2, "reply: '%s'\n", buf);
s_append(s, buf);
}
--
⑨