blob: 80ff0d589d574dbd4f24359e88d8d2de3d4eea11 [file] [log] [blame]
//
// CollectBy.h
// TestTB
//
// Created by Terrin Eager on 3/17/13.
//
//
#ifndef __TestTB__CollectBy__
#define __TestTB__CollectBy__
#include <iostream>
#include "bjtypes.h"
#include "DNSFrame.h"
#include "bjstring.h"
#include "LLRBTree.h"
// Service request/Respond v4/v6 sameSubnet/DifferentSubnet
enum BJ_COLLECTBY_TYPE
{
CBT_NOT_SET,
CBT_SERVICE,
CBT_REQUEST_RESPONDS,
CBT_SAME_DIFF_SUBNET,
CBT_IP_ADDRESS_TYPE,
CBT_PACKET
};
class CollectByAbstract;
class Collection
{
public:
Collection() {m_pHeaderCollectBy = NULL;m_pFirstCollectBy = NULL;};
void Init(BJ_COLLECTBY_TYPE collectByList[]);
void ProcessFrame(CDNSFrame* pFrame);
void ExportCollection(BJString sFileName);
bool IsValid() { return (m_pFirstCollectBy != NULL);};
private:
CollectByAbstract* Factory(BJ_COLLECTBY_TYPE type);
BJ_COLLECTBY_TYPE m_CollectByList[20];
CollectByAbstract* m_pHeaderCollectBy;
CollectByAbstract* m_pFirstCollectBy;
};
class CollectByAbstract
{
public:
CollectByAbstract()
{
pNext = NULL;
}
virtual void Collect(CDNSFrame* pFrame,CollectByAbstract* nextCollectBy)=0;
virtual const char* GetTitle()=0;
virtual CollectByAbstract* Factory()=0;
virtual void Export(FILE* hFile,BJString sPrevColumns)=0;
CollectByAbstract* pNext;
};
/////////////
// Service
class CServiceNode : public CRBNode<BJString>
{
public:
CServiceNode() {pNext = NULL;};
CServiceNode(BJString* pKey){ m_Key = *pKey;};
~CServiceNode(){};
inline virtual BJ_COMPARE Compare(BJString* pKey) { return m_Key.Compare(*pKey);};
inline virtual void CopyNode(CRBNode* pSource) {pNext = dynamic_cast<CServiceNode*>(pSource)->pNext;} ;
inline virtual void Init(){};
inline virtual void Clear() {};
void Export(FILE* hFile,BJString sPrevColumns);
CollectByAbstract* pNext;
};
class CServiceToCollectByMap : public CLLRBTree<BJString, CServiceNode>
{
public:
};
class CollectByService:public CollectByAbstract
{
public:
virtual void Collect(CDNSFrame* pFrame,CollectByAbstract* nextCollectBy);
virtual const char* GetTitle() {return "Service";};
virtual CollectByAbstract* Factory(){ return new CollectByService();};
virtual void Export(FILE* hFile,BJString sPrevColumns);
private:
CServiceToCollectByMap m_Cache;
};
class CollectByRequestResponds:public CollectByAbstract
{
public:
virtual void Collect(CDNSFrame* pFrame,CollectByAbstract* nextCollectBy);
virtual const char* GetTitle() {return "Request/Responds";};
virtual CollectByAbstract* Factory(){ return new CollectByRequestResponds();};
virtual void Export(FILE* hFile,BJString sPrevColumns);
private:
CollectByAbstract* pRequestNext;
CollectByAbstract* pRespondsNext;
};
class CollectByIPAddressType:public CollectByAbstract
{
public:
virtual void Collect(CDNSFrame* pFrame,CollectByAbstract* nextCollectBy);
virtual const char* GetTitle() {return "V4/V6";};
virtual CollectByAbstract* Factory(){ return new CollectByIPAddressType();};
virtual void Export(FILE* hFile,BJString sPrevColumns);
private:
CollectByAbstract* pIPv4Next;
CollectByAbstract* pIPv6Next;
};
class CollectBySameSubnetDiffSubnet:public CollectByAbstract
{
public:
virtual void Collect(CDNSFrame* pFrame,CollectByAbstract* nextCollectBy);
virtual const char* GetTitle() {return "SameSubnet/DiffSubnet";};
virtual CollectByAbstract* Factory(){ return new CollectBySameSubnetDiffSubnet();};
virtual void Export(FILE* hFile,BJString sPrevColumns);
static bool bSameSubnet;
private:
CollectByAbstract* pSameSubnetNext;
CollectByAbstract* pDiffSubnetNext;
};
class CollectByPacketCount:public CollectByAbstract
{
public:
virtual void Collect(CDNSFrame* pFrame,CollectByAbstract* nextCollectBy);
virtual const char* GetTitle() {return "Packets";};
virtual CollectByAbstract* Factory(){ return new CollectByPacketCount();};
virtual void Export(FILE* hFile,BJString sPrevColumns);
BJ_INT64 nFrameCount;
BJ_INT64 nLastFrameIndex;
static BJ_INT64 nFrameIndex;
};
#endif /* defined(__TestTB__CollectBy__) */