--- /dev/null
+
+#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;
+}