X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_spanningtree.cpp;h=c4d335ef23e22c2525b60e10801ca593405a0964;hb=c0449726a44c9772fe60d7994500c679c743c684;hp=3f2bde80554236a7662916bca45e08e516e06b07;hpb=dc8f5d02f77aeabefaefe88005b99c8b47030ab7;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_spanningtree.cpp b/src/modules/m_spanningtree.cpp index 3f2bde805..c4d335ef2 100644 --- a/src/modules/m_spanningtree.cpp +++ b/src/modules/m_spanningtree.cpp @@ -111,6 +111,9 @@ static Server* Srv; typedef nspace::hash_map, irc::StrHashComp> server_hash; server_hash serverlist; +typedef nspace::hash_map uid_hash; +typedef nspace::hash_map sid_hash; + /* More forward declarations */ bool DoOneToOne(std::string prefix, std::string command, std::deque ¶ms, std::string target); bool DoOneToAllButSender(std::string prefix, std::string command, std::deque ¶ms, std::string omit); @@ -135,6 +138,53 @@ extern std::vector pzlines; extern std::vector pqlines; extern std::vector pelines; +class UserManager : public classbase +{ + uid_hash uids; + sid_hash sids; + public: + UserManager() + { + uids.clear(); + sids.clear(); + } + + std::string UserToUID(userrec* user) + { + return ""; + } + + std::string UIDToUser(const std::string &UID) + { + return ""; + } + + std::string CreateAndAdd(userrec* user) + { + return ""; + } + + std::string CreateAndAdd(const std::string &servername) + { + return ""; + } + + std::string ServerToSID(const std::string &servername) + { + return ""; + } + + std::string SIDToServer(const std::string &SID) + { + return ""; + } + + userrec* FindByID(const std::string &UID) + { + return NULL; + } +}; + /* Each server in the tree is represented by one class of * type TreeServer. A locally connected TreeServer can * have a class of type TreeSocket associated with it, for @@ -1502,7 +1552,7 @@ class TreeSocket : public InspSocket clientlist[tempnick]->server = FindServerNamePtr(source.c_str()); strlcpy(clientlist[tempnick]->ident, params[4].c_str(),IDENTMAX); strlcpy(clientlist[tempnick]->fullname, params[7].c_str(),MAXGECOS); - clientlist[tempnick]->registered = 7; + clientlist[tempnick]->registered = REG_ALL; clientlist[tempnick]->signon = age; for (std::string::iterator v = params[5].begin(); v != params[5].end(); v++) @@ -1714,7 +1764,7 @@ class TreeSocket : public InspSocket int iterations = 0; for (user_hash::iterator u = clientlist.begin(); u != clientlist.end(); u++, iterations++) { - if (u->second->registered == 7) + if (u->second->registered == REG_ALL) { snprintf(data,MAXBUF,":%s NICK %lu %s %s %s %s +%s %s :%s",u->second->server,(unsigned long)u->second->age,u->second->nick,u->second->host,u->second->dhost,u->second->ident,u->second->FormatModes(),inet_ntoa(u->second->ip4),u->second->fullname); this->WriteLine(data); @@ -2172,7 +2222,7 @@ class TreeSocket : public InspSocket if (params.size() == 1) { userrec* x = Srv->FindNick(params[0]); - if ((x) && (x->fd > -1)) + if ((x) && (IS_LOCAL(x))) { userrec* x = Srv->FindNick(params[0]); log(DEBUG,"Got IDLE"); @@ -2198,14 +2248,14 @@ class TreeSocket : public InspSocket { std::string who_did_the_whois = params[0]; userrec* who_to_send_to = Srv->FindNick(who_did_the_whois); - if ((who_to_send_to) && (who_to_send_to->fd > -1)) + if ((who_to_send_to) && (IS_LOCAL(who_to_send_to))) { log(DEBUG,"Got final IDLE"); // an incoming reply to a whois we sent out std::string nick_whoised = prefix; unsigned long signon = atoi(params[1].c_str()); unsigned long idle = atoi(params[2].c_str()); - if ((who_to_send_to) && (who_to_send_to->fd > -1)) + if ((who_to_send_to) && (IS_LOCAL(who_to_send_to))) do_whois(who_to_send_to,u,signon,idle,nick_whoised.c_str()); } else @@ -2959,7 +3009,7 @@ class TreeSocket : public InspSocket /* XXX: Fixme: blocks for a very short amount of time, * we should cache these on rehash/startup */ - if (CleanAndResolve(resolved_host,i->IPAddr.c_str(),true)) + if (CleanAndResolve(resolved_host,i->IPAddr.c_str(),true,1)) { if (std::string(resolved_host) == ip) { @@ -3477,7 +3527,7 @@ class ModuleSpanningTree : public Module int HandleTime(const char** parameters, int pcnt, userrec* user) { - if ((user->fd > -1) && (pcnt)) + if ((IS_LOCAL(user)) && (pcnt)) { TreeServer* found = FindServerMask(parameters[0]); if (found) @@ -3501,7 +3551,7 @@ class ModuleSpanningTree : public Module int HandleRemoteWhois(const char** parameters, int pcnt, userrec* user) { - if ((user->fd > -1) && (pcnt > 1)) + if ((IS_LOCAL(user)) && (pcnt > 1)) { userrec* remote = Srv->FindNick(parameters[1]); if ((remote) && (remote->fd < 0)) @@ -3746,7 +3796,7 @@ class ModuleSpanningTree : public Module virtual void OnUserInvite(userrec* source,userrec* dest,chanrec* channel) { - if (source->fd > -1) + if (IS_LOCAL(source)) { std::deque params; params.push_back(dest->nick); @@ -3765,7 +3815,7 @@ class ModuleSpanningTree : public Module virtual void OnWallops(userrec* user, const std::string &text) { - if (user->fd > -1) + if (IS_LOCAL(user)) { std::deque params; params.push_back(":"+text); @@ -3778,7 +3828,7 @@ class ModuleSpanningTree : public Module if (target_type == TYPE_USER) { userrec* d = (userrec*)dest; - if ((d->fd < 0) && (user->fd > -1)) + if ((d->fd < 0) && (IS_LOCAL(user))) { std::deque params; params.clear(); @@ -3789,7 +3839,7 @@ class ModuleSpanningTree : public Module } else if (target_type == TYPE_CHANNEL) { - if (user->fd > -1) + if (IS_LOCAL(user)) { chanrec *c = (chanrec*)dest; std::string cname = c->name; @@ -3808,7 +3858,7 @@ class ModuleSpanningTree : public Module } else if (target_type == TYPE_SERVER) { - if (user->fd > -1) + if (IS_LOCAL(user)) { char* target = (char*)dest; std::deque par; @@ -3826,7 +3876,7 @@ class ModuleSpanningTree : public Module // route private messages which are targetted at clients only to the server // which needs to receive them userrec* d = (userrec*)dest; - if ((d->fd < 0) && (user->fd > -1)) + if ((d->fd < 0) && (IS_LOCAL(user))) { std::deque params; params.clear(); @@ -3837,7 +3887,7 @@ class ModuleSpanningTree : public Module } else if (target_type == TYPE_CHANNEL) { - if (user->fd > -1) + if (IS_LOCAL(user)) { chanrec *c = (chanrec*)dest; std::string cname = c->name; @@ -3856,7 +3906,7 @@ class ModuleSpanningTree : public Module } else if (target_type == TYPE_SERVER) { - if (user->fd > -1) + if (IS_LOCAL(user)) { char* target = (char*)dest; std::deque par; @@ -3876,7 +3926,7 @@ class ModuleSpanningTree : public Module virtual void OnUserJoin(userrec* user, chanrec* channel) { // Only do this for local users - if (user->fd > -1) + if (IS_LOCAL(user)) { std::deque params; params.clear(); @@ -3905,7 +3955,7 @@ class ModuleSpanningTree : public Module virtual void OnChangeHost(userrec* user, const std::string &newhost) { // only occurs for local clients - if (user->registered != 7) + if (user->registered != REG_ALL) return; std::deque params; params.push_back(newhost); @@ -3915,7 +3965,7 @@ class ModuleSpanningTree : public Module virtual void OnChangeName(userrec* user, const std::string &gecos) { // only occurs for local clients - if (user->registered != 7) + if (user->registered != REG_ALL) return; std::deque params; params.push_back(gecos); @@ -3924,7 +3974,7 @@ class ModuleSpanningTree : public Module virtual void OnUserPart(userrec* user, chanrec* channel, const std::string &partmessage) { - if (user->fd > -1) + if (IS_LOCAL(user)) { std::deque params; params.push_back(channel->name); @@ -3937,7 +3987,7 @@ class ModuleSpanningTree : public Module virtual void OnUserConnect(userrec* user) { char agestr[MAXBUF]; - if (user->fd > -1) + if (IS_LOCAL(user)) { std::deque params; snprintf(agestr,MAXBUF,"%lu",(unsigned long)user->age); @@ -3963,7 +4013,7 @@ class ModuleSpanningTree : public Module virtual void OnUserQuit(userrec* user, const std::string &reason) { - if ((user->fd > -1) && (user->registered == 7)) + if ((IS_LOCAL(user)) && (user->registered == REG_ALL)) { std::deque params; params.push_back(":"+reason); @@ -3980,7 +4030,7 @@ class ModuleSpanningTree : public Module virtual void OnUserPostNick(userrec* user, const std::string &oldnick) { - if (user->fd > -1) + if (IS_LOCAL(user)) { std::deque params; params.push_back(user->nick); @@ -3990,7 +4040,7 @@ class ModuleSpanningTree : public Module virtual void OnUserKick(userrec* source, userrec* user, chanrec* chan, const std::string &reason) { - if ((source) && (source->fd > -1)) + if ((source) && (IS_LOCAL(source))) { std::deque params; params.push_back(chan->name); @@ -4038,7 +4088,7 @@ class ModuleSpanningTree : public Module // locally. virtual void OnOper(userrec* user, const std::string &opertype) { - if (user->fd > -1) + if (IS_LOCAL(user)) { std::deque params; params.push_back(opertype); @@ -4048,7 +4098,7 @@ class ModuleSpanningTree : public Module void OnLine(userrec* source, const std::string &host, bool adding, char linetype, long duration, const std::string &reason) { - if (source->fd > -1) + if (IS_LOCAL(source)) { char type[8]; snprintf(type,8,"%cLINE",linetype); @@ -4114,7 +4164,7 @@ class ModuleSpanningTree : public Module virtual void OnMode(userrec* user, void* dest, int target_type, const std::string &text) { - if ((user->fd > -1) && (user->registered == 7)) + if ((IS_LOCAL(user)) && (user->registered == REG_ALL)) { if (target_type == TYPE_USER) {