summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2004-04-19 09:40:41 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2004-04-19 09:40:41 +0000
commitb308d00aaa5ac508b7ad5c1d1279d1b0c463582a (patch)
treec23b3f85fcfa8ca0a3b32185802c429ab911db83 /src
parentd25c8309ce2a6b8458b57df57b75f75cf1b85ba8 (diff)
/WHO and routing fixes
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@670 e03df62e-2008-0410-955e-edbf42e46eb7
Diffstat (limited to 'src')
-rw-r--r--src/InspIRCd.layout20
-rw-r--r--src/connection.cpp24
-rw-r--r--src/inspircd.cpp11
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;
}
}