Gray C++ Libraries  0.0.2
A set of C++ libraries for MSVC, GNU on Windows, WinCE, Linux
GrayLib::cNetAddrMgr Class Reference

#include <cNetAddrTracker.h>

Inheritance diagram for GrayLib::cNetAddrMgr:
Gray::cSingleton< cNetAddrMgr > Gray::cThreadLockArrayHash< cNetAddrTracker > Gray::cSingletonStatic< TYPE > Gray::cSingletonRegister Gray::cArraySortHash< TYPE, _TYPE_HASH > Gray::CObject Gray::cHeapObject Gray::cArraySortRef< TYPE, HASHCODE_t > Gray::IHeapObject Gray::cArraySortFacade< TYPE, TYPE_PTR, TYPE_KEY > Gray::cArraySorted< TYPE, TYPE, TYPE > Gray::cArrayTyped< TYPE, TYPE > Gray::CArray< TYPE, ARG_TYPE > Gray::CObject

Public Member Functions

ITERATE_t AddLogAddr (cNetAddrTracker *pClientAddr)
 
bool RemoveLogAddr (cNetAddrTracker *pClientAddr)
 
virtual cNetAddrTrackPtr CreateAddrTracker (const cNetAddress &addr)
 
cNetAddrTrackPtr FindAddrTracker (const cNetAddress &addr, bool bCreate=true)
 
void onTickAddrArray ()
 periodically age the list. More...
 
 UNITTEST_FRIEND (cNetAddrTracker)
 
- Public Member Functions inherited from Gray::CObject
virtual ~CObject ()
 
virtual void AssertValid () const
 < memory allocation and structure definitions are valid. More...
 
virtual void Serialize (cArchive &a)
 
- Public Member Functions inherited from Gray::cHeapObject
 cHeapObject ()
 
virtual ~cHeapObject ()
 
bool IsValidInsideN (INT_PTR index) const
 
bool IsValidInsidePtr (void const *pTest) const
 
virtual size_t GetHeapStatsThis (OUT ITERATE_t &iAllocCount) const
 
virtual bool isValidCheck () const noexcept
 
- Public Member Functions inherited from Gray::cThreadLockArrayHash< cNetAddrTracker >
 cThreadLockArrayHash ()
 
 ~cThreadLockArrayHash ()
 
bool IsEmpty () const
 
ITERATE_t GetSize () const
 
cRefPtr< cNetAddrTracker > GetAtCheck (ITERATE_t nIndex) const
 
ITERATE_t Add (cNetAddrTracker *pObj)
 
cRefPtr< cNetAddrTracker > PopHead ()
 
cRefPtr< cNetAddrTracker > PopTail ()
 
bool RemoveArgKey (cNetAddrTracker *pObj)
 
void RemoveAll ()
 
void DisposeAll ()
 
cRefPtr< cNetAddrTracker > FindArgForKey (HASHCODE_t hashcode) const
 

Protected Member Functions

 cNetAddrMgr ()
 
 ~cNetAddrMgr ()
 
- Protected Member Functions inherited from Gray::cSingleton< cNetAddrMgr >
 cSingleton (cNetAddrMgr *pObject, const TYPEINFO_t &rAddrCode=typeid(cNetAddrMgr)) noexcept
 
virtual ~cSingleton ()
 
- Protected Member Functions inherited from Gray::cSingletonStatic< TYPE >
 cSingletonStatic (TYPE *pObject) noexcept
 
virtual ~cSingletonStatic () noexcept
 
- Protected Member Functions inherited from Gray::cSingletonRegister
 cSingletonRegister (const TYPEINFO_t &rAddrCode) noexcept
 
virtual ~cSingletonRegister ()
 
void RegisterSingleton ()
 
- Protected Member Functions inherited from Gray::cHeapObject
const void * get_HeapPtr () const noexcept override
 Get the top level (outermost, freeable) class pointer. I can delete get_HeapPtr(). More...
 
