X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2FUserNode.c;h=fe68f3e796eb99ca823b70fdfb1fec86a9f723bf;hb=bb5692b9cbff069abbf9573c81e86c3cd2061ceb;hp=60360e82a54b02951fd325d85ea51f78a82f34d8;hpb=2d9db1adb1946aba00b203f40eff7d5db8163f01;p=NeonServV5.git diff --git a/src/UserNode.c b/src/UserNode.c index 60360e8..fe68f3e 100644 --- a/src/UserNode.c +++ b/src/UserNode.c @@ -1,5 +1,5 @@ -/* UserNode.c - NeonServ v5.1 - * Copyright (C) 2011 Philipp Kreil (pk910) +/* UserNode.c - NeonServ v5.3 + * Copyright (C) 2011-2012 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,6 +17,7 @@ #include "UserNode.h" #include "ChanUser.h" #include "tools.h" +#include "IRCEvents.h" static struct UserNode **userList; @@ -159,6 +160,20 @@ struct UserNode* getAllUsers(struct UserNode *last) { return last->next; } +struct UserNode* getUsersWithAuth(const char *auth, struct UserNode *last) { + int cindex = (last ? get_nicklist_entry(last->nick[0]) : 0); + struct UserNode *cuser = last; + while(cindex <= VALID_NICK_CHARS_FIRST_LEN) { + for(cuser = (cuser ? cuser->next : userList[cindex]); cuser; cuser = cuser->next) { + if((cuser->flags & USERFLAG_ISAUTHED) && !strcmp(cuser->auth, auth)) + return cuser; + } + cindex++; + cuser = NULL; + } + return NULL; +} + int getUserCount() { int i, count = 0; struct UserNode *user; @@ -187,6 +202,7 @@ struct UserNode* addUser(const char *nick) { user->realname[0] = 0; user->flags = 0; user->channel = NULL; + user->last_who = 0; user->next = userList[userListIndex]; userList[userListIndex] = user; return user; @@ -241,6 +257,7 @@ struct UserNode* createTempUser(const char *mask) { user->realname[0] = 0; user->flags = 0; user->channel = NULL; + user->last_who = 0; ii = i+1; } else if(cmask[i] == '.' && !user) { //it's a server @@ -257,6 +274,7 @@ struct UserNode* createTempUser(const char *mask) { user->realname[0] = 0; user->flags = USERFLAG_ISSERVER; user->channel = NULL; + user->last_who = 0; return user; } else if(cmask[i] == '@') { if(user == NULL) return NULL; @@ -279,6 +297,7 @@ struct UserNode* createTempUser(const char *mask) { user->realname[0] = 0; user->flags = 0; user->channel = NULL; + user->last_who = 0; return user; } strcpy(user->host, &cmask[ii]); @@ -320,6 +339,7 @@ int renameUser(struct UserNode* user, const char *new_nick) { void delUser(struct UserNode* user, int freeUser) { int userListIndex = get_nicklist_entry(user->nick[0]); if(userListIndex == -1) return; + event_freeuser(user); struct UserNode *cuser, *last_user = NULL; for(cuser = userList[userListIndex]; cuser; cuser = cuser->next) { if(cuser == user) {