From 48e477893fdc3cd87b46e445b1e3e2d1395c4b94 Mon Sep 17 00:00:00 2001 From: brain Date: Wed, 14 Dec 2005 16:07:04 +0000 Subject: Removed depreciated docs git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@2420 e03df62e-2008-0410-955e-edbf42e46eb7 --- docs/module-doc/servers_8cpp-source.html | 575 ------------------------------- 1 file changed, 575 deletions(-) delete mode 100644 docs/module-doc/servers_8cpp-source.html (limited to 'docs/module-doc/servers_8cpp-source.html') diff --git a/docs/module-doc/servers_8cpp-source.html b/docs/module-doc/servers_8cpp-source.html deleted file mode 100644 index 297f887fa..000000000 --- a/docs/module-doc/servers_8cpp-source.html +++ /dev/null @@ -1,575 +0,0 @@ - - -InspIRCd: servers.cpp Source File - - - -
Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Namespace Members | Compound Members | File Members
-

servers.cpp

Go to the documentation of this file.
00001 /*       +------------------------------------+
-00002  *       | Inspire Internet Relay Chat Daemon |
-00003  *       +------------------------------------+
-00004  *
-00005  *  Inspire is copyright (C) 2002-2004 ChatSpike-Dev.
-00006  *                       E-mail:
-00007  *                <brain@chatspike.net>
-00008  *                <Craig@chatspike.net>
-00009  *     
-00010  * Written by Craig Edwards, Craig McLure, and others.
-00011  * This program is free but copyrighted software; see
-00012  *            the file COPYING for details.
-00013  *
-00014  * ---------------------------------------------------
-00015  */
-00016 
-00017 using namespace std;
-00018 
-00019 #include "inspircd_config.h" 
-00020 #include "servers.h"
-00021 #include "inspircd.h"
-00022 #include <unistd.h>
-00023 #include <fcntl.h>
-00024 #include <poll.h>
-00025 #include <sys/errno.h>
-00026 #include <sys/ioctl.h>
-00027 #include <sys/utsname.h>
-00028 #include <vector>
-00029 #include <string>
-00030 #include <deque>
-00031 #include <sstream>
-00032 #include <map>
-00033 #include "inspstring.h"
-00034 #include "helperfuncs.h"
-00035 #include "connection.h"
-00036 
-00037 extern time_t TIME;
-00038 extern int MaxConn;
-00039 
-00040 extern serverrec* me[32];
-00041 
-00042 extern bool has_been_netsplit;
-00043 
-00044 std::deque<std::string> xsums;
-00045 
-00046 serverrec::serverrec()
-00047 {
-00048         strlcpy(name,"",256);
-00049         pingtime = 0;
-00050         lastping = TIME;
-00051         usercount_i = usercount = opercount = version = 0;
-00052         hops_away = 1;
-00053         signon = TIME;
-00054         jupiter = false;
-00055         fd = 0;
-00056         sync_soon = false;
-00057         strlcpy(nickserv,"",NICKMAX);
-00058         connectors.clear();
-00059 }
-00060 
-00061  
-00062 serverrec::~serverrec()
-00063 {
-00064 }
-00065 
-00066 serverrec::serverrec(char* n, long ver, bool jupe)
-00067 {
-00068         strlcpy(name,n,256);
-00069         lastping = TIME;
-00070         usercount_i = usercount = opercount = 0;
-00071         version = ver;
-00072         hops_away = 1;
-00073         signon = TIME;
-00074         jupiter = jupe;
-00075         fd = 0;
-00076         sync_soon = false;
-00077         strlcpy(nickserv,"",NICKMAX);
-00078         connectors.clear();
-00079 }
-00080 
-00081 bool serverrec::CreateListener(char* newhost, int p)
-00082 {
-00083         sockaddr_in host_address;
-00084         int flags;
-00085         in_addr addy;
-00086         int on = 0;
-00087         struct linger linger = { 0 };
-00088 
-00089         this->port = p;
-00090 
-00091         fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-00092         if (fd <= 0)
-00093         {
-00094                 return false;
-00095         }
-00096 
-00097         setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,(const char*)&on,sizeof(on));
-00098         linger.l_onoff = 1;
-00099         linger.l_linger = 1;
-00100         setsockopt(fd,SOL_SOCKET,SO_LINGER,(const char*)&linger,sizeof(linger));
-00101 
-00102         // attempt to increase socket sendq and recvq as high as its possible
-00103         // to get them on linux.
-00104         int sendbuf = 32768;
-00105         int recvbuf = 32768;
-00106         setsockopt(fd,SOL_SOCKET,SO_SNDBUF,(const void *)&sendbuf,sizeof(sendbuf));
-00107         setsockopt(fd,SOL_SOCKET,SO_RCVBUF,(const void *)&recvbuf,sizeof(sendbuf));
-00108 
-00109         memset((void*)&host_address, 0, sizeof(host_address));
-00110 
-00111         host_address.sin_family = AF_INET;
-00112 
-00113         if (!strcmp(newhost,""))
-00114         {
-00115                 host_address.sin_addr.s_addr = htonl(INADDR_ANY);
-00116         }
-00117         else
-00118         {
-00119                 inet_aton(newhost,&addy);
-00120                 host_address.sin_addr = addy;
-00121         }
-00122 
-00123         host_address.sin_port = htons(p);
-00124 
-00125         if (bind(fd,(sockaddr*)&host_address,sizeof(host_address))<0)
-00126         {
-00127                 return false;
-00128         }
-00129 
-00130         // make the socket non-blocking
-00131         flags = fcntl(fd, F_GETFL, 0);
-00132         fcntl(fd, F_SETFL, flags | O_NONBLOCK);
-00133 
-00134         this->port = p;
-00135 
-00136         listen(this->fd, MaxConn);
-00137 
-00138         return true;
-00139 }
-00140 
-00141 
-00142 bool serverrec::BeginLink(char* targethost, int newport, char* password, char* servername, int myport)
-00143 {
-00144         char connect[MAXBUF];
-00145 
-00146         ircd_connector connector;
-00147         ircd_connector *cn = this->FindHost(servername);
-00148 
-00149 
-00150         if (cn)
-00151         {
-00152                 WriteOpers("CONNECT aborted: Server %s already exists",servername);
-00153                 return false;
-00154         }
-00155 
-00156 
-00157         if (this->fd)
-00158         {
-00159                 if (connector.MakeOutboundConnection(targethost,newport))
-00160                 {
-00161                         // targethost has been turned into an ip...
-00162                         // we dont want this as the server name.
-00163                         connector.SetServerName(servername);
-00164                         snprintf(connect,MAXBUF,"S %s %s %lu %s :%s",getservername().c_str(),password,(unsigned long)myport,GetRevision().c_str(),getserverdesc().c_str());
-00165                         connector.SetState(STATE_NOAUTH_OUTBOUND);
-00166                         connector.SetHostAndPort(targethost, newport);
-00167                         this->connectors.push_back(connector);
-00168                         // this packet isn't actually sent until the socket connects -- the STATE_NOAUTH_OUTBOUND state
-00169                         // queues outbound data until the socket is polled as writeable (e.g. the connection is established)
-00170                         return this->SendPacket(connect, servername);
-00171                 }
-00172                 else
-00173                 {
-00174                         connector.SetState(STATE_DISCONNECTED);
-00175                         WriteOpers("Could not create outbound connection to %s:%d",targethost,newport);
-00176                 }
-00177         }
-00178         return false;
-00179 }
-00180 
-00181 
-00182 bool serverrec::MeshCookie(char* targethost, int newport, unsigned long cookie, char* servername)
-00183 {
-00184         char connect[MAXBUF];
-00185 
-00186         ircd_connector connector;
-00187 
-00188         WriteOpers("Establishing meshed link to %s:%d",servername,newport);
-00189 
-00190         if (this->fd)
-00191         {
-00192                 if (connector.MakeOutboundConnection(targethost,newport))
-00193                 {
-00194                         // targethost has been turned into an ip...
-00195                         // we dont want this as the server name.
-00196                         connector.SetServerName(servername);
-00197                         snprintf(connect,MAXBUF,"- %lu %s :%s",cookie,getservername().c_str(),getserverdesc().c_str());
-00198                         connector.SetState(STATE_NOAUTH_OUTBOUND);
-00199                         connector.SetHostAndPort(targethost, newport);
-00200                         this->connectors.push_back(connector);
-00201                         return this->SendPacket(connect, servername);
-00202                 }
-00203                 else
-00204                 {
-00205                         connector.SetState(STATE_DISCONNECTED);
-00206                         WriteOpers("Could not create outbound connection to %s:%d",targethost,newport);
-00207                 }
-00208         }
-00209         return false;
-00210 }
-00211 
-00212 bool serverrec::AddIncoming(int newfd, char* targethost, int sourceport)
-00213 {
-00214         ircd_connector connector;
-00215 
-00216         // targethost has been turned into an ip...
-00217         // we dont want this as the server name.
-00218         connector.SetServerName(targethost);
-00219         connector.SetDescriptor(newfd);
-00220         connector.SetState(STATE_NOAUTH_INBOUND);
-00221         int flags = fcntl(newfd, F_GETFL, 0);
-00222         fcntl(newfd, F_SETFL, flags | O_NONBLOCK);
-00223         int sendbuf = 32768;
-00224         int recvbuf = 32768;
-00225         setsockopt(newfd,SOL_SOCKET,SO_SNDBUF,(const void *)&sendbuf,sizeof(sendbuf));
-00226         setsockopt(newfd,SOL_SOCKET,SO_RCVBUF,(const void *)&recvbuf,sizeof(sendbuf));
-00227         connector.SetHostAndPort(targethost, sourceport);
-00228         connector.SetState(STATE_NOAUTH_INBOUND);
-00229         log(DEBUG,"serverrec::AddIncoming() Added connection: %s:%d",targethost,sourceport);
-00230         this->connectors.push_back(connector);
-00231         return true;
-00232 }
-00233 
-00234 void serverrec::TerminateLink(char* targethost)
-00235 {
-00236         // this locates the targethost in the serverrec::connectors vector of the class,
-00237        // and terminates it by sending it an SQUIT token and closing its descriptor.
-00238         // TerminateLink with a null string causes a terminate of ALL links
-00239 }
-00240 
-00241 // Returns a pointer to the connector for 'host'
-00242 ircd_connector* serverrec::FindHost(std::string findhost)
-00243 {
-00244         for (int i = 0; i < this->connectors.size(); i++)
-00245         {
-00246                 if (this->connectors[i].GetServerName() == findhost)
-00247                 {
-00248                         return &this->connectors[i];
-00249                 }
-00250         }
-00251         return NULL;
-00252 }
-00253 
-00254 
-00255 // Checks to see if we can still reach a server at all (e.g. is it in ANY routing table?)
-00256 bool IsRoutable(std::string servername)
-00257 {
-00258         int c = 0;
-00259         for (int x = 0; x < 32; x++)
-00260         if (me[x])
-00261         {
-00262                 for (int i = 0; i < me[x]->connectors.size(); i++)
-00263                 {
-00264                         if ((me[x]->connectors[i].GetServerName() == servername) && (me[x]->connectors[i].GetState() != STATE_DISCONNECTED))
-00265                         {
-00266                                 c++;
-00267                         }
-00268                 }
-00269         }
-00270         return (c != 0);
-00271 }
-00272 
-00273 
-00274 void serverrec::FlushWriteBuffers()
-00275 {
-00276         char buffer[MAXBUF];
-00277         for (int i = 0; i < this->connectors.size(); i++)
-00278         {
-00279                 // don't try and ping a NOAUTH_OUTBOUND state, its not authed yet!
-00280                 if ((this->connectors[i].GetState() == STATE_NOAUTH_OUTBOUND) && (TIME > this->connectors[i].age+30))
-00281                 {
-00282                         // however if we reach this timer its connected timed out :)
-00283                         WriteOpers("*** Connection to %s timed out",this->connectors[i].GetServerName().c_str());
-00284                         snprintf(buffer,MAXBUF,"& %s",this->connectors[i].GetServerName().c_str());
-00285                         NetSendToAllExcept(this->connectors[i].GetServerName().c_str(),buffer);
-00286                         DoSplit(this->connectors[i].GetServerName().c_str());
-00287                         return;
-00288                 }
-00289                 if ((this->connectors[i].GetState() == STATE_NOAUTH_INBOUND) && (TIME > this->connectors[i].age+30))
-00290                 {
-00291                         WriteOpers("*** Connection from %s timed out",this->connectors[i].GetServerName().c_str());
-00292                         snprintf(buffer,MAXBUF,"& %s",this->connectors[i].GetServerName().c_str());
-00293                         NetSendToAllExcept(this->connectors[i].GetServerName().c_str(),buffer);
-00294                         DoSplit(this->connectors[i].GetServerName().c_str());
-00295                         return;
-00296                 }
-00297                 if (this->connectors[i].GetState() != STATE_DISCONNECTED)
-00298                 {
-00299                         if (!this->connectors[i].CheckPing())
-00300                         {
-00301                                 WriteOpers("*** Lost single connection to %s: Ping timeout",this->connectors[i].GetServerName().c_str());
-00302                                 this->connectors[i].CloseConnection();
-00303                                 this->connectors[i].SetState(STATE_DISCONNECTED);
-00304                                 if (!IsRoutable(this->connectors[i].GetServerName()))
-00305                                 {
-00306                                         WriteOpers("*** Server %s is no longer routable, disconnecting.",this->connectors[i].GetServerName().c_str());
-00307                                         snprintf(buffer,MAXBUF,"& %s",this->connectors[i].GetServerName().c_str());
-00308                                         NetSendToAllExcept(this->connectors[i].GetServerName().c_str(),buffer);
-00309                                         DoSplit(this->connectors[i].GetServerName().c_str());
-00310                                 }
-00311                                 has_been_netsplit = true;
-00312                         }
-00313                 }
-00314                 if ((this->connectors[i].GetWriteError() !="") && (this->connectors[i].GetState() != STATE_DISCONNECTED))
-00315                 {
-00316                         // if we're here the write() caused an error, we cannot proceed
-00317                         WriteOpers("*** Lost single connection to %s, link inactive and retrying: %s",this->connectors[i].GetServerName().c_str(),this->connectors[i].GetWriteError().c_str());
-00318                         this->connectors[i].CloseConnection();
-00319                         this->connectors[i].SetState(STATE_DISCONNECTED);
-00320                         if (!IsRoutable(this->connectors[i].GetServerName()))
-00321                         {
-00322                                 WriteOpers("*** Server %s is no longer routable, disconnecting.",this->connectors[i].GetServerName().c_str());
-00323                                 snprintf(buffer,MAXBUF,"& %s",this->connectors[i].GetServerName().c_str());
-00324                                 NetSendToAllExcept(this->connectors[i].GetServerName().c_str(),buffer);
-00325                                 DoSplit(this->connectors[i].GetServerName().c_str());
-00326                         }
-00327                         has_been_netsplit = true;
-00328                 }
-00329                 if ((this->connectors[i].HasBufferedOutput()) && (this->connectors[i].GetState() != STATE_DISCONNECTED))
-00330                 {
-00331                         if (!this->connectors[i].FlushWriteBuf())
-00332                         {
-00333                                 // if we're here the write() caused an error, we cannot proceed
-00334                                 WriteOpers("*** Lost single connection to %s, link inactive and retrying: %s",this->connectors[i].GetServerName().c_str(),this->connectors[i].GetWriteError().c_str());
-00335                                 this->connectors[i].CloseConnection();
-00336                                 this->connectors[i].SetState(STATE_DISCONNECTED);
-00337                                 if (!IsRoutable(this->connectors[i].GetServerName()))
-00338                                 {
-00339                                         WriteOpers("*** Server %s is no longer routable, disconnecting.",this->connectors[i].GetServerName().c_str());
-00340                                         snprintf(buffer,MAXBUF,"& %s",this->connectors[i].GetServerName().c_str());
-00341                                         NetSendToAllExcept(this->connectors[i].GetServerName().c_str(),buffer);
-00342                                         DoSplit(this->connectors[i].GetServerName().c_str());
-00343                                 }
-00344                                 has_been_netsplit = true;
-00345                         }
-00346                 }
-00347         }
-00348 }
-00349 
-00350 bool serverrec::SendPacket(char *message, const char* sendhost)
-00351 {
-00352         if ((!message) || (!sendhost))
-00353                 return true;
-00354 
-00355         ircd_connector* cn = this->FindHost(sendhost);
-00356 
-00357         if (!strchr(message,'\n'))
-00358         {
-00359                 strlcat(message,"\n",MAXBUF);
-00360         }
-00361 
-00362         if (cn)
-00363         {
-00364                 log(DEBUG,"main: serverrec::SendPacket() sent '%s' to %s",message,cn->GetServerName().c_str());
-00365 
-00366                 if (cn->GetState() == STATE_DISCONNECTED)
-00367                 {
-00368                         // fix: can only route one hop to avoid a loop
-00369                         if (strncmp(message,"R ",2))
-00370                         {
-00371                                 log(DEBUG,"Not a double reroute");
-00372                                 // this route is down, we must re-route the packet through an available point in the mesh.
-00373                                 for (int k = 0; k < this->connectors.size(); k++)
-00374                                 {
-00375                                         log(DEBUG,"Check connector %d: %s",k,this->connectors[k].GetServerName().c_str());
-00376                                         // search for another point in the mesh which can 'reach' where we want to go
-00377                                         for (int m = 0; m < this->connectors[k].routes.size(); m++)
-00378                                         {
-00379                                                 if (!strcasecmp(this->connectors[k].routes[m].c_str(),sendhost))
-00380                                                 {
-00381                                                         log(DEBUG,"Found alternative route for packet: %s",this->connectors[k].GetServerName().c_str());
-00382                                                         char buffer[MAXBUF];
-00383                                                         snprintf(buffer,MAXBUF,"R %s %s",sendhost,message);
-00384                                                         this->SendPacket(buffer,this->connectors[k].GetServerName().c_str());
-00385                                                         return true;
-00386                                                 }
-00387                                         }
-00388                                 }
-00389                         }
-00390                         char buffer[MAXBUF];
-00391                         snprintf(buffer,MAXBUF,"& %s",sendhost);
-00392                         WriteOpers("*** All connections to %s lost.",sendhost);
-00393                         NetSendToAllExcept(sendhost,buffer);
-00394                         DoSplit(sendhost);
-00395                         return false;
-00396                 }
-00397 
-00398                 // returns false if the packet could not be sent (e.g. target host down)
-00399                 if (!cn->AddWriteBuf(message))
-00400                 {
-00401                         // if we're here, there was an error pending, and the send cannot proceed
-00402                         log(DEBUG,"cn->AddWriteBuf() failed for serverrec::SendPacket(): %s",cn->GetWriteError().c_str());
-00403                         log(DEBUG,"Disabling connector: %s",cn->GetServerName().c_str());
-00404                         cn->CloseConnection();
-00405                         cn->SetState(STATE_DISCONNECTED);
-00406                         WriteOpers("*** Lost single connection to %s, link inactive and retrying: %s",cn->GetServerName().c_str(),cn->GetWriteError().c_str());
-00407                         // retry the packet along a new route so either arrival OR failure are gauranteed (bugfix)
-00408                         return this->SendPacket(message,sendhost);
-00409                 }
-00410                 if (!cn->FlushWriteBuf())
-00411                 {
-00412                         // if we're here the write() caused an error, we cannot proceed
-00413                         log(DEBUG,"cn->FlushWriteBuf() failed for serverrec::SendPacket(): %s",cn->GetWriteError().c_str());
-00414                         log(DEBUG,"Disabling connector: %s",cn->GetServerName().c_str());
-00415                         cn->CloseConnection();
-00416                         cn->SetState(STATE_DISCONNECTED);
-00417                         WriteOpers("*** Lost single connection to %s, link inactive and retrying: %s",cn->GetServerName().c_str(),cn->GetWriteError().c_str());
-00418                         // retry the packet along a new route so either arrival OR failure are gauranteed
-00419                         return this->SendPacket(message,sendhost);
-00420                 }
-00421                 return true;
-00422         }
-00423 }
-00424 
-00425 bool already_have_sum(std::string sum)
-00426 {
-00427         for (int i = 0; i < xsums.size(); i++)
-00428         {
-00429                 if (xsums[i] == sum)
-00430                 {
-00431                         return true;
-00432                 }
-00433         }
-00434         if (xsums.size() >= 128)
-00435         {
-00436                 xsums.pop_front();
-00437         }
-00438         xsums.push_back(sum);
-00439         return false;
-00440 }
-00441 
-00442 // receives a packet from any where there is data waiting, first come, first served
-00443 // fills the message and host values with the host where the data came from.
-00444 
-00445 bool serverrec::RecvPacket(std::deque<std::string> &messages, char* recvhost,std::deque<std::string> &sums)
-00446 {
-00447         char data[65536],buffer[MAXBUF];
-00448         memset(data, 0, 65536);
-00449         for (int i = 0; i < this->connectors.size(); i++)
-00450         {
-00451                 if (this->connectors[i].GetState() != STATE_DISCONNECTED)
-00452                 {
-00453                         // returns false if the packet could not be sent (e.g. target host down)
-00454                         int rcvsize = 0;
-00455 
-00456                         // check if theres any data on this socket
-00457                         // if not, continue onwards to the next.
-00458                         pollfd polls;
-00459                         polls.fd = this->connectors[i].GetDescriptor();
-00460                         polls.events = POLLIN;
-00461                         int ret = poll(&polls,1,1);
-00462                         if (ret <= 0) continue;
-00463 
-00464                         rcvsize = recv(this->connectors[i].GetDescriptor(),data,65000,0);
-00465                         data[rcvsize] = '\0';
-00466                         if (rcvsize == 0)
-00467                         {
-00468                                 log(DEBUG,"recv() failed for serverrec::RecvPacket(): EOF");
-00469                                 log(DEBUG,"Disabling connector: %s",this->connectors[i].GetServerName().c_str());
-00470                                 this->connectors[i].CloseConnection();
-00471                                 this->connectors[i].SetState(STATE_DISCONNECTED);
-00472                                 if (!IsRoutable(this->connectors[i].GetServerName()))
-00473                                 {
-00474                                         WriteOpers("*** Server %s is no longer routable, disconnecting (EOF)",this->connectors[i].GetServerName().c_str());
-00475                                         snprintf(buffer,MAXBUF,"& %s",this->connectors[i].GetServerName().c_str());
-00476                                         NetSendToAllExcept(this->connectors[i].GetServerName().c_str(),buffer);
-00477                                         DoSplit(this->connectors[i].GetServerName().c_str());
-00478                                 }
-00479                                 has_been_netsplit = true;
-00480                         }
-00481                         if (rcvsize == -1)
-00482                         {
-00483                                 if (errno != EAGAIN)
-00484                                 {
-00485                                         log(DEBUG,"recv() failed for serverrec::RecvPacket(): %s",strerror(errno));
-00486                                         log(DEBUG,"Disabling connector: %s",this->connectors[i].GetServerName().c_str());
-00487                                         this->connectors[i].CloseConnection();
-00488                                         this->connectors[i].SetState(STATE_DISCONNECTED);
-00489                                         if (!IsRoutable(this->connectors[i].GetServerName()))
-00490                                         {
-00491                                                 WriteOpers("*** Server %s is no longer routable, disconnecting.",this->connectors[i].GetServerName().c_str());
-00492                                                 snprintf(buffer,MAXBUF,"& %s",this->connectors[i].GetServerName().c_str());
-00493                                                 NetSendToAllExcept(this->connectors[i].GetServerName().c_str(),buffer);
-00494                                                 DoSplit(this->connectors[i].GetServerName().c_str());
-00495                                         }
-00496                                         has_been_netsplit = true;
-00497                                 }
-00498                         }
-00499                         int pushed = 0;
-00500                         if (rcvsize > 0)
-00501                         {
-00502                                 if (!this->connectors[i].AddBuffer(data))
-00503                                 {
-00504                                         WriteOpers("*** Read buffer for %s exceeds maximum, closing connection!",this->connectors[i].GetServerName().c_str());
-00505                                         this->connectors[i].CloseConnection();
-00506                                         this->connectors[i].SetState(STATE_DISCONNECTED);
-00507                                         if (!IsRoutable(this->connectors[i].GetServerName()))
-00508                                         {
-00509                                                 WriteOpers("*** Server %s is no longer routable, disconnecting.",this->connectors[i].GetServerName().c_str());
-00510                                                 snprintf(buffer,MAXBUF,"& %s",this->connectors[i].GetServerName().c_str());
-00511                                                 NetSendToAllExcept(this->connectors[i].GetServerName().c_str(),buffer);
-00512                                                 DoSplit(this->connectors[i].GetServerName().c_str());
-00513                                         }
-00514                                         has_been_netsplit = true;
-00515                                 }
-00516                                 if (this->connectors[i].BufferIsComplete())
-00517                                 {
-00518                                         this->connectors[i].ResetPing();
-00519                                         while (this->connectors[i].BufferIsComplete())
-00520                                         {
-00521                                                 std::string text = this->connectors[i].GetBuffer();
-00522                                                 if (text != "")
-00523                                                 {
-00524                                                         if ((text[0] == ':') && (text.find(" ") != std::string::npos))
-00525                                                         {
-00526                                                                 std::string orig = text;
-00527                                                                 log(DEBUG,"Original: %s",text.c_str());
-00528                                                                 std::string sum = text.substr(1,text.find(" ")-1);
-00529                                                                 text = text.substr(text.find(" ")+1,text.length());
-00530                                                                 std::string possible_token = text.substr(1,text.find(" ")-1);
-00531                                                                 if (possible_token.length() > 1)
-00532                                                                 {
-00533                                                                         sums.push_back("*");
-00534                                                                         text = orig;
-00535                                                                         log(DEBUG,"Non-mesh, non-tokenized string passed up the chain");
-00536                                                                 }
-00537                                                                 else
-00538                                                                 {
-00539                                                                         log(DEBUG,"Packet sum: '%s'",sum.c_str());
-00540                                                                         if ((already_have_sum(sum)) && (sum != "*"))
-00541                                                                         {
-00542                                                                                 // we don't accept dupes
-00543                                                                                 continue;
-00544                                                                         }
-00545                                                                         sums.push_back(sum.c_str());
-00546                                                                 }
-00547                                                         }
-00548                                                         else sums.push_back("*");
-00549                                                         messages.push_back(text.c_str());
-00550                                                         strlcpy(recvhost,this->connectors[i].GetServerName().c_str(),160);
-00551                                                         log(DEBUG,"serverrec::RecvPacket() %d:%s->%s",pushed++,recvhost,text.c_str());
-00552                                                 }
-00553                                         }
-00554                                         return true;
-00555                                 }
-00556                         }
-00557                 }
-00558         }
-00559         // nothing new yet -- message and host will be undefined
-00560         return false;
-00561 }
-00562 
-

Generated on Mon May 30 05:15:21 2005 for InspIRCd by - -doxygen -1.3.3
- - -- cgit v1.3.1-10-gc9f91