summaryrefslogtreecommitdiffstats
path: root/mDNSResponder/mDNSMacOSX/BonjourTop/source/DNSFrame.h
diff options
context:
space:
mode:
Diffstat (limited to 'mDNSResponder/mDNSMacOSX/BonjourTop/source/DNSFrame.h')
-rw-r--r--mDNSResponder/mDNSMacOSX/BonjourTop/source/DNSFrame.h132
1 files changed, 132 insertions, 0 deletions
diff --git a/mDNSResponder/mDNSMacOSX/BonjourTop/source/DNSFrame.h b/mDNSResponder/mDNSMacOSX/BonjourTop/source/DNSFrame.h
new file mode 100644
index 00000000..8e7ded7c
--- /dev/null
+++ b/mDNSResponder/mDNSMacOSX/BonjourTop/source/DNSFrame.h
@@ -0,0 +1,132 @@
+//
+// DNSFrame.h
+// TestTB
+//
+// Created by Terrin Eager on 9/26/12.
+//
+//
+
+#ifndef __TestTB__DNSFrame__
+#define __TestTB__DNSFrame__
+
+#include <iostream>
+#include "bjtypes.h"
+#include "bjstring.h"
+#include "bjIPAddr.h"
+#include "bjMACAddr.h"
+
+#define MAX_DNS_RECORDS_PER_FRAME 500
+
+#define DNS_TYPE_PTR 12
+#define DNS_TYPE_SRV 33
+#define DNS_TYPE_TXT 16
+#define DNS_TYPE_A 1
+#define DNS_TYPE_AAAA 28
+#define DNS_TYPE_OPT 41
+
+#define DNS_EDNS0_TRACE 65001
+
+class CDNSFrame;
+
+
+
+
+class CDNSRecord
+{
+public:
+ typedef enum {Question,Answer,ns,ar} dnsItemType;
+
+ void GetDnsRecordName(BJString& ReturnString,int nLabelToSkip,int nMaxLabel);
+ void GetDnsRecordNameFromBuffer(BJ_UINT8* pBuffer,BJString& ReturnString,int nLabelToSkip,int nMaxLabel);
+
+ BJ_UINT8* GetStartofRdata() {return m_pStartofRec+m_nNameLength+10;}; // 10 = type(2) +class(2) + ttl(4) + datalen(2)
+ void GetRdata(BJString& ReturnString,int nLabelToSkip,int nMaxLabel)
+ {
+ if (m_RecType == DNS_TYPE_SRV)
+ GetDnsRecordNameFromBuffer(GetStartofRdata()+6, ReturnString, nLabelToSkip, nMaxLabel); // 6 = Priority + Weight + Port
+ else
+ GetDnsRecordNameFromBuffer(GetStartofRdata(), ReturnString, nLabelToSkip, nMaxLabel);
+ }
+ dnsItemType m_dnsType;
+ BJ_UINT8* m_pStartofRec;
+ BJ_UINT32 m_nNameLength;
+ BJ_INT16 m_RecType;
+ BJ_INT16 m_RecClass;
+ BJ_UINT32 m_nTTL;
+ BJ_UINT32 m_nRdataLen;
+
+ CDNSFrame* m_pDNSFrame;
+};
+
+
+
+class CDNSFrame
+{
+public:
+
+ CDNSFrame();
+ bool ParseDNSFrame(BJ_UINT8* pBuffer,BJ_INT32 nLength,BJ_UINT64 frameTime);
+
+
+ CDNSRecord* GetDnsRecord(int nIndex);
+ CDNSRecord* FindAdditionRecord(BJString& sName, BJ_INT16 nType);
+
+ BJ_UINT16 GetQuestionCount() {return m_nQuestionCount;};
+ BJ_UINT16 GetAnswerCount(){return m_nAnswersCount;};
+ BJ_UINT16 GetMaxRecords(){return m_nMaxItems;};
+ BJ_UINT8* GetBuffer() { return m_pStartBuffer;};
+
+ BJ_BOOL ParseDnsRecord(CDNSRecord::dnsItemType eItemType);
+
+ BJ_BOOL IsQueryFrame();
+ BJ_BOOL IsWakeFrame();
+ BJ_BOOL IsTruncatedFrame();
+
+ BJ_BOOL HasOnlyService(BJString sName, BJ_INT16 nRecType);
+
+ void SetAddress(BJIPAddr *SourceIPAddress,BJMACAddr *SourceMACAddress);
+
+ bool GetTracingInfo(BJ_UINT8 &platform, BJ_UINT32 &version, BJMACAddr &mac);
+
+ BJ_UINT64 GetTime() {return m_Time;};
+
+
+ BJIPAddr m_Servicev4Address;
+ BJIPAddr m_Servicev6Address;
+
+ BJIPAddr m_SourceIPAddress;
+ BJMACAddr m_SourceMACAddress;
+
+protected:
+
+
+ BJ_UINT8* m_pStartBuffer;
+ BJ_UINT8* m_pEndBuffer;
+ BJ_UINT8* m_pCurrentBuffer;
+ BJ_INT32 m_nBufferLen;
+
+ BJ_INT32 m_nFrameLen;
+
+ // Header
+ BJ_UINT16 m_nId;
+ BJ_UINT16 m_nFlags;
+
+ BJ_UINT16 m_nQuestionCount;
+ BJ_UINT16 m_nAnswersCount;
+ BJ_UINT16 m_NSCOUNT;
+ BJ_UINT16 m_ARCOUNT;
+
+
+ CDNSRecord m_dnsItems[MAX_DNS_RECORDS_PER_FRAME];
+
+ int m_nMaxItems;
+
+ BJ_UINT64 m_Time;
+
+};
+
+
+
+
+
+#endif /* defined(__TestTB__DNSFrame__) */