]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
file_api: cache file_adv_pub_id for DataBus publish
authorShilpa Nagpal <shinagpa@cisco.com>
Sat, 18 Apr 2026 05:39:59 +0000 (11:09 +0530)
committerGitHub <noreply@github.com>
Sat, 18 Apr 2026 05:39:59 +0000 (11:09 +0530)
src/file_api/file_inspect.cc
src/file_api/file_inspect.h
src/file_api/file_lib.cc

index 9971db3d9f49c4174cde6820d4a22e0511ae0e8b..3c2000442265ceb72f628c48d1a5ebee28b2d78f 100644 (file)
@@ -29,6 +29,8 @@
 
 #include "file_inspect.h"
 
+#include <atomic>
+
 #include "log/messages.h"
 
 #include "file_cache.h"
 #include "file_flows.h"
 #include "file_module.h"
 #include "file_service.h"
+#include "pub_sub/file_events_ids.h"
 
 using namespace snort;
 
+static std::atomic<unsigned> file_adv_pub_id{0};
+
 FileInspect::FileInspect(FileIdModule* fm)
 {
     fm->load_config(config);
@@ -66,6 +71,8 @@ bool FileInspect::configure(SnortConfig* sc)
 
     FileService::set_max_file_depth(sc);
 
+    file_adv_pub_id = DataBus::get_id(file_adv_pub_key);
+
     if (sc->mp_dbus)
     {
         MPSerializeFunc serialize_func = serialize_file_event;
@@ -77,6 +84,9 @@ bool FileInspect::configure(SnortConfig* sc)
     return true;
 }
 
+unsigned get_file_adv_pub_id()
+{ return file_adv_pub_id; }
+
 static void file_config_show(const FileConfig* fc)
 {
     if ( ConfigLogger::log_flag("enable_type", FileService::is_file_type_id_enabled()) )
index 6ea33037b86f802ea2e10b59d15c23df32dc7c9d..1cfee1434e5def4f4214c6bcb13066cbb99f9f1e 100644 (file)
@@ -36,5 +36,7 @@ public:
     class FileConfig* config;
 };
 
+unsigned get_file_adv_pub_id();
+
 #endif
 
index 9c7adc5a6cd4a646164a6cc944ad44c6a4d0ed7f..0d2803362754217e7718754689b59b13de7fc376 100644 (file)
@@ -595,7 +595,7 @@ void FileContext::log_file_event(Flow* flow, FilePolicyBase* policy)
             set_source(flow);
 
             FileEvent file_event(*this);
-            DataBus::publish(DataBus::get_id(file_adv_pub_key), FileEventIds::FILE_COMPLETE, file_event, flow);
+            DataBus::publish(get_file_adv_pub_id(), FileEventIds::FILE_COMPLETE, file_event, flow);
 
             std::string filename = file_event.get_filename();
             size_t fname_len = filename.length();