tried to reorder the program structure and build process
[NeonServV5.git] / UserNode.c
diff --git a/UserNode.c b/UserNode.c
deleted file mode 100644 (file)
index 2ced2eb..0000000
+++ /dev/null
@@ -1,331 +0,0 @@
-#include "UserNode.h"
-#include "ChanUser.h"
-#include "tools.h"
-
-static struct UserNode **userList;
-
-void init_UserNode() {
-    userList = calloc(VALID_NICK_CHARS_FIRST_LEN+1, sizeof(*userList));
-}
-
-void free_UserNode() {
-    //kamikaze free all users
-    //chanusers will be destroyed in free_ChanNode()
-    int i;
-    struct UserNode *user, *next;
-    for(i = 0; i < VALID_NICK_CHARS_FIRST_LEN+1; i++) {
-        for(user = userList[i]; user; user = next) {
-            next = user->next;
-            free(user);
-        }
-    }
-    free(userList);
-}
-
-int is_valid_nick(const char *nick) {
-    unsigned int i;
-    //first char must be one of: a-zA-Z{|}~[\]^_`
-    if (!strchr(VALID_NICK_CHARS_FIRST, *nick))
-        return 0;
-    //all other chars must be one of: a-zA-Z0-9{|}~[\]^_`
-    for (i = 0; nick[i]; ++i)
-        if (!strchr(VALID_NICK_CHARS, nick[i]))
-            return 0;
-    if (strlen(nick) > NICKLEN)
-        return 0;
-    return 1;
-}
-
-static int get_nicklist_entry(int nick) {
-    int i;
-    char *valid_chars = VALID_NICK_CHARS_FIRST;
-    for(i = 0; i < VALID_NICK_CHARS_FIRST_LEN; i++) {
-        if(valid_chars[i] == nick)
-            return i;
-    }
-    return -1; //ERROR!
-}
-
-struct UserNode* getUserByNick(const char *nick) { //case sensitive
-    int userListIndex = get_nicklist_entry(*nick);
-    if(userListIndex == -1 || userList[userListIndex] == NULL)
-        return NULL;
-    struct UserNode *user;
-    for(user = userList[userListIndex]; user; user = user->next) {
-        if(!stricmp(nick, user->nick))
-            return user;
-    }
-    return NULL;
-}
-
-struct UserNode* getUserByMask(const char *mask) { //case sensitive
-    char cmask[strlen(mask)+1];
-    strcpy(cmask, mask);
-    int i;
-    struct UserNode *user = NULL;
-    for(i = 0; i < strlen(mask); i++) {
-        if(cmask[i] == '!') {
-            cmask[i] = 0;
-            user = getUserByNick(&cmask[0]);
-            return user;
-        } else if(cmask[i] == '.') {
-            //it's a server
-            return NULL;
-        }
-    }
-    return NULL;
-}
-
-struct UserNode* searchUserByNick(const char *nick) { //case insensitive
-    if(!isalpha(*nick)) 
-        return getUserByNick(nick);
-
-    int userListIndex;
-    struct UserNode *user;
-
-    //search in the lower case "section"
-    userListIndex = get_nicklist_entry(tolower(*nick));
-    if(userListIndex != -1 && userList[userListIndex] != NULL) {
-        for(user = userList[userListIndex]; user; user = user->next) {
-            if(!stricmp(nick, user->nick))
-                return user;
-        }
-    }
-    //search in the upper case "section"
-    userListIndex = get_nicklist_entry(toupper(*nick));
-    if(userListIndex != -1 && userList[userListIndex] != NULL) {
-        for(user = userList[userListIndex]; user; user = user->next) {
-            if(!stricmp(nick, user->nick))
-                return user;
-        }
-    }
-    return NULL;
-}
-
-int countUsersWithHost(char *host) {
-    int i, count = 0;
-    struct UserNode *user;
-    for(i = 0; i < VALID_NICK_CHARS_FIRST_LEN+1; i++) {
-        for(user = userList[i]; user; user = user->next) {
-            if(!strcmp(user->host, host)) {
-                count++;
-            }
-        }
-    }
-    return count;
-}
-
-char *getAuthFakehost(char *auth) {
-    int i;
-    struct UserNode *user;
-    for(i = 0; i < VALID_NICK_CHARS_FIRST_LEN+1; i++) {
-        for(user = userList[i]; user; user = user->next) {
-            if((user->flags & USERFLAG_ISAUTHED) && !strcmp(user->auth, auth) && isFakeHost(user->host)) {
-                return user->host;
-            }
-        }
-    }
-    return NULL;
-}
-
-struct UserNode* getAllUsers(struct UserNode *last) {
-    if(last == NULL || last->next == NULL) {
-        int cindex;
-        if(last == NULL)
-            cindex = 0;
-        else
-            cindex = get_nicklist_entry(last->nick[0]) + 1;
-        while(userList[cindex] == NULL && cindex <= VALID_NICK_CHARS_FIRST_LEN)
-            cindex++;
-        if(cindex > VALID_NICK_CHARS_FIRST_LEN) return NULL;
-        return userList[cindex];
-    } else
-        return last->next;
-}
-
-int getUserCount() {
-    int i, count = 0;
-    struct UserNode *user;
-    for(i = 0; i < VALID_NICK_CHARS_FIRST_LEN+1; i++) {
-        for(user = userList[i]; user; user = user->next) {
-            count++;
-        }
-    }
-    return count;
-}
-
-struct UserNode* addUser(const char *nick) {
-    int userListIndex = get_nicklist_entry(*nick);
-    if(userListIndex == -1 || !is_valid_nick(nick))
-        return NULL;
-    struct UserNode *user = malloc(sizeof(*user));
-    if (!user)
-    {
-        perror("malloc() failed");
-        return NULL;
-    }
-    strcpy(user->nick, nick);
-    user->created = time(0);
-    user->ident[0] = 0;
-    user->host[0] = 0;
-    user->realname[0] = 0;
-    user->flags = 0;
-    user->channel = NULL;
-    user->next = userList[userListIndex];
-    userList[userListIndex] = user;
-    return user;
-}
-
-struct UserNode* addUserMask(const char *mask) {
-    char cmask[strlen(mask)+1];
-    strcpy(cmask, mask);
-    int i, ii = 0;
-    struct UserNode *user = NULL;
-    for(i = 0; i < strlen(mask)+1; i++) {
-        if(cmask[i] == '!') {
-            cmask[i] = 0;
-            user = addUser(cmask);
-            if(user == NULL) return NULL;
-            ii = i+1;
-        } else if(cmask[i] == '.' && !user) {
-            //it's a server
-            return NULL;
-        } else if(cmask[i] == '@') {
-            if(user == NULL) return NULL;
-            cmask[i] = 0;
-            strcpy(user->ident, &cmask[ii]);
-            ii = i+1;
-        } else if(cmask[i] == '\0') {
-            if(user == NULL) return NULL;
-            strcpy(user->host, &cmask[ii]);
-        }
-    }
-    return user;
-}
-
-struct UserNode* createTempUser(const char *mask) {
-    //note: it could also be a server we have to create a temponary user for...
-    char cmask[strlen(mask)+1];
-    strcpy(cmask, mask);
-    int i, ii = 0;
-    struct UserNode *user = NULL;
-    for(i = 0; i < strlen(mask)+1; i++) {
-        if(cmask[i] == '!') {
-            cmask[i] = 0;
-            user = malloc(sizeof(*user));
-            if (!user)
-            {
-                perror("malloc() failed");
-                return NULL;
-            }
-            strcpy(user->nick, cmask);
-            user->created = time(0);
-            user->ident[0] = 0;
-            user->host[0] = 0;
-            user->realname[0] = 0;
-            user->flags = 0;
-            user->channel = NULL;
-            ii = i+1;
-        } else if(cmask[i] == '.' && !user) {
-            //it's a server
-            user = malloc(sizeof(*user));
-            if (!user)
-            {
-                perror("malloc() failed");
-                return NULL;
-            }
-            strcpy(user->host, cmask);
-            user->created = time(0);
-            user->ident[0] = 0;
-            user->host[0] = 0;
-            user->realname[0] = 0;
-            user->flags = USERFLAG_ISSERVER;
-            user->channel = NULL;
-            return user;
-        } else if(cmask[i] == '@') {
-            if(user == NULL) return NULL;
-            cmask[i] = 0;
-            strcpy(user->ident, &cmask[ii]);
-            ii = i+1;
-        } else if(cmask[i] == '\0') {
-            if(user == NULL) {
-                //nick only
-                user = malloc(sizeof(*user));
-                if (!user)
-                {
-                    perror("malloc() failed");
-                    return NULL;
-                }
-                strcpy(user->nick, cmask);
-                user->created = time(0);
-                user->ident[0] = 0;
-                user->host[0] = 0;
-                user->realname[0] = 0;
-                user->flags = 0;
-                user->channel = NULL;
-                return user;
-            }
-            strcpy(user->host, &cmask[ii]);
-        }
-    }
-    return user;
-}
-
-int renameUser(struct UserNode* user, const char *new_nick) {
-    if(!is_valid_nick(new_nick))
-        return 0;
-    if(user->nick[0] == *new_nick) {
-        strcpy(user->nick, new_nick);
-        return 1;
-    }
-    int userListIndex = get_nicklist_entry(*new_nick);
-    delUser(user, 0);
-    strcpy(user->nick, new_nick);
-    user->next = userList[userListIndex];
-    userList[userListIndex] = user;
-    return 1;
-}
-
-void delUser(struct UserNode* user, int freeUser) {
-    int userListIndex = get_nicklist_entry(user->nick[0]);
-    if(userListIndex == -1) return;
-    struct UserNode *cuser, *last_user = NULL;
-    for(cuser = userList[userListIndex]; cuser; cuser = cuser->next) {
-        if(cuser == user) {
-            if(last_user)
-                last_user->next = user->next;
-            else
-                userList[userListIndex] = user->next;
-            break;
-        } else
-            last_user = cuser;
-    }
-    if(user->channel) {
-        struct ChanUser *chanUser, *next;
-        for(chanUser = user->channel; chanUser; chanUser = next) {
-            next = chanUser->next_chan;
-            removeChanUserFromLists(chanUser, 1, 0, freeUser);
-        }
-    }
-    if(freeUser)
-        free(user);
-    else
-        user->next = NULL;
-}
-
-void clearTempUsers() {
-    int userListIndex = TEMPUSER_LIST_INDEX;
-    struct UserNode *cuser, *last_user = NULL, *next;
-    time_t now = time(0);
-    for(cuser = userList[userListIndex]; cuser; cuser = next) {
-        next = cuser->next;
-        if(cuser->flags & USERFLAG_FREETMPUSER || now - cuser->created >= 300) {
-            if(last_user)
-                last_user->next = cuser->next;
-            else
-                userList[userListIndex] = cuser->next;
-            break;
-        } else
-            last_user = cuser;
-    }
-}