Merge in SNORT/snort3 from ~ADMAMOLE/snort3:h2_pkt to master
Squashed commit of the following:
commit
6a79c665c90e29c2025376c56ee1be5ef6d49e68
Author: Adrian Mamolea <admamole@cisco.com>
Date: Wed Aug 23 15:16:33 2023 -0400
http2_inspect: address comments from Oleksii
commit
038f465bd138fbc9eb17fa661a9161cdd5235cbe
Author: Adrian Mamolea <admamole@cisco.com>
Date: Wed Jul 5 16:59:08 2023 -0400
http2_inspect: add frame when logging a packet
Http2Frame::print_frame(output);
}
#endif
+
+const uint8_t* Http2DataFrame::get_frame_data(uint32_t& length) const
+{
+ length = data_length;
+ return data_buffer;
+}
bool is_detection_required() const override { return false; }
void update_stream_state() override;
+ virtual const uint8_t* get_frame_data(uint32_t& length) const override;
friend Http2Frame* Http2Frame::new_frame(const uint8_t*, const uint32_t, const uint8_t*,
const uint32_t, Http2FlowData*, HttpCommon::SourceId, Http2Stream* stream);
data.print(output, "Frame Data");
}
#endif
+
+const uint8_t* Http2Frame::get_frame_pdu(uint16_t& length) const
+{
+ int32_t hlen = header.length();
+ if (hlen != FRAME_HEADER_LENGTH)
+ return nullptr;
+
+ uint32_t dlen;
+ const uint8_t* data = get_frame_data(dlen);
+ if (!data or (hlen + dlen > UINT16_MAX))
+ return nullptr;
+
+ length = (uint16_t)(hlen + dlen);
+ uint8_t* pdu = new uint8_t[length];
+ memcpy(pdu, header.start(), hlen);
+ if (dlen)
+ memcpy(&pdu[hlen], data, dlen);
+ return pdu;
+}
+
+const uint8_t* Http2Frame::get_frame_data(uint32_t& length) const
+{
+ int32_t dlen = data.length();
+ if (dlen < 0)
+ return nullptr;
+
+ length = (uint32_t)dlen;
+ return data.start();
+}
virtual const Field& get_buf(unsigned id);
virtual bool is_detection_required() const { return true; }
virtual void update_stream_state() { }
-
+ const uint8_t* get_frame_pdu(uint16_t& length) const;
+ virtual const uint8_t* get_frame_data(uint32_t& length) const;
#ifdef REG_TEST
virtual void print_frame(FILE* output);
#endif
infractions->get_raw(0), events->get_raw(0));
}
#endif
+
+const uint8_t* Http2Inspect::adjust_log_packet(Packet* p, uint16_t& length)
+{
+ auto* const session_data = (Http2FlowData*)p->flow->get_flow_data(Http2FlowData::inspector_id);
+ if (!session_data)
+ return nullptr;
+
+ auto* stream = session_data->find_processing_stream();
+ if (!stream)
+ return nullptr;
+
+ auto* frame = stream->get_current_frame();
+ if (!frame)
+ return nullptr;
+
+ return frame->get_frame_pdu(length);
+}
bool can_carve_files() const override
{ return true; }
+ const uint8_t* adjust_log_packet(snort::Packet* p, uint16_t& length) override;
private:
friend Http2Api;