#include <cstdint>
#include <string>
+#include "memory/memory_cap.h"
+
#define STASH_APPID_DATA "appid_data"
#define STASH_GENERIC_OBJECT_APPID 1
{
return object_type;
}
+ virtual size_t size_of() const = 0;
+
private:
int object_type;
};
{
type = STASH_ITEM_TYPE_GENERIC_OBJECT;
val.generic_obj_val = obj;
+ memory::MemoryCap::update_allocations(sizeof(*this) + obj->size_of());
}
~StashItem()
delete val.str_val;
break;
case STASH_ITEM_TYPE_GENERIC_OBJECT:
+ memory::MemoryCap::update_deallocations(sizeof(*this) + val.generic_obj_val->size_of());
delete val.generic_obj_val;
default:
break;
static DataBus* DB = nullptr;
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
class TestStashObject : public StashGenericObject
{
public:
{
}
+
+ size_t size_of() const override
+ { return sizeof(*this); }
};
if (asd.tpsession and asd.tpsession->get_ctxt_version() != tp_appid_ctxt->get_version())
{
bool is_tp_done = asd.is_tp_processing_done();
+ memory::MemoryCap::update_deallocations(asd.tpsession->size_of());
delete asd.tpsession;
asd.tpsession = nullptr;
if (!is_tp_done)
class AppIdDnsSession
{
public:
- virtual ~AppIdDnsSession() = default;
+ AppIdDnsSession()
+ {
+ memory::MemoryCap::update_allocations(sizeof(*this));
+ }
+
+ ~AppIdDnsSession()
+ {
+ memory::MemoryCap::update_deallocations(sizeof(*this));
+ }
void reset()
{
if ( !(asd->tpsession = tpsf(*asd->get_tp_appid_ctxt())) )
ErrorMessage("appid: Could not allocate asd.tpsession data in consume");
else
+ {
+ memory::MemoryCap::update_allocations(asd->tpsession->size_of());
asd->tpsession->set_state(TP_STATE_HA);
+ }
}
}
if (tpsession)
{
+ memory::MemoryCap::update_deallocations(tpsession->size_of());
if (pkt_thread_tp_appid_ctxt and
((tpsession->get_ctxt_version() == pkt_thread_tp_appid_ctxt->get_version()) and
!ThirdPartyAppIdContext::get_tp_reload_in_progress()))
class TlsSession
{
public:
+ TlsSession()
+ {
+ memory::MemoryCap::update_allocations(sizeof(*this));
+ }
+
~TlsSession()
{
+ memory::MemoryCap::update_deallocations(sizeof(*this));
if (tls_host)
snort_free(tls_host);
if (tls_first_alt_name)
void clear_user_logged_in() { user_logged_in = false; }
+ size_t size_of() const override
+ { return sizeof(*this); }
+
protected:
AppIdSessionApi(const AppIdSession* asd, const SfIp& ip);
static AppId client_id = APP_ID_NONE;
static DetectorHTTPPattern mpattern;
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
namespace snort
{
AppIdSessionApi::AppIdSessionApi(const AppIdSession*, const SfIp&) :
static SnortProtocolId dummy_http2_protocol_id = 1;
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
namespace snort
{
// Mocks
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
namespace snort
{
unsigned get_instance_id() { return 3; }
#include <CppUTest/CommandLineTestRunner.h>
#include <CppUTest/TestHarness.h>
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
namespace snort
{
AppIdSessionApi::AppIdSessionApi(const AppIdSession*, const SfIp&) :
uint32_t ThirdPartyAppIdContext::next_version = 0;
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
namespace snort
{
// Stubs for packet
using namespace snort;
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
namespace snort
{
AppIdApi appid_api;
static OdpContext odpctxt(config, nullptr);
static Flow flow;
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
void ApplicationDescriptor::set_id(const Packet&, AppIdSession&, AppidSessionDirection, AppId, AppidChangeBits&) { }
void AppIdModule::reset_stats() {}
#include <vector>
+void memory::MemoryCap::update_allocations(size_t) { }
+void memory::MemoryCap::update_deallocations(size_t) { }
+
namespace snort
{
// Stubs for logs
void clear_attr(TPSessionAttr attr) override { flags &= ~attr; }
void set_attr(TPSessionAttr attr) override { flags |= attr; }
unsigned get_attr(TPSessionAttr attr) override { return flags & attr; }
+ size_t size_of() const override { return sizeof(*this); }
private:
unsigned flags = 0;
{
ctxt_version = ctxt.get_version();
}
+
virtual ~ThirdPartyAppIdSession() = default;
virtual void reset() = 0; // just reset state
virtual void clear_attr(TPSessionAttr) = 0;
virtual void set_attr(TPSessionAttr) = 0;
virtual unsigned get_attr(TPSessionAttr) = 0;
+ virtual size_t size_of() const = 0;
virtual AppId get_appid(int& conf) { conf=confidence; return appid; }
virtual const ThirdPartyAppIdContext& get_ctxt() const
{ return ctxt; }
ErrorMessage("Could not allocate asd.tpsession data");
return false;
}
+ memory::MemoryCap::update_allocations(asd.tpsession->size_of());
}
int tp_confidence;