if ( flow_con->expected_session(flow, p))
return 0;
#endif
+ IpHAManager::process_deletion(flow);
}
if ( stream.blocked_session(flow, p) || stream.ignored_session(flow, p) )
#include "log/messages.h"
#include "main/snort_debug.h"
#include "sfip/sf_ip.h"
+#include "stream/tcp/tcp_ha.h"
#include "tcp_stream_session.h"
if ( tcp_init )
// this does NOT flush data
clear_session( true, false, false );
+ TcpHAManager::process_deletion(flow);
}
void TcpStreamSession::set_splitter(bool to_server, StreamSplitter* ss)
}
-void TcpHA::deactivate_session(Flow*)
+void TcpHA::deactivate_session(Flow* flow)
{
DebugMessage(DEBUG_HA,"TcpHA::deactivate_session)\n");
+ assert( flow );
+ if ( flow->session )
+ ((TcpSession*)(flow->session))->clear_session(true, true, false);
+
+ flow->session_state &= ~( STREAM_STATE_SYN | STREAM_STATE_SYN_ACK |
+ STREAM_STATE_ACK | STREAM_STATE_ESTABLISHED );
+
+ assert( flow->ha_state );
+ flow->clear_session_flags( SSNFLAG_SEEN_CLIENT | SSNFLAG_SEEN_SERVER );
}
THREAD_LOCAL TcpHA* TcpHAManager::tcp_ha = nullptr;
clear_session(true, true, false, p);
tcpStats.timeouts++;
+ TcpHAManager::process_deletion(flow);
}
}
flow->ssn_state.session_flags |= SSNFLAG_SEEN_SENDER;
udpStats.created++; // FIXIT-M is this correct? will mess with calc of current sessions
udpStats.timeouts++;
+ UdpHAManager::process_deletion(flow);
}
ProcessUdp(flow, p, pc, nullptr);