From b308d00aaa5ac508b7ad5c1d1279d1b0c463582a Mon Sep 17 00:00:00 2001 From: brain Date: Mon, 19 Apr 2004 09:40:41 +0000 Subject: [PATCH] /WHO and routing fixes git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@670 e03df62e-2008-0410-955e-edbf42e46eb7 --- src/InspIRCd.layout | 20 ++++++++++---------- src/connection.cpp | 24 ++++++++++++++---------- src/inspircd.cpp | 11 +++++++---- 3 files changed, 31 insertions(+), 24 deletions(-) diff --git a/src/InspIRCd.layout b/src/InspIRCd.layout index bff1594ae..bb91d8747 100644 --- a/src/InspIRCd.layout +++ b/src/InspIRCd.layout @@ -13,9 +13,9 @@ LeftChar=1 [Editor_1] Open=1 Top=1 -CursorCol=10 -CursorRow=5358 -TopLine=3349 +CursorCol=1 +CursorRow=2762 +TopLine=2726 LeftChar=1 [Editor_2] @@ -197,9 +197,9 @@ LeftChar=1 [Editor_24] Open=1 Top=0 -CursorCol=2 -CursorRow=206 -TopLine=161 +CursorCol=50 +CursorRow=348 +TopLine=320 LeftChar=1 [Editor_25] Open=1 @@ -303,8 +303,8 @@ LeftChar=1 Open=1 Top=0 CursorCol=1 -CursorRow=39 -TopLine=1 +CursorRow=37 +TopLine=103 LeftChar=1 [Editor_40] Open=1 @@ -324,6 +324,6 @@ LeftChar=1 Open=1 Top=0 CursorCol=1 -CursorRow=1733 -TopLine=1679 +CursorRow=37 +TopLine=1 LeftChar=1 diff --git a/src/connection.cpp b/src/connection.cpp index 4161b0447..ce166ace0 100644 --- a/src/connection.cpp +++ b/src/connection.cpp @@ -345,19 +345,23 @@ bool connection::SendPacket(char *message, const char* host) if (cn->GetState() == STATE_DISCONNECTED) { log(DEBUG,"Main route to %s is down, seeking alternative",host); - // this route is down, we must re-route the packet through an available point in the mesh. - for (int k = 0; k < this->connectors.size(); k++) + // fix: can only route one hop to avoid a loop + if (strncat(message,"R ",2)) { - // search for another point in the mesh which can 'reach' where we want to go - for (int m = 0; m < this->connectors[k].routes.size(); m++) + // this route is down, we must re-route the packet through an available point in the mesh. + for (int k = 0; k < this->connectors.size(); k++) { - if (!strcasecmp(this->connectors[k].routes[m].c_str(),host)) + // search for another point in the mesh which can 'reach' where we want to go + for (int m = 0; m < this->connectors[k].routes.size(); m++) { - log(DEBUG,"Found alternative route for packet: %s",this->connectors[k].GetServerName().c_str()); - char buffer[MAXBUF]; - snprintf(buffer,MAXBUF,"R %s %s",host,message); - this->SendPacket(buffer,this->connectors[k].GetServerName().c_str()); - return true; + if (!strcasecmp(this->connectors[k].routes[m].c_str(),host)) + { + log(DEBUG,"Found alternative route for packet: %s",this->connectors[k].GetServerName().c_str()); + char buffer[MAXBUF]; + snprintf(buffer,MAXBUF,"R %s %s",host,message); + this->SendPacket(buffer,this->connectors[k].GetServerName().c_str()); + return true; + } } } } diff --git a/src/inspircd.cpp b/src/inspircd.cpp index aecc2cc46..1398ec90c 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -2750,25 +2750,28 @@ void handle_who(char **parameters, int pcnt, userrec *user) else { userrec* u = Find(parameters[0]); - WriteServ(user->fd,"352 %s %s %s %s %s %s Hr@ :0 %s",user->nick, u->nick, u->ident, u->dhost, u->server, u->nick, u->fullname); + if (u) + { + WriteServ(user->fd,"352 %s %s %s %s %s %s Hr@ :0 %s",user->nick, u->nick, u->ident, u->dhost, u->server, u->nick, u->fullname); + } + WriteServ(user->fd,"315 %s %s :End of /WHO list.",user->nick, parameters[0]); } } if (pcnt == 2) { if ((!strcmp(parameters[0],"0")) || (!strcmp(parameters[0],"*")) && (!strcmp(parameters[1],"o"))) { - Ptr = user->chans[0].channel; for (user_hash::const_iterator i = clientlist.begin(); i != clientlist.end(); i++) { if ((common_channels(user,i->second)) && (isnick(i->second->nick))) { if (strchr(i->second->modes,'o')) { - WriteServ(user->fd,"352 %s %s %s %s %s %s Hr@ :0 %s",user->nick, Ptr->name, i->second->ident, i->second->dhost, i->second->server, i->second->nick, i->second->fullname); + WriteServ(user->fd,"352 %s %s %s %s %s %s Hr@ :0 %s",user->nick, user->nick, i->second->ident, i->second->dhost, i->second->server, i->second->nick, i->second->fullname); } } } - WriteServ(user->fd,"315 %s %s :End of /WHO list.",user->nick, Ptr->name); + WriteServ(user->fd,"315 %s %s :End of /WHO list.",user->nick, user->nick); return; } } -- 2.39.5