if ( my_id != app_id )
{
my_id = app_id;
- update_stats(app_id);
+ if ( app_id > APP_ID_NONE )
+ update_stats(app_id);
+ else if ( app_id == APP_ID_UNKNOWN )
+ AppIdPegCounts::inc_disco_peg(AppIdPegCounts::DiscoveryPegs::APPID_UNKNOWN);
}
}
if ( id != port_service_id )
{
port_service_id = id;
- AppIdPegCounts::inc_service_count(id);
+ if ( id > APP_ID_NONE )
+ AppIdPegCounts::inc_service_count(id);
}
}
if ( my_user_id != app_id )
{
my_user_id = app_id;
- AppIdPegCounts::inc_user_count(app_id);
+ if ( app_id > APP_ID_NONE )
+ AppIdPegCounts::inc_user_count(app_id);
}
}
}
session->hsession->process_http_packet(direction);
- session->set_session_flags(APPID_SESSION_SERVICE_DETECTED | APPID_SESSION_HTTP_SESSION);
- session->set_application_ids(session->pick_service_app_id(),
+ if (session->service.get_id() == APP_ID_HTTP)
+ {
+ session->set_session_flags(APPID_SESSION_SERVICE_DETECTED | APPID_SESSION_HTTP_SESSION);
+ session->set_application_ids(session->pick_service_app_id(),
session->pick_client_app_id(), session->pick_payload_app_id(),
session->pick_misc_app_id());
+ session->service_disco_state = APPID_DISCO_STATE_FINISHED;
+ }
+
}
{ CountType::SUM, "processed_packets", "count of packets processed" },
{ CountType::SUM, "ignored_packets", "count of packets ignored" },
{ CountType::SUM, "total_sessions", "count of sessions created" },
+ { CountType::SUM, "appid_unknown", "count of sessions where appid could not be determined" },
};
THREAD_LOCAL std::vector<PegCount>* AppIdPegCounts::appid_peg_counts;
PROCESSED_PACKETS,
IGNORED_PACKETS,
TOTAL_SESSIONS,
+ APPID_UNKNOWN,
NUM_APPID_GLOBAL_PEGS
};
return KRB_FAILED;
krbs->state = KRB_STATE_VERSION_2;
krbs->pos = 0;
- case KRB_STATE_VERSION_2:
+ // fallthrough
+ case KRB_STATE_VERSION_2:
if (*s != KRB_SERVER_VERSION[krbs->pos])
return KRB_FAILED;
krbs->pos++;
if (krbs->msg_len < krbs->len)
return KRB_FAILED;
krbs->state = KRB_STATE_FIELD_DATA_2;
- case KRB_STATE_FIELD_DATA_2:
+ // fallthrough
+ case KRB_STATE_FIELD_DATA_2:
if (krbs->len <= 1)
{
if (krbs->msg_len <= 1)
return KRB_FAILED;
krbs->state = KRB_STATE_CNAME_TYPE_2;
krbs->pos = 0;
- case KRB_STATE_CNAME_TYPE_2:
+ // fallthrough
+ case KRB_STATE_CNAME_TYPE_2:
if (*s != KRB_CNAME_TYPE[krbs->pos])
return KRB_FAILED;
krbs->pos++;
return KRB_FAILED;
krbs->state = KRB_STATE_CNAME_PRINCIPAL_DATA_2;
krbs->pos = 0;
- case KRB_STATE_CNAME_PRINCIPAL_DATA_2:
+ // fallthrough
+ case KRB_STATE_CNAME_PRINCIPAL_DATA_2:
if (krbs->len)
{
if (krbs->pos < (sizeof(krbs->cname) - 2))
return KRB_FAILED;
krbs->state = KRB_STATE_VERSION_2;
krbs->pos = 0;
+ // fallthrough
case KRB_STATE_VERSION_2:
if (*s != KRB_CLIENT_VERSION[krbs->pos])
return KRB_FAILED;
if (krbs->msg_len < krbs->len)
return KRB_FAILED;
krbs->state = KRB_STATE_FIELD_DATA_2;
- case KRB_STATE_FIELD_DATA_2:
+ // fallthrough
+ case KRB_STATE_FIELD_DATA_2:
if (krbs->len <= 1)
{
if (krbs->msg_len <= 1)
return KRB_FAILED;
krbs->state = KRB_STATE_CNAME_TYPE_2;
krbs->pos = 0;
- case KRB_STATE_CNAME_TYPE_2:
+ // fallthrough
+ case KRB_STATE_CNAME_TYPE_2:
if (*s != KRB_CNAME_TYPE[krbs->pos])
return KRB_FAILED;
krbs->pos++;
return KRB_FAILED;
krbs->state = KRB_STATE_CNAME_PRINCIPAL_DATA_2;
krbs->pos = 0;
- case KRB_STATE_CNAME_PRINCIPAL_DATA_2:
+ // fallthrough
+ case KRB_STATE_CNAME_PRINCIPAL_DATA_2:
if (krbs->len)
{
if (krbs->pos < (sizeof(krbs->cname) - 2))
case POP3_STATE_CONNECT:
pd->state = POP3_STATE_RESPONSE;
begin = data;
+ // fallthrough
+
case POP3_STATE_RESPONSE:
if (!begin && data[0] == '+' && data[1] == ' ')
{
return 0;
}
pd->state = POP3_STATE_CONTINUE;
- /* Fall through */
+ // fallthrough
case POP3_STATE_CONTINUE:
while (data < end)
case POP3_CLIENT_STATE_STLS_CMD:
/* We failed to transition to POP3S - fall back to normal POP3 AUTHORIZATION state */
fd->state = POP3_CLIENT_STATE_AUTH;
- // fall through
+ // fallthrough
case POP3_CLIENT_STATE_AUTH:
switch (pattern_index)
fd->state = POP3_CLIENT_STATE_TRANS; // look ahead for normal POP3 commands
for (; (s < end) && *s != '\r' && *s != '\n'; s++)
;
- // having skipped to the end of the line, fall through for the empty-line skip
+ // fallthrough
+ // for the empty-line skip
case PATTERN_AUTHEOC: // used with subsequent CAPA; no state change;
case PATTERN_AUTHEOC2:
;
break;
}
- // fall through because we are not changing to TRANSACTION state, yet
+ // fallthrough
+ // we are not changing to TRANSACTION state, yet
default:
{
if (!eoc[pattern_index])
if (service_strstr(args.data, args.size,
(const uint8_t*)SMTP_CLOSING_CONN, sizeof(SMTP_CLOSING_CONN)-1))
goto success;
- case 520:
+ // fallthrough
+ case 520:
case 554:
fd->state = SMTP_SERVICE_STATE_CONNECTION_ERROR;
break;
case APP_ID_PICASA:
if (dominant_pattern_detected)
break;
- case APP_ID_WINDOWS_MEDIA_PLAYER:
+ // fallthrough
+ case APP_ID_WINDOWS_MEDIA_PLAYER:
case APP_ID_BITTORRENT:
buffPtr = continue_buffer_scan(start, end, tmp, match);
if (!buffPtr)
{
break;
}
+ // fallthrough
case RPC_TCP_STATE_VERIFY_DATA:
length = min(fragsize, rd->tcpauthsize[dir] - rd->tcppos[dir]);
rd->tcppos[dir] += length;
{
break;
}
+ // fallthrough
+
case RPC_TCP_STATE_PARTIAL:
if (rd->tcppos[dir] < RPC_MAX_TCP_PACKET_SIZE && fragsize)
{
else
ss->plen = 0;
ss->oldhstate = OLD_SSH_HEADER_FIND_CODE;
+ // fallthrough
case OLD_SSH_HEADER_FIND_CODE:
if (ss->pos == ss->plen + sizeof(skx->len))
{