@ -124,59 +124,61 @@ int AppLayerHandleMsg(AlpProtoDetectThreadCtx *dp_ctx, StreamMsg *smsg)
if ( ssn ! = NULL ) {
alproto = ssn - > alproto ;
/* if we don't know the proto yet and we have received a stream
* initializer message , we run proto detection .
* We receive 2 stream init msgs ( one for each direction ) but we
* only run the proto detection once . */
if ( alproto = = ALPROTO_UNKNOWN & & smsg - > flags & STREAM_START ) {
SCLogDebug ( " Stream initializer (len % " PRIu32 " (% " PRIu32 " )) " ,
if ( ! ( ssn - > flags & STREAMTCP_FLAG_NO_APPLAYER_INSPECTION ) ) {
/* if we don't know the proto yet and we have received a stream
* initializer message , we run proto detection .
* We receive 2 stream init msgs ( one for each direction ) but we
* only run the proto detection once . */
if ( alproto = = ALPROTO_UNKNOWN & & smsg - > flags & STREAM_START ) {
SCLogDebug ( " Stream initializer (len % " PRIu32 " (% " PRIu32 " )) " ,
smsg - > data . data_len , MSG_DATA_SIZE ) ;
//printf("=> Init Stream Data -- start\n");
//PrintRawDataFp(stdout, smsg->init.data, smsg->init.data_len);
//printf("=> Init Stream Data -- end\n");
//printf("=> Init Stream Data -- start\n");
//PrintRawDataFp(stdout, smsg->init.data, smsg->init.data_len);
//printf("=> Init Stream Data -- end\n");
alproto = AppLayerDetectGetProto ( & alp_proto_ctx , dp_ctx ,
smsg - > data . data , smsg - > data . data_len , smsg - > flags ) ;
if ( alproto ! = ALPROTO_UNKNOWN ) {
/* store the proto and setup the L7 data array */
StreamL7DataPtrInit ( ssn ) ;
ssn - > alproto = alproto ;
ssn - > flags | = STREAMTCP_FLAG_APPPROTO_DETECTION_COMPLETED ;
alproto = AppLayerDetectGetProto ( & alp_proto_ctx , dp_ctx ,
smsg - > data . data , smsg - > data . data_len , smsg - > flags ) ;
if ( alproto ! = ALPROTO_UNKNOWN ) {
/* store the proto and setup the L7 data array */
StreamL7DataPtrInit ( ssn ) ;
ssn - > alproto = alproto ;
ssn - > flags | = STREAMTCP_FLAG_APPPROTO_DETECTION_COMPLETED ;
r = AppLayerParse ( smsg - > flow , alproto , smsg - > flags ,
smsg - > data . data , smsg - > data . data_len ) ;
} else {
if ( smsg - > flags & STREAM_TOSERVER ) {
if ( smsg - > data . data_len > = alp_proto_ctx . toserver . max_len ) {
ssn - > flags | = STREAMTCP_FLAG_APPPROTO_DETECTION_COMPLETED ;
SCLogDebug ( " ALPROTO_UNKNOWN flow %p " , smsg - > flow ) ;
StreamTcpSetSessionNoReassemblyFlag ( ssn , 0 ) ;
}
} else if ( smsg - > flags & STREAM_TOCLIENT ) {
if ( smsg - > data . data_len > = alp_proto_ctx . toclient . max_len ) {
ssn - > flags | = STREAMTCP_FLAG_APPPROTO_DETECTION_COMPLETED ;
SCLogDebug ( " ALPROTO_UNKNOWN flow %p " , smsg - > flow ) ;
StreamTcpSetSessionNoReassemblyFlag ( ssn , 1 ) ;
r = AppLayerParse ( smsg - > flow , alproto , smsg - > flags ,
smsg - > data . data , smsg - > data . data_len ) ;
} else {
if ( smsg - > flags & STREAM_TOSERVER ) {
if ( smsg - > data . data_len > = alp_proto_ctx . toserver . max_len ) {
ssn - > flags | = STREAMTCP_FLAG_APPPROTO_DETECTION_COMPLETED ;
SCLogDebug ( " ALPROTO_UNKNOWN flow %p " , smsg - > flow ) ;
StreamTcpSetSessionNoReassemblyFlag ( ssn , 0 ) ;
}
} else if ( smsg - > flags & STREAM_TOCLIENT ) {
if ( smsg - > data . data_len > = alp_proto_ctx . toclient . max_len ) {
ssn - > flags | = STREAMTCP_FLAG_APPPROTO_DETECTION_COMPLETED ;
SCLogDebug ( " ALPROTO_UNKNOWN flow %p " , smsg - > flow ) ;
StreamTcpSetSessionNoReassemblyFlag ( ssn , 1 ) ;
}
}
}
}
} else {
SCLogDebug ( " stream data (len % " PRIu32 " (% " PRIu32 " )), alproto "
" % " PRIu16 " (flow %p) " , smsg - > data . data_len , MSG_DATA_SIZE ,
alproto , smsg - > flow ) ;
//printf("=> Stream Data -- start\n");
//PrintRawDataFp(stdout, smsg->data.data, smsg->data.data_len);
//printf("=> Stream Data -- end\n");
/* if we don't have a data object here we are not getting it
* a start msg should have gotten us one */
if ( alproto ! = ALPROTO_UNKNOWN ) {
r = AppLayerParse ( smsg - > flow , alproto , smsg - > flags ,
smsg - > data . data , smsg - > data . data_len ) ;
} else {
SCLogDebug ( " smsg not start, but no l7 data? Weird " ) ;
SCLogDebug ( " stream data (len % " PRIu32 " (% " PRIu32 " )), alproto "
" % " PRIu16 " (flow %p) " , smsg - > data . data_len , MSG_DATA_SIZE ,
alproto , smsg - > flow ) ;
//printf("=> Stream Data -- start\n");
//PrintRawDataFp(stdout, smsg->data.data, smsg->data.data_len);
//printf("=> Stream Data -- end\n");
/* if we don't have a data object here we are not getting it
* a start msg should have gotten us one */
if ( alproto ! = ALPROTO_UNKNOWN ) {
r = AppLayerParse ( smsg - > flow , alproto , smsg - > flags ,
smsg - > data . data , smsg - > data . data_len ) ;
} else {
SCLogDebug ( " smsg not start, but no l7 data? Weird " ) ;
}
}
}