]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Pull request #4305: stream_tcp: add reassembler class for missed_3whs
authorJuweria Ali Imran (jaliimra) <jaliimra@cisco.com>
Fri, 3 May 2024 00:21:16 +0000 (00:21 +0000)
committerSteven Baigal (sbaigal) <sbaigal@cisco.com>
Fri, 3 May 2024 00:21:16 +0000 (00:21 +0000)
Merge in SNORT/snort3 from ~JALIIMRA/snort3:asymmetric_option to master

Squashed commit of the following:

commit 2d3af8d9b89b9424974ec9a710e33e9b2d47e87a
Author: Juweria Ali Imran <jaliimra@cisco.com>
Date:   Thu May 2 16:31:16 2024 -0400

    stream_tcp: add reassembler class for missed_3whs

src/stream/tcp/tcp_reassemblers.cc

index a1302cea2d100d511a3e97e2227c259712ef94b0..cf72ecaa235a423df60bfeda942e381e962b8760 100644 (file)
@@ -252,6 +252,22 @@ private:
     { full_right_overlap_os5(trs); }
 };
 
+class TcpReassemblerMissed3whs : public TcpReassemblerFirst
+{
+public:
+    TcpReassemblerMissed3whs() = default;
+
+private:
+    void insert_left_overlap(TcpReassemblerState& trs) override
+    { left_overlap_keep_first(trs); }
+
+    void insert_right_overlap(TcpReassemblerState& trs) override
+    { right_overlap_truncate_new(trs); }
+
+    void insert_full_overlap(TcpReassemblerState& trs) override
+    { full_right_overlap_os5(trs); }
+};
+
 void TcpReassemblerPolicy::init(TcpSession* ssn, TcpStreamTracker* trk, StreamPolicy pol, bool server)
 {
     trs.sos.init_sos(ssn, pol);
@@ -298,16 +314,17 @@ void TcpReassemblerFactory::initialize()
     reassemblers[StreamPolicy::OS_WINDOWS2K3] = new TcpReassemblerWindows2K3;
     reassemblers[StreamPolicy::OS_VISTA] = new TcpReassemblerVista;
     reassemblers[StreamPolicy::OS_PROXY] = new TcpReassemblerProxy;
+    reassemblers[StreamPolicy::MISSED_3WHS] = new TcpReassemblerMissed3whs;
 }
 
 void TcpReassemblerFactory::term()
 {
-    for ( auto sp = StreamPolicy::OS_FIRST; sp <= StreamPolicy::OS_PROXY; sp++ )
+    for ( auto sp = StreamPolicy::OS_FIRST; sp < StreamPolicy::OS_END_OF_LIST; sp++ )
         delete reassemblers[sp];
 }
 
 TcpReassembler* TcpReassemblerFactory::get_instance(StreamPolicy os_policy)
 {
-    assert( os_policy <= StreamPolicy::OS_PROXY );
+    assert( os_policy < StreamPolicy::OS_END_OF_LIST );
     return reassemblers[os_policy];
 }