summaryrefslogtreecommitdiffstats
path: root/mDNSResponder/mDNSMacOSX/BonjourTop/source/CollectBy.h
blob: 80ff0d589d574dbd4f24359e88d8d2de3d4eea11 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
//
//  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__) */