// flow_stash.cc author Shravan Rangaraju <shrarang@cisco.com>
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include "flow_stash.h"
#include <cassert>
return get(key, val, STASH_ITEM_TYPE_INT32);
}
+bool FlowStash::get(const string& key, uint32_t& val)
+{
+ return get(key, val, STASH_ITEM_TYPE_UINT32);
+}
+
bool FlowStash::get(const string& key, string& val)
{
return get(key, val, STASH_ITEM_TYPE_STRING);
store(key, val, STASH_ITEM_TYPE_INT32);
}
+void FlowStash::store(const string& key, uint32_t val)
+{
+ store(key, val, STASH_ITEM_TYPE_UINT32);
+}
+
void FlowStash::store(const string& key, const string& val)
{
store(key, val, STASH_ITEM_TYPE_STRING);
namespace snort
{
-class FlowStash
+class SO_PUBLIC FlowStash
{
public:
~FlowStash();
void reset();
bool get(const std::string& key, int32_t& val);
+ bool get(const std::string& key, uint32_t& val);
bool get(const std::string& key, std::string& val);
bool get(const std::string& key, StashGenericObject* &val);
void store(const std::string& key, int32_t val);
+ void store(const std::string& key, uint32_t val);
void store(const std::string& key, const std::string& val);
void store(const std::string& key, std::string* val);
void store(const std::string& key, StashGenericObject* val);
enum StashItemType
{
STASH_ITEM_TYPE_INT32,
+ STASH_ITEM_TYPE_UINT32,
STASH_ITEM_TYPE_STRING,
STASH_ITEM_TYPE_GENERIC_OBJECT
};
union StashItemVal
{
int32_t int32_val;
+ uint32_t uint32_val;
std::string* str_val;
StashGenericObject* generic_obj_val;
};
val.int32_val = int32_val;
}
+ StashItem(uint32_t uint32_val)
+ {
+ type = STASH_ITEM_TYPE_UINT32;
+ val.uint32_val = uint32_val;
+ }
+
StashItem(const std::string& str_val)
{
type = STASH_ITEM_TYPE_STRING;
void get_val(int32_t& int32_val) const
{ int32_val = val.int32_val; }
+ void get_val(uint32_t& uint32_val) const
+ { uint32_val = val.uint32_val; }
+
void get_val(std::string& str_val) const
{ str_val = *(val.str_val); }
CHECK_EQUAL(val, 20);
}
+TEST(stash_tests, new_uint32_item)
+{
+ FlowStash stash;
+
+ stash.store("item_1", 10u);
+
+ uint32_t val;
+
+ CHECK(stash.get("item_1", val));
+ CHECK_EQUAL(val, 10u);
+}
+
+TEST(stash_tests, update_uint32_item)
+{
+ FlowStash stash;
+
+ stash.store("item_1", 10u);
+ stash.store("item_1", 20u);
+
+ uint32_t val;
+
+ CHECK(stash.get("item_1", val));
+ CHECK_EQUAL(val, 20u);
+}
+
TEST(stash_tests, new_str_item_ref)
{
FlowStash stash;