bool FlatLinks;
/* Hide U-Lined servers in /MAP and /LINKS */
bool HideULines;
+/* Announce TS changes to channels on merge */
+bool AnnounceTSChange;
std::vector<std::string> ValidIPs;
{
ourTS = chan->age;
}
+ else
+ /* Oops, channel doesnt exist! */
+ return true;
}
/* TS is equal: Merge the mode changes, use voooodoooooo on modes
if (chan)
chan->age = TS;
- /* XXX: Lower the TS here */
+ /* Lower the TS here */
+ if (AnnounceTSChange && chan)
+ chan->WriteChannelWithServ(Instance->Config->ServerName,
+ "TS for %s changed from %lu to %lu", chan->name, ourTS, TS);
ourTS = TS;
param_list.push_back(channel);
// nick collision
Instance->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);
this->WriteLine(std::string(":")+this->Instance->Config->ServerName+" KILL "+tempnick+" :Nickname collision");
+ userrec::QuitUser(this->Instance, iter->second, "Nickname collision");
return true;
}
char result[1024];
memset(result,0,1024);
memset(out,0,1024);
- Instance->Log(DEBUG,"Original string '%s'",ret.c_str());
/* ERROR + CAPAB is still allowed unencryped */
if ((ret.substr(0,7) != "ERROR :") && (ret.substr(0,6) != "CAPAB "))
{
int nbytes = from64tobits(out, ret.c_str(), 1024);
if ((nbytes > 0) && (nbytes < 1024))
{
- Instance->Log(DEBUG,"m_spanningtree: decrypt %d bytes",nbytes);
ctx_in->Decrypt(out, result, nbytes, 0);
for (int t = 0; t < nbytes; t++)
if (result[t] == '\7') result[t] = 0;
// pad it to the key length
int n = this->keylength - (line.length() % this->keylength);
if (n)
- {
- Instance->Log(DEBUG,"Append %d chars to line to make it %d long from %d, key length %d",n,n+line.length(),line.length(),this->keylength);
line.append(n,'\7');
- }
}
unsigned int ll = line.length();
ctx_out->Encrypt(line.c_str(), result, ll, 0);
to64frombits((unsigned char*)result64,(unsigned char*)result,ll);
line = result64;
- //int from64tobits(char *out, const char *in, int maxlen);
}
return this->Write(line + "\r\n");
}
{
std::string Type = Conf->ReadValue("bind","type",j);
std::string IP = Conf->ReadValue("bind","address",j);
- long Port = Conf->ReadInteger("bind","port",j,true);
+ int Port = Conf->ReadInteger("bind","port",j,true);
if (Type == "servers")
{
+ ServerInstance->Log(DEBUG,"m_spanningtree: Binding server port %s:%d", IP.c_str(), Port);
if (IP == "*")
{
IP = "";
TreeSocket* listener = new TreeSocket(ServerInstance, IP.c_str(),Port,true,10);
if (listener->GetState() == I_LISTENING)
{
+ ServerInstance->Log(DEFAULT,"m_spanningtree: Binding server port %s:%d successful!", IP.c_str(), Port);
Bindings.push_back(listener);
}
else
listener->Close();
DELETE(listener);
}
+ ServerInstance->Log(DEBUG,"Done with this binding");
}
}
}
FlatLinks = Conf->ReadFlag("options","flatlinks",0);
HideULines = Conf->ReadFlag("options","hideulines",0);
+ AnnounceTSChange = Conf->ReadFlag("options","announcets",0);
LinkBlocks.clear();
ValidIPs.clear();
for (int j =0; j < Conf->Enumerate("link"); j++)
class ModuleSpanningTree : public Module
{
- std::vector<TreeSocket*> Bindings;
int line;
int NumServers;
unsigned int max_local;
virtual ~ModuleSpanningTree()
{
+ ServerInstance->Log(DEBUG,"Performing unload of spanningtree!");
+ ServerInstance->Log(DEBUG,"Freeing %d bindings...",Bindings.size());
+ for (unsigned int i = 0; i < Bindings.size(); i++)
+ {
+ ServerInstance->Log(DEBUG,"Freeing binding %d of %d",i, Bindings.size());
+ ServerInstance->SE->DelFd(Bindings[i]);
+ Bindings[i]->Close();
+ DELETE(Bindings[i]);
+ }
+ ServerInstance->Log(DEBUG,"Freeing connected servers...");
+ while (TreeRoot->ChildCount())
+ {
+ TreeServer* child_server = TreeRoot->GetChild(0);
+ ServerInstance->Log(DEBUG,"Freeing connected server %s", child_server->GetName().c_str());
+ if (child_server)
+ {
+ TreeSocket* sock = child_server->GetSocket();
+ ServerInstance->SE->DelFd(sock);
+ sock->Close();
+ DELETE(sock);
+ }
+ }
}
virtual Version GetVersion()
{
- return Version(1,1,0,2,VF_STATIC|VF_VENDOR,API_VERSION);
+ return Version(1,1,0,2,VF_VENDOR,API_VERSION);
}
void Implements(char* List)