ClientDiscovery::get_instance().finalize_client_plugins();
}
+void AppIdDiscovery::release_plugins()
+{
+ ServiceDiscovery::release_instance();
+ ClientDiscovery::release_instance();
+}
+
void AppIdDiscovery::tterm()
{
ClientDiscovery::get_instance().release_thread_resources();
clean_appid_forecast();
free_length_app_cache();
LuaDetectorManager::terminate();
+ AppIdDiscovery::release_plugins();
delete HttpPatternMatchers::get_instance();
service_dns_host_clean();
service_ssl_clean();
#define MAX_CANDIDATE_CLIENTS 10
+ClientDiscovery* ClientDiscovery::discovery_manager = nullptr;
ProfileStats clientMatchPerfStats;
THREAD_LOCAL ClientAppMatch* match_free_list = nullptr;
}
}
-//FIXIT-M: Don't use pointer and pass discovery_manager directly
ClientDiscovery& ClientDiscovery::get_instance(AppIdInspector* ins)
{
- static ClientDiscovery* discovery_manager = nullptr;
if (!discovery_manager)
{
assert(ins);
return *discovery_manager;
}
+void ClientDiscovery::release_instance()
+{
+ assert(discovery_manager);
+ delete discovery_manager;
+ discovery_manager = nullptr;
+
+}
void ClientDiscovery::initialize()
{
new AimClientDetector(this);
public:
~ClientDiscovery() override;
static ClientDiscovery& get_instance(AppIdInspector* ins = nullptr);
+ static void release_instance();
void finalize_client_plugins();
void release_thread_resources();
ClientAppMatch* find_detector_candidates(const snort::Packet* pkt, IpProtocol);
void create_detector_candidates_list(AppIdSession&, snort::Packet*);
int get_detector_candidates_list(AppIdSession&, snort::Packet*, AppidSessionDirection direction);
+ static ClientDiscovery* discovery_manager;
};
#endif
using namespace snort;
-static ServiceDetector* ftp_service;
-
ProfileStats serviceMatchPerfStats;
+static ServiceDetector* ftp_service;
+ServiceDiscovery* ServiceDiscovery::discovery_manager = nullptr;
ServiceDiscovery::ServiceDiscovery(AppIdInspector& ins)
: AppIdDiscovery(ins)
initialize();
}
-//FIXIT-M: Don't use pointer and pass discovery_manager directly
ServiceDiscovery& ServiceDiscovery::get_instance(AppIdInspector* ins)
{
- static ServiceDiscovery* discovery_manager = nullptr;
if (!discovery_manager)
{
assert(ins);
return *discovery_manager;
}
+void ServiceDiscovery::release_instance()
+{
+ assert(discovery_manager);
+ delete discovery_manager;
+ discovery_manager = nullptr;
+}
+
void ServiceDiscovery::initialize()
{
new BattleFieldServiceDetector(this);
{
public:
static ServiceDiscovery& get_instance(AppIdInspector* ins = nullptr);
+ static void release_instance();
void finalize_service_patterns();
int add_service_port(AppIdDetector*, const ServiceDetectorPort&) override;
void get_next_service(const snort::Packet*, const AppidSessionDirection dir, AppIdSession&);
void get_port_based_services(IpProtocol, uint16_t port, AppIdSession&);
void match_by_pattern(AppIdSession&, const snort::Packet*, IpProtocol);
+ static ServiceDiscovery* discovery_manager;
std::vector<AppIdDetector*> service_detector_list;
std::unordered_map<uint16_t, std::vector<ServiceDetector*> > tcp_services;
std::unordered_map<uint16_t, std::vector<ServiceDetector*> > udp_services;