Store packet's ip header as unique_ptr

This commit is contained in:
Tim Wojtulewicz 2020-10-12 21:09:41 -07:00
parent 2000f89b12
commit ecd970ffde
13 changed files with 86 additions and 92 deletions

View file

@ -22,17 +22,17 @@ using FragReassemblerKey = std::tuple<IPAddr, IPAddr, bro_uint_t>;
class FragReassembler : public Reassembler {
public:
FragReassembler(NetSessions* s, const IP_Hdr* ip, const u_char* pkt,
FragReassembler(NetSessions* s, const std::unique_ptr<IP_Hdr>& ip, const u_char* pkt,
const FragReassemblerKey& k, double t);
~FragReassembler() override;
void AddFragment(double t, const IP_Hdr* ip, const u_char* pkt);
void AddFragment(double t, const std::unique_ptr<IP_Hdr>& ip, const u_char* pkt);
void Expire(double t);
void DeleteTimer();
void ClearTimer() { expire_timer = nullptr; }
IP_Hdr* ReassembledPkt() { return reassembled_pkt; }
std::unique_ptr<IP_Hdr> ReassembledPkt() { return std::move(reassembled_pkt); }
const FragReassemblerKey& Key() const { return key; }
protected:
@ -41,7 +41,7 @@ protected:
void Weird(const char* name) const;
u_char* proto_hdr;
IP_Hdr* reassembled_pkt;
std::unique_ptr<IP_Hdr> reassembled_pkt;
NetSessions* s;
uint64_t frag_size; // size of fully reassembled fragment
FragReassemblerKey key;
@ -73,7 +73,8 @@ public:
FragmentManager() = default;
~FragmentManager();
FragReassembler* NextFragment(double t, const IP_Hdr* ip, const u_char* pkt);
FragReassembler* NextFragment(double t, const std::unique_ptr<IP_Hdr>& ip,
const u_char* pkt);
void Clear();
void Remove(detail::FragReassembler* f);