mirror of
https://github.com/mfontanini/libtins
synced 2026-01-23 02:35:57 +01:00
Cleanup IPv4Reassembler
This commit is contained in:
@@ -120,26 +120,34 @@ public:
|
||||
/**
|
||||
* The status of each processed packet.
|
||||
*/
|
||||
enum packet_status {
|
||||
enum PacketStatus {
|
||||
NOT_FRAGMENTED, ///< The given packet is not fragmented
|
||||
FRAGMENTED, ///< The given packet is fragmented and can't be reassembled yet
|
||||
REASSEMBLED ///< The given packet was fragmented but is now reassembled
|
||||
};
|
||||
|
||||
TINS_DEPRECATED(typedef PacketStatus packet_status);
|
||||
|
||||
/**
|
||||
* The type used to represent the overlapped segment reassembly
|
||||
* technique to be used.
|
||||
*/
|
||||
enum overlapping_technique {
|
||||
enum OverlappingTechnique {
|
||||
NONE
|
||||
};
|
||||
|
||||
/**
|
||||
* Default constructor
|
||||
*/
|
||||
IPv4Reassembler();
|
||||
|
||||
/**
|
||||
* Constructs an IPV4Reassembler.
|
||||
*
|
||||
* \param technique The technique to be used for reassembling
|
||||
* overlapped fragments.
|
||||
*/
|
||||
IPv4Reassembler(overlapping_technique technique = NONE);
|
||||
IPv4Reassembler(OverlappingTechnique technique);
|
||||
|
||||
/**
|
||||
* \brief Processes a PDU and tries to reassemble it.
|
||||
@@ -155,7 +163,7 @@ public:
|
||||
* fragmented or REASSEMBLED if the packet was fragmented
|
||||
* but has now been reassembled.
|
||||
*/
|
||||
packet_status process(PDU& pdu);
|
||||
PacketStatus process(PDU& pdu);
|
||||
|
||||
/**
|
||||
* Removes all of the packets and data stored.
|
||||
@@ -182,7 +190,7 @@ private:
|
||||
address_pair make_address_pair(IPv4Address addr1, IPv4Address addr2) const;
|
||||
|
||||
streams_type streams_;
|
||||
overlapping_technique technique_;
|
||||
OverlappingTechnique technique_;
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -94,12 +94,17 @@ uint16_t IPv4Stream::extract_offset(const IP* ip) {
|
||||
|
||||
} // Internals
|
||||
|
||||
IPv4Reassembler::IPv4Reassembler(overlapping_technique technique)
|
||||
IPv4Reassembler::IPv4Reassembler()
|
||||
: technique_(NONE) {
|
||||
|
||||
}
|
||||
|
||||
IPv4Reassembler::IPv4Reassembler(OverlappingTechnique technique)
|
||||
: technique_(technique) {
|
||||
|
||||
}
|
||||
|
||||
IPv4Reassembler::packet_status IPv4Reassembler::process(PDU& pdu) {
|
||||
IPv4Reassembler::PacketStatus IPv4Reassembler::process(PDU& pdu) {
|
||||
IP* ip = pdu.find_pdu<IP>();
|
||||
if (ip && ip->inner_pdu()) {
|
||||
// There's fragmentation
|
||||
|
||||
@@ -47,7 +47,7 @@ void IPv4ReassemblerTest::test_packets(const std::vector<std::pair<const uint8_t
|
||||
IPv4Reassembler reassembler;
|
||||
for(size_t i = 0; i < vt.size(); ++i) {
|
||||
EthernetII eth(vt[i].first, (uint32_t)vt[i].second);
|
||||
IPv4Reassembler::packet_status status = reassembler.process(eth);
|
||||
IPv4Reassembler::PacketStatus status = reassembler.process(eth);
|
||||
EXPECT_NE(IPv4Reassembler::NOT_FRAGMENTED, status);
|
||||
if(status == IPv4Reassembler::REASSEMBLED) {
|
||||
ASSERT_EQ(static_cast<size_t>(vt.size() - 1), i);
|
||||
|
||||
Reference in New Issue
Block a user