@ -304,8 +304,6 @@ void StreamTcpSegmentReturntoPool(TcpSegment *seg)
if ( seg = = NULL )
return ;
seg - > next = NULL ;
seg - > prev = NULL ;
PoolThreadReturn ( segment_thread_pool , seg ) ;
}
@ -316,20 +314,12 @@ void StreamTcpSegmentReturntoPool(TcpSegment *seg)
*/
void StreamTcpReturnStreamSegments ( TcpStream * stream )
{
TcpSegment * seg = stream - > seg_list ;
TcpSegment * next_seg ;
if ( seg = = NULL )
return ;
while ( seg ! = NULL ) {
next_seg = seg - > next ;
TcpSegment * seg = NULL , * safe = NULL ;
RB_FOREACH_SAFE ( seg , TCPSEG , & stream - > seg_tree , safe )
{
RB_REMOVE ( TCPSEG , & stream - > seg_tree , seg ) ;
StreamTcpSegmentReturntoPool ( seg ) ;
seg = next_seg ;
}
stream - > seg_list = NULL ;
stream - > seg_list_tail = NULL ;
}
/** \internal
@ -656,7 +646,7 @@ int StreamTcpReassembleHandleSegmentHandleData(ThreadVars *tv, TcpReassemblyThre
seg - > seq = TCP_GET_SEQ ( p ) ;
/* proto detection skipped, but now we do get data. Set event. */
if ( stream - > seg_list = = NULL & &
if ( RB_EMPTY ( & stream - > seg_tree ) & &
stream - > flags & STREAMTCP_STREAM_FLAG_APPPROTO_DETECTION_SKIPPED ) {
AppLayerDecoderEventsSetEventRaw ( & p - > app_layer_events ,
@ -832,9 +822,8 @@ int StreamNeedsReassembly(const TcpSession *ssn, uint8_t direction)
uint64_t right_edge = STREAM_BASE_OFFSET ( stream ) + stream - > sb . buf_offset ;
SCLogDebug ( " %s: list %p app %" PRIu64 " (use: %s), raw % " PRIu64 " (use: %s). Stream right edge: % " PRIu64 ,
SCLogDebug ( " %s: app %" PRIu64 " (use: %s), raw % " PRIu64 " (use: %s). Stream right edge: % " PRIu64 ,
dirstr ,
stream - > seg_list ,
STREAM_APP_PROGRESS ( stream ) , use_app ? " yes " : " no " ,
STREAM_RAW_PROGRESS ( stream ) , use_raw ? " yes " : " no " ,
right_edge ) ;
@ -862,12 +851,10 @@ static uint64_t GetStreamSize(TcpStream *stream)
uint64_t size = 0 ;
uint32_t cnt = 0 ;
TcpSegment * seg = stream - > seg_list ;
while ( seg ) {
TcpSegment * seg ;
RB_FOREACH ( seg , TCPSEG , & stream - > seg_tree ) {
cnt + + ;
size + = ( uint64_t ) TCP_SEG_LEN ( seg ) ;
seg = seg - > next ;
}
SCLogDebug ( " size % " PRIu64 " , cnt % " PRIu32 , size , cnt ) ;
@ -1123,14 +1110,13 @@ int StreamTcpReassembleAppLayer (ThreadVars *tv, TcpReassemblyThreadCtx *ra_ctx,
SCReturnInt ( 0 ) ;
}
SCLogDebug ( " stream->seg_list %p " , stream - > seg_list ) ;
# ifdef DEBUG
PrintList( stream - > seg_list ) ;
SCLogDebug( " stream->seg_tree RB_MIN %p " , RB_MIN ( TCPSEG , & stream - > seg_tree ) ) ;
GetSessionSize ( ssn , p ) ;
# endif
/* if no segments are in the list or all are already processed,
* and state is beyond established , we send an empty msg */
TcpSegment * seg_tail = stream - > seg_list_tail ;
TcpSegment * seg_tail = RB_MAX ( TCPSEG , & stream - > seg_tree ) ;
if ( seg_tail = = NULL | |
SEGMENT_BEFORE_OFFSET ( stream , seg_tail , STREAM_APP_PROGRESS ( stream ) ) )
{
@ -1237,7 +1223,7 @@ bool StreamReassembleRawHasDataReady(TcpSession *ssn, Packet *p)
stream = & ssn - > server ;
}
if ( stream - > seg_list = = NULL ) {
if ( RB_EMPTY ( & stream - > seg_tree ) ) {
return false ;
}
@ -1695,14 +1681,11 @@ static int StreamTcpReassembleHandleSegmentUpdateACK (ThreadVars *tv,
TcpReassemblyThreadCtx * ra_ctx , TcpSession * ssn , TcpStream * stream , Packet * p )
{
SCEnter ( ) ;
SCLogDebug ( " stream->seg_list %p " , stream - > seg_list ) ;
int r = 0 ;
if ( StreamTcpReassembleAppLayer ( tv , ra_ctx , ssn , stream , p , UPDATE_DIR_OPPOSING ) < 0 )
r = - 1 ;
SCReturnInt ( - 1 ) ;
SCLogDebug ( " stream->seg_list %p " , stream - > seg_list ) ;
SCReturnInt ( r ) ;
SCReturnInt ( 0 ) ;
}
int StreamTcpReassembleHandleSegment ( ThreadVars * tv , TcpReassemblyThreadCtx * ra_ctx ,
@ -1809,9 +1792,6 @@ TcpSegment *StreamTcpGetSegment(ThreadVars *tv, TcpReassemblyThreadCtx *ra_ctx)
segment request due to memcap limit */
StatsIncr ( tv , ra_ctx - > counter_tcp_segment_memcap ) ;
} else {
seg - > next = NULL ;
seg - > prev = NULL ;
memset ( & seg - > sbseg , 0 , sizeof ( seg - > sbseg ) ) ;
}
@ -2221,7 +2201,6 @@ static int StreamTcpReassembleTest39 (void)
memset ( & tv , 0 , sizeof ( ThreadVars ) ) ;
memset ( & stt , 0 , sizeof ( stt ) ) ;
memset ( & tcph , 0 , sizeof ( TCPHdr ) ) ;
TcpSession * ssn = NULL ;
FLOW_INITIALIZE ( & f ) ;
f . flags = FLOW_IPV4 ;
@ -2229,9 +2208,6 @@ static int StreamTcpReassembleTest39 (void)
p - > flow = & f ;
p - > tcph = & tcph ;
FLOWLOCK_WRLOCK ( & f ) ;
int ret = 0 ;
StreamTcpUTInit ( & stt . ra_ctx ) ;
/* handshake */
@ -2240,25 +2216,24 @@ static int StreamTcpReassembleTest39 (void)
p - > flowflags = FLOW_PKT_TOSERVER ;
p - > payload_len = 0 ;
p - > payload = NULL ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
ssn = ( TcpSession * ) f . protoctx ;
if ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) | |
StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) | |
f . alproto ! = ALPROTO_UNKNOWN | |
f . alproto_ts ! = ALPROTO_UNKNOWN | |
f . alproto_tc ! = ALPROTO_UNKNOWN | |
ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED | |
FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) | |
FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) | |
ssn - > client . seg_list ! = NULL | |
ssn - > server . seg_list ! = NULL | |
ssn - > data_first_seen_dir ! = 0 ) {
printf ( " failure 1 \n " ) ;
goto end ;
}
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
TcpSession * ssn = ( TcpSession * ) f . protoctx ;
FAIL_IF_NULL ( ssn ) ;
FAIL_IF ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ) ;
FAIL_IF ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ) ;
FAIL_IF ( f . alproto ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( f . alproto_ts ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( f . alproto_tc ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED ) ;
FAIL_IF ( FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( ! RB_EMPTY ( & ssn - > client . seg_tree ) ) ;
FAIL_IF ( ! RB_EMPTY ( & ssn - > server . seg_tree ) ) ;
FAIL_IF ( ssn - > data_first_seen_dir ! = 0 ) ;
/* handshake */
p - > tcph - > th_ack = htonl ( 1 ) ;
@ -2266,22 +2241,20 @@ static int StreamTcpReassembleTest39 (void)
p - > flowflags = FLOW_PKT_TOCLIENT ;
p - > payload_len = 0 ;
p - > payload = NULL ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
if ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) | |
StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) | |
f . alproto ! = ALPROTO_UNKNOWN | |
f . alproto_ts ! = ALPROTO_UNKNOWN | |
f . alproto_tc ! = ALPROTO_UNKNOWN | |
ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED | |
FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) | |
FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) | |
ssn - > client . seg_list ! = NULL | |
ssn - > server . seg_list ! = NULL | |
ssn - > data_first_seen_dir ! = 0 ) {
printf ( " failure 2 \n " ) ;
goto end ;
}
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
FAIL_IF ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ) ;
FAIL_IF ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ) ;
FAIL_IF ( f . alproto ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( f . alproto_ts ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( f . alproto_tc ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED ) ;
FAIL_IF ( FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( ! RB_EMPTY ( & ssn - > client . seg_tree ) ) ;
FAIL_IF ( ! RB_EMPTY ( & ssn - > server . seg_tree ) ) ;
FAIL_IF ( ssn - > data_first_seen_dir ! = 0 ) ;
/* handshake */
p - > tcph - > th_ack = htonl ( 1 ) ;
@ -2290,22 +2263,20 @@ static int StreamTcpReassembleTest39 (void)
p - > flowflags = FLOW_PKT_TOSERVER ;
p - > payload_len = 0 ;
p - > payload = NULL ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
if ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) | |
StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) | |
f . alproto ! = ALPROTO_UNKNOWN | |
f . alproto_ts ! = ALPROTO_UNKNOWN | |
f . alproto_tc ! = ALPROTO_UNKNOWN | |
ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED | |
FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) | |
FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) | |
ssn - > client . seg_list ! = NULL | |
ssn - > server . seg_list ! = NULL | |
ssn - > data_first_seen_dir ! = 0 ) {
printf ( " failure 3 \n " ) ;
goto end ;
}
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
FAIL_IF ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ) ;
FAIL_IF ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ) ;
FAIL_IF ( f . alproto ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( f . alproto_ts ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( f . alproto_tc ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED ) ;
FAIL_IF ( FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( ! RB_EMPTY ( & ssn - > client . seg_tree ) ) ;
FAIL_IF ( ! RB_EMPTY ( & ssn - > server . seg_tree ) ) ;
FAIL_IF ( ssn - > data_first_seen_dir ! = 0 ) ;
/* partial request */
uint8_t request1 [ ] = { 0x47 , 0x45 , } ;
@ -2315,24 +2286,21 @@ static int StreamTcpReassembleTest39 (void)
p - > flowflags = FLOW_PKT_TOSERVER ;
p - > payload_len = sizeof ( request1 ) ;
p - > payload = request1 ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
if ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) | |
StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) | |
f . alproto ! = ALPROTO_UNKNOWN | |
f . alproto_ts ! = ALPROTO_UNKNOWN | |
f . alproto_tc ! = ALPROTO_UNKNOWN | |
ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED | |
FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) | |
FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) | |
ssn - > client . seg_list = = NULL | |
ssn - > client . seg_list - > next ! = NULL | |
ssn - > server . seg_list ! = NULL | |
ssn - > data_first_seen_dir ! = STREAM_TOSERVER ) {
printf ( " failure 4 \n " ) ;
goto end ;
}
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
FAIL_IF ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ) ;
FAIL_IF ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ) ;
FAIL_IF ( f . alproto ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( f . alproto_ts ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( f . alproto_tc ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED ) ;
FAIL_IF ( FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > client . seg_tree ) ) ;
FAIL_IF ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ;
FAIL_IF ( ! RB_EMPTY ( & ssn - > server . seg_tree ) ) ;
FAIL_IF ( ssn - > data_first_seen_dir ! = STREAM_TOSERVER ) ;
/* response ack against partial request */
p - > tcph - > th_ack = htonl ( 3 ) ;
@ -2341,23 +2309,21 @@ static int StreamTcpReassembleTest39 (void)
p - > flowflags = FLOW_PKT_TOCLIENT ;
p - > payload_len = 0 ;
p - > payload = NULL ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
if ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) | |
StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) | |
f . alproto ! = ALPROTO_UNKNOWN | |
f . alproto_ts ! = ALPROTO_UNKNOWN | |
f . alproto_tc ! = ALPROTO_UNKNOWN | |
ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED | |
FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) | | ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) | |
FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) | |
ssn - > client . seg_list = = NULL | |
ssn - > client . seg_list - > next ! = NULL | |
ssn - > server . seg_list ! = NULL | |
ssn - > data_first_seen_dir ! = STREAM_TOSERVER ) {
printf ( " failure 5 \n " ) ;
goto end ;
}
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
FAIL_IF ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ) ;
FAIL_IF ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ) ;
FAIL_IF ( f . alproto ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( f . alproto_ts ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( f . alproto_tc ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED ) ;
FAIL_IF ( FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > client . seg_tree ) ) ;
FAIL_IF ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ;
FAIL_IF ( ! RB_EMPTY ( & ssn - > server . seg_tree ) ) ;
FAIL_IF ( ssn - > data_first_seen_dir ! = STREAM_TOSERVER ) ;
/* complete partial request */
uint8_t request2 [ ] = {
@ -2378,24 +2344,22 @@ static int StreamTcpReassembleTest39 (void)
p - > flowflags = FLOW_PKT_TOSERVER ;
p - > payload_len = sizeof ( request2 ) ;
p - > payload = request2 ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
if ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) | |
StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) | |
f . alproto ! = ALPROTO_UNKNOWN | |
f . alproto_ts ! = ALPROTO_UNKNOWN | |
f . alproto_tc ! = ALPROTO_UNKNOWN | |
ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED | |
FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) | | ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) | |
FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) | |
ssn - > client . seg_list = = NULL | |
ssn - > client . seg_list - > next = = NULL | |
ssn - > client . seg_list - > next - > next ! = NULL | |
ssn - > server . seg_list ! = NULL | |
ssn - > data_first_seen_dir ! = STREAM_TOSERVER ) {
printf ( " failure 6 \n " ) ;
goto end ;
}
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
FAIL_IF ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ) ;
FAIL_IF ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ) ;
FAIL_IF ( f . alproto ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( f . alproto_ts ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( f . alproto_tc ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED ) ;
FAIL_IF ( FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > client . seg_tree ) ) ;
FAIL_IF ( ! TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ;
FAIL_IF ( TCPSEG_RB_NEXT ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ) ;
FAIL_IF ( ! RB_EMPTY ( & ssn - > server . seg_tree ) ) ;
FAIL_IF ( ssn - > data_first_seen_dir ! = STREAM_TOSERVER ) ;
/* response - request ack */
uint8_t response [ ] = {
@ -2447,25 +2411,22 @@ static int StreamTcpReassembleTest39 (void)
p - > payload_len = sizeof ( response ) ;
p - > payload = response ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
if ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) | |
! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) | |
f . alproto ! = ALPROTO_HTTP | |
f . alproto_ts ! = ALPROTO_HTTP | |
f . alproto_tc ! = ALPROTO_UNKNOWN | |
ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) | | ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) | |
FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) | |
ssn - > client . seg_list = = NULL | |
ssn - > client . seg_list - > next = = NULL | |
ssn - > client . seg_list - > next - > next ! = NULL | |
ssn - > server . seg_list = = NULL | |
ssn - > server . seg_list - > next ! = NULL | |
ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) {
printf ( " failure 7 \n " ) ;
goto end ;
}
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
FAIL_IF ( StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ) ;
FAIL_IF ( f . alproto ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_ts ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_tc ! = ALPROTO_UNKNOWN ) ;
FAIL_IF ( ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > client . seg_tree ) ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > server . seg_tree ) ) ;
FAIL_IF ( ! TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ;
FAIL_IF ( TCPSEG_RB_NEXT ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ) ;
/* response ack from request */
p - > tcph - > th_ack = htonl ( 328 ) ;
@ -2474,25 +2435,23 @@ static int StreamTcpReassembleTest39 (void)
p - > flowflags = FLOW_PKT_TOSERVER ;
p - > payload_len = 0 ;
p - > payload = NULL ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
if ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) | |
! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) | |
f . alproto ! = ALPROTO_HTTP | |
f . alproto_ts ! = ALPROTO_HTTP | |
f . alproto_tc ! = ALPROTO_HTTP | |
ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) | | ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) | |
ssn - > client . seg_list = = NULL | |
ssn - > client . seg_list - > next = = NULL | |
ssn - > client . seg_list - > next - > next ! = NULL | |
ssn - > server . seg_list = = NULL | |
ssn - > server . seg_list - > next ! = NULL | |
ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) {
printf ( " failure 8 \n " ) ;
goto end ;
}
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ) ;
FAIL_IF ( f . alproto ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_ts ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_tc ! = ALPROTO_HTTP ) ;
FAIL_IF ( ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > client . seg_tree ) ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > server . seg_tree ) ) ;
FAIL_IF ( ! TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ;
FAIL_IF ( TCPSEG_RB_NEXT ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ) ;
FAIL_IF ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > server . seg_tree ) ) ) ;
/* response - acking */
p - > tcph - > th_ack = htonl ( 88 ) ;
@ -2501,24 +2460,23 @@ static int StreamTcpReassembleTest39 (void)
p - > flowflags = FLOW_PKT_TOCLIENT ;
p - > payload_len = 0 ;
p - > payload = NULL ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
if ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) | |
! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) | |
f . alproto ! = ALPROTO_HTTP | |
f . alproto_ts ! = ALPROTO_HTTP | |
f . alproto_tc ! = ALPROTO_HTTP | |
ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) | | ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) | |
ssn - > client . seg_list = = NULL | |
ssn - > client . seg_list - > next = = NULL | |
ssn - > server . seg_list = = NULL | |
ssn - > server . seg_list - > next ! = NULL | |
ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) {
printf ( " failure 9 \n " ) ;
goto end ;
}
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ) ;
FAIL_IF ( f . alproto ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_ts ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_tc ! = ALPROTO_HTTP ) ;
FAIL_IF ( ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > client . seg_tree ) ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > server . seg_tree ) ) ;
FAIL_IF ( ! TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ;
FAIL_IF ( TCPSEG_RB_NEXT ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ) ;
FAIL_IF ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > server . seg_tree ) ) ) ;
/* response ack from request */
p - > tcph - > th_ack = htonl ( 328 ) ;
@ -2527,24 +2485,22 @@ static int StreamTcpReassembleTest39 (void)
p - > flowflags = FLOW_PKT_TOSERVER ;
p - > payload_len = 0 ;
p - > payload = NULL ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
if ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) | |
! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) | |
f . alproto ! = ALPROTO_HTTP | |
f . alproto_ts ! = ALPROTO_HTTP | |
f . alproto_tc ! = ALPROTO_HTTP | |
ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) | | ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) | |
ssn - > client . seg_list = = NULL | |
ssn - > client . seg_list - > next = = NULL | |
ssn - > server . seg_list = = NULL | |
ssn - > server . seg_list - > next ! = NULL | |
ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) {
printf ( " failure 10 \n " ) ;
goto end ;
}
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ) ;
FAIL_IF ( f . alproto ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_ts ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_tc ! = ALPROTO_HTTP ) ;
FAIL_IF ( ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > client . seg_tree ) ) ;
FAIL_IF ( ! TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > server . seg_tree ) ) ;
FAIL_IF ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > server . seg_tree ) ) ) ;
/* response - acking the request again*/
p - > tcph - > th_ack = htonl ( 88 ) ;
@ -2553,24 +2509,22 @@ static int StreamTcpReassembleTest39 (void)
p - > flowflags = FLOW_PKT_TOCLIENT ;
p - > payload_len = 0 ;
p - > payload = NULL ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
if ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) | |
! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) | |
f . alproto ! = ALPROTO_HTTP | |
f . alproto_ts ! = ALPROTO_HTTP | |
f . alproto_tc ! = ALPROTO_HTTP | |
ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) | | ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) | |
ssn - > client . seg_list = = NULL | |
ssn - > client . seg_list - > next = = NULL | |
ssn - > server . seg_list = = NULL | |
ssn - > server . seg_list - > next ! = NULL | |
ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) {
printf ( " failure 11 \n " ) ;
goto end ;
}
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ) ;
FAIL_IF ( f . alproto ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_ts ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_tc ! = ALPROTO_HTTP ) ;
FAIL_IF ( ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > client . seg_tree ) ) ;
FAIL_IF ( ! TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > server . seg_tree ) ) ;
FAIL_IF ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > server . seg_tree ) ) ) ;
/*** New Request ***/
@ -2581,26 +2535,23 @@ static int StreamTcpReassembleTest39 (void)
p - > flowflags = FLOW_PKT_TOSERVER ;
p - > payload_len = sizeof ( request1 ) ;
p - > payload = request1 ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
if ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) | |
! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) | |
f . alproto ! = ALPROTO_HTTP | |
f . alproto_ts ! = ALPROTO_HTTP | |
f . alproto_tc ! = ALPROTO_HTTP | |
ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) | | ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) | |
ssn - > client . seg_list = = NULL | |
ssn - > client . seg_list - > next = = NULL | |
ssn - > client . seg_list - > next - > next = = NULL | |
ssn - > server . seg_list = = NULL | |
ssn - > server . seg_list - > next ! = NULL | |
ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) {
printf ( " failure 12 \n " ) ;
goto end ;
}
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ) ;
FAIL_IF ( f . alproto ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_ts ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_tc ! = ALPROTO_HTTP ) ;
FAIL_IF ( ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > client . seg_tree ) ) ;
FAIL_IF ( ! TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ;
FAIL_IF ( ! TCPSEG_RB_NEXT ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > server . seg_tree ) ) ;
FAIL_IF ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > server . seg_tree ) ) ) ;
/* response ack against partial request */
p - > tcph - > th_ack = htonl ( 90 ) ;
@ -2609,25 +2560,24 @@ static int StreamTcpReassembleTest39 (void)
p - > flowflags = FLOW_PKT_TOCLIENT ;
p - > payload_len = 0 ;
p - > payload = NULL ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
if ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) | |
! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) | |
f . alproto ! = ALPROTO_HTTP | |
f . alproto_ts ! = ALPROTO_HTTP | |
f . alproto_tc ! = ALPROTO_HTTP | |
ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) | | ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) | |
ssn - > client . seg_list = = NULL | |
ssn - > client . seg_list - > next = = NULL | |
ssn - > client . seg_list - > next - > next = = NULL | |
ssn - > server . seg_list = = NULL | |
ssn - > server . seg_list - > next ! = NULL | |
ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) {
printf ( " failure 13 \n " ) ;
goto end ;
}
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ) ;
FAIL_IF ( f . alproto ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_ts ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_tc ! = ALPROTO_HTTP ) ;
FAIL_IF ( ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > client . seg_tree ) ) ;
FAIL_IF ( ! TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ;
FAIL_IF ( ! TCPSEG_RB_NEXT ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > server . seg_tree ) ) ;
FAIL_IF ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > server . seg_tree ) ) ) ;
/* complete request */
p - > tcph - > th_ack = htonl ( 328 ) ;
@ -2636,26 +2586,24 @@ static int StreamTcpReassembleTest39 (void)
p - > flowflags = FLOW_PKT_TOSERVER ;
p - > payload_len = sizeof ( request2 ) ;
p - > payload = request2 ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
if ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) | |
! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) | |
f . alproto ! = ALPROTO_HTTP | |
f . alproto_ts ! = ALPROTO_HTTP | |
f . alproto_tc ! = ALPROTO_HTTP | |
ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) | | ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) | |
ssn - > client . seg_list = = NULL | |
ssn - > client . seg_list - > next = = NULL | |
ssn - > client . seg_list - > next - > next = = NULL | |
ssn - > client . seg_list - > next - > next - > next = = NULL | |
ssn - > server . seg_list = = NULL | |
ssn - > server . seg_list - > next ! = NULL | |
ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) {
printf ( " failure 14 \n " ) ;
goto end ;
}
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ) ;
FAIL_IF ( f . alproto ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_ts ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_tc ! = ALPROTO_HTTP ) ;
FAIL_IF ( ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > client . seg_tree ) ) ;
FAIL_IF ( ! TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ;
FAIL_IF ( ! TCPSEG_RB_NEXT ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ) ;
FAIL_IF ( ! TCPSEG_RB_NEXT ( TCPSEG_RB_NEXT ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ) ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > server . seg_tree ) ) ;
FAIL_IF ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > server . seg_tree ) ) ) ;
/* response ack against second partial request */
p - > tcph - > th_ack = htonl ( 175 ) ;
@ -2664,25 +2612,26 @@ static int StreamTcpReassembleTest39 (void)
p - > flowflags = FLOW_PKT_TOCLIENT ;
p - > payload_len = 0 ;
p - > payload = NULL ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
if ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) | |
! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) | |
f . alproto ! = ALPROTO_HTTP | |
f . alproto_ts ! = ALPROTO_HTTP | |
f . alproto_tc ! = ALPROTO_HTTP | |
ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) | | ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) | |
ssn - > client . seg_list - > next = = NULL | |
ssn - > client . seg_list - > next - > next = = NULL | |
ssn - > client . seg_list - > next - > next - > next = = NULL | |
ssn - > server . seg_list = = NULL | |
ssn - > server . seg_list - > next ! = NULL | |
ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) {
printf ( " failure 15 \n " ) ;
goto end ;
}
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ) ;
FAIL_IF ( f . alproto ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_ts ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_tc ! = ALPROTO_HTTP ) ;
FAIL_IF ( ssn - > flags & STREAMTCP_FLAG_APP_LAYER_DISABLED ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) ) ;
FAIL_IF ( ! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) ) ;
FAIL_IF ( ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > client . seg_tree ) ) ;
FAIL_IF ( ! TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ;
FAIL_IF ( ! TCPSEG_RB_NEXT ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ) ;
FAIL_IF ( ! TCPSEG_RB_NEXT ( TCPSEG_RB_NEXT ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > client . seg_tree ) ) ) ) ) ;
FAIL_IF ( RB_EMPTY ( & ssn - > server . seg_tree ) ) ;
FAIL_IF ( TCPSEG_RB_NEXT ( RB_MIN ( TCPSEG , & ssn - > server . seg_tree ) ) ) ;
/* response acking a request */
p - > tcph - > th_ack = htonl ( 175 ) ;
p - > tcph - > th_seq = htonl ( 328 ) ;
@ -2690,32 +2639,12 @@ static int StreamTcpReassembleTest39 (void)
p - > flowflags = FLOW_PKT_TOCLIENT ;
p - > payload_len = 0 ;
p - > payload = NULL ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
SCLogDebug ( " StreamTcpIsSetStreamFlagAppProtoDetectionCompleted %s, "
" StreamTcpIsSetStreamFlagAppProtoDetectionCompleted %s, "
" f.alproto %u f.alproto_ts %u f.alproto_tc %u " ,
StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ? " true " : " false " ,
StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ? " true " : " false " ,
f . alproto , f . alproto_ts , f . alproto_tc ) ;
if ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) | |
! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) | |
f . alproto ! = ALPROTO_HTTP | |
f . alproto_ts ! = ALPROTO_HTTP | |
f . alproto_tc ! = ALPROTO_HTTP ) // ||
//ssn->flags & STREAMTCP_FLAG_APP_LAYER_DISABLED)// ||
//!FLOW_IS_PM_DONE(&f, STREAM_TOSERVER) || !FLOW_IS_PP_DONE(&f, STREAM_TOSERVER) ||
//!FLOW_IS_PM_DONE(&f, STREAM_TOCLIENT) || FLOW_IS_PP_DONE(&f, STREAM_TOCLIENT) ||
//ssn->client.seg_list != NULL ||
//ssn->server.seg_list == NULL ||
//ssn->server.seg_list->next != NULL ||
//ssn->data_first_seen_dir != APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER)
{
printf ( " failure 15 \n " ) ;
goto end ;
}
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > server ) ) ;
FAIL_IF ( ! StreamTcpIsSetStreamFlagAppProtoDetectionCompleted ( & ssn - > client ) ) ;
FAIL_IF ( f . alproto ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_ts ! = ALPROTO_HTTP ) ;
FAIL_IF ( f . alproto_tc ! = ALPROTO_HTTP ) ;
StreamTcpPruneSession ( & f , STREAM_TOSERVER ) ;
StreamTcpPruneSession ( & f , STREAM_TOCLIENT ) ;
@ -2727,34 +2656,12 @@ static int StreamTcpReassembleTest39 (void)
p - > flowflags = FLOW_PKT_TOSERVER ;
p - > payload_len = 0 ;
p - > payload = NULL ;
if ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 )
goto end ;
#if 0
if ( //!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->server) ||
//!StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(&ssn->client) ||
//f.alproto != ALPROTO_HTTP ||
//f.alproto_ts != ALPROTO_HTTP ||
//f.alproto_tc != ALPROTO_HTTP ||
//ssn->flags & STREAMTCP_FLAG_APP_LAYER_DISABLED ||
! FLOW_IS_PM_DONE ( & f , STREAM_TOSERVER ) | | ! FLOW_IS_PP_DONE ( & f , STREAM_TOSERVER ) | |
! FLOW_IS_PM_DONE ( & f , STREAM_TOCLIENT ) | | FLOW_IS_PP_DONE ( & f , STREAM_TOCLIENT ) | |
ssn - > client . seg_list ! = NULL | |
ssn - > server . seg_list ! = NULL | |
ssn - > data_first_seen_dir ! = APP_LAYER_DATA_ALREADY_SENT_TO_APP_LAYER
) {
printf ( " failure 16 \n " ) ;
abort ( ) ;
goto end ;
}
# endif
FAIL_IF ( StreamTcpPacket ( & tv , p , & stt , & pq ) = = - 1 ) ;
ret = 1 ;
end :
StreamTcpSessionClear ( ssn ) ;
StreamTcpUTDeinit ( stt . ra_ctx ) ;
SCFree ( p ) ;
FLOWLOCK_UNLOCK ( & f ) ;
return ret ;
PASS ;
}
/**
@ -2867,12 +2774,9 @@ static int StreamTcpReassembleTest40 (void)
}
/* check is have the segment in the list and flagged or not */
if ( ssn . client . seg_list = = NULL | |
SEGMENT_BEFORE_OFFSET ( & ssn . client , ssn . client . seg_list , STREAM_APP_PROGRESS ( & ssn . client ) ) )
{
printf ( " the list is NULL or the processed segment has not been flaged (7): " ) ;
goto end ;
}
TcpSegment * seg = RB_MIN ( TCPSEG , & ssn . client . seg_tree ) ;
FAIL_IF_NULL ( seg ) ;
FAIL_IF ( SEGMENT_BEFORE_OFFSET ( & ssn . client , seg , STREAM_APP_PROGRESS ( & ssn . client ) ) ) ;
p - > flowflags = FLOW_PKT_TOSERVER ;
p - > payload = httpbuf4 ;
@ -3391,7 +3295,9 @@ static int StreamTcpReassembleInlineTest08(void)
p - > tcph - > th_seq = htonl ( 17 ) ;
StreamTcpPruneSession ( & f , STREAM_TOSERVER ) ;
FAIL_IF ( ssn . client . seg_list - > seq ! = 2 ) ;
TcpSegment * seg = RB_MIN ( TCPSEG , & ssn . client . seg_tree ) ;
FAIL_IF_NULL ( seg ) ;
FAIL_IF_NOT ( seg - > seq = = 2 ) ;
FLOW_DESTROY ( & f ) ;
UTHFreePacket ( p ) ;
@ -3459,10 +3365,9 @@ static int StreamTcpReassembleInlineTest09(void)
p - > tcph - > th_seq = htonl ( 12 ) ;
if ( ssn . client . seg_list - > seq ! = 2 ) {
printf ( " expected segment 1 (seq 2) to be first in the list, got seq % " PRIu32 " : " , ssn . client . seg_list - > seq ) ;
goto end ;
}
TcpSegment * seg = RB_MIN ( TCPSEG , & ssn . client . seg_tree ) ;
FAIL_IF_NULL ( seg ) ;
FAIL_IF_NOT ( seg - > seq = = 2 ) ;
ret = 1 ;
end :