#include <assert.h>
#include <algorithm>
#include <list>
-#include <mutex>
+#include <vector>
#include "module_manager.h"
#include "flow/flow.h"
handler->rem_ref();
}
-typedef list<PHGlobal*> PHGlobalList;
-typedef list<PHClass*> PHClassList;
-typedef list<PHInstance*> PHInstanceList;
+typedef vector<PHGlobal*> PHGlobalList;
+typedef vector<PHClass*> PHClassList;
+typedef vector<PHInstance*> PHInstanceList;
typedef list<Inspector*> PHList;
static PHGlobalList s_handlers;
static const InspectApi* get_plugin(const char* keyword)
{
for ( auto* p : s_handlers )
- if ( !strcasecmp(p->api.base.name, keyword) )
+ if ( !strcmp(p->api.base.name, keyword) )
return &p->api;
return nullptr;
FrameworkPolicy* fp, const char* keyword)
{
for ( auto* p : fp->ilist )
- //if ( !strncasecmp(p->pp_class.api.base.name, keyword,
- // strlen(p->pp_class.api.base.name)) )
- if ( !strcasecmp(p->pp_class.api.base.name, keyword) )
+ if ( !strcmp(p->pp_class.api.base.name, keyword) )
return p;
return nullptr;
p = new PHInstance(*ppc);
- if ( !p->handler ) // FIXIT-M is this even possible?
+ if ( !p->handler )
{
delete p;
return NULL;
// FIXIT-M create a separate list for meta handlers? is there really more than one?
void InspectorManager::dispatch_meta (FrameworkPolicy* fp, int type, const uint8_t* data)
{
- // FIXIT-M change to select instance by policy and pass that in
for ( auto* p : fp->ilist )
p->handler->meta(type, data);
}
static PHClass* GetClass(const char* keyword, FrameworkConfig* fc)
{
for ( auto* p : fc->clist )
- if ( !strcasecmp(p->api.base.name, keyword) )
+ if ( !strcmp(p->api.base.name, keyword) )
return p;
for ( auto* p : s_handlers )
- if ( !strcasecmp(p->api.base.name, keyword) )
+ if ( !strcmp(p->api.base.name, keyword) )
{
if ( p->init )
{
return NULL;
}
-// this is per thread
void InspectorManager::thread_init(SnortConfig* sc)
{
- // FIXIT-H BIND the policy related logic herein moves to binder
Inspector::slot = get_instance_id();
- for ( auto* p : sc->framework_config->clist )
- if ( p->api.tinit )
- p->api.tinit();
+ if ( wtf_init[get_instance_id()]++ )
+ return;
InspectionPolicy* pi = get_inspection_policy();
- if ( !pi->framework_policy )
+ if ( !pi || !pi->framework_policy )
return;
for ( auto* p : pi->framework_policy->ilist )
void InspectorManager::instantiate(
const InspectApi* api, Module*, SnortConfig* sc)
{
- // FIXIT-H only configures Lua inspectors in base policy; must be
+ // FIXIT-H only configures inspectors in base policy; must be
// revisited when bindings are implemented
FrameworkConfig* fc = sc->framework_config;
FrameworkPolicy* fp = sc->policy_map->inspection_policy[0]->framework_policy;
bool InspectorManager::configure(SnortConfig *sc)
{
Inspector::max_slots = sc->max_threads;
- s_handlers.sort(PHGlobal::comp);
+ sort(s_handlers.begin(), s_handlers.end(), PHGlobal::comp);
- // FIXIT-H use FrameworkConfig or FrameworkPolicy ?
- //FrameworkConfig* fc = sc->framework_config;
FrameworkPolicy* fp = sc->policy_map->inspection_policy[0]->framework_policy;
bool ok = true;
for ( auto* p : fp->ilist )
ok = p->handler->configure(sc) && ok;
- fp->ilist.sort(PHInstance::comp);
+ sort(fp->ilist.begin(), fp->ilist.end(), PHInstance::comp);
fp->vectorize();
return ok;
bool get_buf(InspectionBuffer::Type, Packet*, InspectionBuffer&);
bool get_buf(unsigned, Packet*, InspectionBuffer&);
- void tinit();
- void tterm();
-
private:
HTTPINSPECT_CONF* config;
HttpData* global;
CheckGzipConfig(config->global);
CheckMemcap(config->global);
- return !HttpInspectVerifyPolicy(sc, config);
-}
-
-void HttpInspect::tinit()
-{
- memset(&hi_stats, 0, sizeof(HIStats));
-
config->global->decode_conf.file_depth = file_api->get_max_file_depth();
if (config->global->decode_conf.file_depth > -1)
updateMaxDepth(config->global->decode_conf.file_depth, &config->global->decode_conf.max_depth);
}
-}
-
-void HttpInspect::tterm()
-{
+ return !HttpInspectVerifyPolicy(sc, config);
}
void HttpInspect::show(SnortConfig*)