- Protected Member Functions inherited from Gray::cArraySortHash< TYPE, _TYPE_HASH >
virtual COMPARE_t CompareData (REF_t pData1, REF_t pData2) const noexcept override
 
virtual COMPARE_t CompareKey (KEY_t key1, REF_t pBase) const override
 
virtual ~cArraySortHash ()
 
ITERATE_t FindIForAK (const TYPE *pBase) const
 
bool RemoveArgKey (TYPE *pBase)
 
- Protected Member Functions inherited from Gray::cArraySortRef< TYPE, HASHCODE_t >
void DisposeAll ()
 
virtual ~cArraySortFacade ()
 
bool IsValidIndex (ITERATE_t i) const noexcept
 
REF_t GetAt (ITERATE_t index) const noexcept
 
REF_t GetAtCheck (ITERATE_t nIndex) const
 
TYPE_PTR FindArgForKey (TYPE_KEY key1) const noexcept
 
ITERATE_t FindIForAC_BRUTEFORCE (const TYPE_PTR pData) const
 
ELEM_t PopHead ()
 
ELEM_t PopTail ()
 
void DeleteAll ()
 
- Protected Member Functions inherited from Gray::cArraySorted< TYPE, TYPE, TYPE >
virtual COMPARE_t CompareKey (KEY_t key1, REF_t Data2) const
 
bool RemoveArgKey (REF_t pObj, KEY_t key)
 
virtual ~cArraySorted ()
 
ITERATE_t FindINear (REF_t pNew, COMPARE_t &iCompareRes) const
 
ITERATE_t FindINearKey (KEY_t key, COMPARE_t &iCompareRes) const
 
ITERATE_t FindIForKey (KEY_t key) const
 
ITERATE_t FindIFirstForKey (TYPE nKey) const
 
ITERATE_t FindILastForKey (TYPE nKey) const
 
ITERATE_t AddPresorted (ITERATE_t index, COMPARE_t iCompareRes, TYPE pNew)
 
bool RemoveKey (TYPE key)
 
ITERATE_t Add (TYPE pNew)
 
void AddArray (const SUPER_t &a)
 
- Protected Member Functions inherited from Gray::cArrayTyped< TYPE, TYPE >
virtual COMPARE_t CompareData (REF_t Data1, REF_t Data2) const noexcept
 
ITERATE_t QSortPartition (ITERATE_t iLeft, ITERATE_t iRight)
 
void QSort (ITERATE_t iLeft, ITERATE_t iRight)
 
void QSort ()
 
 cArrayTyped () noexcept
 
 cArrayTyped (const THIS_t &rArray)
 
 cArrayTyped (ITERATE_t iSize)
 
virtual ~cArrayTyped ()
 
bool isValidCheck () const noexcept
 < memory allocation and structure definitions are valid. More...
 
bool IsValidIndex (ITERATE_t i) const noexcept
 
ITERATE_t ClampValidIndex (ITERATE_t i) const noexcept
 
size_t GetHeapStats (OUT ITERATE_t &iAllocCount) const noexcept
 
void AssertValidIndex (ITERATE_t nIndex) const
 
const TYPEGetAtSecure (ITERATE_t nIndex) const
 
TYPEElementAtSecure (ITERATE_t nIndex)
 
REF_t ConstElementAt (ITERATE_t nIndex) const
 
TYPEoperator[] (ITERATE_t nIndex)
 
const TYPEoperator[] (ITERATE_t nIndex) const
 
TYPEHead ()
 
TYPETail ()
 
TYPEElementAtHead ()
 
TYPEElementAtTail ()
 
REF_t ConstHead () const
 
REF_t ConstTail () const
 
REF_t GetAtTail ()
 
void UnLinkIndex (ITERATE_t nIndex)
 
void Swap (ITERATE_t i, ITERATE_t j)
 
