continued writing cache
[NeonServV5.git] / UserNode.c
index 21a7c81655648b5843e1e7a5930df9a21f8afa00..8a03620bdf3c35241f2547c4712f5be19529becc 100644 (file)
@@ -43,6 +43,24 @@ struct UserNode* getUserByNick(const char *nick) { //case sensitive
     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);
+            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);
@@ -90,6 +108,34 @@ struct UserNode* addUser(const char *nick) {
     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 NULL;
+}
+
 int renameUser(struct UserNode* user, const char *new_nick) {
     if(!is_valid_nick(new_nick))
         return 0;