]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
refactored splitter fallback
authorRuss Combs <rucombs@cisco.com>
Wed, 22 Oct 2014 14:07:13 +0000 (10:07 -0400)
committerRuss Combs <rucombs@cisco.com>
Wed, 22 Oct 2014 14:07:13 +0000 (10:07 -0400)
ChangeLog
src/stream/tcp/tcp_session.cc

index 59e4a24b660b1da41f848c88f43fce17618a658b..23c1d9e9c645b7eabe53356dcd8d24c97b06f2c1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,7 @@
 -- fix paf abort to resume with atom splitter
 -- delete bogus code introduced into hi paf
 -- ip defrag fixes
+-- refactored splitter fallback
 
 125
 -- discovered can't catch exceptions thrown from Lua to C++; need to
index 40e005272aebdf9c836f74528316f0320d1f95b4..ebddd91adf7e2228f5307929797c93eb60d325b8 100644 (file)
@@ -5879,6 +5879,22 @@ static inline uint32_t flush_pdu_ips (
     return 0;
 }
 
+static inline void fallback(
+    StreamTracker* a, StreamTracker* b)
+{
+    bool c2s = a->splitter->to_server();
+
+    delete a->splitter;
+    a->splitter = new AtomSplitter(c2s, a->config->paf_max);
+    a->paf_state.paf = StreamSplitter::SEARCH;
+
+#if 1  // FIXIT-M abort both sides ?
+    delete b->splitter;
+    b->splitter = new AtomSplitter(!c2s, b->config->paf_max);
+    b->paf_state.paf = StreamSplitter::SEARCH;
+#endif
+}
+
 static inline int CheckFlushPolicyOnData(
     TcpSession *tcpssn, StreamTracker *talker,
     StreamTracker *listener, Packet *p)
@@ -5948,17 +5964,7 @@ static inline int CheckFlushPolicyOnData(
                 //if ( AutoDisable(listener, talker) )
                 //    return 0;
 
-                delete talker->splitter;
-                delete listener->splitter;
-
-                bool c2s = (p->packet_flags & PKT_FROM_CLIENT) != 0;
-
-                talker->splitter = new AtomSplitter(c2s, talker->config->paf_max);
-                listener->splitter = new AtomSplitter(!c2s, listener->config->paf_max);
-
-                s5_paf_setup(&talker->paf_state);
-                s5_paf_setup(&listener->paf_state);
-
+                fallback(listener, talker);
                 return CheckFlushPolicyOnData(tcpssn, talker, listener, p);
             }
         }
@@ -6084,17 +6090,7 @@ int CheckFlushPolicyOnAck(
                 //if ( AutoDisable(talker, listener) )
                 //    return 0;
 
-                bool c2s = (p->packet_flags & PKT_FROM_CLIENT) != 0;
-
-                delete talker->splitter;
-                talker->splitter = new AtomSplitter(c2s, talker->config->paf_max);
-                talker->paf_state.paf = StreamSplitter::SEARCH;
-
-#if 1           // FIXIT-M abort both sides ?
-                delete listener->splitter;
-                listener->splitter = new AtomSplitter(!c2s, listener->config->paf_max);
-                listener->paf_state.paf = StreamSplitter::SEARCH;
-#endif
+                fallback(talker, listener);
                 return CheckFlushPolicyOnAck(tcpssn, talker, listener, p);
             }
         }