diff options
author | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2005-05-29 05:41:03 +0000 |
---|---|---|
committer | brain <brain@e03df62e-2008-0410-955e-edbf42e46eb7> | 2005-05-29 05:41:03 +0000 |
commit | b0a467e8d3064177e3ceaaa6c207a3e625d2125a (patch) | |
tree | 489182ac0cf4cf360f6060b5ab7c52c16571d780 /src/inspircd.cpp | |
parent | ea3dc510c16a9bd2c35b51eeeccad313badc03c7 (diff) |
Highly optimized userrec saving 1.5k per user
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@1550 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src/inspircd.cpp')
-rw-r--r-- | src/inspircd.cpp | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 47f699a91..9dc99857b 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -127,6 +127,7 @@ typedef nspace::hash_map<in_addr,string*, nspace::hash<in_addr>, irc::InAddr_Has typedef nspace::hash_map<std::string, WhoWasUser*, nspace::hash<string>, irc::StrHashComp> whowas_hash; typedef std::deque<command_t> command_table; typedef std::map<std::string,time_t> autoconnects; +typedef std::vector<std::string> servernamelist; // This table references users by file descriptor. // its an array to make it VERY fast, as all lookups are referenced @@ -149,6 +150,7 @@ file_cache RULES; address_cache IP; ClassVector Classes; +servernamelist servernames; struct linger linger = { 0 }; char MyExecutable[1024]; @@ -179,6 +181,26 @@ void AddOper(userrec* user) all_opers.push_back(user); } +void AddServerName(std::string servername) +{ + for (servernamelist::iterator a = servernames.begin(); a < servernames.end(); a++) + { + if (*a == servername) + return; + } + servernames.push_back(servername); +} + +const char* FindServerNamePtr(std::string servername) +{ + for (servernamelist::iterator a = servernames.begin(); a < servernames.end(); a++) + { + if (*a == servername) + return a->c_str(); + } + return ""; +} + void DeleteOper(userrec* user) { for (std::vector<userrec*>::iterator a = all_opers.begin(); a < all_opers.end(); a++) @@ -1397,16 +1419,16 @@ void AddClient(int socket, char* host, int port, bool iscached, char* ip) log(DEBUG,"AddClient: %lu %s %d %s",(unsigned long)socket,host,port,ip); clientlist[tempnick]->fd = socket; - strncpy(clientlist[tempnick]->nick, tn2,NICKMAX); - strncpy(clientlist[tempnick]->host, host,160); - strncpy(clientlist[tempnick]->dhost, host,160); - strncpy(clientlist[tempnick]->server, ServerName,256); - strncpy(clientlist[tempnick]->ident, "unknown",IDENTMAX); + strlcpy(clientlist[tempnick]->nick, tn2,NICKMAX); + strlcpy(clientlist[tempnick]->host, host,160); + strlcpy(clientlist[tempnick]->dhost, host,160); + clientlist[tempnick]->server = (char*)FindServerNamePtr(ServerName); + strlcpy(clientlist[tempnick]->ident, "unknown",IDENTMAX); clientlist[tempnick]->registered = 0; clientlist[tempnick]->signon = TIME+dns_timeout; clientlist[tempnick]->lastping = 1; clientlist[tempnick]->port = port; - strncpy(clientlist[tempnick]->ip,ip,16); + strlcpy(clientlist[tempnick]->ip,ip,16); // set the registration timeout for this user unsigned long class_regtimeout = 90; @@ -2586,6 +2608,8 @@ int InspIRCd(char** argv, int argc) } log(DEBUG,"InspIRCd: startup: read config"); + AddServerName(ServerName); + int clientportcount = 0, serverportcount = 0; for (count = 0; count < ConfValueEnum("bind",&config_f); count++) |