it compiles (but doesn't do anything useful)

This commit is contained in:
Bernhard Amann 2011-10-17 14:19:17 -07:00
parent 42e82b99cb
commit 6e6073ff4c
12 changed files with 223 additions and 0 deletions

View file

@ -141,6 +141,7 @@ endmacro(GET_BIF_OUTPUT_FILES)
set(BIF_SRCS
bro.bif
logging.bif
input.bif
event.bif
const.bif
types.bif
@ -332,6 +333,9 @@ set(bro_SRCS
IRC.cc
List.cc
Reporter.cc
InputMgr.cc
InputReader.cc
InputReaderAscii.cc
LogMgr.cc
LogWriter.cc
LogWriterAscii.cc

View file

@ -523,11 +523,13 @@ void builtin_error(const char* msg, BroObj* arg)
#include "bro.bif.func_h"
#include "logging.bif.func_h"
#include "input.bif.func_h"
#include "reporter.bif.func_h"
#include "strings.bif.func_h"
#include "bro.bif.func_def"
#include "logging.bif.func_def"
#include "input.bif.func_def"
#include "reporter.bif.func_def"
#include "strings.bif.func_def"
@ -542,6 +544,7 @@ void init_builtin_funcs()
#include "bro.bif.func_init"
#include "logging.bif.func_init"
#include "input.bif.func_init"
#include "reporter.bif.func_init"
#include "strings.bif.func_init"

90
src/InputMgr.cc Normal file
View file

@ -0,0 +1,90 @@
// See the file "COPYING" in the main distribution directory for copyright.
#include <algorithm>
#include "InputMgr.h"
#include "Event.h"
#include "EventHandler.h"
#include "NetVar.h"
#include "Net.h"
#include "InputReader.h"
#include "InputReaderAscii.h"
struct InputReaderDefinition {
bro_int_t type; // the type
const char *name; // descriptive name for error messages
bool (*init)(); // optional one-time inifializing function
InputReader* (*factory)(); // factory function for creating instances
};
InputReaderDefinition input_readers[] = {
{ BifEnum::Input::READER_ASCII, "Ascii", 0, InputReaderAscii::Instantiate },
// End marker
{ BifEnum::Input::READER_DEFAULT, "None", 0, (InputReader* (*)())0 }
};
InputMgr::InputMgr()
{
DBG_LOG(DBG_LOGGING, "this has to happen");
}
// create a new input reader object to be used at whomevers leisure lateron.
InputReader* InputMgr::CreateReader(EnumVal* reader, string source)
{
InputReaderDefinition* ir = input_readers;
exit(12);
while ( true ) {
if ( ir->type == BifEnum::Input::READER_DEFAULT )
{
DBG_LOG(DBG_LOGGING, "unknown reader when creating reader");
reporter->Error("unknown reader when creating reader");
return 0;
}
if ( ir->type != reader->AsEnum() ) {
// no, didn't find the right one...
++ir;
continue;
}
// call init function of writer if presnt
if ( ir->init )
{
if ( (*ir->init)() )
{
//clear it to be not called again
ir->init = 0;
} else {
// ohok. init failed, kill factory for all eternity
ir->factory = 0;
DBG_LOG(DBG_LOGGING, "failed to init input class %s", ir->name);
return 0;
}
}
if ( !ir->factory )
// no factory?
return 0;
// all done. break.
break;
}
assert(ir->factory);
InputReader* reader_obj = (*ir->factory)();
assert(reader_obj);
return reader_obj;
}

24
src/InputMgr.h Normal file
View file

@ -0,0 +1,24 @@
// See the file "COPYING" in the main distribution directory for copyright.
#ifndef INPUTMGR_H
#define INPUTMGR_H
#include "InputReader.h"
#include "BroString.h"
#include "Val.h"
#include "EventHandler.h"
#include "RemoteSerializer.h"
class InputMgr {
public:
InputMgr();
InputReader* CreateReader(EnumVal* reader, string source);
};
extern InputMgr* input_mgr;
#endif /* INPUTMGR_H */

12
src/InputReader.cc Normal file
View file

@ -0,0 +1,12 @@
#include "InputReader.h"
InputReader::InputReader()
{
}
InputReader::~InputReader()
{
}

29
src/InputReader.h Normal file
View file

@ -0,0 +1,29 @@
// See the file "COPYING" in the main distribution directory for copyright.
//
// Same notes about thread safety as in LogWriter.h apply.
#ifndef INPUTREADER_H
#define INPUTREADER_H
class InputReader {
public:
InputReader();
virtual ~InputReader();
protected:
// Methods that have to be overwritten by the individual readers
private:
friend class InputMgr;
// When an error occurs, this method is called to set a flag marking the
// writer as disabled.
bool disabled;
bool Disabled() { return disabled; }
};
#endif /* INPUTREADER_H */

12
src/InputReaderAscii.cc Normal file
View file

@ -0,0 +1,12 @@
#include "InputReaderAscii.h"
#include "DebugLogger.h"
InputReaderAscii::InputReaderAscii()
{
DBG_LOG(DBG_LOGGING, "input reader initialized");
}
InputReaderAscii::~InputReaderAscii()
{
}

20
src/InputReaderAscii.h Normal file
View file

@ -0,0 +1,20 @@
#ifndef INPUTREADERASCII_H
#define INPUTREADERASCII_H
#include "InputReader.h"
class InputReaderAscii : public InputReader {
public:
InputReaderAscii();
~InputReaderAscii();
static InputReader* Instantiate() { return new InputReaderAscii; }
protected:
private:
};
#endif /* INPUTREADERASCII_H */

View file

@ -255,6 +255,7 @@ StringVal* cmd_line_bpf_filter;
#include "types.bif.netvar_def"
#include "event.bif.netvar_def"
#include "logging.bif.netvar_def"
#include "input.bif.netvar_def"
#include "reporter.bif.netvar_def"
void init_event_handlers()
@ -315,6 +316,7 @@ void init_net_var()
#include "const.bif.netvar_init"
#include "types.bif.netvar_init"
#include "logging.bif.netvar_init"
#include "input.bif.netvar_init"
#include "reporter.bif.netvar_init"
conn_id = internal_type("conn_id")->AsRecordType();

16
src/input.bif Normal file
View file

@ -0,0 +1,16 @@
# functions and types for the input framework
module Input;
%%{
#include "InputMgr.h"
#include "NetVar.h"
%%}
function Input::__create_reader%(reader: Input::Reader, source: string%) : bool
%{
exit(5);
InputReader *the_reader = input_mgr->CreateReader(reader->AsEnumVal(), source->AsString()->CheckString());
return new Val( the_reader != 0, TYPE_BOOL );
%}

View file

@ -30,6 +30,7 @@ extern "C" void OPENSSL_add_all_algorithms_conf(void);
#include "File.h"
#include "Reporter.h"
#include "LogMgr.h"
#include "InputMgr.h"
#include "Net.h"
#include "NetVar.h"
#include "Var.h"
@ -72,6 +73,7 @@ name_list prefixes;
DNS_Mgr* dns_mgr;
TimerMgr* timer_mgr;
LogMgr* log_mgr;
InputMgr* input_mgr;
Stmt* stmts;
EventHandlerPtr net_done = 0;
RuleMatcher* rule_matcher = 0;
@ -724,6 +726,8 @@ int main(int argc, char** argv)
remote_serializer = new RemoteSerializer();
event_registry = new EventRegistry();
log_mgr = new LogMgr();
input_mgr = new InputMgr();
if ( events_file )
event_player = new EventPlayer(events_file);

View file

@ -167,4 +167,11 @@ enum ID %{
Unknown,
%}
module Input;
enum Reader %{
READER_DEFAULT,
READER_ASCII,
%}
module GLOBAL;