request and parse channel banlist on join
[NeonServV5.git] / BanNode.c
1
2 #include "BanNode.h"
3 #include "ChanNode.h"
4
5 struct BanNode* addChannelBan(struct ChanNode *chan, char *mask) {
6     struct BanNode *ban = malloc(sizeof(*ban));
7     ban->chan = chan;
8     ban->mask = strdup(mask);
9     ban->next = chan->bans;
10     chan->bans = ban;
11     return ban;
12 }
13
14 struct BanNode* getMatchingChannelBan(struct ChanNode *chan, char *mask) {
15     struct BanNode *cban;
16     for(cban = chan->bans; cban; cban = cban->next) {
17         if(!match(cban->mask, mask)) {
18             return cban;
19         }
20     }
21     return NULL;
22 }
23
24 void removeChannelBanMask(struct ChanNode *chan, char *mask) {
25     struct BanNode *cban, *last = NULL;
26     for(cban = chan->bans; cban; cban = cban->next) {
27         if(!strcmp(cban->mask, mask)) {
28             if(last)
29                 last->next = cban->next;
30             else
31                 chan->bans = cban->next;
32             free(cban->mask);
33             free(cban);
34             break;
35         } else 
36             last = cban;
37     }
38 }
39
40 void removeChannelBan(struct BanNode *ban) {
41     struct BanNode *cban, *last = NULL;
42     struct ChanNode *chan = ban->chan;
43     for(cban = chan->bans; cban; cban = cban->next) {
44         if(cban == ban) {
45             if(last)
46                 last->next = ban->next;
47             else
48                 chan->bans = ban->next;
49             free(ban->mask);
50             free(ban);
51             break;
52         } else 
53             last = cban;
54     }
55 }
56
57 void removeChannelBans(struct ChanNode *chan) {
58     struct BanNode *ban, *next;
59     for(ban = chan->bans; ban; ban = next) {
60         next = ban->next;
61         free(ban->mask);
62         free(ban);
63     }
64     chan->bans = NULL;
65 }