Initial import of svn+ssh:://svn.icir.org/bro/trunk/bro as of r7088

This commit is contained in:
Robin Sommer 2010-09-27 20:42:30 -07:00
commit 61757ac78b
1383 changed files with 380824 additions and 0 deletions

101
src/Frame.cc Normal file
View file

@ -0,0 +1,101 @@
// $Id: Frame.cc 6219 2008-10-01 05:39:07Z vern $
//
// See the file "COPYING" in the main distribution directory for copyright.
#include "config.h"
#include "Frame.h"
#include "Stmt.h"
#include "Func.h"
#include "Trigger.h"
vector<Frame*> g_frame_stack;
Frame::Frame(int arg_size, const BroFunc* func, const val_list* fn_args)
{
size = arg_size;
frame = new Val*[size];
function = func;
func_args = fn_args;
next_stmt = 0;
break_before_next_stmt = false;
break_on_return = false;
trigger = 0;
call = 0;
delayed = false;
Clear();
}
Frame::~Frame()
{
Unref(trigger);
Release();
}
void Frame::Release()
{
for ( int i = 0; i < size; ++i )
Unref(frame[i]);
delete [] frame;
}
void Frame::Describe(ODesc* d) const
{
if ( ! d->IsBinary() )
d->AddSP("frame");
if ( ! d->IsReadable() )
{
d->Add(size);
for ( int i = 0; i < size; ++i )
{
d->Add(frame[i] != 0);
d->SP();
}
}
for ( int i = 0; i < size; ++i )
if ( frame[i] )
frame[i]->Describe(d);
else if ( d->IsReadable() )
d->Add("<nil>");
}
void Frame::Clear()
{
for ( int i = 0; i < size; ++i )
frame[i] = 0;
}
Frame* Frame::Clone()
{
Frame* f = new Frame(size, function, func_args);
for ( int i = 0; i < size; ++i )
f->frame[i] = frame[i] ? frame[i]->Clone() : 0;
if ( trigger )
Ref(trigger);
f->trigger = trigger;
f->call = call;
return f;
}
void Frame::SetTrigger(Trigger* arg_trigger)
{
if ( arg_trigger )
Ref(arg_trigger);
trigger = arg_trigger;
}
void Frame::ClearTrigger()
{
Unref(trigger);
trigger = 0;
}