tried to reorder the program structure and build process
[NeonServV5.git] / src / BanNode.c
diff --git a/src/BanNode.c b/src/BanNode.c
new file mode 100644 (file)
index 0000000..c1601f1
--- /dev/null
@@ -0,0 +1,66 @@
+
+#include "BanNode.h"
+#include "ChanNode.h"
+#include "tools.h"
+
+struct BanNode* addChannelBan(struct ChanNode *chan, char *mask) {
+    struct BanNode *ban = malloc(sizeof(*ban));
+    ban->chan = chan;
+    ban->mask = strdup(mask);
+    ban->next = chan->bans;
+    chan->bans = ban;
+    return ban;
+}
+
+struct BanNode* getMatchingChannelBan(struct ChanNode *chan, char *mask) {
+    struct BanNode *cban;
+    for(cban = chan->bans; cban; cban = cban->next) {
+        if(!match(cban->mask, mask)) {
+            return cban;
+        }
+    }
+    return NULL;
+}
+
+void removeChannelBanMask(struct ChanNode *chan, char *mask) {
+    struct BanNode *cban, *last = NULL;
+    for(cban = chan->bans; cban; cban = cban->next) {
+        if(!strcmp(cban->mask, mask)) {
+            if(last)
+                last->next = cban->next;
+            else
+                chan->bans = cban->next;
+            free(cban->mask);
+            free(cban);
+            break;
+        } else 
+            last = cban;
+    }
+}
+
+void removeChannelBan(struct BanNode *ban) {
+    struct BanNode *cban, *last = NULL;
+    struct ChanNode *chan = ban->chan;
+    for(cban = chan->bans; cban; cban = cban->next) {
+        if(cban == ban) {
+            if(last)
+                last->next = ban->next;
+            else
+                chan->bans = ban->next;
+            free(ban->mask);
+            free(ban);
+            break;
+        } else 
+            last = cban;
+    }
+}
+
+void removeChannelBans(struct ChanNode *chan) {
+    struct BanNode *ban, *next;
+    for(ban = chan->bans; ban; ban = next) {
+        next = ban->next;
+        free(ban->mask);
+        free(ban);
+    }
+    chan->bans = NULL;
+}