@ -3062,32 +3062,6 @@ static int HandleEstablishedPacketToClient(
return 0 ;
}
/**
* \ internal
*
* \ brief Find the highest sequence number needed to consider all segments as ACK ' d
*
* Used to treat all segments as ACK ' d upon receiving a valid RST .
*
* \ param stream stream to inspect the segments from
* \ param seq sequence number to check against
*
* \ retval ack highest ack we need to set
*/
static inline uint32_t StreamTcpResetGetMaxAck ( TcpStream * stream , uint32_t seq )
{
uint32_t ack = seq ;
if ( STREAM_HAS_SEEN_DATA ( stream ) ) {
const uint32_t tail_seq = STREAM_SEQ_RIGHT_EDGE ( stream ) ;
if ( SEQ_GT ( tail_seq , ack ) ) {
ack = tail_seq ;
}
}
SCReturnUInt ( ack ) ;
}
static bool StreamTcpPacketIsZeroWindowProbeAck ( const TcpSession * ssn , const Packet * p )
{
const TCPHdr * tcph = PacketGetTCP ( p ) ;
@ -3309,10 +3283,9 @@ static int StreamTcpPacketStateEstablished(
ssn - > client . window = window < < ssn - > client . wscale ;
if ( ( tcph - > th_flags & TH_ACK ) & & StreamTcpValidateAck ( ssn , & ssn - > server , p ) = = 0 )
StreamTcpUpdateLastAck (
ssn , & ssn - > server , StreamTcpResetGetMaxAck ( & ssn - > server , window ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , ack ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , StreamTcpResetGetMaxAck ( & ssn - > client , seq ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , seq ) ;
if ( ssn - > flags & STREAMTCP_FLAG_TIMESTAMP ) {
StreamTcpHandleTimestamp ( ssn , p ) ;
@ -3337,10 +3310,9 @@ static int StreamTcpPacketStateEstablished(
ssn - > server . window = window < < ssn - > server . wscale ;
if ( ( tcph - > th_flags & TH_ACK ) & & StreamTcpValidateAck ( ssn , & ssn - > client , p ) = = 0 )
StreamTcpUpdateLastAck (
ssn , & ssn - > client , StreamTcpResetGetMaxAck ( & ssn - > client , ack ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , ack ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , StreamTcpResetGetMaxAck ( & ssn - > server , seq ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , seq ) ;
if ( ssn - > flags & STREAMTCP_FLAG_TIMESTAMP ) {
StreamTcpHandleTimestamp ( ssn , p ) ;
@ -3641,10 +3613,9 @@ static int StreamTcpPacketStateFinWait1(
if ( PKT_IS_TOSERVER ( p ) ) {
if ( ( tcph - > th_flags & TH_ACK ) & & StreamTcpValidateAck ( ssn , & ssn - > server , p ) = = 0 )
StreamTcpUpdateLastAck (
ssn , & ssn - > server , StreamTcpResetGetMaxAck ( & ssn - > server , ack ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , ack ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , StreamTcpResetGetMaxAck ( & ssn - > client , seq ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , seq ) ;
if ( ssn - > flags & STREAMTCP_FLAG_TIMESTAMP ) {
StreamTcpHandleTimestamp ( ssn , p ) ;
@ -3653,10 +3624,9 @@ static int StreamTcpPacketStateFinWait1(
StreamTcpReassembleHandleSegment ( tv , stt - > ra_ctx , ssn , & ssn - > client , p ) ;
} else {
if ( ( tcph - > th_flags & TH_ACK ) & & StreamTcpValidateAck ( ssn , & ssn - > client , p ) = = 0 )
StreamTcpUpdateLastAck (
ssn , & ssn - > client , StreamTcpResetGetMaxAck ( & ssn - > client , ack ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , ack ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , StreamTcpResetGetMaxAck ( & ssn - > server , seq ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , seq ) ;
if ( ssn - > flags & STREAMTCP_FLAG_TIMESTAMP ) {
StreamTcpHandleTimestamp ( ssn , p ) ;
@ -4085,10 +4055,9 @@ static int StreamTcpPacketStateFinWait2(
if ( PKT_IS_TOSERVER ( p ) ) {
if ( ( tcph - > th_flags & TH_ACK ) & & StreamTcpValidateAck ( ssn , & ssn - > server , p ) = = 0 )
StreamTcpUpdateLastAck (
ssn , & ssn - > server , StreamTcpResetGetMaxAck ( & ssn - > server , ack ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , ack ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , StreamTcpResetGetMaxAck ( & ssn - > client , seq ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , seq ) ;
if ( ssn - > flags & STREAMTCP_FLAG_TIMESTAMP ) {
StreamTcpHandleTimestamp ( ssn , p ) ;
@ -4097,10 +4066,9 @@ static int StreamTcpPacketStateFinWait2(
StreamTcpReassembleHandleSegment ( tv , stt - > ra_ctx , ssn , & ssn - > client , p ) ;
} else {
if ( ( tcph - > th_flags & TH_ACK ) & & StreamTcpValidateAck ( ssn , & ssn - > client , p ) = = 0 )
StreamTcpUpdateLastAck (
ssn , & ssn - > client , StreamTcpResetGetMaxAck ( & ssn - > client , ack ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , ack ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , StreamTcpResetGetMaxAck ( & ssn - > server , seq ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , seq ) ;
if ( ssn - > flags & STREAMTCP_FLAG_TIMESTAMP ) {
StreamTcpHandleTimestamp ( ssn , p ) ;
@ -4385,10 +4353,9 @@ static int StreamTcpPacketStateClosing(
if ( PKT_IS_TOSERVER ( p ) ) {
if ( ( tcph - > th_flags & TH_ACK ) & & StreamTcpValidateAck ( ssn , & ssn - > server , p ) = = 0 )
StreamTcpUpdateLastAck (
ssn , & ssn - > server , StreamTcpResetGetMaxAck ( & ssn - > server , ack ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , ack ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , StreamTcpResetGetMaxAck ( & ssn - > client , seq ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , seq ) ;
if ( ssn - > flags & STREAMTCP_FLAG_TIMESTAMP ) {
StreamTcpHandleTimestamp ( ssn , p ) ;
@ -4397,10 +4364,9 @@ static int StreamTcpPacketStateClosing(
StreamTcpReassembleHandleSegment ( tv , stt - > ra_ctx , ssn , & ssn - > client , p ) ;
} else {
if ( ( tcph - > th_flags & TH_ACK ) & & StreamTcpValidateAck ( ssn , & ssn - > client , p ) = = 0 )
StreamTcpUpdateLastAck (
ssn , & ssn - > client , StreamTcpResetGetMaxAck ( & ssn - > client , ack ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , ack ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , StreamTcpResetGetMaxAck ( & ssn - > server , seq ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , seq ) ;
if ( ssn - > flags & STREAMTCP_FLAG_TIMESTAMP ) {
StreamTcpHandleTimestamp ( ssn , p ) ;
@ -4560,10 +4526,9 @@ static int StreamTcpPacketStateCloseWait(
if ( PKT_IS_TOSERVER ( p ) ) {
if ( ( tcph - > th_flags & TH_ACK ) & & StreamTcpValidateAck ( ssn , & ssn - > server , p ) = = 0 )
StreamTcpUpdateLastAck (
ssn , & ssn - > server , StreamTcpResetGetMaxAck ( & ssn - > server , ack ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , ack ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , StreamTcpResetGetMaxAck ( & ssn - > client , seq ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , seq ) ;
if ( ssn - > flags & STREAMTCP_FLAG_TIMESTAMP ) {
StreamTcpHandleTimestamp ( ssn , p ) ;
@ -4572,10 +4537,9 @@ static int StreamTcpPacketStateCloseWait(
StreamTcpReassembleHandleSegment ( tv , stt - > ra_ctx , ssn , & ssn - > client , p ) ;
} else {
if ( ( tcph - > th_flags & TH_ACK ) & & StreamTcpValidateAck ( ssn , & ssn - > client , p ) = = 0 )
StreamTcpUpdateLastAck (
ssn , & ssn - > client , StreamTcpResetGetMaxAck ( & ssn - > client , ack ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , ack ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , StreamTcpResetGetMaxAck ( & ssn - > server , seq ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , seq ) ;
if ( ssn - > flags & STREAMTCP_FLAG_TIMESTAMP ) {
StreamTcpHandleTimestamp ( ssn , p ) ;
@ -4845,10 +4809,9 @@ static int StreamTcpPacketStateLastAck(
if ( PKT_IS_TOSERVER ( p ) ) {
if ( ( tcph - > th_flags & TH_ACK ) & & StreamTcpValidateAck ( ssn , & ssn - > server , p ) = = 0 )
StreamTcpUpdateLastAck (
ssn , & ssn - > server , StreamTcpResetGetMaxAck ( & ssn - > server , ack ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , ack ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , StreamTcpResetGetMaxAck ( & ssn - > client , seq ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , seq ) ;
if ( ssn - > flags & STREAMTCP_FLAG_TIMESTAMP ) {
StreamTcpHandleTimestamp ( ssn , p ) ;
@ -4857,10 +4820,9 @@ static int StreamTcpPacketStateLastAck(
StreamTcpReassembleHandleSegment ( tv , stt - > ra_ctx , ssn , & ssn - > client , p ) ;
} else {
if ( ( tcph - > th_flags & TH_ACK ) & & StreamTcpValidateAck ( ssn , & ssn - > client , p ) = = 0 )
StreamTcpUpdateLastAck (
ssn , & ssn - > client , StreamTcpResetGetMaxAck ( & ssn - > client , ack ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , ack ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , StreamTcpResetGetMaxAck ( & ssn - > server , seq ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , seq ) ;
if ( ssn - > flags & STREAMTCP_FLAG_TIMESTAMP ) {
StreamTcpHandleTimestamp ( ssn , p ) ;
@ -4968,10 +4930,9 @@ static int StreamTcpPacketStateTimeWait(
if ( PKT_IS_TOSERVER ( p ) ) {
if ( ( tcph - > th_flags & TH_ACK ) & & StreamTcpValidateAck ( ssn , & ssn - > server , p ) = = 0 )
StreamTcpUpdateLastAck (
ssn , & ssn - > server , StreamTcpResetGetMaxAck ( & ssn - > server , ack ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , ack ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , StreamTcpResetGetMaxAck ( & ssn - > client , seq ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , seq ) ;
if ( ssn - > flags & STREAMTCP_FLAG_TIMESTAMP ) {
StreamTcpHandleTimestamp ( ssn , p ) ;
@ -4980,10 +4941,9 @@ static int StreamTcpPacketStateTimeWait(
StreamTcpReassembleHandleSegment ( tv , stt - > ra_ctx , ssn , & ssn - > client , p ) ;
} else {
if ( ( tcph - > th_flags & TH_ACK ) & & StreamTcpValidateAck ( ssn , & ssn - > client , p ) = = 0 )
StreamTcpUpdateLastAck (
ssn , & ssn - > client , StreamTcpResetGetMaxAck ( & ssn - > client , ack ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > client , ack ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , StreamTcpResetGetMaxAck ( & ssn - > server , seq ) ) ;
StreamTcpUpdateLastAck ( ssn , & ssn - > server , seq ) ;
if ( ssn - > flags & STREAMTCP_FLAG_TIMESTAMP ) {
StreamTcpHandleTimestamp ( ssn , p ) ;