Squashed commit of the following:
commit
bc8abc4b89ad76dbf294cc5e09c4d643d19607d8
Author: davis mcpherson <davmcphe@cisco.com>
Date: Wed Nov 6 11:40:38 2019 -0500
stream_tcp: initialize tcp state machine instance in the stream_tcp plugin init method to ensure
it is created before the packet threads are started. in addition the state machine is deleted
in the stream_tcp plugin term method to free up allocated memory before snort exits.
void TcpStateMachine::register_state_handler(TcpStreamTracker::TcpState state,
TcpStateHandler& handler)
{
- delete tcp_state_handlers[ state ];
+ assert( !tcp_state_handlers[ state ]);
tcp_state_handlers[ state ] = &handler;
}
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//--------------------------------------------------------------------------
-// tcp_state_machine.h author davis mcpherson <davmcphe@@cisco.com>
+// tcp_state_machine.h author davis mcpherson <davmcphe@cisco.com>
// Created on: Jul 29, 2015
#ifndef TCP_STATE_MACHINE_H
#include "tcp_ha.h"
#include "tcp_module.h"
#include "tcp_session.h"
+#include "tcp_stream_state_machine.h"
using namespace snort;
void show(SnortConfig*) override;
bool configure(SnortConfig*) override;
-
void tinit() override;
void tterm() override;
StreamTcp::StreamTcp (TcpStreamConfig* c) : config(c) {}
StreamTcp::~StreamTcp()
-{
- delete config;
-}
+{ delete config; }
void StreamTcp::show(SnortConfig*)
-{
- TcpStreamConfig::show_config(config);
-}
+{ TcpStreamConfig::show_config(config); }
bool StreamTcp::configure(SnortConfig* sc)
{
}
static void tcp_dtor(Inspector* p)
-{
- delete p;
-}
+{ delete p; }
+
+static void stream_tcp_pinit()
+{ TcpStreamStateMachine::initialize(); }
+
+static void stream_tcp_pterm()
+{ TcpStreamStateMachine::finalize(); }
static Session* tcp_ssn(Flow* lws)
-{
- return new TcpSession(lws);
-}
+{ return new TcpSession(lws); }
static const InspectApi tcp_api =
{
PROTO_BIT__TCP,
nullptr, // buffers
nullptr, // service
- nullptr, // init
- nullptr, // term
+ stream_tcp_pinit, // pinit
+ stream_tcp_pterm, // pterm
nullptr, // tinit,
nullptr, // tterm,
tcp_ctor,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//--------------------------------------------------------------------------
-// tcp_stream_state_machine.cc author davis mcpherson <davmcphe@@cisco.com>
+// tcp_stream_state_machine.cc author davis mcpherson <davmcphe@cisco.com>
// Created on: Apr 1, 2016
#ifdef HAVE_CONFIG_H
#include "tcp_state_last_ack.h"
#include "tcp_state_time_wait.h"
+TcpStreamStateMachine* TcpStreamStateMachine::tsm = nullptr;
+
+TcpStateMachine* TcpStreamStateMachine::initialize()
+{
+ assert(!tsm);
+ TcpStreamStateMachine::tsm = new TcpStreamStateMachine();
+ return TcpStreamStateMachine::tsm;
+}
+
+void TcpStreamStateMachine::finalize()
+{
+ delete TcpStreamStateMachine::tsm;
+ TcpStreamStateMachine::tsm = nullptr;
+}
+
TcpStreamStateMachine::TcpStreamStateMachine()
{
// initialize stream tracker state machine with handler for each state...
new TcpStateLastAck(*this);
new TcpStateTimeWait(*this);
}
-
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//--------------------------------------------------------------------------
-// tcp_stream_state_machine.h author davis mcpherson <davmcphe@@cisco.com>
+// tcp_stream_state_machine.h author davis mcpherson <davmcphe@cisco.com>
// Created on: Apr 1, 2016
#ifndef TCP_STREAM_STATE_MACHINE_H
class TcpStreamStateMachine: public TcpStateMachine
{
public:
- static TcpStateMachine* get_instance( )
- {
- static TcpStreamStateMachine tsm;
- return &tsm;
- }
+ static TcpStateMachine* initialize();
+ static void finalize();
+
+ static TcpStateMachine* get_instance()
+ { return TcpStreamStateMachine::tsm; }
private:
TcpStreamStateMachine();
+
+ static TcpStreamStateMachine* tsm;
+
};
#endif