X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_spanningtree%2Foverride_map.cpp;h=14d0a3b4fa6135e9e0f82f5375d60fe6ef073299;hb=67de413cad88194972d55a8ff88464370890c5a9;hp=72128a1c390ae1ed01788f83fdd1a86d2f36a93d;hpb=b36ce84c7da93f680fc397bcb4c877abe063eaaa;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_spanningtree/override_map.cpp b/src/modules/m_spanningtree/override_map.cpp index 72128a1c3..14d0a3b4f 100644 --- a/src/modules/m_spanningtree/override_map.cpp +++ b/src/modules/m_spanningtree/override_map.cpp @@ -24,18 +24,23 @@ #include "main.h" #include "utils.h" #include "treeserver.h" +#include "commands.h" -/* $ModDep: m_spanningtree/main.h m_spanningtree/utils.h m_spanningtree/treeserver.h */ +CommandMap::CommandMap(Module* Creator) + : Command(Creator, "MAP", 0, 1) +{ + Penalty = 2; +} -const std::string ModuleSpanningTree::MapOperInfo(TreeServer* Current) +std::string CommandMap::MapOperInfo(TreeServer* Current) { time_t secs_up = ServerInstance->Time() - Current->age; - return " [Up: " + TimeToStr(secs_up) + (Current->rtt == 0 ? "]" : " Lag: " + ConvToStr(Current->rtt) + "ms]"); + return " [Up: " + ModuleSpanningTree::TimeToStr(secs_up) + (Current->rtt == 0 ? "]" : " Lag: " + ConvToStr(Current->rtt) + "ms]"); } -void ModuleSpanningTree::ShowMap(TreeServer* Current, User* user, int depth, int &line, char* names, int &maxnamew, char* stats) +void CommandMap::ShowMap(TreeServer* Current, User* user, int depth, int &line, char* names, int &maxnamew, char* stats) { - ServerInstance->Logs->Log("map", LOG_DEBUG, "ShowMap depth %d on line %d", depth, line); + ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "ShowMap depth %d on line %d", depth, line); float percent; if (ServerInstance->Users->clientlist->size() == 0) @@ -55,14 +60,13 @@ void ModuleSpanningTree::ShowMap(TreeServer* Current, User* user, int depth, int memset(myname, ' ', depth); int w = depth; - std::string servername = Current->GetName(); if (user->IsOper()) { - w += snprintf(myname + depth, 99 - depth, "%s (%s)", servername.c_str(), Current->GetID().c_str()); + w += snprintf(myname + depth, 99 - depth, "%s (%s)", Current->GetName().c_str(), Current->GetID().c_str()); } else { - w += snprintf(myname + depth, 99 - depth, "%s", servername.c_str()); + w += snprintf(myname + depth, 99 - depth, "%s", Current->GetName().c_str()); } memset(myname + w, ' ', 100 - w); if (w > maxnamew) @@ -95,38 +99,27 @@ void ModuleSpanningTree::ShowMap(TreeServer* Current, User* user, int depth, int // and divisons, we instead render the map onto a backplane of characters // (a character matrix), then draw the branches as a series of "L" shapes // from the nodes. This is not only friendlier on CPU it uses less stack. -bool ModuleSpanningTree::HandleMap(const std::vector& parameters, User* user) +CmdResult CommandMap::Handle(const std::vector& parameters, User* user) { if (parameters.size() > 0) { /* Remote MAP, the server is within the 1st parameter */ TreeServer* s = Utils->FindServerMask(parameters[0]); - bool ret = false; if (!s) { user->WriteNumeric(ERR_NOSUCHSERVER, "%s %s :No such server", user->nick.c_str(), parameters[0].c_str()); - ret = true; + return CMD_FAILURE; } - else if (s && s != Utils->TreeRoot) - { - parameterlist params; - params.push_back(parameters[0]); - params[0] = s->GetName(); - Utils->DoOneToOne(user->uuid, "MAP", params, s->GetName()); - ret = true; - } - - // Don't return if s == Utils->TreeRoot (us) - if (ret) - return true; + if (!s->IsRoot()) + return CMD_SUCCESS; } // These arrays represent a virtual screen which we will // "scratch" draw to, as the console device of an irc // client does not provide for a proper terminal. int totusers = ServerInstance->Users->clientlist->size(); - int totservers = this->CountServs(); + int totservers = Utils->serverlist.size(); int maxnamew = 0; int line = 0; char* names = new char[totservers * 100]; @@ -171,7 +164,6 @@ bool ModuleSpanningTree::HandleMap(const std::vector& parameters, U float avg_users = totusers * 1.0 / line; - ServerInstance->Logs->Log("map", LOG_DEBUG, "local"); for (int t = 0; t < line; t++) { // terminate the string at maxnamew characters @@ -188,6 +180,12 @@ bool ModuleSpanningTree::HandleMap(const std::vector& parameters, U delete[] names; delete[] stats; - return true; + return CMD_SUCCESS; } +RouteDescriptor CommandMap::GetRouting(User* user, const std::vector& parameters) +{ + if (!parameters.empty()) + return ROUTE_UNICAST(parameters[0]); + return ROUTE_LOCALONLY; +}