* we can resort to recursion to walk the tree structure.
*/
+using irc::sockets::MatchCIDR;
+
class ModuleSpanningTree;
static ModuleSpanningTree* TreeProtocolModule;
-extern ServerConfig* Config;
extern InspIRCd* ServerInstance;
+
extern std::vector<Module*> modules;
extern std::vector<ircd_module*> factory;
extern int MODCOUNT;
*/
enum ServerState { LISTENER, CONNECTING, WAIT_AUTH_1, WAIT_AUTH_2, CONNECTED };
-/* We need to import these from the core for use in netbursts */
-extern user_hash clientlist;
-extern chan_hash chanlist;
-
/* Foward declarations */
class TreeServer;
class TreeSocket;
ServerDesc = "";
VersionString = "";
UserCount = OperCount = 0;
- VersionString = Srv->GetVersion();
+ VersionString = ServerInstance->GetVersionString();
}
/* We use this constructor only to create the 'root' item, TreeRoot, which
Parent = NULL;
VersionString = "";
UserCount = OperCount = 0;
- VersionString = Srv->GetVersion();
+ VersionString = ServerInstance->GetVersionString();
Route = NULL;
Socket = NULL; /* Fix by brain */
AddHashEntry();
log(DEBUG,"Removing all users from server %s",this->ServerName.c_str());
const char* reason_s = reason.c_str();
std::vector<userrec*> time_to_die;
- for (user_hash::iterator n = clientlist.begin(); n != clientlist.end(); n++)
+ for (user_hash::iterator n = ServerInstance->clientlist.begin(); n != ServerInstance->clientlist.end(); n++)
{
if (!strcmp(n->second->server, this->ServerName.c_str()))
{
userrec* a = (userrec*)*n;
log(DEBUG,"Kill %s fd=%d",a->nick,a->fd);
if (!IS_LOCAL(a))
- kill_link(a,reason_s);
+ userrec::QuitUser(ServerInstance,a,reason_s);
}
return time_to_die.size();
}
void Handle (const char** parameters, int pcnt, userrec *user)
{
- WriteServ(user->fd,"NOTICE %s :*** RCONNECT: Sending remote connect to \002%s\002 to connect server \002%s\002.",user->nick,parameters[0],parameters[1]);
+ user->WriteServ("NOTICE %s :*** RCONNECT: Sending remote connect to \002%s\002 to connect server \002%s\002.",user->nick,parameters[0],parameters[1]);
/* Is this aimed at our server? */
if (Srv->MatchText(Srv->GetServerName(),parameters[0]))
{
/* Yes, initiate the given connect */
- WriteOpers("*** Remote CONNECT from %s matching \002%s\002, connecting server \002%s\002",user->nick,parameters[0],parameters[1]);
+ ServerInstance->WriteOpers("*** Remote CONNECT from %s matching \002%s\002, connecting server \002%s\002",user->nick,parameters[0],parameters[1]);
const char* para[1];
para[0] = parameters[1];
Creator->OnPreCommand("CONNECT", para, 1, user, true);
* most of the action, and append a few of our own values
* to it.
*/
- TreeSocket(std::string host, int port, bool listening, unsigned long maxtime)
- : InspSocket(host, port, listening, maxtime)
+ TreeSocket(InspIRCd* SI, std::string host, int port, bool listening, unsigned long maxtime)
+ : InspSocket(SI, host, port, listening, maxtime)
{
myhost = host;
this->LinkState = LISTENER;
this->ctx_out = NULL;
}
- TreeSocket(std::string host, int port, bool listening, unsigned long maxtime, std::string ServerName)
- : InspSocket(host, port, listening, maxtime)
+ TreeSocket(InspIRCd* SI, std::string host, int port, bool listening, unsigned long maxtime, std::string ServerName)
+ : InspSocket(SI, host, port, listening, maxtime)
{
myhost = ServerName;
this->LinkState = CONNECTING;
* we must associate it with a socket without creating a new
* connection. This constructor is used for this purpose.
*/
- TreeSocket(int newfd, char* ip)
- : InspSocket(newfd, ip)
+ TreeSocket(InspIRCd* SI, int newfd, char* ip)
+ : InspSocket(SI, newfd, ip)
{
this->LinkState = WAIT_AUTH_1;
this->ctx_in = NULL;
keylength = key.length();
if (!(keylength == 16 || keylength == 24 || keylength == 32))
{
- WriteOpers("*** \2ERROR\2: Key length for encryptionkey is not 16, 24 or 32 bytes in length!");
+ ServerInstance->WriteOpers("*** \2ERROR\2: Key length for encryptionkey is not 16, 24 or 32 bytes in length!");
log(DEBUG,"Key length not 16, 24 or 32 characters!");
}
else
{
- WriteOpers("*** \2AES\2: Initialized %d bit encryption to server %s",keylength*8,SName.c_str());
+ ServerInstance->WriteOpers("*** \2AES\2: Initialized %d bit encryption to server %s",keylength*8,SName.c_str());
ctx_in->MakeKey(key.c_str(), "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", keylength, keylength);
ctx_out->MakeKey(key.c_str(), "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
{
if (x->Name == this->myhost)
{
- Srv->SendOpers("*** Connection to \2"+myhost+"\2["+(x->HiddenFromStats ? "<hidden>" : this->GetIP())+"] established.");
+ ServerInstance->WriteOpers("*** Connection to \2"+myhost+"\2["+(x->HiddenFromStats ? "<hidden>" : this->GetIP())+"] established.");
this->SendCapabilities();
if (x->EncryptionKey != "")
{
if (!(x->EncryptionKey.length() == 16 || x->EncryptionKey.length() == 24 || x->EncryptionKey.length() == 32))
{
- WriteOpers("\2WARNING\2: Your encryption key is NOT 16, 24 or 32 characters in length, encryption will \2NOT\2 be enabled.");
+ ServerInstance->WriteOpers("\2WARNING\2: Your encryption key is NOT 16, 24 or 32 characters in length, encryption will \2NOT\2 be enabled.");
}
else
{
* If that happens the connection hangs here until it's closed. Unlikely
* and rather harmless.
*/
- Srv->SendOpers("*** Connection to \2"+myhost+"\2 lost link tag(!)");
+ ServerInstance->WriteOpers("*** Connection to \2"+myhost+"\2 lost link tag(!)");
return true;
}
*/
if (e == I_ERR_CONNECT)
{
- Srv->SendOpers("*** Connection failed: Connection refused");
+ ServerInstance->WriteOpers("*** Connection failed: Connection refused");
}
}
std::string MyCapabilities()
{
- ServerConfig* Config = Srv->GetConfig();
std::vector<std::string> modlist;
std::string capabilities = "";
for (int i = 0; i <= MODCOUNT; i++)
{
if ((modules[i]->GetVersion().Flags & VF_STATIC) || (modules[i]->GetVersion().Flags & VF_COMMON))
- modlist.push_back(Config->module_names[i]);
+ modlist.push_back(ServerInstance->Config->module_names[i]);
}
sort(modlist.begin(),modlist.end());
for (unsigned int i = 0; i < modlist.size(); i++)
quitserver = this->InboundServerName;
}
- WriteOpers("*** \2ERROR\2: Server '%s' does not have the same set of modules loaded, cannot link!",quitserver.c_str());
- WriteOpers("*** Our networked module set is: '%s'",this->MyCapabilities().c_str());
- WriteOpers("*** Other server's networked module set is: '%s'",params[0].c_str());
- WriteOpers("*** These lists must match exactly on both servers. Please correct these errors, and try again.");
+ ServerInstance->WriteOpers("*** \2ERROR\2: Server '%s' does not have the same set of modules loaded, cannot link!",quitserver.c_str());
+ ServerInstance->WriteOpers("*** Our networked module set is: '%s'",this->MyCapabilities().c_str());
+ ServerInstance->WriteOpers("*** Other server's networked module set is: '%s'",params[0].c_str());
+ ServerInstance->WriteOpers("*** These lists must match exactly on both servers. Please correct these errors, and try again.");
this->WriteLine("ERROR :CAPAB mismatch; My capabilities: '"+this->MyCapabilities()+"'");
return false;
}
DoOneToAllButSender(Current->GetParent()->GetName(),"SQUIT",params,Current->GetName());
if (Current->GetParent() == TreeRoot)
{
- Srv->SendOpers("Server \002"+Current->GetName()+"\002 split: "+reason);
+ ServerInstance->WriteOpers("Server \002"+Current->GetName()+"\002 split: "+reason);
}
else
{
- Srv->SendOpers("Server \002"+Current->GetName()+"\002 split from server \002"+Current->GetParent()->GetName()+"\002 with reason: "+reason);
+ ServerInstance->WriteOpers("Server \002"+Current->GetName()+"\002 split from server \002"+Current->GetParent()->GetName()+"\002 with reason: "+reason);
}
num_lost_servers = 0;
num_lost_users = 0;
Current->Tidy();
Current->GetParent()->DelChild(Current);
DELETE(Current);
- WriteOpers("Netsplit complete, lost \002%d\002 users on \002%d\002 servers.", num_lost_users, num_lost_servers);
+ ServerInstance->WriteOpers("Netsplit complete, lost \002%d\002 users on \002%d\002 servers.", num_lost_users, num_lost_servers);
}
else
{
std::string sourceserv;
/* Are we dealing with an FMODE from a user, or from a server? */
- userrec* who = Srv->FindNick(source);
+ userrec* who = ServerInstance->FindNick(source);
if (who)
{
/* FMODE from a user, set sourceserv to the users server name */
else
{
/* FMODE from a server, create a fake user to receive mode feedback */
- who = new userrec();
+ who = new userrec(ServerInstance);
who->fd = FD_MAGIC_NUMBER;
smode = true; /* Setting this flag tells us we should free the userrec later */
sourceserv = source; /* Set sourceserv to the actual source string */
}
/* Extract the TS value of the object, either userrec or chanrec */
- userrec* dst = Srv->FindNick(params[0]);
+ userrec* dst = ServerInstance->FindNick(params[0]);
chanrec* chan = NULL;
time_t ourTS = 0;
if (dst)
}
else
{
- chan = Srv->FindChannel(params[0]);
+ chan = ServerInstance->FindChan(params[0]);
if (chan)
{
ourTS = chan->age;
*/
if ((Srv->IsUlined(sourceserv)) && (TS > ourTS))
{
- WriteOpers("\2WARNING!\2 U-Lined server '%s' has bad TS for '%s' (accepted change): \2SYNC YOUR CLOCKS\2 to avoid this notice",sourceserv.c_str(),params[0].c_str());
+ ServerInstance->WriteOpers("\2WARNING!\2 U-Lined server '%s' has bad TS for '%s' (accepted change): \2SYNC YOUR CLOCKS\2 to avoid this notice",sourceserv.c_str(),params[0].c_str());
}
/* Allow the mode, route it to either server or user command handling */
if (smode)
time_t ts = atoi(params[1].c_str());
std::string nsource = source;
- chanrec* c = Srv->FindChannel(params[0]);
+ chanrec* c = ServerInstance->FindChan(params[0]);
if (c)
{
if ((ts >= c->topicset) || (!*c->topic))
*/
if (oldtopic != params[3])
{
- userrec* user = Srv->FindNick(source);
+ userrec* user = ServerInstance->FindNick(source);
if (!user)
{
- WriteChannelWithServ(source.c_str(), c, "TOPIC %s :%s", c->name, c->topic);
+ c->WriteChannelWithServ(source.c_str(), "TOPIC %s :%s", c->name, c->topic);
}
else
{
- WriteChannel(c, user, "TOPIC %s :%s", c->name, c->topic);
+ c->WriteChannel(user, "TOPIC %s :%s", c->name, c->topic);
nsource = user->server;
}
/* all done, send it on its way */
time_t TS = atoi(params[1].c_str());
char* key = "";
- chanrec* chan = Srv->FindChannel(channel);
+ chanrec* chan = ServerInstance->FindChan(channel);
if (chan)
{
key = chan->key;
* channel will let the other side apply their modes.
*/
time_t ourTS = time(NULL)+600;
- chanrec* us = Srv->FindChannel(channel);
+ chanrec* us = ServerInstance->FindChan(channel);
if (us)
{
ourTS = us->age;
strlcat(modestring,"v",MAXBUF);
break;
}
- who = Srv->FindNick(usr);
+ who = ServerInstance->FindNick(usr);
if (who)
{
- chanrec::JoinUser(who, channel.c_str(), true, key);
+ chanrec::JoinUser(this->Instance, who, channel.c_str(), true, key);
if (modectr >= (MAXMODES-1))
{
/* theres a mode for this user. push them onto the mode queue, and flush it
{
if (params.size() >= 2)
{
- chanrec* c = Srv->FindChannel(params[0]);
+ chanrec* c = ServerInstance->FindChan(params[0]);
if (c)
{
time_t theirTS = atoi(params[1].c_str());
const char* tempnick = params[1].c_str();
log(DEBUG,"Introduce client %s!%s@%s",tempnick,params[4].c_str(),params[2].c_str());
- user_hash::iterator iter = clientlist.find(tempnick);
+ user_hash::iterator iter = this->Instance->clientlist.find(tempnick);
- if (iter != clientlist.end())
+ if (iter != this->Instance->clientlist.end())
{
// nick collision
log(DEBUG,"Nick collision on %s!%s@%s: %lu %lu",tempnick,params[4].c_str(),params[2].c_str(),(unsigned long)age,(unsigned long)iter->second->age);
return true;
}
- clientlist[tempnick] = new userrec();
- clientlist[tempnick]->fd = FD_MAGIC_NUMBER;
- strlcpy(clientlist[tempnick]->nick, tempnick,NICKMAX-1);
- strlcpy(clientlist[tempnick]->host, params[2].c_str(),63);
- strlcpy(clientlist[tempnick]->dhost, params[3].c_str(),63);
- clientlist[tempnick]->server = FindServerNamePtr(source.c_str());
- strlcpy(clientlist[tempnick]->ident, params[4].c_str(),IDENTMAX);
- strlcpy(clientlist[tempnick]->fullname, params[7].c_str(),MAXGECOS);
- clientlist[tempnick]->registered = REG_ALL;
- clientlist[tempnick]->signon = age;
+ userrec* _new = new userrec(this->Instance);
+ this->Instance->clientlist[tempnick] = _new;
+ _new->fd = FD_MAGIC_NUMBER;
+ strlcpy(_new->nick, tempnick,NICKMAX-1);
+ strlcpy(_new->host, params[2].c_str(),63);
+ strlcpy(_new->dhost, params[3].c_str(),63);
+ _new->server = this->Instance->FindServerNamePtr(source.c_str());
+ strlcpy(_new->ident, params[4].c_str(),IDENTMAX);
+ strlcpy(_new->fullname, params[7].c_str(),MAXGECOS);
+ _new->registered = REG_ALL;
+ _new->signon = age;
for (std::string::iterator v = params[5].begin(); v != params[5].end(); v++)
- {
- clientlist[tempnick]->modes[(*v)-65] = 1;
- }
+ _new->modes[(*v)-65] = 1;
if (params[6].find_first_of(":") != std::string::npos)
- clientlist[tempnick]->SetSockAddr(AF_INET6, params[6].c_str(), 0);
+ _new->SetSockAddr(AF_INET6, params[6].c_str(), 0);
else
- clientlist[tempnick]->SetSockAddr(AF_INET, params[6].c_str(), 0);
+ _new->SetSockAddr(AF_INET, params[6].c_str(), 0);
- WriteOpers("*** Client connecting at %s: %s!%s@%s [%s]",clientlist[tempnick]->server,clientlist[tempnick]->nick,clientlist[tempnick]->ident,clientlist[tempnick]->host, clientlist[tempnick]->GetIPString());
+ ServerInstance->WriteOpers("*** Client connecting at %s: %s!%s@%s [%s]",_new->server,_new->nick,_new->ident,_new->host, _new->GetIPString());
params[7] = ":" + params[7];
DoOneToAllButSender(source,"NICK",params,source);
TreeServer* SourceServer = FindServer(source);
if (SourceServer)
{
- log(DEBUG,"Found source server of %s",clientlist[tempnick]->nick);
+ log(DEBUG,"Found source server of %s",_new->nick);
SourceServer->AddUserCount();
}
for (CUList::iterator i = ulist->begin(); i != ulist->end(); i++)
{
- int x = cflags(i->second,c);
+ int x = c->GetStatusFlags(i->second);
if ((x & UCMODE_HOP) && (x & UCMODE_OP))
{
specific_halfop.push_back(i->second);
}
/* XXX: Send each channel mode and its params -- we'll need a method for this in ModeHandler? */
//FOREACH_MOD(I_OnSyncChannel,OnSyncChannel(c->second,(Module*)TreeProtocolModule,(void*)this));
- this->WriteLine(":"+Srv->GetServerName()+" FMODE "+c->name+" "+ConvToStr(c->age)+" +"+chanmodes(c,true)+modes+" "+params);
+ this->WriteLine(":"+Srv->GetServerName()+" FMODE "+c->name+" "+ConvToStr(c->age)+" +"+c->ChanModes(true)+modes+" "+params);
}
/* Send G, Q, Z and E lines */
int iterations = 0;
std::string n = Srv->GetServerName();
const char* sn = n.c_str();
- for (chan_hash::iterator c = chanlist.begin(); c != chanlist.end(); c++, iterations++)
+ for (chan_hash::iterator c = this->Instance->chanlist.begin(); c != this->Instance->chanlist.end(); c++, iterations++)
{
SendFJoins(Current, c->second);
if (*c->second->topic)
char data[MAXBUF];
std::deque<std::string> list;
int iterations = 0;
- for (user_hash::iterator u = clientlist.begin(); u != clientlist.end(); u++, iterations++)
+ for (user_hash::iterator u = this->Instance->clientlist.begin(); u != this->Instance->clientlist.end(); u++, iterations++)
{
if (u->second->registered == REG_ALL)
{
*/
void DoBurst(TreeServer* s)
{
- /* The calls here to ServerInstance-> yield the processing
- * back to the core so that a large burst is split into at least 6 sections
- * (possibly more)
- */
std::string burst = "BURST "+ConvToStr(time(NULL));
std::string endburst = "ENDBURST";
// Because by the end of the netburst, it could be gone!
std::string name = s->GetName();
- Srv->SendOpers("*** Bursting to \2"+name+"\2.");
+ ServerInstance->WriteOpers("*** Bursting to \2"+name+"\2.");
this->WriteLine(burst);
/* send our version string */
- this->WriteLine(":"+Srv->GetServerName()+" VERSION :"+Srv->GetVersion());
+ this->WriteLine(":"+Srv->GetServerName()+" VERSION :"+this->Instance->GetVersionString());
/* Send server tree */
this->SendServers(TreeRoot,s,1);
/* Send users and their oper status */
this->SendXLines(s);
FOREACH_MOD(I_OnSyncOtherMetaData,OnSyncOtherMetaData((Module*)TreeProtocolModule,(void*)this));
this->WriteLine(endburst);
- Srv->SendOpers("*** Finished bursting to \2"+name+"\2.");
+ ServerInstance->WriteOpers("*** Finished bursting to \2"+name+"\2.");
}
/* This function is called when we receive data from a remote
{
if (params.size() < 1)
return false;
- WriteOpers("*** ERROR from %s: %s",(InboundServerName != "" ? InboundServerName.c_str() : myhost.c_str()),params[0].c_str());
+ ServerInstance->WriteOpers("*** ERROR from %s: %s",(InboundServerName != "" ? InboundServerName.c_str() : myhost.c_str()),params[0].c_str());
/* we will return false to cause the socket to close. */
return false;
}
{
/* It's for our server */
string_list results;
- userrec* source = Srv->FindNick(prefix);
+ userrec* source = ServerInstance->FindNick(prefix);
if (source)
{
std::deque<std::string> par;
else
{
/* Pass it on */
- userrec* source = Srv->FindNick(prefix);
+ userrec* source = ServerInstance->FindNick(prefix);
if (source)
DoOneToOne(prefix, "STATS", params, params[1]);
}
return true;
}
std::string opertype = params[0];
- userrec* u = Srv->FindNick(prefix);
+ userrec* u = ServerInstance->FindNick(prefix);
if (u)
{
u->modes[UM_OPERATOR] = 1;
if (params.size() < 3)
return true;
- userrec* u = Srv->FindNick(params[0]);
+ userrec* u = ServerInstance->FindNick(params[0]);
if (u)
{
/* This is not required as one is sent in OnUserPostNick below
*/
//DoOneToMany(u->nick,"NICK",par);
- Srv->ChangeUserNick(u,params[1]);
+ if (!u->ForceNickChange(params[1].c_str()))
+ {
+ userrec::QuitUser(this->Instance, u, "Nickname collision");
+ return true;
+ }
u->age = atoi(params[2].c_str());
}
}
if (params.size() < 2)
return true;
- userrec* u = Srv->FindNick(params[0]);
+ userrec* u = ServerInstance->FindNick(params[0]);
if (u)
{
- chanrec::JoinUser(u, params[1].c_str(), false);
+ chanrec::JoinUser(this->Instance, u, params[1].c_str(), false);
DoOneToAllButSender(prefix,"SVSJOIN",params,prefix);
}
return true;
if (Srv->MatchText(Srv->GetServerName(),servermask))
{
- Srv->SendOpers("*** Remote rehash initiated from server \002"+prefix+"\002.");
+ ServerInstance->WriteOpers("*** Remote rehash initiated from server \002"+prefix+"\002.");
Srv->RehashServer();
ReadConfiguration(false);
}
return true;
std::string nick = params[0];
- userrec* u = Srv->FindNick(prefix);
- userrec* who = Srv->FindNick(nick);
+ userrec* u = ServerInstance->FindNick(prefix);
+ userrec* who = ServerInstance->FindNick(nick);
if (who)
{
std::string reason = params[1];
params[1] = ":" + params[1];
DoOneToAllButSender(prefix,"KILL",params,sourceserv);
- ::Write(who->fd, ":%s KILL %s :%s (%s)", sourceserv.c_str(), who->nick, sourceserv.c_str(), reason.c_str());
- Srv->QuitUser(who,reason);
+ who->Write(":%s KILL %s :%s (%s)", sourceserv.c_str(), who->nick, sourceserv.c_str(), reason.c_str());
+ userrec::QuitUser(this->Instance,who,reason);
}
return true;
}
* dump the PONG reply back to their fd. If its a server, do nowt.
* Services might want to send these s->s, but we dont need to yet.
*/
- userrec* u = Srv->FindNick(prefix);
+ userrec* u = ServerInstance->FindNick(prefix);
if (u)
{
- WriteServ(u->fd,"PONG %s %s",params[0].c_str(),params[1].c_str());
+ u->WriteServ("PONG %s %s",params[0].c_str(),params[1].c_str());
}
}
else
}
else if (*(params[0].c_str()) == '#')
{
- chanrec* c = Srv->FindChannel(params[0]);
+ chanrec* c = ServerInstance->FindChan(params[0]);
if (c)
{
FOREACH_MOD(I_OnDecodeMetaData,OnDecodeMetaData(TYPE_CHANNEL,c,params[1],params[2]));
}
else if (*(params[0].c_str()) != '#')
{
- userrec* u = Srv->FindNick(params[0]);
+ userrec* u = ServerInstance->FindNick(params[0]);
if (u)
{
FOREACH_MOD(I_OnDecodeMetaData,OnDecodeMetaData(TYPE_USER,u,params[1],params[2]));
if (params.size() < 1)
return true;
- userrec* u = Srv->FindNick(prefix);
+ userrec* u = ServerInstance->FindNick(prefix);
if (u)
{
- Srv->ChangeHost(u,params[0]);
+ u->ChangeDisplayedHost(params[0].c_str());
DoOneToAllButSender(prefix,"FHOST",params,u->server);
}
return true;
break;
default:
/* Just in case... */
- Srv->SendOpers("*** \2WARNING\2: Invalid xline type '"+params[0]+"' sent by server "+prefix+", ignored!");
+ ServerInstance->WriteOpers("*** \2WARNING\2: Invalid xline type '"+params[0]+"' sent by server "+prefix+", ignored!");
propogate = false;
break;
}
{
if (atoi(params[4].c_str()))
{
- WriteOpers("*** %s Added %cLINE on %s to expire in %lu seconds (%s).",prefix.c_str(),*(params[0].c_str()),params[1].c_str(),atoi(params[4].c_str()),params[5].c_str());
+ ServerInstance->WriteOpers("*** %s Added %cLINE on %s to expire in %lu seconds (%s).",prefix.c_str(),*(params[0].c_str()),params[1].c_str(),atoi(params[4].c_str()),params[5].c_str());
}
else
{
- WriteOpers("*** %s Added permenant %cLINE on %s (%s).",prefix.c_str(),*(params[0].c_str()),params[1].c_str(),params[5].c_str());
+ ServerInstance->WriteOpers("*** %s Added permenant %cLINE on %s (%s).",prefix.c_str(),*(params[0].c_str()),params[1].c_str(),params[5].c_str());
}
params[5] = ":" + params[5];
DoOneToAllButSender(prefix,"ADDLINE",params,prefix);
if (params.size() < 1)
return true;
- userrec* u = Srv->FindNick(prefix);
+ userrec* u = ServerInstance->FindNick(prefix);
if (u)
{
- Srv->ChangeGECOS(u,params[0]);
+ u->ChangeName(params[0].c_str());
params[0] = ":" + params[0];
DoOneToAllButSender(prefix,"FNAME",params,u->server);
}
return true;
log(DEBUG,"In IDLE command");
- userrec* u = Srv->FindNick(prefix);
+ userrec* u = ServerInstance->FindNick(prefix);
if (u)
{
// an incoming request
if (params.size() == 1)
{
- userrec* x = Srv->FindNick(params[0]);
+ userrec* x = ServerInstance->FindNick(params[0]);
if ((x) && (IS_LOCAL(x)))
{
- userrec* x = Srv->FindNick(params[0]);
+ userrec* x = ServerInstance->FindNick(params[0]);
log(DEBUG,"Got IDLE");
char signon[MAXBUF];
char idle[MAXBUF];
else if (params.size() == 3)
{
std::string who_did_the_whois = params[0];
- userrec* who_to_send_to = Srv->FindNick(who_did_the_whois);
+ userrec* who_to_send_to = ServerInstance->FindNick(who_did_the_whois);
if ((who_to_send_to) && (IS_LOCAL(who_to_send_to)))
{
log(DEBUG,"Got final IDLE");
if (params.size() < 2)
return true;
- userrec* u = Srv->FindNick(params[0]);
+ userrec* u = ServerInstance->FindNick(params[0]);
if (!u)
return true;
if (IS_LOCAL(u))
{
- ::Write(u->fd,"%s",params[1].c_str());
+ u->Write(params[1]);
}
else
{
// someone querying our time?
if (Srv->GetServerName() == params[0])
{
- userrec* u = Srv->FindNick(params[1]);
+ userrec* u = ServerInstance->FindNick(params[1]);
if (u)
{
char curtime[256];
else
{
// not us, pass it on
- userrec* u = Srv->FindNick(params[1]);
+ userrec* u = ServerInstance->FindNick(params[1]);
if (u)
DoOneToOne(prefix,"TIME",params,params[0]);
}
else if (params.size() == 3)
{
// a response to a previous TIME
- userrec* u = Srv->FindNick(params[1]);
+ userrec* u = ServerInstance->FindNick(params[1]);
if ((u) && (IS_LOCAL(u)))
{
time_t rawtime = atol(params[2].c_str());
char tms[26];
snprintf(tms,26,"%s",asctime(timeinfo));
tms[24] = 0;
- WriteServ(u->fd,"391 %s %s :%s",u->nick,prefix.c_str(),tms);
+ u->WriteServ("391 %s %s :%s",u->nick,prefix.c_str(),tms);
}
else
{
if (CheckDupe)
{
this->WriteLine("ERROR :Server "+servername+" already exists!");
- Srv->SendOpers("*** Server connection from \2"+servername+"\2 denied, already exists");
+ ServerInstance->WriteOpers("*** Server connection from \2"+servername+"\2 denied, already exists");
return false;
}
TreeServer* Node = new TreeServer(servername,description,ParentOfThis,NULL);
ParentOfThis->AddChild(Node);
params[3] = ":" + params[3];
DoOneToAllButSender(prefix,"SERVER",params,prefix);
- Srv->SendOpers("*** Server \002"+prefix+"\002 introduced server \002"+servername+"\002 ("+description+")");
+ ServerInstance->WriteOpers("*** Server \002"+prefix+"\002 introduced server \002"+servername+"\002 ("+description+")");
return true;
}
if (hops)
{
this->WriteLine("ERROR :Server too far away for authentication");
- Srv->SendOpers("*** Server connection from \2"+sname+"\2 denied, server is too far away for authentication");
+ ServerInstance->WriteOpers("*** Server connection from \2"+sname+"\2 denied, server is too far away for authentication");
return false;
}
std::string description = params[3];
if (CheckDupe)
{
this->WriteLine("ERROR :Server "+sname+" already exists on server "+CheckDupe->GetParent()->GetName()+"!");
- Srv->SendOpers("*** Server connection from \2"+sname+"\2 denied, already exists on server "+CheckDupe->GetParent()->GetName());
+ ServerInstance->WriteOpers("*** Server connection from \2"+sname+"\2 denied, already exists on server "+CheckDupe->GetParent()->GetName());
return false;
}
// Begin the sync here. this kickstarts the
}
}
this->WriteLine("ERROR :Invalid credentials");
- Srv->SendOpers("*** Server connection from \2"+sname+"\2 denied, invalid link credentials");
+ ServerInstance->WriteOpers("*** Server connection from \2"+sname+"\2 denied, invalid link credentials");
return false;
}
if (hops)
{
this->WriteLine("ERROR :Server too far away for authentication");
- Srv->SendOpers("*** Server connection from \2"+sname+"\2 denied, server is too far away for authentication");
+ ServerInstance->WriteOpers("*** Server connection from \2"+sname+"\2 denied, server is too far away for authentication");
return false;
}
std::string description = params[3];
if (CheckDupe)
{
this->WriteLine("ERROR :Server "+sname+" already exists on server "+CheckDupe->GetParent()->GetName()+"!");
- Srv->SendOpers("*** Server connection from \2"+sname+"\2 denied, already exists on server "+CheckDupe->GetParent()->GetName());
+ ServerInstance->WriteOpers("*** Server connection from \2"+sname+"\2 denied, already exists on server "+CheckDupe->GetParent()->GetName());
return false;
}
/* If the config says this link is encrypted, but the remote side
if ((x->EncryptionKey != "") && (!this->ctx_in))
{
this->WriteLine("ERROR :This link requires AES encryption to be enabled. Plaintext connection refused.");
- Srv->SendOpers("*** Server connection from \2"+sname+"\2 denied, remote server did not enable AES.");
+ ServerInstance->WriteOpers("*** Server connection from \2"+sname+"\2 denied, remote server did not enable AES.");
return false;
}
- Srv->SendOpers("*** Verified incoming server connection from \002"+sname+"\002["+(x->HiddenFromStats ? "<hidden>" : this->GetIP())+"] ("+description+")");
+ ServerInstance->WriteOpers("*** Verified incoming server connection from \002"+sname+"\002["+(x->HiddenFromStats ? "<hidden>" : this->GetIP())+"] ("+description+")");
this->InboundServerName = sname;
this->InboundDescription = description;
// this is good. Send our details: Our server name and description and hopcount of 0,
}
}
this->WriteLine("ERROR :Invalid credentials");
- Srv->SendOpers("*** Server connection from \2"+sname+"\2 denied, invalid link credentials");
+ ServerInstance->WriteOpers("*** Server connection from \2"+sname+"\2 denied, invalid link credentials");
return false;
}
}
else if ((this->ctx_in) && (command == "AES"))
{
- WriteOpers("*** \2AES\2: Encryption already enabled on this connection yet %s is trying to enable it twice!",params[0].c_str());
+ ServerInstance->WriteOpers("*** \2AES\2: Encryption already enabled on this connection yet %s is trying to enable it twice!",params[0].c_str());
}
switch (this->LinkState)
long delta = THEM-time(NULL);
if ((delta < -600) || (delta > 600))
{
- WriteOpers("*** \2ERROR\2: Your clocks are out by %d seconds (this is more than ten minutes). Link aborted, \2PLEASE SYNC YOUR CLOCKS!\2",abs(delta));
+ ServerInstance->WriteOpers("*** \2ERROR\2: Your clocks are out by %d seconds (this is more than ten minutes). Link aborted, \2PLEASE SYNC YOUR CLOCKS!\2",abs(delta));
this->WriteLine("ERROR :Your clocks are out by "+ConvToStr(abs(delta))+" seconds (this is more than ten minutes). Link aborted, PLEASE SYNC YOUR CLOCKS!");
return false;
}
else if ((delta < -60) || (delta > 60))
{
- WriteOpers("*** \2WARNING\2: Your clocks are out by %d seconds, please consider synching your clocks.",abs(delta));
+ ServerInstance->WriteOpers("*** \2WARNING\2: Your clocks are out by %d seconds, please consider synching your clocks.",abs(delta));
}
}
this->LinkState = CONNECTED;
if (prefix != "")
{
std::string direction = prefix;
- userrec* t = Srv->FindNick(prefix);
+ userrec* t = ServerInstance->FindNick(prefix);
if (t)
{
direction = t->server;
std::string sourceserv = this->myhost;
if (params.size() == 3)
{
- userrec* user = Srv->FindNick(params[1]);
- chanrec* chan = Srv->FindChannel(params[0]);
+ userrec* user = ServerInstance->FindNick(params[1]);
+ chanrec* chan = ServerInstance->FindChan(params[0]);
if (user && chan)
{
if (!chan->ServerKickUser(user, params[2].c_str(), false))
{
sourceserv = this->InboundServerName;
}
- WriteOpers("*** Received end of netburst from \2%s\2",sourceserv.c_str());
+ ServerInstance->WriteOpers("*** Received end of netburst from \2%s\2",sourceserv.c_str());
return true;
}
else
// not a special inter-server command.
// Emulate the actual user doing the command,
// this saves us having a huge ugly parser.
- userrec* who = Srv->FindNick(prefix);
+ userrec* who = ServerInstance->FindNick(prefix);
std::string sourceserv = this->myhost;
if (this->InboundServerName != "")
{
* already exist here. If it does, kill their copy,
* and our copy.
*/
- userrec* x = Srv->FindNick(params[0]);
+ userrec* x = ServerInstance->FindNick(params[0]);
if ((x) && (x != who))
{
std::deque<std::string> p;
p.push_back(prefix);
p.push_back("Nickname collision");
DoOneToMany(Srv->GetServerName(),"KILL",p);
- Srv->QuitUser(x,"Nickname collision ("+prefix+" -> "+params[0]+")");
- userrec* y = Srv->FindNick(prefix);
+ userrec::QuitUser(this->Instance,x,"Nickname collision ("+prefix+" -> "+params[0]+")");
+ userrec* y = ServerInstance->FindNick(prefix);
if (y)
{
- Srv->QuitUser(y,"Nickname collision");
+ userrec::QuitUser(this->Instance,y,"Nickname collision");
}
return DoOneToAllButSenderRaw(line,sourceserv,prefix,command,params);
}
{
if (this->LinkState == CONNECTING)
{
- Srv->SendOpers("*** CONNECT: Connection to \002"+myhost+"\002 timed out.");
+ ServerInstance->WriteOpers("*** CONNECT: Connection to \002"+myhost+"\002 timed out.");
}
}
{
Squit(s,"Remote host closed the connection");
}
- WriteOpers("Server '\2%s\2' closed the connection.",quitserver.c_str());
+ ServerInstance->WriteOpers("Server '\2%s\2' closed the connection.",quitserver.c_str());
}
virtual int OnIncomingConnection(int newsock, char* ip)
if (!found)
{
- WriteOpers("Server connection from %s denied (no link blocks with that IP address)", ip);
+ ServerInstance->WriteOpers("Server connection from %s denied (no link blocks with that IP address)", ip);
close(newsock);
return false;
}
}
- TreeSocket* s = new TreeSocket(newsock, ip);
+ TreeSocket* s = new TreeSocket(this->Instance, newsock, ip);
Srv->AddSocket(s);
return true;
}
*/
Link MyLink;
public:
- ServernameResolver(const std::string &hostname, Link x) : Resolver(hostname, DNS_QUERY_FORWARD), MyLink(x)
+ ServernameResolver(InspIRCd* Instance, const std::string &hostname, Link x) : Resolver(Instance, hostname, DNS_QUERY_FORWARD), MyLink(x)
{
/* Nothing in here, folks */
}
TreeServer* CheckDupe = FindServer(MyLink.Name.c_str());
if (!CheckDupe) /* Check that nobody tried to connect it successfully while we were resolving */
{
- TreeSocket* newsocket = new TreeSocket(result,MyLink.Port,false,10,MyLink.Name.c_str());
+ TreeSocket* newsocket = new TreeSocket(ServerInstance, result,MyLink.Port,false,10,MyLink.Name.c_str());
if (newsocket->GetFd() > -1)
{
/* We're all OK */
else
{
/* Something barfed, show the opers */
- WriteOpers("*** CONNECT: Error connecting \002%s\002: %s.",MyLink.Name.c_str(),strerror(errno));
+ ServerInstance->WriteOpers("*** CONNECT: Error connecting \002%s\002: %s.",MyLink.Name.c_str(),strerror(errno));
delete newsocket;
}
}
void OnError(ResolverError e, const std::string &errormessage)
{
/* Ooops! */
- WriteOpers("*** CONNECT: Error connecting \002%s\002: Unable to resolve hostname - %s",MyLink.Name.c_str(),errormessage.c_str());
+ ServerInstance->WriteOpers("*** CONNECT: Error connecting \002%s\002: Unable to resolve hostname - %s",MyLink.Name.c_str(),errormessage.c_str());
}
};
private:
Link MyLink;
public:
- SecurityIPResolver(const std::string &hostname, Link x) : Resolver(hostname, DNS_QUERY_FORWARD), MyLink(x)
+ SecurityIPResolver(InspIRCd* Instance, const std::string &hostname, Link x) : Resolver(Instance, hostname, DNS_QUERY_FORWARD), MyLink(x)
{
}
if ((*(params[0].c_str()) != '#') && (*(params[0].c_str()) != '$'))
{
// special routing for private messages/notices
- userrec* d = Srv->FindNick(params[0]);
+ userrec* d = ServerInstance->FindNick(params[0]);
if (d)
{
std::deque<std::string> par;
else
{
log(DEBUG,"Channel privmsg going to chan %s",params[0].c_str());
- chanrec* c = Srv->FindChannel(params[0]);
+ chanrec* c = ServerInstance->FindChan(params[0]);
if (c)
{
std::deque<TreeServer*> list;
{
IP = "";
}
- TreeSocket* listener = new TreeSocket(IP.c_str(),Port,true,10);
+ TreeSocket* listener = new TreeSocket(ServerInstance, IP.c_str(),Port,true,10);
if (listener->GetState() == I_LISTENING)
{
Srv->AddSocket(listener);
{
try
{
- SecurityIPResolver* sr = new SecurityIPResolver(L.IPAddr, L);
+ SecurityIPResolver* sr = new SecurityIPResolver(ServerInstance, L.IPAddr, L);
Srv->AddResolver(sr);
}
catch (ModuleException& e)
/* Don't display the line if its a uline, hide ulines is on, and the user isnt an oper */
if ((HideULines) && (Srv->IsUlined(Current->GetName())) && (!*user->oper))
return;
- WriteServ(user->fd,"364 %s %s %s :%d %s",user->nick,Current->GetName().c_str(),(FlatLinks && (!*user->oper)) ? Srv->GetServerName().c_str() : Parent.c_str(),(FlatLinks && (!*user->oper)) ? 0 : hops,Current->GetDesc().c_str());
+ user->WriteServ("364 %s %s %s :%d %s",user->nick,Current->GetName().c_str(),(FlatLinks && (!*user->oper)) ? Srv->GetServerName().c_str() : Parent.c_str(),(FlatLinks && (!*user->oper)) ? 0 : hops,Current->GetDesc().c_str());
}
int CountLocalServs()
void HandleLinks(const char** parameters, int pcnt, userrec* user)
{
ShowLinks(TreeRoot,user,0);
- WriteServ(user->fd,"365 %s * :End of /LINKS list.",user->nick);
+ user->WriteServ("365 %s * :End of /LINKS list.",user->nick);
return;
}
void HandleLusers(const char** parameters, int pcnt, userrec* user)
{
- unsigned int n_users = usercnt();
+ unsigned int n_users = ServerInstance->usercnt();
/* Only update these when someone wants to see them, more efficient */
- if ((unsigned int)local_count() > max_local)
- max_local = local_count();
+ if ((unsigned int)ServerInstance->local_count() > max_local)
+ max_local = ServerInstance->local_count();
if (n_users > max_global)
max_global = n_users;
- WriteServ(user->fd,"251 %s :There are %d users and %d invisible on %d servers",user->nick,n_users-usercount_invisible(),usercount_invisible(),this->CountServs());
- if (usercount_opers())
- WriteServ(user->fd,"252 %s %d :operator(s) online",user->nick,usercount_opers());
- if (usercount_unknown())
- WriteServ(user->fd,"253 %s %d :unknown connections",user->nick,usercount_unknown());
- if (chancount())
- WriteServ(user->fd,"254 %s %d :channels formed",user->nick,chancount());
- WriteServ(user->fd,"254 %s :I have %d clients and %d servers",user->nick,local_count(),this->CountLocalServs());
- WriteServ(user->fd,"265 %s :Current Local Users: %d Max: %d",user->nick,local_count(),max_local);
- WriteServ(user->fd,"266 %s :Current Global Users: %d Max: %d",user->nick,n_users,max_global);
+ user->WriteServ("251 %s :There are %d users and %d invisible on %d servers",user->nick,n_users-ServerInstance->usercount_invisible(),ServerInstance->usercount_invisible(),this->CountServs());
+ if (ServerInstance->usercount_opers())
+ user->WriteServ("252 %s %d :operator(s) online",user->nick,ServerInstance->usercount_opers());
+ if (ServerInstance->usercount_unknown())
+ user->WriteServ("253 %s %d :unknown connections",user->nick,ServerInstance->usercount_unknown());
+ if (ServerInstance->chancount())
+ user->WriteServ("254 %s %d :channels formed",user->nick,ServerInstance->chancount());
+ user->WriteServ("254 %s :I have %d clients and %d servers",user->nick,ServerInstance->local_count(),this->CountLocalServs());
+ user->WriteServ("265 %s :Current Local Users: %d Max: %d",user->nick,ServerInstance->local_count(),max_local);
+ user->WriteServ("266 %s :Current Global Users: %d Max: %d",user->nick,n_users,max_global);
return;
}
float percent;
char text[80];
- if (clientlist.size() == 0) {
+ if (ServerInstance->clientlist.size() == 0) {
// If there are no users, WHO THE HELL DID THE /MAP?!?!?!
percent = 0;
}
else
{
- percent = ((float)Current->GetUserCount() / (float)clientlist.size()) * 100;
+ percent = ((float)Current->GetUserCount() / (float)ServerInstance->clientlist.size()) * 100;
}
snprintf(text, 80, "%s %s%5d [%5.2f%%]", Current->GetName().c_str(), spacer, Current->GetUserCount(), percent);
totusers += Current->GetUserCount();
}
else
{
- WriteServ(user->fd, "402 %s %s :No such server", user->nick, parameters[0]);
+ user->WriteServ( "402 %s %s :No such server", user->nick, parameters[0]);
}
return 1;
}
// dump the whole lot to the user. This is the easy bit, honest.
for (int t = 0; t < line; t++)
{
- WriteServ(user->fd,"006 %s :%s",user->nick,&matrix[t][0]);
+ user->WriteServ("006 %s :%s",user->nick,&matrix[t][0]);
}
float avg_users = totusers / totservers;
- WriteServ(user->fd,"270 %s :%.0f server%s and %.0f user%s, average %.2f users per server",user->nick,totservers,(totservers > 1 ? "s" : ""),totusers,(totusers > 1 ? "s" : ""),avg_users);
- WriteServ(user->fd,"007 %s :End of /MAP",user->nick);
+ user->WriteServ("270 %s :%.0f server%s and %.0f user%s, average %.2f users per server",user->nick,totservers,(totservers > 1 ? "s" : ""),totusers,(totusers > 1 ? "s" : ""),avg_users);
+ user->WriteServ("007 %s :End of /MAP",user->nick);
return;
}
{
if (s == TreeRoot)
{
- WriteServ(user->fd,"NOTICE %s :*** SQUIT: Foolish mortal, you cannot make a server SQUIT itself! (%s matches local server name)",user->nick,parameters[0]);
+ user->WriteServ("NOTICE %s :*** SQUIT: Foolish mortal, you cannot make a server SQUIT itself! (%s matches local server name)",user->nick,parameters[0]);
return 1;
}
TreeSocket* sock = s->GetSocket();
if (sock)
{
log(DEBUG,"Splitting server %s",s->GetName().c_str());
- WriteOpers("*** SQUIT: Server \002%s\002 removed from network by %s",parameters[0],user->nick);
+ ServerInstance->WriteOpers("*** SQUIT: Server \002%s\002 removed from network by %s",parameters[0],user->nick);
sock->Squit(s,"Server quit by "+std::string(user->nick)+"!"+std::string(user->ident)+"@"+std::string(user->host));
Srv->RemoveSocket(sock);
}
else
{
- WriteServ(user->fd,"NOTICE %s :*** SQUIT: The server \002%s\002 is not directly connected.",user->nick,parameters[0]);
+ user->WriteServ("NOTICE %s :*** SQUIT: The server \002%s\002 is not directly connected.",user->nick,parameters[0]);
}
}
else
{
- WriteServ(user->fd,"NOTICE %s :*** SQUIT: The server \002%s\002 does not exist on the network.",user->nick,parameters[0]);
+ user->WriteServ("NOTICE %s :*** SQUIT: The server \002%s\002 does not exist on the network.",user->nick,parameters[0]);
}
return 1;
}
}
else
{
- WriteServ(user->fd,"402 %s %s :No such server",user->nick,parameters[0]);
+ user->WriteServ("402 %s %s :No such server",user->nick,parameters[0]);
}
}
return 1;
{
if ((IS_LOCAL(user)) && (pcnt > 1))
{
- userrec* remote = Srv->FindNick(parameters[1]);
+ userrec* remote = ServerInstance->FindNick(parameters[1]);
if ((remote) && (remote->fd < 0))
{
std::deque<std::string> params;
}
else if (!remote)
{
- WriteServ(user->fd,"401 %s %s :No such nick/channel",user->nick, parameters[1]);
- WriteServ(user->fd,"318 %s %s :End of /WHOIS list.",user->nick, parameters[1]);
+ user->WriteServ("401 %s %s :No such nick/channel",user->nick, parameters[1]);
+ user->WriteServ("318 %s %s :End of /WHOIS list.",user->nick, parameters[1]);
return 1;
}
}
else
{
// they didnt answer, boot them
- WriteOpers("*** Server \002%s\002 pinged out",serv->GetName().c_str());
+ ServerInstance->WriteOpers("*** Server \002%s\002 pinged out",serv->GetName().c_str());
sock->Squit(serv,"Ping timeout");
Srv->RemoveSocket(sock);
return;
if (!CheckDupe)
{
// an autoconnected server is not connected. Check if its time to connect it
- WriteOpers("*** AUTOCONNECT: Auto-connecting server \002%s\002 (%lu seconds until next attempt)",x->Name.c_str(),x->AutoConnect);
+ ServerInstance->WriteOpers("*** AUTOCONNECT: Auto-connecting server \002%s\002 (%lu seconds until next attempt)",x->Name.c_str(),x->AutoConnect);
insp_inaddr binip;
/* Do we already have an IP? If so, no need to resolve it. */
if (insp_aton(x->IPAddr.c_str(), &binip) > 0)
{
- TreeSocket* newsocket = new TreeSocket(x->IPAddr,x->Port,false,10,x->Name.c_str());
+ TreeSocket* newsocket = new TreeSocket(ServerInstance, x->IPAddr,x->Port,false,10,x->Name.c_str());
if (newsocket->GetFd() > -1)
{
Srv->AddSocket(newsocket);
}
else
{
- WriteOpers("*** AUTOCONNECT: Error autoconnecting \002%s\002: %s.",x->Name.c_str(),strerror(errno));
+ ServerInstance->WriteOpers("*** AUTOCONNECT: Error autoconnecting \002%s\002: %s.",x->Name.c_str(),strerror(errno));
delete newsocket;
}
}
{
try
{
- ServernameResolver* snr = new ServernameResolver(x->IPAddr, *x);
+ ServernameResolver* snr = new ServernameResolver(ServerInstance,x->IPAddr, *x);
Srv->AddResolver(snr);
}
catch (ModuleException& e)
if (found)
{
std::string Version = found->GetVersion();
- WriteServ(user->fd,"351 %s :%s",user->nick,Version.c_str());
+ user->WriteServ("351 %s :%s",user->nick,Version.c_str());
if (found == TreeRoot)
{
- std::stringstream out(Config->data005);
+ std::stringstream out(ServerInstance->Config->data005);
std::string token = "";
std::string line5 = "";
int token_counter = 0;
if ((token_counter >= 13) || (out.eof() == true))
{
- WriteServ(user->fd,"005 %s %s:are supported by this server",user->nick,line5.c_str());
+ user->WriteServ("005 %s %s:are supported by this server",user->nick,line5.c_str());
line5 = "";
token_counter = 0;
}
}
else
{
- WriteServ(user->fd,"402 %s %s :No such server",user->nick,parameters[0]);
+ user->WriteServ("402 %s %s :No such server",user->nick,parameters[0]);
}
return 1;
}
TreeServer* CheckDupe = FindServer(x->Name.c_str());
if (!CheckDupe)
{
- WriteServ(user->fd,"NOTICE %s :*** CONNECT: Connecting to server: \002%s\002 (%s:%d)",user->nick,x->Name.c_str(),(x->HiddenFromStats ? "<hidden>" : x->IPAddr.c_str()),x->Port);
+ user->WriteServ("NOTICE %s :*** CONNECT: Connecting to server: \002%s\002 (%s:%d)",user->nick,x->Name.c_str(),(x->HiddenFromStats ? "<hidden>" : x->IPAddr.c_str()),x->Port);
insp_inaddr binip;
/* Do we already have an IP? If so, no need to resolve it. */
if (insp_aton(x->IPAddr.c_str(), &binip) > 0)
{
- TreeSocket* newsocket = new TreeSocket(x->IPAddr,x->Port,false,10,x->Name.c_str());
+ TreeSocket* newsocket = new TreeSocket(ServerInstance,x->IPAddr,x->Port,false,10,x->Name.c_str());
if (newsocket->GetFd() > -1)
{
Srv->AddSocket(newsocket);
}
else
{
- WriteOpers("*** CONNECT: Error connecting \002%s\002: %s.",x->Name.c_str(),strerror(errno));
+ ServerInstance->WriteOpers("*** CONNECT: Error connecting \002%s\002: %s.",x->Name.c_str(),strerror(errno));
delete newsocket;
}
}
{
try
{
- ServernameResolver* snr = new ServernameResolver(x->IPAddr, *x);
+ ServernameResolver* snr = new ServernameResolver(ServerInstance, x->IPAddr, *x);
Srv->AddResolver(snr);
}
catch (ModuleException& e)
}
else
{
- WriteServ(user->fd,"NOTICE %s :*** CONNECT: Server \002%s\002 already exists on the network and is connected via \002%s\002",user->nick,x->Name.c_str(),CheckDupe->GetParent()->GetName().c_str());
+ user->WriteServ("NOTICE %s :*** CONNECT: Server \002%s\002 already exists on the network and is connected via \002%s\002",user->nick,x->Name.c_str(),CheckDupe->GetParent()->GetName().c_str());
return 1;
}
}
}
- WriteServ(user->fd,"NOTICE %s :*** CONNECT: No server matching \002%s\002 could be found in the config file.",user->nick,parameters[0]);
+ user->WriteServ("NOTICE %s :*** CONNECT: No server matching \002%s\002 could be found in the config file.",user->nick,parameters[0]);
return 1;
}
results.push_back(Srv->GetServerName()+" 244 "+user->nick+" H * * "+LinkBlocks[i].Name.c_str());
}
results.push_back(Srv->GetServerName()+" 219 "+user->nick+" "+statschar+" :End of /STATS report");
- WriteOpers("*** Notice: %s '%c' requested by %s (%s@%s)",(!strcmp(user->server,Config->ServerName) ? "Stats" : "Remote stats"),statschar,user->nick,user->ident,user->host);
+ ServerInstance->WriteOpers("*** Notice: %s '%c' requested by %s (%s@%s)",(!strcmp(user->server,ServerInstance->Config->ServerName) ? "Stats" : "Remote stats"),statschar,user->nick,user->ident,user->host);
return 1;
}
return 0;
// check for self
if (Srv->MatchText(Srv->GetServerName(),parameter))
{
- Srv->SendOpers("*** Remote rehash initiated from server \002"+Srv->GetServerName()+"\002.");
+ ServerInstance->WriteOpers("*** Remote rehash initiated from server \002"+Srv->GetServerName()+"\002.");
Srv->RehashServer();
}
}
return;
// Insert the TS value of the object, either userrec or chanrec
time_t ourTS = 0;
- userrec* a = Srv->FindNick((*params)[0]);
+ userrec* a = ServerInstance->FindNick((*params)[0]);
if (a)
{
ourTS = a->age;
}
else
{
- chanrec* a = Srv->FindChannel((*params)[0]);
+ chanrec* a = ServerInstance->FindChan((*params)[0]);
if (a)
{
ourTS = a->age;