{
const uint32_t dce_smb_id = 0xff534d42; /* \xffSMB */
const uint32_t dce_smb2_id = 0xfe534d42; /* \xfeSMB */
- const uint8_t nbss_type_message = 0;
+ const uint8_t session_request = 0x81, session_response = 0x82,
+ session_message = 0x00;
uint32_t n = 0;
while (n < len)
{
case STATE_0:
{
- if (data[n] != nbss_type_message)
+ if (data[n] == session_message)
{
- tracker->state = STATE_8;
+ tracker->state = (DCE_States)((int)tracker->state + 2);
+ break;
+ }
+
+ if (data[n] == session_request || data[n] == session_response)
+ {
+ tracker->state = (DCE_States)((int)tracker->state + 1);
return false;
}
- tracker->state = (DCE_States)((int)tracker->state + 1);
- break;
+
+ tracker->state = STATE_9;
+ return false;
+ }
+ case STATE_1:
+ {
+ if (data[n] == session_message)
+ {
+ tracker->state = (DCE_States)((int)tracker->state + 1);
+ break;
+ }
+
+ tracker->state = STATE_9;
+ return false;
}
- case STATE_4:
+ case STATE_5:
{
tracker->helper = data[n];
tracker->state = (DCE_States)((int)tracker->state + 1);
break;
}
- case STATE_5:
case STATE_6:
+ case STATE_7:
{
tracker->helper <<= 8;
tracker->helper |= data[n];
break;
}
- case STATE_7:
+ case STATE_8:
{
tracker->helper <<= 8;
tracker->helper |= data[n];
break;
}
- case STATE_8:
+ case STATE_9:
// no match
return false;