5 // Created by Terrin Eager on 9/26/12.
9 #ifndef __TestTB__DNSFrame__
10 #define __TestTB__DNSFrame__
16 #include "bjMACAddr.h"
18 #define MAX_DNS_RECORDS_PER_FRAME 500
20 #define DNS_TYPE_PTR 12
21 #define DNS_TYPE_SRV 33
22 #define DNS_TYPE_TXT 16
24 #define DNS_TYPE_AAAA 28
25 #define DNS_TYPE_OPT 41
27 #define DNS_EDNS0_TRACE 65001
37 typedef enum {Question
,Answer
,ns
,ar
} dnsItemType
;
39 void GetDnsRecordName(BJString
& ReturnString
,int nLabelToSkip
,int nMaxLabel
);
40 void GetDnsRecordNameFromBuffer(BJ_UINT8
* pBuffer
,BJString
& ReturnString
,int nLabelToSkip
,int nMaxLabel
);
42 BJ_UINT8
* GetStartofRdata() {return m_pStartofRec
+m_nNameLength
+10;}; // 10 = type(2) +class(2) + ttl(4) + datalen(2)
43 void GetRdata(BJString
& ReturnString
,int nLabelToSkip
,int nMaxLabel
)
45 if (m_RecType
== DNS_TYPE_SRV
)
46 GetDnsRecordNameFromBuffer(GetStartofRdata()+6, ReturnString
, nLabelToSkip
, nMaxLabel
); // 6 = Priority + Weight + Port
48 GetDnsRecordNameFromBuffer(GetStartofRdata(), ReturnString
, nLabelToSkip
, nMaxLabel
);
50 dnsItemType m_dnsType
;
51 BJ_UINT8
* m_pStartofRec
;
52 BJ_UINT32 m_nNameLength
;
56 BJ_UINT32 m_nRdataLen
;
58 CDNSFrame
* m_pDNSFrame
;
68 bool ParseDNSFrame(BJ_UINT8
* pBuffer
,BJ_INT32 nLength
,BJ_UINT64 frameTime
);
71 CDNSRecord
* GetDnsRecord(int nIndex
);
72 CDNSRecord
* FindAdditionRecord(BJString
& sName
, BJ_INT16 nType
);
74 BJ_UINT16
GetQuestionCount() {return m_nQuestionCount
;};
75 BJ_UINT16
GetAnswerCount(){return m_nAnswersCount
;};
76 BJ_UINT16
GetMaxRecords(){return m_nMaxItems
;};
77 BJ_UINT8
* GetBuffer() { return m_pStartBuffer
;};
79 BJ_BOOL
ParseDnsRecord(CDNSRecord::dnsItemType eItemType
);
81 BJ_BOOL
IsQueryFrame();
82 BJ_BOOL
IsWakeFrame();
83 BJ_BOOL
IsTruncatedFrame();
85 BJ_BOOL
HasOnlyService(BJString sName
, BJ_INT16 nRecType
);
87 void SetAddress(BJIPAddr
*SourceIPAddress
,BJMACAddr
*SourceMACAddress
);
89 bool GetTracingInfo(BJ_UINT8
&platform
, BJ_UINT32
&version
, BJMACAddr
&mac
);
91 BJ_UINT64
GetTime() {return m_Time
;};
94 BJIPAddr m_Servicev4Address
;
95 BJIPAddr m_Servicev6Address
;
97 BJIPAddr m_SourceIPAddress
;
98 BJMACAddr m_SourceMACAddress
;
103 BJ_UINT8
* m_pStartBuffer
;
104 BJ_UINT8
* m_pEndBuffer
;
105 BJ_UINT8
* m_pCurrentBuffer
;
106 BJ_INT32 m_nBufferLen
;
108 BJ_INT32 m_nFrameLen
;
114 BJ_UINT16 m_nQuestionCount
;
115 BJ_UINT16 m_nAnswersCount
;
120 CDNSRecord m_dnsItems
[MAX_DNS_RECORDS_PER_FRAME
];
132 #endif /* defined(__TestTB__DNSFrame__) */