void SetCopy (const cArrayTyped< TYPE, TYPE > &aValues)
 
const cArrayTyped< TYPE, TYPE > & operator= (const cArrayTyped< TYPE, TYPE > &aValues)
 
ITERATE_t FindIFor (TYPE arg) const
 
bool HasArg (TYPE arg) const
 
void RemoveLast ()
 
ELEM_t PopHead ()
 
ELEM_t PopTail ()
 
bool RemoveArg (TYPE arg)
 
void UnLinkArg (TYPE arg)
 
ITERATE_t AddTail (TYPE newElement)
 
ITERATE_t PushTail (TYPE newElement)
 
void AddHead (TYPE newElement)
 
TYPEget_DataWork () const
 
void AddArray (const SUPER_t &src)
 
bool IsEqualArray (const SUPER_t &aValues) const
 
bool isArraySorted () const
 
bool isArraySortedND () const
 
- Protected Member Functions inherited from Gray::CArray< TYPE, ARG_TYPE >
bool IsValidIndex (ITERATE_t i) const noexcept
 
 CArray () noexcept
 
 CArray (THIS_t &&ref) noexcept
 
virtual ~CArray ()
 
bool IsValidMallocSize () const noexcept
 
ITERATE_t GetSize () const noexcept
 
ITERATE_t GetUpperBound () const noexcept
 
bool IsEmpty () const noexcept
 
void SetSize (ITERATE_t nNewSize)
 
ITERATE_t GetMallocSize () const noexcept
 
void RemoveAll ()
 Clean up. More...
 
const TYPEGetAt (ITERATE_t nIndex) const
 
TYPEElementAt (ITERATE_t nIndex)
 
void SetAt (ITERATE_t nIndex, ARG_TYPE newElement)
 
const TYPEGetData () const
 
TYPEGetData ()
 
void SetDataArrayPtr (TYPE *pData, ITERATE_t nSize)
 
void SetAtGrow (ITERATE_t nIndex, ARG_TYPE newElement)
 
ITERATE_t Add (ARG_TYPE newElement)
 
void Copy (const CArray &src)
 
TYPEoperator[] (ITERATE_t nIndex)
 
const TYPEoperator[] (ITERATE_t nIndex) const
 
void InsertAt (ITERATE_t nIndex, ARG_TYPE newElement)
 
void RemoveAt (ITERATE_t nIndex)
 
void RemoveAt (ITERATE_t nIndex, ITERATE_t iQty)
 
void MoveElement (ITERATE_t iFrom, ITERATE_t iTo)
 

Friends

class cSingleton< cNetAddrMgr >
 

Additional Inherited Members

- Static Public Member Functions inherited from Gray::cSingleton< cNetAddrMgr >
static cNetAddrMgr *__stdcall get_Single ()
 
static TYPE2 *__stdcall get_SingleT ()
 
static cNetAddrMgr &__stdcall I ()
 
- Static Public Member Functions inherited from Gray::cSingletonStatic< TYPE >
static bool isSingleCreated () noexcept
 
static TYPEget_SingleU () noexcept
 
static TYPEget_Single ()
 
template<class TYPE2 >
static TYPE2 *__stdcall get_SingleCast ()
 
static TYPEI () noexcept
 
- Static Public Member Functions inherited from Gray::cSingletonRegister
static void __stdcall ReleaseModule (HMODULE hMod)
 
- Public Attributes inherited from Gray::cThreadLockArrayHash< cNetAddrTracker >
cThreadLockCount m_Lock
 
- Static Public Attributes inherited from Gray::cSingletonRegister
static cThreadLockFast sm_LockSingle
 common lock for all cSingleton. More...
 
- Protected Types inherited from Gray::cArraySortHash< TYPE, _TYPE_HASH >
typedef cArraySortRef< TYPE, _TYPE_HASH > SUPER_t
 
typedef SUPER_t::REF_t REF_t
 
