added some more events and changed TempUser-Handling
[NeonServV5.git] / UserNode.c
index 1c223acbe15480d1c96947b801e0df3e87b2eb07..465fd2e04bf6d2c43a221cebe6ab25c9d58ffbed 100644 (file)
@@ -4,8 +4,7 @@
 static struct UserNode **userList;
 
 void init_UserNode() {
-    userList = calloc(VALID_NICK_CHARS_FIRST_LEN, sizeof(*userList));
-    
+    userList = calloc(VALID_NICK_CHARS_FIRST_LEN+1, sizeof(*userList));
 }
 
 int is_valid_nick(const char *nick) {
@@ -99,6 +98,7 @@ struct UserNode* addUser(const char *nick) {
         return NULL;
     }
     strcpy(user->nick, nick);
+    user->created = time(0);
     user->ident[0] = 0;
     user->host[0] = 0;
     user->realname[0] = 0;
@@ -152,6 +152,7 @@ struct UserNode* createTempUser(const char *mask) {
                 return NULL;
             }
             strcpy(user->nick, cmask);
+            user->created = time(0);
             user->ident[0] = 0;
             user->host[0] = 0;
             user->realname[0] = 0;
@@ -167,6 +168,7 @@ struct UserNode* createTempUser(const char *mask) {
                 return NULL;
             }
             strcpy(user->host, cmask);
+            user->created = time(0);
             user->ident[0] = 0;
             user->host[0] = 0;
             user->realname[0] = 0;
@@ -227,3 +229,20 @@ void delUser(struct UserNode* user, int freeUser) {
     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;
+    }
+}