mirror of
https://github.com/zeek/zeek.git
synced 2025-10-04 07:38:19 +00:00
120 lines
2.2 KiB
C++
120 lines
2.2 KiB
C++
#include "EventRegistry.h"
|
|
#include "RE.h"
|
|
#include "RemoteSerializer.h"
|
|
|
|
void EventRegistry::Register(EventHandlerPtr handler)
|
|
{
|
|
HashKey key(handler->Name());
|
|
handlers.Insert(&key, handler.Ptr());
|
|
}
|
|
|
|
EventHandler* EventRegistry::Lookup(const char* name)
|
|
{
|
|
HashKey key(name);
|
|
return handlers.Lookup(&key);
|
|
}
|
|
|
|
EventRegistry::string_list* EventRegistry::Match(RE_Matcher* pattern)
|
|
{
|
|
string_list* names = new string_list;
|
|
|
|
IterCookie* c = handlers.InitForIteration();
|
|
|
|
HashKey* k;
|
|
EventHandler* v;
|
|
while ( (v = handlers.NextEntry(k, c)) )
|
|
{
|
|
if ( v->LocalHandler() && pattern->MatchExactly(v->Name()) )
|
|
names->append(v->Name());
|
|
|
|
delete k;
|
|
}
|
|
|
|
return names;
|
|
}
|
|
|
|
EventRegistry::string_list* EventRegistry::UnusedHandlers()
|
|
{
|
|
string_list* names = new string_list;
|
|
|
|
IterCookie* c = handlers.InitForIteration();
|
|
|
|
HashKey* k;
|
|
EventHandler* v;
|
|
while ( (v = handlers.NextEntry(k, c)) )
|
|
{
|
|
if ( v->LocalHandler() && ! v->Used() )
|
|
names->append(v->Name());
|
|
|
|
delete k;
|
|
}
|
|
|
|
return names;
|
|
}
|
|
|
|
EventRegistry::string_list* EventRegistry::UsedHandlers()
|
|
{
|
|
string_list* names = new string_list;
|
|
|
|
IterCookie* c = handlers.InitForIteration();
|
|
|
|
HashKey* k;
|
|
EventHandler* v;
|
|
while ( (v = handlers.NextEntry(k, c)) )
|
|
{
|
|
if ( v->LocalHandler() && v->Used() )
|
|
names->append(v->Name());
|
|
|
|
delete k;
|
|
}
|
|
|
|
return names;
|
|
}
|
|
|
|
EventRegistry::string_list* EventRegistry::AllHandlers()
|
|
{
|
|
string_list* names = new string_list;
|
|
|
|
IterCookie* c = handlers.InitForIteration();
|
|
|
|
HashKey* k;
|
|
EventHandler* v;
|
|
while ( (v = handlers.NextEntry(k, c)) )
|
|
{
|
|
names->append(v->Name());
|
|
delete k;
|
|
}
|
|
|
|
return names;
|
|
}
|
|
|
|
void EventRegistry::PrintDebug()
|
|
{
|
|
IterCookie* c = handlers.InitForIteration();
|
|
|
|
HashKey* k;
|
|
EventHandler* v;
|
|
while ( (v = handlers.NextEntry(k, c)) )
|
|
{
|
|
delete k;
|
|
fprintf(stderr, "Registered event %s (%s handler / %s)\n", v->Name(),
|
|
v->LocalHandler()? "local" : "no",
|
|
*v ? "active" : "not active"
|
|
);
|
|
}
|
|
}
|
|
|
|
void EventRegistry::SetErrorHandler(const char* name)
|
|
{
|
|
EventHandler* eh = Lookup(name);
|
|
|
|
if ( eh )
|
|
{
|
|
eh->SetErrorHandler();
|
|
return;
|
|
}
|
|
|
|
reporter->InternalWarning(
|
|
"unknown event handler '%s' in SetErrorHandler()", name);
|
|
}
|
|
|