From: Russ Combs Date: Wed, 22 Oct 2014 14:07:13 +0000 (-0400) Subject: refactored splitter fallback X-Git-Tag: 3.0.0-233~1348 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=fdcd4f6b01462268716adcd066c3cfc29f77f2fb;p=thirdparty%2Fsnort3.git refactored splitter fallback --- diff --git a/ChangeLog b/ChangeLog index 59e4a24b6..23c1d9e9c 100644 --- 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 diff --git a/src/stream/tcp/tcp_session.cc b/src/stream/tcp/tcp_session.cc index 40e005272..ebddd91ad 100644 --- a/src/stream/tcp/tcp_session.cc +++ b/src/stream/tcp/tcp_session.cc @@ -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); } }