/** Holds the data from the <link> tags in the conf
*/
std::vector<Link> LinkBlocks;
+ /** Holds a bitmask of queued xline types waiting to be applied.
+ * Will be a mask containing values APPLY_GLINES, APPLY_KLINES,
+ * APPLY_QLINES and APPLY_ZLINES.
+ */
+ int lines_to_apply;
hookmodules hooks;
std::vector<std::string> hooknames;
bool propogate = false;
+ if (!this->bursting)
+ Utils->lines_to_apply = 0;
+
switch (*(params[0].c_str()))
{
case 'Z':
propogate = Instance->XLines->add_zline(atoi(params[4].c_str()), params[2].c_str(), params[5].c_str(), params[1].c_str());
Instance->XLines->zline_set_creation_time(params[1].c_str(), atoi(params[3].c_str()));
+ if (propogate)
+ Utils->lines_to_apply |= APPLY_ZLINES;
break;
case 'Q':
propogate = Instance->XLines->add_qline(atoi(params[4].c_str()), params[2].c_str(), params[5].c_str(), params[1].c_str());
Instance->XLines->qline_set_creation_time(params[1].c_str(), atoi(params[3].c_str()));
+ if (propogate)
+ Utils->lines_to_apply |= APPLY_QLINES;
break;
case 'E':
propogate = Instance->XLines->add_eline(atoi(params[4].c_str()), params[2].c_str(), params[5].c_str(), params[1].c_str());
case 'G':
propogate = Instance->XLines->add_gline(atoi(params[4].c_str()), params[2].c_str(), params[5].c_str(), params[1].c_str());
Instance->XLines->gline_set_creation_time(params[1].c_str(), atoi(params[3].c_str()));
+ if (propogate)
+ Utils->lines_to_apply |= APPLY_GLINES;
break;
case 'K':
propogate = Instance->XLines->add_kline(atoi(params[4].c_str()), params[2].c_str(), params[5].c_str(), params[1].c_str());
+ if (propogate)
+ Utils->lines_to_apply |= APPLY_KLINES;
break;
default:
/* Just in case... */
}
if (!this->bursting)
{
- Instance->Log(DEBUG,"Applying lines...");
- Instance->XLines->apply_lines(APPLY_ZLINES|APPLY_GLINES|APPLY_QLINES);
+ Instance->Log(DEBUG,"Applying lines with mask %d...", Utils->lines_to_apply);
+ Instance->XLines->apply_lines(Utils->lines_to_apply);
+ Utils->lines_to_apply = 0;
}
return true;
}
if (this->bursting)
{
this->bursting = false;
- Instance->XLines->apply_lines(APPLY_ZLINES|APPLY_GLINES|APPLY_QLINES);
+ Instance->Log(DEBUG,"Applying lines with mask %d...", Utils->lines_to_apply);
+ Instance->XLines->apply_lines(Utils->lines_to_apply);
+ Utils->lines_to_apply = 0;
}
if (prefix == "")
{
if (this->bursting)
{
this->bursting = false;
- Instance->XLines->apply_lines(APPLY_ZLINES|APPLY_GLINES|APPLY_QLINES);
+ Instance->Log(DEBUG,"Applying lines with mask %d...", Utils->lines_to_apply);
+ Instance->XLines->apply_lines(Utils->lines_to_apply);
+ Utils->lines_to_apply = 0;
}
if (prefix == "")
{
else if (command == "ENDBURST")
{
this->bursting = false;
- Instance->XLines->apply_lines(APPLY_ZLINES|APPLY_GLINES|APPLY_QLINES);
+ Instance->Log(DEBUG,"Applying lines with mask %d...", Utils->lines_to_apply);
+ Instance->XLines->apply_lines(Utils->lines_to_apply);
+ Utils->lines_to_apply = 0;
std::string sourceserv = this->myhost;
if (this->InboundServerName != "")
{
Link MyLink;
SpanningTreeUtilities* Utils;
public:
- ServernameResolver(Module* me, SpanningTreeUtilities* Util, InspIRCd* Instance, const std::string &hostname, Link x) : Resolver(Instance, hostname, DNS_QUERY_FORWARD, me), MyLink(x), Utils(Util)
+ ServernameResolver(Module* me, SpanningTreeUtilities* Util, InspIRCd* Instance, const std::string &hostname, Link x, bool &cached) : Resolver(Instance, hostname, DNS_QUERY_FORWARD, cached, me), MyLink(x), Utils(Util)
{
/* Nothing in here, folks */
}
- void OnLookupComplete(const std::string &result, unsigned int ttl)
+ void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached)
{
/* Initiate the connection, now that we have an IP to use.
* Passing a hostname directly to InspSocket causes it to
Link MyLink;
SpanningTreeUtilities* Utils;
public:
- SecurityIPResolver(Module* me, SpanningTreeUtilities* U, InspIRCd* Instance, const std::string &hostname, Link x) : Resolver(Instance, hostname, DNS_QUERY_FORWARD, me), MyLink(x), Utils(U)
+ SecurityIPResolver(Module* me, SpanningTreeUtilities* U, InspIRCd* Instance, const std::string &hostname, Link x, bool &cached) : Resolver(Instance, hostname, DNS_QUERY_FORWARD, cached, me), MyLink(x), Utils(U)
{
}
- void OnLookupComplete(const std::string &result, unsigned int ttl)
+ void OnLookupComplete(const std::string &result, unsigned int ttl, bool cached)
{
ServerInstance->Log(DEBUG,"Security IP cache: Adding IP address '%s' for Link '%s'",result.c_str(),MyLink.Name.c_str());
Utils->ValidIPs.push_back(result);
{
Bindings.clear();
+ lines_to_apply = 0;
+
this->TreeRoot = new TreeServer(this, ServerInstance, ServerInstance->Config->ServerName, ServerInstance->Config->ServerDesc);
modulelist* ml = ServerInstance->FindInterface("InspSocketHook");
{
try
{
- SecurityIPResolver* sr = new SecurityIPResolver((Module*)this->Creator, this, ServerInstance, L.IPAddr, L);
- ServerInstance->AddResolver(sr);
+ bool cached;
+ SecurityIPResolver* sr = new SecurityIPResolver((Module*)this->Creator, this, ServerInstance, L.IPAddr, L, cached);
+ ServerInstance->AddResolver(sr, cached);
}
catch (ModuleException& e)
{
{
try
{
- ServernameResolver* snr = new ServernameResolver((Module*)this, Utils, ServerInstance,x->IPAddr, *x);
- ServerInstance->AddResolver(snr);
+ bool cached;
+ ServernameResolver* snr = new ServernameResolver((Module*)this, Utils, ServerInstance,x->IPAddr, *x, cached);
+ ServerInstance->AddResolver(snr, cached);
}
catch (ModuleException& e)
{
}
}
Utils->ReadConfiguration(false);
+ InitializeDisabledCommands(ServerInstance->Config->DisabledCommands, ServerInstance);
}
// note: the protocol does not allow direct umode +o except
}
};
-TimeSyncTimer::TimeSyncTimer(InspIRCd *Inst, ModuleSpanningTree *Mod) : InspTimer(43200, Inst->Time()), Instance(Inst), Module(Mod)
+TimeSyncTimer::TimeSyncTimer(InspIRCd *Inst, ModuleSpanningTree *Mod) : InspTimer(43200, Inst->Time(), true), Instance(Inst), Module(Mod)
{
}
void TimeSyncTimer::Tick(time_t TIME)
{
Module->BroadcastTimeSync();
- Module->SyncTimer = new TimeSyncTimer(Instance, Module);
- Instance->Timers->AddTimer(Module->SyncTimer);
}
void SpanningTreeUtilities::DoFailOver(Link* x)