void TcpStreamSession::reset(void)
{
if (tcp_init)
- clear_session(2);
+ clear_session(true);
}
bool TcpStreamSession::setup(Packet*)
// FIXIT-L this it should not be necessary to reset here
reset();
- client->init_tracker( );
- server->init_tracker( );
+ client->init_tcp_state();
+ server->init_tcp_state();
lws_init = tcp_init = false;
no_3whs = false;
pkt_action_mask = ACTION_NOTHING;
void TcpStreamSession::cleanup(void)
{
// this flushes data and then calls TcpSessionClear()
- cleanup_session(1);
+ cleanup_session( true );
+
}
void TcpStreamSession::clear(void)
{
if ( tcp_init )
// this does NOT flush data
- clear_session(1);
+ clear_session( true );
}
void TcpStreamSession::set_splitter(bool to_server, StreamSplitter* ss)
server->print();
}
-void TcpStreamSession::cleanup_session(int, Packet*)
+void TcpStreamSession::clear_session(bool freeAppData)
{
}
-void TcpStreamSession::set_os_policy(void)
+void TcpStreamSession::cleanup_session(bool freeAppData, Packet* p)
{
}
-void TcpStreamSession::clear_session(int)
+void TcpStreamSession::set_os_policy(void)
{
}
+
void SwapPacketHeaderFoo(void);
virtual void update_perf_base_state(char) { }
- virtual void cleanup_session(int freeApplicationData, Packet* p = nullptr);
+ virtual void cleanup_session(bool freeAppData, Packet* p = nullptr);
// FIXIT - these 2 function names convey no meaning afaict... figure out
// why are they called and name appropriately...
protected:
virtual void set_os_policy(void);
- virtual void clear_session(int freeApplicationData);
+ virtual void clear_session(bool freeAppData);
TcpStreamTracker* talker = nullptr;
TcpStreamTracker* listener = nullptr;
return rst_pkt_sent;
}
- virtual void init_tracker(void) = 0;
+ virtual void init_tcp_state(void) = 0;
+ virtual void init_toolbox(void) = 0;
+
virtual void print(void) = 0;
virtual void init_flush_policy(void) = 0;
virtual void set_splitter(StreamSplitter* ss) = 0;
TcpSession::~TcpSession(void)
{
if (tcp_init)
- clear_session(1);
+ clear_session(true);
delete client;
delete server;
{
TcpStreamSession::setup(p);
+ client->init_toolbox();
+ server->init_toolbox();
+
SESSION_STATS_ADD(tcpStats);
return true;
}
// make sense of the code in this file.
//-------------------------------------------------------------------------
-void TcpSession::clear_session(int freeApplicationData)
+void TcpSession::clear_session(bool freeAppData)
{
// update stats
if ( tcp_init )
else if (flow->get_session_flags() & SSNFLAG_TIMEDOUT)
tcpStats.timeouts++;
-
DebugFormat(DEBUG_STREAM_STATE, "In TcpSessionClear, %lu bytes in use\n", tcp_memcap->used());
if ( client->reassembler )
server->reassembler->purge_segment_list();
}
-
- // update light-weight state
- if ( freeApplicationData == 2 )
- {
- flow->restart(true);
-
- paf_reset(&client->paf_state);
- paf_reset(&server->paf_state);
- client->reset_splitter();
- server->reset_splitter();
- }
- else
- {
- flow->clear(freeApplicationData);
- paf_clear(&client->paf_state);
- paf_clear(&server->paf_state);
- set_splitter(true, nullptr);
- set_splitter(false, nullptr);
- }
+ flow->clear(freeAppData);
+ paf_clear(&client->paf_state);
+ paf_clear(&server->paf_state);
+ set_splitter(true, nullptr);
+ set_splitter(false, nullptr);
// generate event for rate filtering
tel.log_internal_event(INTERNAL_EVENT_SESSION_DEL);
lws_init = tcp_init = false;
}
-void TcpSession::cleanup_session(int freeApplicationData, Packet* p)
+void TcpSession::cleanup_session(bool freeAppData, Packet* p)
{
- // FIXIT - this function does both client & server sides...refactor to do one and
- // call for each
if ( client->reassembler != nullptr )
client->reassembler->flush_queued_segments(flow, true, p);
if ( server->reassembler != nullptr )
server->reassembler->flush_queued_segments(flow, true, p);
- clear_session(freeApplicationData);
+ clear_session(freeAppData);
}
void TcpSession::update_perf_base_state(char newState)
DebugMessage(DEBUG_STREAM_STATE, "Got SYN pkt on reset ssn, re-SYN-ing\n");
// FIXIT-L this leads to bogus 129:20
- cleanup_session(2);
+ cleanup_session(true);
if ( tcph->is_rst() )
{
{
/* If this one has been reset, delete the TCP
* portion, and start a new. */
- cleanup_session(2);
+ cleanup_session(true);
}
else
{
DebugMessage(DEBUG_STREAM_STATE, "Stream TCP session timedout!\n");
/* Not reset, simply time'd out. Clean it up */
- cleanup_session(2);
+ cleanup_session(true);
}
tcpStats.timeouts++;
}
void set_extra_data(Packet*, uint32_t /*flag*/) override;
void clear_extra_data(Packet*, uint32_t /*flag*/) override;
- void cleanup_session(int freeApplicationData, Packet* = nullptr) override;
+ void cleanup_session(bool freeAppData, Packet* = nullptr) override;
void update_perf_base_state(char newState) override;
TcpStreamTracker::TcpState get_talker_state(void) override;
void process_tcp_stream(TcpSegmentDescriptor&);
int process_tcp_data(TcpSegmentDescriptor&);
void process_tcp_packet(TcpSegmentDescriptor&);
- void FinishServerInit(TcpSegmentDescriptor&);
void swap_trackers();
void NewTcpSessionOnSyn(TcpSegmentDescriptor&);
void NewTcpSessionOnSynAck(TcpSegmentDescriptor&);
void set_os_policy() override;
- void clear_session(int freeApplicationData) override;
+ void clear_session(bool freeAppData) override;
int process_dis(Packet*);
void update_on_3whs_complete(TcpSegmentDescriptor&);
{
// The last ACK is a part of the session. Delete the session after processing is
// complete.
- session.cleanup_session(0, tsd.get_pkt() );
+ session.cleanup_session(false, tsd.get_pkt() );
flow->session_state |= STREAM_STATE_CLOSED;
session.set_pkt_action_flag(ACTION_LWSSN_CLOSED);
}
{
// The last ACK is a part of the session. Delete the session after processing is
// complete.
- session.cleanup_session(0, tsd.get_pkt() );
+ session.cleanup_session(false, tsd.get_pkt() );
flow->session_state |= STREAM_STATE_CLOSED;
session.set_pkt_action_flag(ACTION_LWSSN_CLOSED);
}
{
// The last ACK is a part of the session. Delete the session after processing is
// complete.
- session.cleanup_session(0, tsd.get_pkt() );
+ session.cleanup_session(false, tsd.get_pkt() );
flow->session_state |= STREAM_STATE_CLOSED;
session.set_pkt_action_flag(ACTION_LWSSN_CLOSED);
}
delete reassembler;
}
-void TcpTracker::init_tracker(void)
+void TcpTracker::init_tcp_state(void )
{
tcp_state = ( client_tracker ) ?
TcpStreamTracker::TCP_STATE_NONE : TcpStreamTracker::TCP_LISTEN;
memset(&mac_addr, 0, sizeof(mac_addr));
mac_addr_valid = false;
rst_pkt_sent = false;
+}
+void TcpTracker::init_toolbox(void)
+{
delete splitter;
splitter = nullptr;
delete normalizer;
TcpTracker(bool);
virtual ~TcpTracker(void);
- void init_tracker(void) override;
+ void init_tcp_state(void) override;
void print(void) override;
void init_flush_policy(void) override;
void set_splitter(StreamSplitter* ss) override;
bool update_on_fin_sent(TcpSegmentDescriptor& tsd) override;
bool is_segment_seq_valid(TcpSegmentDescriptor& tsd) override;
void flush_data_on_fin_recv(TcpSegmentDescriptor& tsd) override;
+
+ void init_toolbox(void);
+
};
#endif