tried to reorder the program structure and build process
[NeonServV5.git] / ChanNode.c
diff --git a/ChanNode.c b/ChanNode.c
deleted file mode 100644 (file)
index 73adbf6..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-#include "ChanNode.h"
-#include "ChanUser.h"
-#include "UserNode.h"
-#include "BanNode.h"
-#include "modcmd.h"
-#include "ModeNode.h"
-
-static struct ChanNode **chanList;
-
-void init_ChanNode() {
-    /*
-     len pos chars 
-     26  0   a-z
-     10  26  0-9
-     10  36  {|}~[\]^_`
-     1   46  *everything else*
-     ---------------------------
-     = 47
-    */
-    #define CHANNEL_LIST_SIZE 47
-    chanList = calloc(CHANNEL_LIST_SIZE, sizeof(*chanList));
-}
-
-void free_ChanNode() {
-    //kamikaze free all channels and chanusers
-    int i;
-    struct ChanNode *chan, *next;
-    struct ChanUser *chanuser, *next_chanuser;
-    for(i = 0; i < CHANNEL_LIST_SIZE; i++) {
-        for(chan = chanList[i]; chan; chan = next) {
-            next = chan->next;
-            for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = next_chanuser) {
-                next_chanuser = getChannelUsers(chan, chanuser);
-                free(chanuser);
-            }
-            freeChanNode(chan);
-        }
-    }
-    free(chanList);
-}
-
-int is_valid_chan(const char *name) {
-    unsigned int ii;
-    if (*name !='#')
-        return 0;
-    for (ii=1; name[ii]; ++ii) {
-        if ((name[ii] > 0) && (name[ii] <= 32))
-            return 0;
-        if (name[ii] == ',')
-            return 0;
-        if (name[ii] == '\xa0')
-            return 0;
-    }
-    return 1;
-}
-
-static int get_chanlist_entry(int name) {
-    if((name > 0 && name <= 32) || name == ',' || name == '\xa0') return -1; //invalid name
-    if(tolower(name) >= 97 && tolower(name) <= 122) {
-        return (tolower(name) - 97);
-    }
-    if(tolower(name) >= 48 && tolower(name) <= 57) {
-        return (tolower(name) - 48 + 26);
-    }
-    /* {|}~[\]^_` */
-    if(name == '{') return 36;
-    if(name == '|') return 37;
-    if(name == '}') return 38;
-    if(name == '~') return 39;
-    if(name == '[') return 40;
-    if(name == '\\') return 41;
-    if(name == ']') return 42;
-    if(name == '^') return 43;
-    if(name == '_') return 44;
-    if(name == '`') return 45;
-    return 46;
-}
-
-struct ChanNode* getChanByName(const char *name) { //case insensitive
-    int chanListIndex = get_chanlist_entry(name[1]);
-    if(chanListIndex == -1 || chanList[chanListIndex] == NULL)
-        return NULL;
-    struct ChanNode *chan;
-    for(chan = chanList[chanListIndex]; chan; chan = chan->next) {
-        if(!stricmp(name, chan->name))
-            return chan;
-    }
-    return NULL;
-}
-
-struct ChanNode* addChannel(const char *name) {
-    int chanListIndex = get_chanlist_entry(name[1]);
-    if(chanListIndex == -1 || !is_valid_chan(name))
-        return NULL;
-    struct ChanNode *chan = malloc(sizeof(*chan));
-    if (!chan)
-    {
-        perror("malloc() failed");
-        return NULL;
-    }
-    strcpy(chan->name, name);
-    chan->user = NULL;
-    chan->bans = NULL;
-    chan->usercount = 0;
-    chan->chanbot = NULL;
-    chan->topic[0] = 0;
-    chan->flags = 0;
-    /* mode lists */
-    chan->modes = createModeNode(chan);
-    chan->trigger = NULL;
-    
-    chan->next = chanList[chanListIndex];
-    chanList[chanListIndex] = chan;
-    return chan;
-}
-
-int getChannelCount() {
-    int i, count = 0;
-    struct ChanNode *chan;
-    for(i = 0; i < CHANNEL_LIST_SIZE; i++) {
-        for(chan = chanList[i]; chan; chan = chan->next) {
-            count++;
-        }
-    }
-    return count;
-}
-
-int getChanUserCount() {
-    int i, count = 0;
-    struct ChanNode *chan;
-    for(i = 0; i < CHANNEL_LIST_SIZE; i++) {
-        for(chan = chanList[i]; chan; chan = chan->next) {
-            count += chan->usercount;
-        }
-    }
-    return count;
-}
-
-int getChanBanCount() {
-    int i, count = 0;
-    struct ChanNode *chan;
-    struct BanNode *ban;
-    for(i = 0; i < CHANNEL_LIST_SIZE; i++) {
-        for(chan = chanList[i]; chan; chan = chan->next) {
-            for(ban = chan->bans; ban; ban = ban->next)
-                count ++;
-        }
-    }
-    return count;
-}
-
-void delChannel(struct ChanNode* chan, int freeChan) {
-    int chanListIndex = get_chanlist_entry(chan->name[1]);
-    if(chanListIndex == -1) return;
-    struct ChanNode *cchan, *last_chan = NULL;
-    for(cchan = chanList[chanListIndex]; cchan; cchan = cchan->next) {
-        if(cchan == chan) {
-            if(last_chan)
-                last_chan->next = chan->next;
-            else
-                chanList[chanListIndex] = chan->next;
-            break;
-        } else
-            last_chan = cchan;
-    }
-    if(chan->user) {
-        //free all chanusers
-        struct ChanUser *chanuser, *next;
-        for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = next) {
-            next = getChannelUsers(chan, chanuser);
-            removeChanUserFromLists(chanuser, 0, 1, 1);
-        }
-    }
-    if(freeChan)
-        freeChanNode(chan);
-    else
-        chan->next = NULL;
-}
-
-void freeChanNode(struct ChanNode* chan) {
-    if(chan->trigger) {
-        struct trigger_cache *trigger, *next_trigger;
-        for(trigger = chan->trigger; trigger; trigger = next_trigger) {
-            next_trigger = trigger->next;
-            free(trigger->trigger);
-            free(trigger);
-        }
-    }
-    freeModeNode(chan->modes);
-    if(chan->bans)
-        removeChannelBans(chan);
-    free(chan);
-}
-
-void checkChannelVisibility(struct ChanNode* chan) {
-    struct ChanUser *chanuser, *next;
-    for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = getChannelUsers(chan, chanuser)) {
-        if(chanuser->user->flags & USERFLAG_ISBOT) {
-            chan->chanbot = chanuser->user;
-            return;
-        }
-    }
-    //free the channel...
-    for(chanuser = getChannelUsers(chan, NULL); chanuser; chanuser = next) {
-        next = getChannelUsers(chan, chanuser);
-        //remove the channel from the user's channel-list
-        removeChanUserFromLists(chanuser, 0, 1, 0);
-        if(!chanuser->user->channel) {
-            //free the user (no more channels)
-            delUser(chanuser->user, 1);
-        }
-        free(chanuser);
-    }
-    chan->user = NULL;
-    delChannel(chan, 1);
-}