1
0
mirror of https://github.com/mfontanini/libtins synced 2026-01-23 02:35:57 +01:00

Cleanup IPv4Reassembler

This commit is contained in:
Matias Fontanini
2016-02-21 18:20:06 -08:00
parent 016cfeecc6
commit 92f0249d2b
3 changed files with 21 additions and 8 deletions

View File

@@ -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_;
};
/**

View File

@@ -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

View File

@@ -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);