6 #include <unordered_map>
119 void setStartTime(
const std::chrono::time_point<std::chrono::high_resolution_clock>& startTimeValue);
123 void setEndTime(
const std::chrono::time_point<std::chrono::high_resolution_clock>& endTimeValue);
142 std::chrono::time_point<std::chrono::high_resolution_clock> timestamp)
143 : m_Data(tcpData), m_DataLen(tcpDataLength), m_MissingBytes(missingBytes), m_Connection(connData),
144 m_Timestamp(timestamp)
165 return m_MissingBytes;
192 const uint8_t* m_Data;
194 size_t m_MissingBytes;
196 std::chrono::time_point<std::chrono::high_resolution_clock> m_Timestamp;
386 return m_ConnectionInfo;
407 std::chrono::time_point<std::chrono::high_resolution_clock> timestamp;
409 TcpFragment() : sequence(0), dataLength(0), data(nullptr)
417 struct TcpOneSideData
422 PointerVector<TcpFragment> tcpFragmentList;
425 TcpOneSideData() : srcPort(0), sequence(0), gotFinOrRst(false)
429 struct TcpReassemblyData
434 TcpOneSideData twoSides[2];
435 ConnectionData connData;
437 TcpReassemblyData() : closed(false), numOfSides(0), prevSide(-1)
441 class OutOfOrderProcessingGuard
447 explicit OutOfOrderProcessingGuard(
bool& flag) : m_Flag(flag)
452 ~OutOfOrderProcessingGuard()
458 OutOfOrderProcessingGuard(
const OutOfOrderProcessingGuard&) =
delete;
459 OutOfOrderProcessingGuard& operator=(
const OutOfOrderProcessingGuard&) =
delete;
462 typedef std::unordered_map<uint32_t, TcpReassemblyData> ConnectionList;
463 typedef std::map<time_t, std::list<uint32_t>> CleanupList;
469 ConnectionList m_ConnectionList;
471 CleanupList m_CleanupList;
472 bool m_RemoveConnInfo;
473 uint32_t m_ClosedConnectionDelay;
474 uint32_t m_MaxNumToClean;
475 size_t m_MaxOutOfOrderFragments;
476 time_t m_PurgeTimepoint;
477 bool m_EnableBaseBufferClearCondition;
478 bool m_ProcessingOutOfOrder =
false;
480 void checkOutOfOrderFragments(TcpReassemblyData* tcpReassemblyData, int8_t sideIndex,
bool cleanWholeFragList);
482 void handleFinOrRst(TcpReassemblyData* tcpReassemblyData, int8_t sideIndex, uint32_t flowKey,
bool isRst);
486 void insertIntoCleanupList(uint32_t flowKey);
Definition: IpAddress.h:318
Definition: RawPacket.h:259
Definition: TcpReassembly.h:248
ReassemblyStatus reassemblePacket(RawPacket *tcpRawData)
int isConnectionOpen(const ConnectionData &connection) const
TcpReassembly(OnTcpMessageReady onMessageReadyCallback, void *userCookie=nullptr, OnTcpConnectionStart onConnectionStartCallback=nullptr, OnTcpConnectionEnd onConnectionEndCallback=nullptr, const TcpReassemblyConfiguration &config=TcpReassemblyConfiguration())
std::function< void(int8_t side, const TcpStreamData &tcpData, void *userCookie)> OnTcpMessageReady
Definition: TcpReassembly.h:320
ReassemblyStatus
An enum for providing reassembly status for each processed packet.
Definition: TcpReassembly.h:261
@ NonIpPacket
Definition: TcpReassembly.h:300
@ FIN_RSTWithNoData
Definition: TcpReassembly.h:285
@ Error_PacketDoesNotMatchFlow
Definition: TcpReassembly.h:307
@ Ignore_PacketOfClosedFlow
Definition: TcpReassembly.h:294
@ NonTcpPacket
Definition: TcpReassembly.h:303
@ Ignore_Retransimission
Definition: TcpReassembly.h:297
@ TcpMessageHandled
Definition: TcpReassembly.h:271
@ OutOfOrderTcpMessageBuffered
Definition: TcpReassembly.h:281
@ Ignore_PacketWithNoData
Definition: TcpReassembly.h:289
std::function< void(const ConnectionData &connectionData, ConnectionEndReason reason, void *userCookie)> OnTcpConnectionEnd
Definition: TcpReassembly.h:337
const ConnectionInfoList & getConnectionInformation() const
Definition: TcpReassembly.h:384
uint32_t purgeClosedConnections(uint32_t maxNumToClean=0)
void closeAllConnections()
ReassemblyStatus reassemblePacket(Packet &tcpData)
std::unordered_map< uint32_t, ConnectionData > ConnectionInfoList
The type for storing the connection information.
Definition: TcpReassembly.h:311
void closeConnection(uint32_t flowKey)
ConnectionEndReason
An enum for connection end reasons.
Definition: TcpReassembly.h:252
@ TcpReassemblyConnectionClosedByFIN_RST
Connection ended because of FIN or RST packet.
Definition: TcpReassembly.h:254
@ TcpReassemblyConnectionClosedManually
Connection ended manually by the user.
Definition: TcpReassembly.h:256
std::function< void(const ConnectionData &connectionData, void *userCookie)> OnTcpConnectionStart
Definition: TcpReassembly.h:327
Definition: TcpReassembly.h:133
bool isBytesMissing() const
Definition: TcpReassembly.h:170
size_t getDataLength() const
Definition: TcpReassembly.h:156
timeval getTimeStamp() const
size_t getMissingByteCount() const
Definition: TcpReassembly.h:163
TcpStreamData(const uint8_t *tcpData, size_t tcpDataLength, size_t missingBytes, const ConnectionData &connData, std::chrono::time_point< std::chrono::high_resolution_clock > timestamp)
Definition: TcpReassembly.h:141
std::chrono::time_point< std::chrono::high_resolution_clock > getTimeStampPrecise() const
Definition: TcpReassembly.h:186
const uint8_t * getData() const
Definition: TcpReassembly.h:149
const ConnectionData & getConnectionData() const
Definition: TcpReassembly.h:177
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19
Definition: TcpReassembly.h:93
IPAddress srcIP
Source IP address.
Definition: TcpReassembly.h:95
IPAddress dstIP
Destination IP address.
Definition: TcpReassembly.h:97
std::chrono::time_point< std::chrono::high_resolution_clock > startTimePrecise
Start timestamp of the connection with nanosecond precision.
Definition: TcpReassembly.h:109
timeval endTime
End timestamp of the connection with microsecond precision.
Definition: TcpReassembly.h:107
timeval startTime
Start timestamp of the connection with microsecond precision.
Definition: TcpReassembly.h:105
void setStartTime(const std::chrono::time_point< std::chrono::high_resolution_clock > &startTimeValue)
std::chrono::time_point< std::chrono::high_resolution_clock > endTimePrecise
End timestamp of the connection with nanosecond precision.
Definition: TcpReassembly.h:111
uint16_t dstPort
Destination TCP/UDP port.
Definition: TcpReassembly.h:101
uint16_t srcPort
Source TCP/UDP port.
Definition: TcpReassembly.h:99
ConnectionData()
A c'tor for this struct that basically zeros all members.
Definition: TcpReassembly.h:114
uint32_t flowKey
A 4-byte hash key representing the connection.
Definition: TcpReassembly.h:103
void setEndTime(const std::chrono::time_point< std::chrono::high_resolution_clock > &endTimeValue)
Definition: TcpReassembly.h:202
uint32_t closedConnectionDelay
Definition: TcpReassembly.h:209
uint32_t maxNumToClean
Definition: TcpReassembly.h:214
uint32_t maxOutOfOrderFragments
Definition: TcpReassembly.h:219
TcpReassemblyConfiguration(bool removeConnInfo=true, uint32_t closedConnectionDelay=5, uint32_t maxNumToClean=30, uint32_t maxOutOfOrderFragments=0, bool enableBaseBufferClearCondition=true)
Definition: TcpReassembly.h:235
bool enableBaseBufferClearCondition
To enable to clear buffer once packet contains data from a different side than the side seen before.
Definition: TcpReassembly.h:222
bool removeConnInfo
The flag indicating whether to remove the connection data after a connection is closed.
Definition: TcpReassembly.h:204