From: Victor Julien Date: Fri, 17 Jan 2025 11:10:29 +0000 (+0100) Subject: tls: expose progress by name X-Git-Tag: suricata-8.0.0-beta1~33 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6795b4bbb03200e9a997a3b4df09dcd93349c569;p=thirdparty%2Fsuricata.git tls: expose progress by name --- diff --git a/src/app-layer-ssl.c b/src/app-layer-ssl.c index c54ad90c24..8cdc1c784e 100644 --- a/src/app-layer-ssl.c +++ b/src/app-layer-ssl.c @@ -43,6 +43,58 @@ #include "util-enum.h" #include "util-validate.h" +static SCEnumCharMap tls_state_client_table[] = { + { + "client_in_progress", + TLS_STATE_CLIENT_IN_PROGRESS, + }, + { + "client_hello_done", + TLS_STATE_CLIENT_HELLO_DONE, + }, + { + "client_cert_done", + TLS_STATE_CLIENT_CERT_DONE, + }, + { + "client_handshake_done", + TLS_STATE_CLIENT_HANDSHAKE_DONE, + }, + { + "client_finished", + TLS_STATE_CLIENT_FINISHED, + }, + { NULL, -1 }, +}; + +static SCEnumCharMap tls_state_server_table[] = { + { + "server_in_progress", + TLS_STATE_SERVER_IN_PROGRESS, + }, + { + "server_hello", + TLS_STATE_SERVER_HELLO, + }, + { + "server_cert_done", + TLS_STATE_SERVER_CERT_DONE, + }, + { + "server_hello_done", + TLS_STATE_SERVER_HELLO_DONE, + }, + { + "server_handshake_done", + TLS_STATE_SERVER_HANDSHAKE_DONE, + }, + { + "server_finished", + TLS_STATE_SERVER_FINISHED, + }, + { NULL, -1 }, +}; + SCEnumCharMap tls_frame_table[] = { { "pdu", @@ -3035,6 +3087,26 @@ static AppProto SSLProbingParser(Flow *f, uint8_t direction, return ALPROTO_FAILED; } +static int SSLStateGetStateIdByName(const char *name, const uint8_t direction) +{ + SCEnumCharMap *map = + direction == STREAM_TOSERVER ? tls_state_client_table : tls_state_server_table; + + int id = SCMapEnumNameToValue(name, map); + if (id < 0) { + return -1; + } + return id; +} + +static const char *SSLStateGetStateNameById(const int id, const uint8_t direction) +{ + SCEnumCharMap *map = + direction == STREAM_TOSERVER ? tls_state_client_table : tls_state_server_table; + const char *name = SCMapEnumValueToName(id, map); + return name; +} + static int SSLStateGetFrameIdByName(const char *frame_name) { int id = SCMapEnumNameToValue(frame_name, tls_frame_table); @@ -3321,7 +3393,8 @@ void RegisterSSLParsers(void) AppLayerParserRegisterParser(IPPROTO_TCP, ALPROTO_TLS, STREAM_TOCLIENT, SSLParseServerRecord); - + AppLayerParserRegisterGetStateFuncs( + IPPROTO_TCP, ALPROTO_TLS, SSLStateGetStateIdByName, SSLStateGetStateNameById); AppLayerParserRegisterGetFrameFuncs( IPPROTO_TCP, ALPROTO_TLS, SSLStateGetFrameIdByName, SSLStateGetFrameNameById); AppLayerParserRegisterGetEventInfo(IPPROTO_TCP, ALPROTO_TLS, SSLStateGetEventInfo);