typedef SUPER_t::KEY_t KEY_t
 
- Protected Types inherited from Gray::cArraySortFacade< TYPE, TYPE_PTR, TYPE_KEY >
typedef cArraySorted< TYPE, TYPE_PTR, TYPE_KEY > SUPER_t
 
typedef SUPER_t::REF_t REF_t
 
typedef SUPER_t::ELEM_t ELEM_t
 
- Protected Types inherited from Gray::cArraySorted< TYPE, TYPE, TYPE >
typedef cArrayTyped< TYPE, TYPESUPER_t
 
typedef TYPE KEY_t
 
typedef SUPER_t::REF_t REF_t
 
- Protected Types inherited from Gray::cArrayTyped< TYPE, TYPE >
typedef CArray< TYPE, TYPESUPER_t
 
typedef cArrayTyped< TYPE, TYPETHIS_t
 
typedef ITERATE_t iterator
 
typedef ITERATE_t const_iterator
 
typedef TYPE ELEM_t
 What type is stored. More...
 
typedef TYPE REF_t
 How to refer to this? value or ref or pointer? More...
 
- Protected Attributes inherited from Gray::cSingletonRegister
HMODULE m_hModuleLoaded
 What modules loaded this ? So singletons can be destroyed if DLL/SO unloads. More...
 
- Protected Attributes inherited from Gray::CArray< TYPE, ARG_TYPE >
TYPEm_pData
 the actual array of data More...
 
ITERATE_t m_nSize
 Number of elements (upperBound - 1) More...
 
- Static Protected Attributes inherited from Gray::cSingletonStatic< TYPE >
static TYPEsm_pThe = nullptr
 pointer to the one and only object of this TYPE. ASSUME automatically init to = nullptr. More...
 

Detailed Description

Manage the list of IP addresses that a server might encounter. Block malicious addresses. Override this to provide extra functionality like db persistence. Similar to a load balancer. Multi Thread safe.

  1. detect DoS ping attacks. Cannot detect source since it might be spoofed.
  2. detect TCP connections used to attack passwords.
    Todo:
    block a range of addresses.

Constructor & Destructor Documentation

◆ cNetAddrMgr()

GrayLib::cNetAddrMgr::cNetAddrMgr ( )
protected

◆ ~cNetAddrMgr()

GrayLib::cNetAddrMgr::~cNetAddrMgr ( )
protected

Member Function Documentation

◆ AddLogAddr()

ITERATE_t GrayLib::cNetAddrMgr::AddLogAddr ( cNetAddrTracker pClientAddr)
inline

manually add an IP from some table ?

◆ CreateAddrTracker()

cNetAddrTrackPtr GrayLib::cNetAddrMgr::CreateAddrTracker ( const cNetAddress addr)
virtual

Just create a new cNetAddrTracker but don't add. Allow this to be overloaded.

◆ FindAddrTracker()

cNetAddrTrackPtr GrayLib::cNetAddrMgr::FindAddrTracker ( const cNetAddress addr,
bool  bCreate = true 
)

We are being hailed/pinged/connected by some client. Is this a client i know/like/dislike ? Should i block/ignore this incoming client?

Note
sorted by start IP of range.

◆ onTickAddrArray()

void GrayLib::cNetAddrMgr::onTickAddrArray ( )

periodically age the list.

Call this once per minute or so. Age out any IP's that should go away.

◆ RemoveLogAddr()

bool GrayLib::cNetAddrMgr::RemoveLogAddr ( cNetAddrTracker pClientAddr)
inline

manually remove an IP and let it progress naturally from here.

◆ UNITTEST_FRIEND()

GrayLib::cNetAddrMgr::UNITTEST_FRIEND ( cNetAddrTracker  )

Friends And Related Function Documentation

◆ cSingleton< cNetAddrMgr >

friend class cSingleton< cNetAddrMgr >
friend

The documentation for this class was generated from the following files: