summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Burchell w00t@inspircd.org <Robin Burchell w00t@inspircd.org@5417fbe8-f217-4b02-8779-1006273d7864>2008-09-30 18:45:09 +0000
committerRobin Burchell w00t@inspircd.org <Robin Burchell w00t@inspircd.org@5417fbe8-f217-4b02-8779-1006273d7864>2008-09-30 18:45:09 +0000
commitd2d64e17e730848eaa7081c6bd6eddcea8973428 (patch)
tree7429c903b84f63f064fa418df93e9b1b2eeb2c7a
parentb7561cabd317bf34301e68915ed471ad02d9e987 (diff)
Move users to a basic class.
git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1187 5417fbe8-f217-4b02-8779-1006273d7864
-rw-r--r--include/extern.h1
-rw-r--r--include/services.h56
-rw-r--r--include/users.h72
-rw-r--r--src/nickserv.c5
-rw-r--r--src/users.c65
5 files changed, 122 insertions, 77 deletions
diff --git a/include/extern.h b/include/extern.h
index c62e90929..069d217f4 100644
--- a/include/extern.h
+++ b/include/extern.h
@@ -945,6 +945,7 @@ E void expire_requests(void);
EI int ns_do_register(User * u);
E int delnick(NickAlias * na);
E NickAlias *findnick(const char *nick);
+E NickAlias *findnick(const std::string &nick);
E NickCore *findcore(const char *nick);
E void clean_ns_timeouts(NickAlias * na);
E void nsStartNickTracking(User * u);
diff --git a/include/services.h b/include/services.h
index afde35efc..3eca6381b 100644
--- a/include/services.h
+++ b/include/services.h
@@ -212,10 +212,16 @@ extern int shutdown(int, int);
#include "slist.h"
#include "events.h"
+/* pull in the various bits of STL to pull in */
+#include <string>
+
/*************************************************************************/
+/* forward declarations, mostly used by older code */
+class User;
+
+
typedef struct server_ Server;
-typedef struct user_ User;
typedef struct channel_ Channel;
typedef struct c_elist EList;
typedef struct c_elist_entry Entry;
@@ -833,54 +839,8 @@ struct server_ {
#define SERVER_JUPED 0x0002
/*************************************************************************/
-struct u_chanlist {
- struct u_chanlist *next, *prev;
- Channel *chan;
- int16 status; /* Associated flags; see CSTATUS_* below. */
-};
-
-struct u_chaninfolist {
- struct u_chaninfolist *next, *prev;
- ChannelInfo *chan;
-};
-
-/* Online user and channel data. */
-struct user_ {
- User *next, *prev;
-
- char nick[NICKMAX];
-
- char *username; /* ident */
- char *host; /* User's real hostname */
- char *hostip; /* User's IP number */
- char *vhost; /* User's virtual hostname */
- char *vident; /* User's virtual ident */
- char *realname; /* Realname */
- Server *server; /* Server user is connected to */
- char *nickTrack; /* Nick Tracking */
- time_t timestamp; /* Timestamp of the nick */
- time_t my_signon; /* When did _we_ see the user? */
- uint32 svid; /* Services ID */
- uint32 mode; /* See below */
- char *uid; /* Univeral ID */
-
- NickAlias *na;
-
- ModuleData *moduleData; /* defined for it, it should allow the module Add/Get */
-
- int isSuperAdmin; /* is SuperAdmin on or off? */
-
- struct u_chanlist *chans; /* Channels user has joined */
- struct u_chaninfolist *founder_chans; /* Channels user has identified for */
-
- short invalid_pw_count; /* # of invalid password attempts */
- time_t invalid_pw_time; /* Time of last invalid password */
-
- time_t lastmemosend; /* Last time MS SEND command used */
- time_t lastnickreg; /* Last time NS REGISTER cmd used */
- time_t lastmail; /* Last time this user sent a mail */
-};
+#include "users.h"
struct cbmode_ {
diff --git a/include/users.h b/include/users.h
new file mode 100644
index 000000000..497c7d986
--- /dev/null
+++ b/include/users.h
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2008 Robin Burchell <w00t@inspircd.org>
+ * Copyright (C) 2008 Anope Team <info@anope.org>
+ *
+ * Please read COPYING and README for further details.
+ *
+ * Based on the original code of Epona by Lara.
+ * Based on the original code of Services by Andy Church.
+ *
+ * $Id$
+ *
+ */
+struct u_chanlist {
+ struct u_chanlist *next, *prev;
+ Channel *chan;
+ int16 status; /* Associated flags; see CSTATUS_* below. */
+};
+
+struct u_chaninfolist {
+ struct u_chaninfolist *next, *prev;
+ ChannelInfo *chan;
+};
+
+/* Online user and channel data. */
+class User
+{
+ public: // XXX: exposing a tiny bit too much
+ User *next, *prev;
+
+ char nick[NICKMAX];
+
+ char *username; /* ident */
+ char *host; /* User's real hostname */
+ char *hostip; /* User's IP number */
+ char *vhost; /* User's virtual hostname */
+ char *vident; /* User's virtual ident */
+ char *realname; /* Realname */
+ Server *server; /* Server user is connected to */
+ char *nickTrack; /* Nick Tracking */
+ time_t timestamp; /* Timestamp of the nick */
+ time_t my_signon; /* When did _we_ see the user? */
+ uint32 svid; /* Services ID */
+ uint32 mode; /* See below */
+ char *uid; /* Univeral ID */
+
+ NickAlias *na;
+
+ ModuleData *moduleData; /* defined for it, it should allow the module Add/Get */
+
+ int isSuperAdmin; /* is SuperAdmin on or off? */
+
+ struct u_chanlist *chans; /* Channels user has joined */
+ struct u_chaninfolist *founder_chans; /* Channels user has identified for */
+
+ short invalid_pw_count; /* # of invalid password attempts */
+ time_t invalid_pw_time; /* Time of last invalid password */
+
+ time_t lastmemosend; /* Last time MS SEND command used */
+ time_t lastnickreg; /* Last time NS REGISTER cmd used */
+ time_t lastmail; /* Last time this user sent a mail */
+
+
+ /****************************************************************/
+
+ /** Create a new user object, initialising necessary fields and
+ * adds it to the hash
+ *
+ * @parameter nick The nickname of the user account.
+ */
+ User(const std::string &nick);
+};
+
diff --git a/src/nickserv.c b/src/nickserv.c
index 6fda8b1f7..abda6e10e 100644
--- a/src/nickserv.c
+++ b/src/nickserv.c
@@ -1230,6 +1230,11 @@ NickAlias *findnick(const char *nick)
return NULL;
}
+NickAlias *findnick(const std::string &nick)
+{
+ return findnick(nick.c_str());
+}
+
/*************************************************************************/
/* Return the NickCore structure for the given nick, or NULL if the core
diff --git a/src/users.c b/src/users.c
index ca4bd02b4..1653d5922 100644
--- a/src/users.c
+++ b/src/users.c
@@ -27,38 +27,45 @@ time_t maxusertime;
/*************************************************************************/
/*************************************************************************/
-/* Allocate a new User structure, fill in basic values, link it to the
- * overall list, and return it. Always successful.
- */
-
-static User *new_user(const char *nick)
+User::User(const std::string &nick)
{
- User *user, **list;
+ User **list;
+ // XXX: we could do well to steal CoreException from insp
+ if (!nick.empty())
+ throw "what the craq, empty nick passed to constructor";
- user = (User *)scalloc(sizeof(User), 1);
- if (!nick)
- nick = "";
- strscpy(user->nick, nick, NICKMAX);
- list = &userlist[HASH(user->nick)];
- user->next = *list;
- if (*list)
- (*list)->prev = user;
- *list = user;
- user->na = findnick(nick);
- if (user->na)
- user->na->u = user;
- usercnt++;
- if (usercnt > maxusercnt) {
- maxusercnt = usercnt;
- maxusertime = time(NULL);
- if (LogMaxUsers)
- alog("user: New maximum user count: %d", maxusercnt);
- }
- user->isSuperAdmin = 0; /* always set SuperAdmin to 0 for new users */
- user->nickTrack = NULL; /* ensure no default tracking nick */
- return user;
+ // XXX: we should also duplicate-check here.
+
+ strscpy(this->nick, nick.c_str(), NICKMAX);
+ list = &userlist[HASH(this->nick)];
+ this->next = *list;
+
+ if (*list)
+ (*list)->prev = this;
+
+ *list = this;
+
+ this->na = findnick(nick);
+
+ if (this->na)
+ this->na->u = this;
+
+ usercnt++;
+
+ if (usercnt > maxusercnt)
+ {
+ maxusercnt = usercnt;
+ maxusertime = time(NULL);
+ if (LogMaxUsers)
+ alog("user: New maximum user count: %d", maxusercnt);
+ }
+
+ this->isSuperAdmin = 0; /* always set SuperAdmin to 0 for new users */
+ this->nickTrack = NULL; /* ensure no default tracking nick */
}
+
+/*************************************************************************/
/*************************************************************************/
/* Change the nickname of a user, and move pointers as necessary. */
@@ -614,7 +621,7 @@ User *do_nick(const char *source, char *nick, char *username, char *host,
return NULL;
/* Allocate User structure and fill it in. */
- user = new_user(nick);
+ user = new User(nick);
user->username = sstrdup(username);
user->host = sstrdup(host);
user->server = findserver(servlist, server);