From: Philippe Antoine Date: Thu, 16 Jan 2025 07:45:59 +0000 (+0100) Subject: app-layer: helper function AppProtoNewProtoFromString X-Git-Tag: suricata-8.0.0-beta1~60 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=850bd72399209b4c9d8e9c84ad452aa863a607f6;p=thirdparty%2Fsuricata.git app-layer: helper function AppProtoNewProtoFromString So that we do not have to know g_alproto_max to register dynamically a new protocol from its name --- diff --git a/rust/sys/src/sys.rs b/rust/sys/src/sys.rs index 3979985345..529b59bc91 100644 --- a/rust/sys/src/sys.rs +++ b/rust/sys/src/sys.rs @@ -52,6 +52,9 @@ extern "C" { #[doc = " \\brief Maps the ALPROTO_*, to its string equivalent.\n\n \\param alproto App layer protocol id.\n\n \\retval String equivalent for the alproto."] pub fn AppProtoToString(alproto: AppProto) -> *const ::std::os::raw::c_char; } +extern "C" { + pub fn AppProtoNewProtoFromString(proto_name: *const ::std::os::raw::c_char) -> AppProto; +} extern "C" { pub fn AppProtoRegisterProtoString( alproto: AppProto, proto_name: *const ::std::os::raw::c_char, diff --git a/src/app-layer-protos.c b/src/app-layer-protos.c index 3f991f35d4..19db07cd84 100644 --- a/src/app-layer-protos.c +++ b/src/app-layer-protos.c @@ -71,6 +71,12 @@ AppProto StringToAppProto(const char *proto_name) return ALPROTO_UNKNOWN; } +AppProto AppProtoNewProtoFromString(const char *proto_name) +{ + AppProtoRegisterProtoString(g_alproto_max, proto_name); + return g_alproto_max - 1; +} + void AppProtoRegisterProtoString(AppProto alproto, const char *proto_name) { if (alproto < ALPROTO_MAX_STATIC) { diff --git a/src/app-layer-protos.h b/src/app-layer-protos.h index 813e58f13d..46d7091ce3 100644 --- a/src/app-layer-protos.h +++ b/src/app-layer-protos.h @@ -175,6 +175,8 @@ const char *AppProtoToString(AppProto alproto); */ AppProto StringToAppProto(const char *proto_name); +AppProto AppProtoNewProtoFromString(const char *proto_name); + void AppProtoRegisterProtoString(AppProto alproto, const char *proto_name); #endif /* SURICATA_APP_LAYER_PROTOS_H */ diff --git a/src/util-plugin.c b/src/util-plugin.c index 1a90b1f5d2..a5cf1070f7 100644 --- a/src/util-plugin.c +++ b/src/util-plugin.c @@ -163,8 +163,7 @@ SCCapturePlugin *SCPluginFindCaptureByName(const char *name) int SCPluginRegisterAppLayer(SCAppLayerPlugin *plugin) { - AppProto alproto = g_alproto_max; - AppProtoRegisterProtoString(alproto, plugin->name); + AppProto alproto = AppProtoNewProtoFromString(plugin->name); if (plugin->Register) { if (AppLayerParserPreRegister(plugin->Register) != 0) { return 1;