assert(flow->ssn_server);
// FIXIT-H need to do something here to handle check for need to swap trackers??
-
if ( !config )
config = get_tcp_cfg(flow->ssn_server);
trk.session->handle_data_segment(tsd);
trk.flush_data_on_fin_recv(tsd);
}
- trk.update_on_fin_recv(tsd);
- trk.session->update_perf_base_state(TcpStreamTracker::TCP_CLOSING);
- trk.set_tcp_state(TcpStreamTracker::TCP_CLOSE_WAIT);
+ if ( trk.update_on_fin_recv(tsd) )
+ {
+ trk.session->update_perf_base_state(TcpStreamTracker::TCP_CLOSING);
+ trk.set_tcp_state(TcpStreamTracker::TCP_CLOSE_WAIT);
+ }
return default_state_action(tsd, trk);
}
Flow* flow = tsd.get_flow();
trk.update_tracker_ack_recv(tsd);
- trk.update_on_fin_recv(tsd);
-
- if ( check_for_window_slam(tsd, trk) )
+ if ( trk.update_on_fin_recv(tsd) )
{
- //session.handle_fin_recv_in_fw1(tsd);
- if ( tsd.get_seg_len() > 0 )
- trk.session->handle_data_segment(tsd);
+ if ( check_for_window_slam(tsd, trk) )
+ {
+ if ( tsd.get_seg_len() > 0 )
+ trk.session->handle_data_segment(tsd);
- if ( !flow->two_way_traffic() )
- trk.set_tf_flags(TF_FORCE_FLUSH);
+ if ( !flow->two_way_traffic() )
+ trk.set_tf_flags(TF_FORCE_FLUSH);
- trk.set_tcp_state(TcpStreamTracker::TCP_TIME_WAIT);
+ trk.set_tcp_state(TcpStreamTracker::TCP_TIME_WAIT);
+ }
}
return default_state_action(tsd, trk);
Flow* flow = tsd.get_flow();
trk.update_tracker_ack_recv(tsd);
- trk.update_on_fin_recv(tsd);
-
- if ( tsd.get_seg_len() > 0 )
- trk.session->handle_data_segment(tsd);
+ if ( trk.update_on_fin_recv(tsd) )
+ {
+ if ( tsd.get_seg_len() > 0 )
+ trk.session->handle_data_segment(tsd);
- if ( !flow->two_way_traffic() )
- trk.set_tf_flags(TF_FORCE_FLUSH);
+ if ( !flow->two_way_traffic() )
+ trk.set_tf_flags(TF_FORCE_FLUSH);
- trk.set_tcp_state(TcpStreamTracker::TCP_TIME_WAIT);
+ trk.set_tcp_state(TcpStreamTracker::TCP_TIME_WAIT);
+ }
return default_state_action(tsd, trk);
}
trk.flush_data_on_fin_recv(tsd);
}
- trk.update_on_fin_recv(tsd);
- trk.session->update_perf_base_state(TcpStreamTracker::TCP_CLOSING);
- trk.set_tcp_state(TcpStreamTracker::TCP_CLOSE_WAIT);
+ if ( trk.update_on_fin_recv(tsd) )
+ {
+ trk.session->update_perf_base_state(TcpStreamTracker::TCP_CLOSING);
+ trk.set_tcp_state(TcpStreamTracker::TCP_CLOSE_WAIT);
+ }
}
return default_state_action(tsd, trk);
memset(&alerts, 0, sizeof(alerts));
memset(&mac_addr, 0, sizeof(mac_addr));
mac_addr_valid = false;
+ fin_final_seq = 0;
rst_pkt_sent = false;
}
if ( SEQ_LT(tsd.get_end_seq(), r_win_base) )
{
DebugMessage(DEBUG_STREAM_STATE, "FIN inside r_win_base, bailing\n");
- return true;
+ return false;
}
//--------------------------------------------------