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__) */