zeek/src/Frag.h
2011-08-04 15:21:18 -05:00

66 lines
1.4 KiB
C++

// See the file "COPYING" in the main distribution directory for copyright.
#ifndef frag_h
#define frag_h
#include "util.h"
#include "IP.h"
#include "Net.h"
#include "Reassem.h"
#include "Timer.h"
class HashKey;
class NetSessions;
class FragReassembler;
class FragTimer;
typedef void (FragReassembler::*frag_timer_func)(double t);
class FragReassembler : public Reassembler {
public:
FragReassembler(NetSessions* s, const IP_Hdr* ip, const u_char* pkt,
uint32 frag_field, HashKey* k, double t);
~FragReassembler();
void AddFragment(double t, const IP_Hdr* ip, const u_char* pkt,
uint32 frag_field);
void Expire(double t);
void DeleteTimer();
void ClearTimer() { expire_timer = 0; }
const IP_Hdr* ReassembledPkt() { return reassembled_pkt; }
HashKey* Key() const { return key; }
protected:
void BlockInserted(DataBlock* start_block);
void Overlap(const u_char* b1, const u_char* b2, int n);
struct ip* proto_hdr;
IP_Hdr* reassembled_pkt;
int proto_hdr_len;
NetSessions* s;
int frag_size; // size of fully reassembled fragment
HashKey* key;
FragTimer* expire_timer;
};
class FragTimer : public Timer {
public:
FragTimer(FragReassembler* arg_f, double arg_t)
: Timer(arg_t, TIMER_FRAG)
{ f = arg_f; }
~FragTimer();
void Dispatch(double t, int is_expire);
// Break the association between this timer and its creator.
void ClearReassembler() { f = 0; }
protected:
FragReassembler* f;
};
#endif