with the same lists as dynamic plugins.
target_link_libraries( snort
${UNIT_TESTS_LIBRARIES}
managers
- loggers
+ main
codecs
+ loggers
ip_codecs
misc_codecs
${STATIC_CODEC_LIBRARIES}
stream_file
stream_paf
mime
- ${PIGLET_LIBRARIES}
ips_options
search_engines
target_based
- main
+ ${PIGLET_LIBRARIES}
codec_module
memory
host_tracker
snort_LDADD = \
$(test_list) \
managers/libmanagers.a \
-loggers/libloggers.a \
+main/libmain.a \
codecs/libcodecs.a \
codecs/ip/libip_codecs.a \
codecs/misc/libmisc_codecs.a \
$(codec_list) \
+loggers/libloggers.a \
network_inspectors/libnetwork_inspectors.a \
network_inspectors/appid/libappid.a \
network_inspectors/binder/libbinder.a \
stream/file/libstream_file.a \
stream/libstream_paf.a \
mime/libmime.a \
-$(pig_list) \
ips_options/libips_options.a \
search_engines/libsearch_engines.a \
target_based/libtarget_based.a \
-main/libmain.a \
+$(pig_list) \
codecs/libcodec_module.a \
memory/libmemory.a \
host_tracker/libhost_tracker.a \
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* act_react[] =
+#endif
{
&react_api.base,
nullptr
};
-#else
-const BaseApi* act_react = &react_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* act_reject[] =
+#endif
{
&rej_api.base,
nullptr
};
-#else
-const BaseApi* act_reject = &rej_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* act_replace[] =
+#endif
{
&rep_api.base,
nullptr
};
-#else
-const BaseApi* act_replace = &rep_api.base;
-#endif
// ips_actions.cc author Russ Combs <rucombs@cisco.com>
#include "ips_actions.h"
+#include "managers/plugin_manager.h"
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#ifdef STATIC_IPS_ACTIONS
-extern const BaseApi* act_react;
-extern const BaseApi* act_reject;
+extern const BaseApi* act_react[];
+extern const BaseApi* act_reject[];
#endif
-extern const BaseApi* act_replace;
+extern const BaseApi* act_replace[];
-const BaseApi* ips_actions[] =
+void load_actions()
{
#ifdef STATIC_IPS_ACTIONS
- act_react,
- act_reject,
+ PluginManager::load_plugins(act_react);
+ PluginManager::load_plugins(act_reject);
#endif
- act_replace,
- nullptr,
-};
+ PluginManager::load_plugins(act_replace);
+}
#ifndef IPS_ACTIONS_H
#define IPS_ACTIONS_H
-extern const struct BaseApi* ips_actions[];
+void load_actions();
#endif
#endif
#include "framework/codec.h"
+#include "managers/plugin_manager.h"
-extern const BaseApi* cd_ipv4; // static due to dependence on fpdetect
-extern const BaseApi* cd_hopopts; // static to ensure the symbols CheckIPV6HopOptions
- // and CheckIPv6ExtensionOrder the final executuable.
-extern const BaseApi* cd_tcp; // static because only file that specific functions
- // (symbols will be removed from final executabel)
+extern const BaseApi* cd_ipv4[]; // static due to dependence on fpdetect
+extern const BaseApi* cd_hopopts[]; // static to ensure the symbols CheckIPV6HopOptions
+ // and CheckIPv6ExtensionOrder the final executuable.
+extern const BaseApi* cd_tcp[]; // static because only file that specific functions
+ // (symbols will be removed from final executabel)
#ifdef STATIC_CODECS
-extern const BaseApi* cd_ah;
-extern const BaseApi* cd_arp;
-extern const BaseApi* cd_ciscometadata;
-extern const BaseApi* cd_dstopts;
-extern const BaseApi* cd_erspan2;
-extern const BaseApi* cd_erspan3;
-extern const BaseApi* cd_esp;
-extern const BaseApi* cd_eth;
-extern const BaseApi* cd_fabricpath;
-extern const BaseApi* cd_frag;
-extern const BaseApi* cd_gre;
-extern const BaseApi* cd_gtp;
-extern const BaseApi* cd_icmp4;
-extern const BaseApi* cd_icmp4_ip;
-extern const BaseApi* cd_icmp6;
-extern const BaseApi* cd_icmp6_ip;
-extern const BaseApi* cd_ipv6;
-extern const BaseApi* cd_igmp;
-extern const BaseApi* cd_llc;
-extern const BaseApi* cd_mobility;
-extern const BaseApi* cd_mpls;
-extern const BaseApi* cd_no_next;
-extern const BaseApi* cd_pgm;
-extern const BaseApi* cd_pppencap;
-extern const BaseApi* cd_pppoepkt_disc;
-extern const BaseApi* cd_pppoepkt_sess;
-extern const BaseApi* cd_routing;
-extern const BaseApi* cd_sun_nd;
-extern const BaseApi* cd_swipe;
-extern const BaseApi* cd_teredo;
-extern const BaseApi* cd_transbridge;
-extern const BaseApi* cd_udp;
-extern const BaseApi* cd_user;
-extern const BaseApi* cd_vlan;
+extern const BaseApi* cd_ah[];
+extern const BaseApi* cd_arp[];
+extern const BaseApi* cd_ciscometadata[];
+extern const BaseApi* cd_dstopts[];
+extern const BaseApi* cd_erspan2[];
+extern const BaseApi* cd_erspan3[];
+extern const BaseApi* cd_esp[];
+extern const BaseApi* cd_eth[];
+extern const BaseApi* cd_fabricpath[];
+extern const BaseApi* cd_frag[];
+extern const BaseApi* cd_gre[];
+extern const BaseApi* cd_gtp[];
+extern const BaseApi* cd_icmp4[];
+extern const BaseApi* cd_icmp4_ip[];
+extern const BaseApi* cd_icmp6[];
+extern const BaseApi* cd_icmp6_ip[];
+extern const BaseApi* cd_ipv6[];
+extern const BaseApi* cd_igmp[];
+extern const BaseApi* cd_llc[];
+extern const BaseApi* cd_mobility[];
+extern const BaseApi* cd_mpls[];
+extern const BaseApi* cd_no_next[];
+extern const BaseApi* cd_pgm[];
+extern const BaseApi* cd_pppencap[];
+extern const BaseApi* cd_pppoepkt[];
+extern const BaseApi* cd_routing[];
+extern const BaseApi* cd_sun_nd[];
+extern const BaseApi* cd_swipe[];
+extern const BaseApi* cd_teredo[];
+extern const BaseApi* cd_transbridge[];
+extern const BaseApi* cd_udp[];
+extern const BaseApi* cd_user[];
+extern const BaseApi* cd_vlan[];
#endif
-const BaseApi* codecs[] =
+void load_codecs()
{
- cd_ipv4,
- cd_tcp,
- cd_hopopts,
+ PluginManager::load_plugins(cd_ipv4);
+ PluginManager::load_plugins(cd_tcp);
+ PluginManager::load_plugins(cd_hopopts);
#ifdef STATIC_CODECS
- cd_ah,
- cd_arp,
- cd_ciscometadata,
- cd_dstopts,
- cd_erspan2,
- cd_erspan3,
- cd_esp,
- cd_eth,
- cd_fabricpath,
- cd_frag,
- cd_gre,
- cd_gtp,
- cd_icmp4,
- cd_icmp4_ip,
- cd_icmp6,
- cd_icmp6_ip,
- cd_ipv6,
- cd_igmp,
- cd_llc,
- cd_mobility,
- cd_mpls,
- cd_no_next,
- cd_pgm,
- cd_pppencap,
- cd_pppoepkt_disc,
- cd_pppoepkt_sess,
- cd_routing,
- cd_sun_nd,
- cd_swipe,
- cd_teredo,
- cd_transbridge,
- cd_udp,
- cd_user,
- cd_vlan,
+ PluginManager::load_plugins(cd_ah);
+ PluginManager::load_plugins(cd_arp);
+ PluginManager::load_plugins(cd_ciscometadata);
+ PluginManager::load_plugins(cd_dstopts);
+ PluginManager::load_plugins(cd_erspan2);
+ PluginManager::load_plugins(cd_erspan3);
+ PluginManager::load_plugins(cd_esp);
+ PluginManager::load_plugins(cd_eth);
+ PluginManager::load_plugins(cd_fabricpath);
+ PluginManager::load_plugins(cd_frag);
+ PluginManager::load_plugins(cd_gre);
+ PluginManager::load_plugins(cd_gtp);
+ PluginManager::load_plugins(cd_icmp4);
+ PluginManager::load_plugins(cd_icmp4_ip);
+ PluginManager::load_plugins(cd_icmp6);
+ PluginManager::load_plugins(cd_icmp6_ip);
+ PluginManager::load_plugins(cd_ipv6);
+ PluginManager::load_plugins(cd_igmp);
+ PluginManager::load_plugins(cd_llc);
+ PluginManager::load_plugins(cd_mobility);
+ PluginManager::load_plugins(cd_mpls);
+ PluginManager::load_plugins(cd_no_next);
+ PluginManager::load_plugins(cd_pgm);
+ PluginManager::load_plugins(cd_pppencap);
+ PluginManager::load_plugins(cd_pppoepkt);
+ PluginManager::load_plugins(cd_routing);
+ PluginManager::load_plugins(cd_sun_nd);
+ PluginManager::load_plugins(cd_swipe);
+ PluginManager::load_plugins(cd_teredo);
+ PluginManager::load_plugins(cd_transbridge);
+ PluginManager::load_plugins(cd_udp);
+ PluginManager::load_plugins(cd_user);
+ PluginManager::load_plugins(cd_vlan);
#endif
-
- nullptr
-};
+}
//--------------------------------------------------------------------------
// codec_api.h author Josh Rosenbaum <jrosenba@cisco.com>
-#ifndef CODEC_CODECS_API_H
-#define CODEC_CODECS_API_H
+#ifndef CODEC_API_H
+#define CODEC_API_H
-extern const struct BaseApi* codecs[];
+void load_codecs();
#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_ah[] =
+#endif
{
&ah_api.base,
nullptr
};
-#else
-const BaseApi* cd_ah = &ah_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_dstopts[] =
+#endif
{
&ipv6_dstopts_api.base,
nullptr
};
-#else
-const BaseApi* cd_dstopts = &ipv6_dstopts_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_esp[] =
+#endif
{
&esp_api.base,
nullptr
};
-#else
-const BaseApi* cd_esp = &esp_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_frag[] =
+#endif
{
&ipv6_frag_api.base,
nullptr
};
-#else
-const BaseApi* cd_frag = &ipv6_frag_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_gre[] =
+#endif
{
&gre_api.base,
nullptr
};
-#else
-const BaseApi* cd_gre = &gre_api.base;
-#endif
/* This codec is static to ensure the symbols CheckIPV6HopOptions
* and CheckIPv6ExtensionOrder are included in the binary.
- *
- * If this Codec is no longer static, also edit the file codec_api.cc
*/
-#if 0
-#ifdef BUILDING_SO
-SO_PUBLIC const BaseApi* snort_plugins[] =
+//#ifdef BUILDING_SO
+//SO_PUBLIC const BaseApi* snort_plugins[] =
+//#else
+const BaseApi* cd_hopopts[] =
+//#endif
{
&ipv6_hopopts_api.base,
nullptr
};
-#else
-const BaseApi* cd_hopopts = &ipv6_hopopts_api.base;
-#endif
-
-#else /* 0 */
-const BaseApi* cd_hopopts = &ipv6_hopopts_api.base;
-
-#endif /* 0 */
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_icmp4[] =
+#endif
{
&icmp4_api.base,
nullptr
};
-#else
-const BaseApi* cd_icmp4 = &icmp4_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_icmp6[] =
+#endif
{
&ipv6_api.base,
nullptr
};
-#else
-const BaseApi* cd_icmp6 = &ipv6_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_igmp[] =
+#endif
{
&igmp_api.base,
nullptr
};
-#else
-const BaseApi* cd_igmp = &igmp_api.base;
-#endif
dtor, // dtor
};
-#if 0
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_ipv4[] =
+#endif
{
&ipv4_api.base,
nullptr
};
-#else
-const BaseApi* cd_ipv4 = &ipv4_api.base;
-#endif
-#endif
-
-// Currently needs to be static
-const BaseApi* cd_ipv4 = &ipv4_api.base;
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_ipv6[] =
+#endif
{
&ipv6_api.base,
nullptr
};
-#else
-const BaseApi* cd_ipv6 = &ipv6_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_mobility[] =
+#endif
{
&mobility_api.base,
nullptr
};
-#else
-const BaseApi* cd_mobility = &mobility_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_no_next[] =
+#endif
{
&no_next_api.base,
nullptr
};
-#else
-const BaseApi* cd_no_next = &no_next_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_pgm[] =
+#endif
{
&pgm_api.base,
nullptr
};
-#else
-const BaseApi* cd_pgm = &pgm_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_routing[] =
+#endif
{
&ipv6_routing_api.base,
nullptr
};
-#else
-const BaseApi* cd_routing = &ipv6_routing_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_sun_nd[] =
+#endif
{
&sun_nd_api.base,
nullptr
};
-#else
-const BaseApi* cd_sun_nd = &sun_nd_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_swipe[] =
+#endif
{
&swipe_api.base,
nullptr
};
-#else
-const BaseApi* cd_swipe = &swipe_api.base;
-#endif
dtor, // dtor
};
-const BaseApi* cd_tcp = &tcp_api.base;
+//#ifdef BUILDING_SO
+//SO_PUBLIC const BaseApi* snort_plugins[] =
+//#else
+const BaseApi* cd_tcp[] =
+//#endif
+{
+ &tcp_api.base,
+ nullptr
+};
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_udp[] =
+#endif
{
&udp_api.base,
nullptr
};
-#else
-const BaseApi* cd_udp = &udp_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_arp[] =
+#endif
{
&arp_api.base,
nullptr
};
-#else
-const BaseApi* cd_arp = &arp_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_ciscometadata[] =
+#endif
{
&ciscometadata_api.base,
nullptr
};
-#else
-const BaseApi* cd_ciscometadata = &ciscometadata_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_erspan2[] =
+#endif
{
&erspan2_api.base,
nullptr
};
-#else
-const BaseApi* cd_erspan2 = &erspan2_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_erspan3[] =
+#endif
{
&erspan3_api.base,
nullptr
};
-#else
-const BaseApi* cd_erspan3 = &erspan3_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_fabricpath[] =
+#endif
{
&fabricpath_api.base,
nullptr
};
-#else
-const BaseApi* cd_fabricpath = &fabricpath_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_mpls[] =
+#endif
{
&mpls_api.base,
nullptr
};
-#else
-const BaseApi* cd_mpls = &mpls_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_pppencap[] =
+#endif
{
&pppencap_api.base,
nullptr
};
-#else
-const BaseApi* cd_pppencap = &pppencap_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_pppoepkt[] =
+#endif
{
&pppoepkt_disc_api.base,
&pppoepkt_sess_api.base,
nullptr
};
-#else
-const BaseApi* cd_pppoepkt_disc = &pppoepkt_disc_api.base;
-const BaseApi* cd_pppoepkt_sess = &pppoepkt_sess_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_transbridge[] =
+#endif
{
&transbridge_api.base,
nullptr
};
-#else
-const BaseApi* cd_transbridge = &transbridge_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_vlan[] =
+#endif
{
&vlan_api.base,
nullptr
};
-#else
-const BaseApi* cd_vlan = &vlan_api.base;
-#endif
dtor, // dtor
};
-const CodecApi* default_codec = &default_api;
+const CodecApi* default_codec[] =
+{
+ &default_api,
+ nullptr
+};
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_gtp[] =
+#endif
{
>p_api.base,
nullptr
};
-#else
-const BaseApi* cd_gtp = >p_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_icmp4_ip[] =
+#endif
{
&icmp4_ip_api.base,
nullptr
};
-#else
-const BaseApi* cd_icmp4_ip = &icmp4_ip_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_icmp6_ip[] =
+#endif
{
&icmp6_ip_api.base,
nullptr
};
-#else
-const BaseApi* cd_icmp6_ip = &icmp6_ip_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_llc[] =
+#endif
{
&llc_api.base,
nullptr
};
-#else
-const BaseApi* cd_llc = &llc_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_teredo[] =
+#endif
{
&teredo_api.base,
nullptr
};
-#else
-const BaseApi* cd_teredo = &teredo_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_user[] =
+#endif
{
&user_api.base,
nullptr
};
-#else
-const BaseApi* cd_user = &user_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* cd_eth[] =
+#endif
{
ð_api.base,
nullptr
};
-#else
-const BaseApi* cd_eth = ð_api.base;
-#endif
#include "connectors.h"
#include "framework/connector.h"
+#include "managers/plugin_manager.h"
-extern const BaseApi* file_connector;
-extern const BaseApi* tcp_connector;
+extern const BaseApi* file_connector[];
+extern const BaseApi* tcp_connector[];
-const BaseApi* connectors[] =
+void load_connectors()
{
- file_connector,
- tcp_connector,
- nullptr
-};
+ PluginManager::load_plugins(file_connector);
+ PluginManager::load_plugins(tcp_connector);
+}
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//--------------------------------------------------------------------------
-#ifndef CONNECTORS
-#define CONNECTORS
+#ifndef CONNECTORS_H
+#define CONNECTORS_H
-extern const struct BaseApi* connectors[];
+void load_connectors();
#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* file_connector[] =
+#endif
{
&file_connector_api.base,
nullptr
};
-#else
-const BaseApi* file_connector = &file_connector_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* tcp_connector[] =
+#endif
{
&tcp_connector_api.base,
nullptr
};
-#else
-const BaseApi* tcp_connector = &tcp_connector_api.base;
-#endif
nullptr // reset
};
-const BaseApi* sin_file = &file_inspect_api.base;
+const BaseApi* sin_file_flow = &file_inspect_api.base;
nullptr // reset
};
-extern const BaseApi* sin_file;
+extern const BaseApi* sin_file_flow;
-const BaseApi* file_inspectors[] =
+const BaseApi* sin_file[] =
{
&fl_api.base,
- sin_file,
+ sin_file_flow,
nullptr
};
static FileCache* file_cache;
};
-extern const struct BaseApi* file_inspectors[];
#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_ack[] =
+#endif
{
&ack_api.base,
nullptr
};
-#else
-const BaseApi* ips_ack = &ack_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_asn1[] =
+#endif
{
&asn1_api.base,
nullptr
};
-#else
-const BaseApi* ips_asn1 = &asn1_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_base64[] =
+#endif
{
&base64_decode_api.base,
&base64_data_api.base,
nullptr
};
-#else
-const BaseApi* ips_base64_decode = &base64_decode_api.base;
-const BaseApi* ips_base64_data = &base64_data_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_bufferlen[] =
+#endif
{
&len_api.base,
nullptr
};
-#else
-const BaseApi* ips_bufferlen = &len_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_byte_jump[] =
+#endif
{
&byte_jump_api.base,
nullptr
};
-#else
-const BaseApi* ips_byte_jump = &byte_jump_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_byte_test[] =
+#endif
{
&byte_test_api.base,
nullptr
};
-#else
-const BaseApi* ips_byte_test = &byte_test_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_cvs[] =
+#endif
{
&cvs_api.base,
nullptr
};
-#else
-const BaseApi* ips_cvs = &cvs_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_dsize[] =
+#endif
{
&dsize_api.base,
nullptr
};
-#else
-const BaseApi* ips_dsize = &dsize_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_file_data[] =
+#endif
{
&file_data_api.base,
nullptr
};
-#else
-const BaseApi* ips_file_data = &file_data_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_file_type[] =
+#endif
{
&file_type_api.base,
nullptr
};
-#else
-const BaseApi* ips_file_type = &file_type_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_flags[] =
+#endif
{
&flags_api.base,
nullptr
};
-#else
-const BaseApi* ips_flags = &flags_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_fragbits[] =
+#endif
{
&fragbits_api.base,
nullptr
};
-#else
-const BaseApi* ips_fragbits = &fragbits_api.base;
-#endif
+
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_fragoffset[] =
+#endif
{
&fragoffset_api.base,
nullptr
};
-#else
-const BaseApi* ips_fragoffset = &fragoffset_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_gid[] =
+#endif
{
&gid_api.base,
nullptr
};
-#else
-const BaseApi* ips_gid = &gid_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_icmp_id[] =
+#endif
{
&icmp_id_api.base,
nullptr
};
-#else
-const BaseApi* ips_icmp_id = &icmp_id_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_icmp_seq[] =
+#endif
{
&icmp_seq_api.base,
nullptr
};
-#else
-const BaseApi* ips_icmp_seq = &icmp_seq_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_icode[] =
+#endif
{
&icode_api.base,
nullptr
};
-#else
-const BaseApi* ips_icode = &icode_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_id[] =
+#endif
{
&id_api.base,
nullptr
};
-#else
-const BaseApi* ips_id = &id_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_ip_proto[] =
+#endif
{
&ip_proto_api.base,
nullptr
};
-#else
-const BaseApi* ips_ip_proto = &ip_proto_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_ipopts[] =
+#endif
{
&ipopts_api.base,
nullptr
};
-#else
-const BaseApi* ips_ipopts = &ipopts_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_isdataat[] =
+#endif
{
&isdataat_api.base,
nullptr
};
-#else
-const BaseApi* ips_isdataat = &isdataat_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_itype[] =
+#endif
{
&itype_api.base,
nullptr
};
-#else
-const BaseApi* ips_itype = &itype_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_msg[] =
+#endif
{
&msg_api.base,
nullptr
};
-#else
-const BaseApi* ips_msg = &msg_api.base;
-#endif
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
+
#include "framework/ips_option.h"
+#include "managers/plugin_manager.h"
extern const BaseApi* ips_byte_extract;
extern const BaseApi* ips_classtype;
extern const BaseApi* ips_so;
#ifdef STATIC_IPS_OPTIONS
-extern const BaseApi* ips_ack;
-extern const BaseApi* ips_asn1;
-extern const BaseApi* ips_base64_data;
-extern const BaseApi* ips_base64_decode;
-extern const BaseApi* ips_byte_jump;
-extern const BaseApi* ips_byte_test;
-extern const BaseApi* ips_cvs;
-extern const BaseApi* ips_file_type;
-extern const BaseApi* ips_flags;
-extern const BaseApi* ips_fragbits;
-extern const BaseApi* ips_fragoffset;
-extern const BaseApi* ips_gid;
-extern const BaseApi* ips_icmp_id;
-extern const BaseApi* ips_icmp_seq;
-extern const BaseApi* ips_icode;
-extern const BaseApi* ips_id;
-extern const BaseApi* ips_ipopts;
-extern const BaseApi* ips_ip_proto;
-extern const BaseApi* ips_isdataat;
-extern const BaseApi* ips_itype;
-extern const BaseApi* ips_msg;
-extern const BaseApi* ips_priority;
-extern const BaseApi* ips_raw_data;
-extern const BaseApi* ips_rem;
-extern const BaseApi* ips_rev;
-extern const BaseApi* ips_rpc;
-extern const BaseApi* ips_seq;
-extern const BaseApi* ips_session;
-extern const BaseApi* ips_sid;
-extern const BaseApi* ips_soid;
-extern const BaseApi* ips_tag;
-extern const BaseApi* ips_tos;
-extern const BaseApi* ips_ttl;
-extern const BaseApi* ips_bufferlen;
-extern const BaseApi* ips_window;
+extern const BaseApi* ips_ack[];
+extern const BaseApi* ips_asn1[];
+extern const BaseApi* ips_base64[];
+extern const BaseApi* ips_byte_jump[];
+extern const BaseApi* ips_byte_test[];
+extern const BaseApi* ips_cvs[];
+extern const BaseApi* ips_file_type[];
+extern const BaseApi* ips_flags[];
+extern const BaseApi* ips_fragbits[];
+extern const BaseApi* ips_fragoffset[];
+extern const BaseApi* ips_gid[];
+extern const BaseApi* ips_icmp_id[];
+extern const BaseApi* ips_icmp_seq[];
+extern const BaseApi* ips_icode[];
+extern const BaseApi* ips_id[];
+extern const BaseApi* ips_ipopts[];
+extern const BaseApi* ips_ip_proto[];
+extern const BaseApi* ips_isdataat[];
+extern const BaseApi* ips_itype[];
+extern const BaseApi* ips_msg[];
+extern const BaseApi* ips_priority[];
+extern const BaseApi* ips_raw_data[];
+extern const BaseApi* ips_rem[];
+extern const BaseApi* ips_rev[];
+extern const BaseApi* ips_rpc[];
+extern const BaseApi* ips_seq[];
+extern const BaseApi* ips_session[];
+extern const BaseApi* ips_sid[];
+extern const BaseApi* ips_soid[];
+extern const BaseApi* ips_tag[];
+extern const BaseApi* ips_tos[];
+extern const BaseApi* ips_ttl[];
+extern const BaseApi* ips_bufferlen[];
+extern const BaseApi* ips_window[];
#endif
-const BaseApi* ips_options[] =
+static const BaseApi* ips_options[] =
{
ips_byte_extract,
ips_classtype,
ips_sha256,
ips_sha512,
ips_so,
+ nullptr
+};
+
+void load_ips_options()
+{
+ PluginManager::load_plugins(ips_options);
#ifdef STATIC_IPS_OPTIONS
- ips_ack,
- ips_asn1,
- ips_base64_data,
- ips_base64_decode,
- ips_byte_jump,
- ips_byte_test,
- ips_cvs,
- ips_file_type,
- ips_flags,
- ips_fragbits,
- ips_fragoffset,
- ips_gid,
- ips_icmp_id,
- ips_icmp_seq,
- ips_icode,
- ips_id,
- ips_ipopts,
- ips_ip_proto,
- ips_isdataat,
- ips_itype,
- ips_msg,
- ips_priority,
- ips_raw_data,
- ips_rem,
- ips_rev,
- ips_rpc,
- ips_seq,
- ips_session,
- ips_sid,
- ips_soid,
- ips_tag,
- ips_tos,
- ips_ttl,
- ips_bufferlen,
- ips_window,
+ PluginManager::load_plugins(ips_ack);
+ PluginManager::load_plugins(ips_asn1);
+ PluginManager::load_plugins(ips_base64);
+ PluginManager::load_plugins(ips_byte_jump);
+ PluginManager::load_plugins(ips_byte_test);
+ PluginManager::load_plugins(ips_cvs);
+ PluginManager::load_plugins(ips_file_type);
+ PluginManager::load_plugins(ips_flags);
+ PluginManager::load_plugins(ips_fragbits);
+ PluginManager::load_plugins(ips_fragoffset);
+ PluginManager::load_plugins(ips_gid);
+ PluginManager::load_plugins(ips_icmp_id);
+ PluginManager::load_plugins(ips_icmp_seq);
+ PluginManager::load_plugins(ips_icode);
+ PluginManager::load_plugins(ips_id);
+ PluginManager::load_plugins(ips_ipopts);
+ PluginManager::load_plugins(ips_ip_proto);
+ PluginManager::load_plugins(ips_isdataat);
+ PluginManager::load_plugins(ips_itype);
+ PluginManager::load_plugins(ips_msg);
+ PluginManager::load_plugins(ips_priority);
+ PluginManager::load_plugins(ips_raw_data);
+ PluginManager::load_plugins(ips_rem);
+ PluginManager::load_plugins(ips_rev);
+ PluginManager::load_plugins(ips_rpc);
+ PluginManager::load_plugins(ips_seq);
+ PluginManager::load_plugins(ips_session);
+ PluginManager::load_plugins(ips_sid);
+ PluginManager::load_plugins(ips_soid);
+ PluginManager::load_plugins(ips_tag);
+ PluginManager::load_plugins(ips_tos);
+ PluginManager::load_plugins(ips_ttl);
+ PluginManager::load_plugins(ips_bufferlen);
+ PluginManager::load_plugins(ips_window);
#endif
- nullptr
-};
+}
#ifndef IPS_OPTIONS_H
#define IPS_OPTIONS_H
-extern const struct BaseApi* ips_options[];
+void load_ips_options();
#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_priority[] =
+#endif
{
&priority_api.base,
nullptr
};
-#else
-const BaseApi* ips_priority = &priority_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_raw_data[] =
+#endif
{
&raw_data_api.base,
nullptr
};
-#else
-const BaseApi* ips_raw_data = &raw_data_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_rem[] =
+#endif
{
&rem_api.base,
nullptr
};
-#else
-const BaseApi* ips_rem = &rem_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_replace[] =
+#endif
{
&replace_api.base,
nullptr
};
-#else
-const BaseApi* ips_replace = &replace_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_rev[] =
+#endif
{
&rev_api.base,
nullptr
};
-#else
-const BaseApi* ips_rev = &rev_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_rpc[] =
+#endif
{
&rpc_api.base,
nullptr
};
-#else
-const BaseApi* ips_rpc = &rpc_api.base;
-#endif
+
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_sd_pattern[] =
+#endif
{
&sd_pattern_api.base,
nullptr
};
-#else
-const BaseApi* ips_sd_pattern = &sd_pattern_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_seq[] =
+#endif
{
&seq_api.base,
nullptr
};
-#else
-const BaseApi* ips_seq = &seq_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_session[] =
+#endif
{
&session_api.base,
nullptr
};
-#else
-const BaseApi* ips_session = &session_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_sid[] =
+#endif
{
&sid_api.base,
nullptr
};
-#else
-const BaseApi* ips_sid = &sid_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_soid[] =
+#endif
{
&soid_api.base,
nullptr
};
-#else
-const BaseApi* ips_soid = &soid_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_tag[] =
+#endif
{
&tag_api.base,
nullptr
};
-#else
-const BaseApi* ips_tag = &tag_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_tos[] =
+#endif
{
&tos_api.base,
nullptr
};
-#else
-const BaseApi* ips_tos = &tos_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_ttl[] =
+#endif
{
&ttl_api.base,
nullptr
};
-#else
-const BaseApi* ips_ttl = &ttl_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* ips_window[] =
+#endif
{
&window_api.base,
nullptr
};
-#else
-const BaseApi* ips_window = &window_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* alert_csv[] =
+#endif
{
&csv_api.base,
nullptr
};
-#else
-const BaseApi* alert_csv = &csv_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* alert_fast[] =
+#endif
{
&fast_api.base,
nullptr
};
-#else
-const BaseApi* alert_fast = &fast_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* alert_full[] =
+#endif
{
&full_api.base,
nullptr
};
-#else
-const BaseApi* alert_full = &full_api.base;
-#endif
#include "config.h"
#endif
-#if defined(__linux__)
+#ifdef __linux__
#include <sys/socket.h>
#include <sys/un.h>
sf_sock_ctor,
sf_sock_dtor
};
-
-const BaseApi* alert_sf_socket = &sf_sock_api.base;
-
#endif /* __linux__ */
+const BaseApi* alert_sf_socket[] =
+{
+#ifdef __linux__
+ &sf_sock_api.base,
+#endif
+ nullptr
+};
+
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* alert_syslog[] =
+#endif
{
&syslog_api.base,
nullptr
};
-#else
-const BaseApi* alert_syslog = &syslog_api.base;
-#endif
codec_log_dtor
};
-const BaseApi* log_codecs = &log_codecs_api.base;
+const BaseApi* log_codecs[] =
+{
+ &log_codecs_api.base,
+ nullptr
+};
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* log_hext[] =
+#endif
{
&hext_api.base,
nullptr
};
-#else
-const BaseApi* log_hext = &hext_api.base;
-#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* log_pcap[] =
+#endif
{
&tcpdump_api.base,
nullptr
};
-#else
-const BaseApi* log_pcap = &tcpdump_api.base;
-#endif
#endif
#include "framework/logger.h"
+#include "managers/plugin_manager.h"
// to ensure PacketManager::log_protocols() is built into Snort++
-extern const BaseApi* log_codecs;
-
-#if defined(__linux__)
-extern const BaseApi* alert_sf_socket;
-#endif
+extern const BaseApi* log_codecs[];
+extern const BaseApi* alert_sf_socket[];
#ifdef STATIC_LOGGERS
-extern const BaseApi* alert_csv;
-extern const BaseApi* alert_fast;
-extern const BaseApi* alert_full;
-extern const BaseApi* alert_syslog;
-extern const BaseApi* log_hext;
-extern const BaseApi* log_pcap;
-extern const BaseApi* eh_unified2;
+extern const BaseApi* alert_csv[];
+extern const BaseApi* alert_fast[];
+extern const BaseApi* alert_full[];
+extern const BaseApi* alert_syslog[];
+extern const BaseApi* log_hext[];
+extern const BaseApi* log_pcap[];
+extern const BaseApi* eh_unified2[];
#endif
-const BaseApi* loggers[] =
+void load_loggers()
{
// loggers
- log_codecs,
-
-#if defined(__linux__)
- alert_sf_socket,
-#endif
+ PluginManager::load_plugins(log_codecs);
+ PluginManager::load_plugins(alert_sf_socket);
#ifdef STATIC_LOGGERS
// alerters
- alert_csv,
- alert_fast,
- alert_full,
- alert_syslog,
+ PluginManager::load_plugins(alert_csv);
+ PluginManager::load_plugins(alert_fast);
+ PluginManager::load_plugins(alert_full);
+ PluginManager::load_plugins(alert_syslog);
// loggers
- log_hext,
- log_pcap,
+ PluginManager::load_plugins(log_hext);
+ PluginManager::load_plugins(log_pcap);
// both
- eh_unified2,
+ PluginManager::load_plugins(eh_unified2);
#endif
-
- nullptr
-};
+}
#ifndef LOGGERS_H
#define LOGGERS_H
-extern const struct BaseApi* loggers[];
+void load_loggers();
#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* eh_unified2[] =
+#endif
{
&u2_api.base,
nullptr
};
-#else
-const BaseApi* eh_unified2 = &u2_api.base;
-#endif
#include <netinet/in.h>
#include <sys/stat.h>
+#include "actions/ips_actions.h"
+#include "codecs/codec_api.h"
+#include "connectors/connectors.h"
#include "decompress/file_decomp.h"
#include "detection/detect.h"
#include "detection/detection_util.h"
#include "helpers/process.h"
#include "host_tracker/host_cache.h"
#include "ips_options/ips_flowbits.h"
+#include "ips_options/ips_options.h"
#include "latency/packet_latency.h"
#include "latency/rule_latency.h"
#include "log/messages.h"
+#include "loggers/loggers.h"
#include "managers/action_manager.h"
#include "managers/codec_manager.h"
#include "managers/inspector_manager.h"
#include "managers/mpse_manager.h"
#include "managers/plugin_manager.h"
#include "managers/script_manager.h"
+#include "network_inspectors/network_inspectors.h"
#include "packet_io/sfdaq.h"
#include "packet_io/active.h"
#include "packet_io/trough.h"
#include "profiler/profiler.h"
#include "protocols/packet.h"
#include "protocols/packet_manager.h"
+#include "search_engines/search_engines.h"
+#include "service_inspectors/service_inspectors.h"
#include "side_channel/side_channel.h"
#include "stream/stream.h"
+#include "stream/stream_inspectors.h"
#include "target_based/sftarget_reader.h"
#include "time/packet_time.h"
#include "time/periodic.h"
#ifdef PIGLET
#include "piglet/piglet.h"
#include "piglet/piglet_manager.h"
+#include "piglet_plugins/piglet_plugins.h"
#endif
#include "build.h"
InitProtoNames();
SFAT_Init();
+ load_actions();
+ load_codecs();
+ load_connectors();
+ load_ips_options();
+ load_loggers();
+#ifdef PIGLET
+ load_piglets();
+#endif
+ load_search_engines();
+ load_stream_inspectors();
+ load_network_inspectors();
+ load_service_inspectors();
+
/* chew up the command line */
snort_cmd_line_conf = parse_cmd_line(argc, argv);
snort_conf = snort_cmd_line_conf;
#include <list>
+#include "actions/act_replace.h"
+#include "actions/ips_actions.h"
+#include "framework/ips_action.h"
+#include "log/messages.h"
#include "main/snort_types.h"
#include "main/snort_config.h"
#include "main/snort_debug.h"
-#include "utils/util.h"
#include "managers/module_manager.h"
-#include "framework/ips_action.h"
#include "parser/parser.h"
-#include "log/messages.h"
-#include "actions/act_replace.h"
#include "packet_io/active.h"
+#include "utils/util.h"
using namespace std;
#include <vector>
#include <iostream>
-#include "action_manager.h"
-#include "event_manager.h"
-#include "inspector_manager.h"
-#include "ips_manager.h"
-#include "module_manager.h"
-#include "mpse_manager.h"
-#include "codec_manager.h"
-#include "script_manager.h"
-#include "so_manager.h"
-
#ifdef PIGLET
#include "piglet/piglet_api.h"
#include "piglet/piglet_manager.h"
-#include "piglet_plugins/piglet_plugins.h"
#endif
-#include "connector_manager.h"
-#include "connectors/connectors.h"
-
#include "framework/codec.h"
#include "framework/logger.h"
#include "framework/ips_action.h"
#include "framework/mpse.h"
#include "framework/so_rule.h"
-#include "loggers/loggers.h"
-#include "ips_options/ips_options.h"
-#include "actions/ips_actions.h"
#include "log/messages.h"
-#include "stream/stream_inspectors.h"
-#include "network_inspectors/network_inspectors.h"
-#include "service_inspectors/service_inspectors.h"
-#include "search_engines/search_engines.h"
-#include "codecs/codec_api.h"
#include "helpers/directory.h"
#include "helpers/markup.h"
#include "parser/parser.h"
-#include "file_api/file_service.h"
+
+#include "action_manager.h"
+#include "connector_manager.h"
+#include "event_manager.h"
+#include "inspector_manager.h"
+#include "ips_manager.h"
+#include "module_manager.h"
+#include "mpse_manager.h"
+#include "codec_manager.h"
+#include "script_manager.h"
+#include "so_manager.h"
using namespace std;
// framework methods
//-------------------------------------------------------------------------
-void PluginManager::load_plugins(const std::string& paths)
+void PluginManager::load_plugins(const BaseApi** lp)
{
// builtins
- load_list(codecs);
- load_list(ips_actions);
- load_list(ips_options);
- load_list(stream_inspectors);
- load_list(network_inspectors);
- load_list(service_inspectors);
- load_list(search_engines);
- load_list(loggers);
- load_list(connectors);
- load_list(file_inspectors);
-#ifdef PIGLET
- load_list(piglets);
-#endif
+ load_list(lp);
+}
+void PluginManager::load_plugins(const std::string& paths)
+{
// dynamic plugins
if ( !paths.empty() )
::load_plugins(paths);
{
public:
// plugin methods
+ static void load_plugins(const BaseApi**);
static void load_plugins(const std::string& lib_paths);
+
static void list_plugins();
static void show_plugins();
static void dump_plugins();
nullptr // reset
};
-#ifdef BUILDING_SO
extern const BaseApi* ips_appid;
+#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* nin_appid[] =
+#endif
{
&appid_inspector_api.base,
ips_appid,
nullptr
};
-#else
-const BaseApi* nin_appid = &appid_inspector_api.base;
-#endif
/**
* @returns 1 if some appid is found, 0 otherwise.
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* nin_arp_spoof[] =
+#endif
{
&as_api.base,
nullptr
};
-#else
-const BaseApi* nin_arp_spoof = &as_api.base;
-#endif
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
+
#include "framework/inspector.h"
+#include "managers/plugin_manager.h"
-extern const BaseApi* nin_appid;
extern const BaseApi* nin_binder;
extern const BaseApi* nin_normalize;
extern const BaseApi* nin_perf_monitor;
-extern const BaseApi* nin_port_scan_global;
-extern const BaseApi* nin_port_scan;
extern const BaseApi* nin_reputation;
-extern const BaseApi* ips_appid;
+extern const BaseApi* nin_appid[];
+extern const BaseApi* nin_port_scan[];
#ifdef STATIC_INSPECTORS
-extern const BaseApi* nin_arp_spoof;
-extern const BaseApi* nin_packet_capture;
+extern const BaseApi* nin_arp_spoof[];
+extern const BaseApi* nin_packet_capture[];
#endif
-const BaseApi* network_inspectors[] =
+static const BaseApi* network_inspectors[] =
{
- nin_appid,
nin_binder,
nin_normalize,
nin_perf_monitor,
- nin_port_scan_global,
- nin_port_scan,
nin_reputation,
+ nullptr
+};
- ips_appid,
+void load_network_inspectors()
+{
+ PluginManager::load_plugins(network_inspectors);
+ PluginManager::load_plugins(nin_appid);
+ PluginManager::load_plugins(nin_port_scan);
#ifdef STATIC_INSPECTORS
- nin_arp_spoof,
- nin_packet_capture,
+ PluginManager::load_plugins(nin_arp_spoof);
+ PluginManager::load_plugins(nin_packet_capture);
#endif
- nullptr
-};
+}
#ifndef NETWORK_INSPECTORS_H
#define NETWORK_INSPECTORS_H
-extern const struct BaseApi* network_inspectors[];
+void load_network_inspectors();
#endif
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* nin_packet_capture[] =
+#endif
{
&pc_api.base,
nullptr
};
-#else
-const BaseApi* nin_packet_capture = &pc_api.base;
-#endif
#ifdef UNIT_TEST
static Packet* init_null_packet()
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* nin_port_scan[] =
+#endif
{
&sd_api.base,
&sp_api.base,
nullptr
};
-#else
-const BaseApi* nin_port_scan_global = &sd_api.base;
-const BaseApi* nin_port_scan = &sp_api.base;
-#endif
#include "piglet_plugins.h"
+#include "managers/plugin_manager.h"
+
extern const BaseApi* pp_codec;
extern const BaseApi* pp_inspector;
extern const BaseApi* pp_ips_action;
extern const BaseApi* pp_so_rule;
extern const BaseApi* pp_test;
-const struct BaseApi* piglets[] = {
+static const BaseApi* pp_piglets[] =
+{
pp_codec,
pp_inspector,
pp_ips_action,
nullptr
};
+void load_piglets()
+{
+ PluginManager::load_plugins(pp_piglets);
+}
+
#ifndef PIGLET_PLUGINS_H
#define PIGLET_PLUGINS_H
-extern const struct BaseApi* piglets[];
+void load_piglets();
#endif
ac_sparse_bands.cc
acsmx2.cc
acsmx2.h
+ acsmx2_api.cc
)
set (BNFA_SOURCES
)
add_shared_library(acsmx search_engines ${ACSMX_SOURCES})
- add_shared_library(acsmx2 search_engines ${ACSMX2_SOURCES} acsmx2_api.cc)
+ add_shared_library(acsmx2 search_engines ${ACSMX2_SOURCES})
endif (STATIC_SEARCH_ENGINES)
ac_sparse.cc \
ac_sparse_bands.cc \
acsmx2.cc \
-acsmx2.h
+acsmx2.h \
+acsmx2_api.cc
bnfa_sources = \
ac_bnfa.cc \
mpselib_LTLIBRARIES += libacsmx2.la
libacsmx2_la_CXXFLAGS = $(AM_CXXFLAGS) -DBUILDING_SO
libacsmx2_la_LDFLAGS = $(AM_LDFLAGS) -export-dynamic -shared
-libacsmx2_la_SOURCES = $(acsmx2_sources) acsmx2_api.cc
+libacsmx2_la_SOURCES = $(acsmx2_sources)
endif
if BUILD_CPPUTESTS
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//--------------------------------------------------------------------------
-#include "acsmx.h"
-#include "acsmx2.h"
-
+#include "framework/mpse.h"
#include "main/snort_debug.h"
#include "main/snort_types.h"
#include "main/snort_config.h"
-#include "utils/util.h"
#include "profiler/profiler.h"
-#include "framework/mpse.h"
+#include "utils/util.h"
+
+#include "acsmx.h"
+#include "acsmx2.h"
//-------------------------------------------------------------------------
// "ac_banded"
* 3/06 - Added AC_BNFA search
*/
-#include "bnfa_search.h"
-
+#include "framework/mpse.h"
#include "main/snort_debug.h"
#include "main/snort_types.h"
#include "main/snort_config.h"
-#include "utils/util.h"
#include "profiler/profiler.h"
-#include "framework/mpse.h"
+#include "utils/util.h"
+
+#include "bnfa_search.h"
//-------------------------------------------------------------------------
// "ac_bnfa"
bnfa_print,
};
-const BaseApi* se_ac_bnfa = &bnfa_api.base;
+const BaseApi* se_ac_bnfa[] =
+{
+ &bnfa_api.base,
+ nullptr
+};
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//--------------------------------------------------------------------------
-#include "acsmx.h"
-#include "acsmx2.h"
-
+#include "framework/mpse.h"
#include "main/snort_debug.h"
#include "main/snort_types.h"
#include "main/snort_config.h"
-#include "utils/util.h"
#include "profiler/profiler.h"
-#include "framework/mpse.h"
+#include "utils/util.h"
+
+#include "acsmx.h"
+#include "acsmx2.h"
//-------------------------------------------------------------------------
// "ac_full"
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//--------------------------------------------------------------------------
-#include "acsmx.h"
-#include "acsmx2.h"
-
+#include "framework/mpse.h"
#include "main/snort_debug.h"
#include "main/snort_types.h"
#include "main/snort_config.h"
-#include "utils/util.h"
#include "profiler/profiler.h"
-#include "framework/mpse.h"
+#include "utils/util.h"
+
+#include "acsmx.h"
+#include "acsmx2.h"
//-------------------------------------------------------------------------
// "ac_sparse"
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//--------------------------------------------------------------------------
-#include "acsmx.h"
-#include "acsmx2.h"
-
+#include "framework/mpse.h"
#include "main/snort_debug.h"
#include "main/snort_types.h"
#include "main/snort_config.h"
-#include "utils/util.h"
#include "profiler/profiler.h"
-#include "framework/mpse.h"
+#include "utils/util.h"
+
+#include "acsmx.h"
+#include "acsmx2.h"
//-------------------------------------------------------------------------
// "ac_sparse_bands"
#include "config.h"
#endif
-#include "acsmx.h"
-#include "acsmx2.h"
-
+#include "framework/mpse.h"
#include "main/snort_debug.h"
#include "main/snort_types.h"
#include "main/snort_config.h"
-#include "utils/util.h"
#include "profiler/profiler.h"
-#include "framework/mpse.h"
+#include "utils/util.h"
+
+#include "acsmx.h"
+#include "acsmx2.h"
//-------------------------------------------------------------------------
// "ac_std"
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* se_ac_std[] =
+#endif
{
&ac_api.base,
nullptr
};
-#else
-const BaseApi* se_ac_std = &ac_api.base;
-#endif
#include "config.h"
#endif
-#include "search_engines.h"
#include "framework/mpse.h"
+#include "search_engines.h"
-#ifdef BUILDING_SO
extern const BaseApi* se_ac_banded;
extern const BaseApi* se_ac_full;
extern const BaseApi* se_ac_sparse;
extern const BaseApi* se_ac_sparse_bands;
+#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* se_acsmx2[] =
+#endif
{
se_ac_banded,
se_ac_full,
se_ac_sparse_bands,
nullptr
};
-#endif
//#ifdef BUILDING_SO
//SO_PUBLIC const BaseApi* snort_plugins[] =
-//{
-// &hs_api.base,
-// nullptr
-//};
//#else
-const BaseApi* se_hyperscan = &hs_api.base;
+const BaseApi* se_hyperscan[] =
//#endif
+{
+ &hs_api.base,
+ nullptr
+};
#include "config.h"
#endif
+#include "framework/mpse.h"
#include "main/snort_debug.h"
#include "main/snort_types.h"
#include "main/snort_config.h"
-#include "utils/util.h"
#include "profiler/profiler.h"
-#include "framework/mpse.h"
+#include "utils/util.h"
//-------------------------------------------------------------------------
// "intel_cpm"
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* se_intel_cpm[] =
+#endif
{
&cpm_api.base,
nullptr
};
-#else
-const BaseApi* se_intel_cpm = &cpm_api.base;
-#endif
#endif
#include "config.h"
#endif
-struct BaseApi;
+#include "managers/plugin_manager.h"
-extern const BaseApi* se_ac_bnfa;
+struct BaseApi;
+extern const BaseApi* se_ac_bnfa[];
#ifdef INTEL_SOFT_CPM
-extern const BaseApi* se_intel_cpm;
+extern const BaseApi* se_intel_cpm[];
#endif
#ifdef HAVE_HYPERSCAN
-extern const BaseApi* se_hyperscan;
+extern const BaseApi* se_hyperscan[];
#endif
#ifdef STATIC_SEARCH_ENGINES
-extern const BaseApi* se_ac_banded;
-extern const BaseApi* se_ac_full;
-extern const BaseApi* se_ac_sparse;
-extern const BaseApi* se_ac_sparse_bands;
-extern const BaseApi* se_ac_std;
+extern const BaseApi* se_ac_std[];
+extern const BaseApi* se_acsmx2[];
#endif
-const BaseApi* search_engines[] =
+void load_search_engines()
{
- se_ac_bnfa,
+ PluginManager::load_plugins(se_ac_bnfa);
#ifdef INTEL_SOFT_CPM
- se_intel_cpm,
+ PluginManager::load_plugins(se_intel_cpm);
#endif
#ifdef HAVE_HYPERSCAN
- se_hyperscan,
+ PluginManager::load_plugins(se_hyperscan);
#endif
#ifdef STATIC_SEARCH_ENGINES
- se_ac_banded,
- se_ac_full,
- se_ac_sparse,
- se_ac_sparse_bands,
- se_ac_std,
+ PluginManager::load_plugins(se_ac_std);
+ PluginManager::load_plugins(se_acsmx2);
#endif
-
- nullptr
-};
+}
struct BaseApi;
-extern const BaseApi* search_engines[];
+void load_search_engines();
#endif
[](void** ppl) { CHECK(*ppl == s_list); }
};
-extern const BaseApi* se_ac_full;
-const MpseApi* mpse_api = (MpseApi*)se_ac_full;
+extern const BaseApi* se_ac_bnfa;
+const MpseApi* mpse_api = (MpseApi*)se_ac_bnfa;
Mpse* acf = nullptr;
Mpse* MpseManager::get_search_engine(const char *type)
{
acf = nullptr;
- if(strcmp(type, "ac_full") == 0)
+ if(strcmp(type, "ac_bnfa") == 0)
{
- CHECK(se_ac_full);
+ CHECK(se_ac_bnfa);
mpse_api->init();
acf = mpse_api->ctor(snort_conf, nullptr, false, &s_agent);
CHECK(acf);
{
void setup()
{
- CHECK(se_ac_full);
+ CHECK(se_ac_bnfa);
}
};
-TEST(search_tool_tests, ac_full)
+TEST(search_tool_tests, ac_bnfa)
{
- // get_search_engine returns nullptr any search engine other than ac_full.
SearchTool *stool = new SearchTool;
- CHECK(!stool->mpse);
- delete stool;
-
- stool = new SearchTool("ac_full");
CHECK(stool->mpse);
pattern_id = 1;
delete stool;
}
-TEST(search_tool_tests, search_all_ac_full)
+TEST(search_tool_tests, search_all_ac_bnfa)
{
- SearchTool *stool = new SearchTool("ac_full");
+ SearchTool *stool = new SearchTool("ac_bnfa");
CHECK(stool->mpse);
pattern_id = 1;
return DCE2_RET__SUCCESS;
}
-#ifdef BUILDING_SO
-
extern const BaseApi* ips_dce_iface;
extern const BaseApi* ips_dce_opnum;
extern const BaseApi* ips_dce_stub_data;
+#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* sin_dce[] =
+#endif
{
&dce2_tcp_api.base,
&dce2_smb_api.base,
ips_dce_stub_data,
nullptr
};
-#else
-
-const BaseApi* sin_dce_tcp = &dce2_tcp_api.base;
-const BaseApi* sin_dce_smb = &dce2_smb_api.base;
-const BaseApi* sin_dce_udp = &dce2_udp_api.base;
-
-#endif
nullptr, // ssn
nullptr // reset
};
-#ifdef BUILDING_SO
+
extern const BaseApi* ips_dnp3_func;
extern const BaseApi* ips_dnp3_ind;
extern const BaseApi* ips_dnp3_obj;
extern const BaseApi* ips_dnp3_data;
+#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* sin_dnp3[] =
+#endif
{
&dnp3_api.base,
ips_dnp3_func,
ips_dnp3_data,
nullptr
};
-#else
-const BaseApi* sin_dnp3 = &dnp3_api.base;
-#endif
nullptr // reset
};
-#ifdef BUILDING_SO
extern const BaseApi* ips_gtp_info;
extern const BaseApi* ips_gtp_type;
extern const BaseApi* ips_gtp_version;
+#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* sin_gtp[] =
+#endif
{
>p_api.base,
ips_gtp_info,
ips_gtp_version,
nullptr
};
-#else
-const BaseApi* sin_gtp = >p_api.base;
-#endif
nullptr
};
-#ifdef BUILDING_SO
extern const BaseApi* ips_http_uri;
extern const BaseApi* ips_http_client_body;
extern const BaseApi* ips_http_method;
extern const BaseApi* ips_http_raw_request;
extern const BaseApi* ips_http_raw_status;
+#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* sin_http[] =
+#endif
{
&HttpApi::http_api.base,
ips_http_uri,
ips_http_raw_status,
nullptr
};
-#else
-const BaseApi* sin_http = &HttpApi::http_api.base;
-#endif
nullptr // reset
};
-#ifdef BUILDING_SO
extern const BaseApi* ips_modbus_data;
extern const BaseApi* ips_modbus_func;
extern const BaseApi* ips_modbus_unit;
+#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* sin_modbus[] =
+#endif
{
&modbus_api.base,
ips_modbus_data,
ips_modbus_unit,
nullptr
};
-#else
-const BaseApi* sin_modbus = &modbus_api.base;
-#endif
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
+
#include "framework/inspector.h"
+#include "managers/plugin_manager.h"
-extern const BaseApi* sin_http;
extern const BaseApi* sin_imap;
extern const BaseApi* sin_pop;
-extern const BaseApi* sin_sip;
extern const BaseApi* sin_smtp;
-extern const BaseApi* sin_ssl;
-extern const BaseApi* ips_http_uri;
-extern const BaseApi* ips_http_client_body;
-extern const BaseApi* ips_http_method;
-extern const BaseApi* ips_http_cookie;
-extern const BaseApi* ips_http_stat_code;
-extern const BaseApi* ips_http_stat_msg;
-extern const BaseApi* ips_http_raw_uri;
-extern const BaseApi* ips_http_raw_header;
-extern const BaseApi* ips_http_raw_cookie;
-extern const BaseApi* ips_http_version;
-extern const BaseApi* ips_http_header;
-extern const BaseApi* ips_http_trailer;
-extern const BaseApi* ips_http_raw_trailer;
-extern const BaseApi* ips_http_raw_request;
-extern const BaseApi* ips_http_raw_status;
-extern const BaseApi* ips_sip_body;
-extern const BaseApi* ips_sip_header;
-extern const BaseApi* ips_sip_method;
-extern const BaseApi* ips_sip_stat_code;
-extern const BaseApi* ips_ssl_state;
-extern const BaseApi* ips_ssl_version;
+extern const BaseApi* sin_file[];
+extern const BaseApi* sin_http[];
+extern const BaseApi* sin_sip[];
+extern const BaseApi* sin_ssl[];
#ifdef STATIC_INSPECTORS
-extern const BaseApi* ips_dce_iface;
-extern const BaseApi* ips_dce_opnum;
-extern const BaseApi* ips_dce_stub_data;
-extern const BaseApi* ips_dnp3_data;
-extern const BaseApi* ips_dnp3_func;
-extern const BaseApi* ips_dnp3_ind;
-extern const BaseApi* ips_dnp3_obj;
-extern const BaseApi* ips_gtp_info;
-extern const BaseApi* ips_gtp_type;
-extern const BaseApi* ips_gtp_version;
-extern const BaseApi* ips_modbus_data;
-extern const BaseApi* ips_modbus_func;
-extern const BaseApi* ips_modbus_unit;
-
-// FIXIT-L use snort_plugins aliases for static builds
-// so only one extern symbol per library is required
extern const BaseApi* sin_bo;
-extern const BaseApi* sin_dce_smb;
-extern const BaseApi* sin_dce_tcp;
-extern const BaseApi* sin_dce_udp;
-extern const BaseApi* sin_dnp3;
extern const BaseApi* sin_dns;
extern const BaseApi* sin_ftp_client;
extern const BaseApi* sin_ftp_server;
extern const BaseApi* sin_ftp_data;
-extern const BaseApi* sin_gtp;
-extern const BaseApi* sin_modbus;
extern const BaseApi* sin_rpc_decode;
extern const BaseApi* sin_ssh;
extern const BaseApi* sin_telnet;
extern const BaseApi* sin_wizard;
+
+extern const BaseApi* sin_dce[];
+extern const BaseApi* sin_dnp3[];
+extern const BaseApi* sin_gtp[];
+extern const BaseApi* sin_modbus[];
#endif
const BaseApi* service_inspectors[] =
{
- sin_http,
sin_imap,
sin_pop,
- sin_sip,
sin_smtp,
- sin_ssl,
-
- ips_http_uri,
- ips_http_client_body,
- ips_http_method,
- ips_http_cookie,
- ips_http_stat_code,
- ips_http_stat_msg,
- ips_http_raw_uri,
- ips_http_raw_header,
- ips_http_raw_cookie,
- ips_http_version,
- ips_http_header,
- ips_http_trailer,
- ips_http_raw_trailer,
- ips_http_raw_request,
- ips_http_raw_status,
- ips_sip_body,
- ips_sip_header,
- ips_sip_method,
- ips_sip_stat_code,
- ips_ssl_state,
- ips_ssl_version,
#ifdef STATIC_INSPECTORS
- ips_dce_iface,
- ips_dce_opnum,
- ips_dce_stub_data,
- ips_dnp3_data,
- ips_dnp3_func,
- ips_dnp3_ind,
- ips_dnp3_obj,
- ips_gtp_info,
- ips_gtp_type,
- ips_gtp_version,
- ips_modbus_data,
- ips_modbus_func,
- ips_modbus_unit,
-
sin_bo,
- sin_dce_smb,
- sin_dce_tcp,
- sin_dce_udp,
- sin_dnp3,
sin_dns,
sin_ftp_client,
sin_ftp_server,
sin_ftp_data,
- sin_gtp,
- sin_modbus,
sin_rpc_decode,
sin_ssh,
sin_telnet,
sin_wizard,
#endif
+
nullptr
};
+void load_service_inspectors()
+{
+ PluginManager::load_plugins(service_inspectors);
+
+ PluginManager::load_plugins(sin_file);
+ PluginManager::load_plugins(sin_http);
+ PluginManager::load_plugins(sin_sip);
+ PluginManager::load_plugins(sin_ssl);
+
+#ifdef STATIC_INSPECTORS
+ PluginManager::load_plugins(sin_dce);
+ PluginManager::load_plugins(sin_dnp3);
+ PluginManager::load_plugins(sin_gtp);
+ PluginManager::load_plugins(sin_modbus);
+#endif
+}
+
#ifndef SERVICE_INSPECTORS_H
#define SERVICE_INSPECTORS_H
-extern const struct BaseApi* service_inspectors[];
+void load_service_inspectors();
#endif
nullptr // reset
};
-#ifdef BUILDING_SO
extern const BaseApi* ips_sip_header;
extern const BaseApi* ips_sip_body;
extern const BaseApi* ips_sip_method;
extern const BaseApi* ips_sip_stat_code;
+#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* sin_sip[] =
+#endif
{
&sip_api.base,
ips_sip_header,
ips_sip_stat_code,
nullptr
};
-#else
-const BaseApi* sin_sip = &sip_api.base;
-#endif
#undef BUILDING_SO // FIXIT-L can't be linked dynamically yet
+extern const BaseApi* ips_ssl_state;
+extern const BaseApi* ips_ssl_version;
+
#ifdef BUILDING_SO
SO_PUBLIC const BaseApi* snort_plugins[] =
+#else
+const BaseApi* sin_ssl[] =
+#endif
{
&ssl_api.base,
+ ips_ssl_state,
+ ips_ssl_version,
nullptr
};
-#else
-const BaseApi* sin_ssl = &ssl_api.base;
-#endif
#include "stream_inspectors.h"
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
#include "framework/inspector.h"
+#include "managers/plugin_manager.h"
extern const BaseApi* nin_stream_base;
extern const BaseApi* nin_stream_ip;
extern const BaseApi* ips_stream_reassemble;
extern const BaseApi* ips_stream_size;
-const BaseApi* stream_inspectors[] =
+static const BaseApi* stream_inspectors[] =
{
nin_stream_base,
nin_stream_ip,
nullptr
};
+void load_stream_inspectors()
+{
+ PluginManager::load_plugins(stream_inspectors);
+}
+
#ifndef STREAM_INSPECTORS_H
#define STREAM_INSPECTORS_H
-extern const struct BaseApi* stream_inspectors[];
+void load_stream_inspectors();
#endif