X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_spanningtree%2Fuid.cpp;h=79bd6936f625062ba12b34bd18633c66dc95c1de;hb=ee4262d276606649489db02007c7a34e8ac75bc4;hp=da75eebec27f3b78244e28a9a8726d405cc9ec24;hpb=b14ebbccf08ec34a73e1ba271e67da80d9fe805c;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_spanningtree/uid.cpp b/src/modules/m_spanningtree/uid.cpp index da75eebec..79bd6936f 100644 --- a/src/modules/m_spanningtree/uid.cpp +++ b/src/modules/m_spanningtree/uid.cpp @@ -25,7 +25,7 @@ #include "utils.h" #include "treeserver.h" -CmdResult CommandUID::Handle(User* serversrc, std::vector& params) +CmdResult CommandUID::HandleServer(TreeServer* remoteserver, std::vector& params) { /** Do we have enough parameters: * 0 1 2 3 4 5 6 7 8 9 (n-1) @@ -36,12 +36,8 @@ CmdResult CommandUID::Handle(User* serversrc, std::vector& params) std::string empty; const std::string& modestr = params[8]; - TreeServer* remoteserver = Utils->FindServer(serversrc->server); - - if (!remoteserver) - return CMD_INVALID; /* Is this a valid UID, and not misrouted? */ - if (params[0].length() != 9 || params[0].substr(0,3) != serversrc->uuid) + if (params[0].length() != UIDGenerator::UUID_LENGTH || params[0].substr(0, 3) != remoteserver->GetID()) return CMD_INVALID; /* Check parameters for validity before introducing the client, discovered by dmb */ if (!age_t) @@ -52,14 +48,13 @@ CmdResult CommandUID::Handle(User* serversrc, std::vector& params) return CMD_INVALID; /* check for collision */ - user_hash::iterator iter = ServerInstance->Users->clientlist->find(params[2]); - - if (iter != ServerInstance->Users->clientlist->end()) + User* collideswith = ServerInstance->FindNickOnly(params[2]); + if (collideswith) { /* * Nick collision. */ - int collide = Utils->DoCollision(iter->second, remoteserver, age_t, params[5], params[6], params[0]); + int collide = Utils->DoCollision(collideswith, remoteserver, age_t, params[5], params[6], params[0]); ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "*** Collision on %s, collide=%d", params[2].c_str(), collide); if (collide != 1) @@ -75,14 +70,14 @@ CmdResult CommandUID::Handle(User* serversrc, std::vector& params) User* _new = NULL; try { - _new = new RemoteUser(params[0], remoteserver->GetName()); + _new = new RemoteUser(params[0], remoteserver); } catch (...) { ServerInstance->Logs->Log(MODNAME, LOG_DEFAULT, "Duplicate UUID %s in client introduction", params[0].c_str()); return CMD_INVALID; } - (*(ServerInstance->Users->clientlist))[params[2]] = _new; + ServerInstance->Users->clientlist[params[2]] = _new; _new->nick = params[2]; _new->host = params[3]; _new->dhost = params[4]; @@ -131,43 +126,51 @@ CmdResult CommandUID::Handle(User* serversrc, std::vector& params) _new->SetClientIP(params[6].c_str()); - ServerInstance->Users->AddGlobalClone(_new); + ServerInstance->Users->AddClone(_new); remoteserver->UserCount++; bool dosend = true; - if ((Utils->quiet_bursts && remoteserver->bursting) || ServerInstance->SilentULine(_new->server)) + if ((Utils->quiet_bursts && remoteserver->bursting) || _new->server->IsSilentULine()) dosend = false; if (dosend) - ServerInstance->SNO->WriteToSnoMask('C',"Client connecting at %s: %s (%s) [%s]", _new->server.c_str(), _new->GetFullRealHost().c_str(), _new->GetIPString().c_str(), _new->fullname.c_str()); + ServerInstance->SNO->WriteToSnoMask('C',"Client connecting at %s: %s (%s) [%s]", remoteserver->GetName().c_str(), _new->GetFullRealHost().c_str(), _new->GetIPString().c_str(), _new->fullname.c_str()); FOREACH_MOD(OnPostConnect, (_new)); return CMD_SUCCESS; } -CmdResult CommandFHost::Handle(User* src, std::vector& params) +CmdResult CommandFHost::HandleRemote(RemoteUser* src, std::vector& params) { - if (IS_SERVER(src)) - return CMD_FAILURE; src->ChangeDisplayedHost(params[0]); return CMD_SUCCESS; } -CmdResult CommandFIdent::Handle(User* src, std::vector& params) +CmdResult CommandFIdent::HandleRemote(RemoteUser* src, std::vector& params) { - if (IS_SERVER(src)) - return CMD_FAILURE; src->ChangeIdent(params[0]); return CMD_SUCCESS; } -CmdResult CommandFName::Handle(User* src, std::vector& params) +CmdResult CommandFName::HandleRemote(RemoteUser* src, std::vector& params) { - if (IS_SERVER(src)) - return CMD_FAILURE; src->ChangeName(params[0]); return CMD_SUCCESS; } +CommandUID::Builder::Builder(User* user) + : CmdBuilder(TreeServer::Get(user)->GetID(), "UID") +{ + push(user->uuid); + push_int(user->age); + push(user->nick); + push(user->host); + push(user->dhost); + push(user->ident); + push(user->GetIPString()); + push_int(user->signon); + push('+').push_raw(user->FormatModes(true)); + push_last(user->fullname); +}