Pārlūkot izejas kodu

Added AAAA record data

develop
Robin Thoni 6 gadus atpakaļ
vecāks
revīzija
fac584c9ad

+ 47
- 0
src/modules/dns-base/includes/dns-base/RecordData/QDnsRecordDataAAAA.h Parādīt failu

@@ -0,0 +1,47 @@
1
+//
2
+// Created by robin on 1/22/18.
3
+//
4
+
5
+#ifndef QDNSAGG_QDNSRECORDDATAAAAA_H
6
+#define QDNSAGG_QDNSRECORDDATAAAAA_H
7
+
8
+#include <qplatformdefs.h>
9
+#include <QByteArray>
10
+#include <QDataStream>
11
+#include <QHostAddress>
12
+
13
+#include "QDnsRecordData.h"
14
+
15
+namespace QDns
16
+{
17
+    namespace Base
18
+    {
19
+        class QDnsRecordDataAAAA : public QDnsRecordData
20
+        {
21
+        public:
22
+            QDnsRecordDataAAAA();
23
+
24
+            QDnsRecordDataAAAA(const QByteArray &packetData, quint32 pos);
25
+
26
+            QDnsRecordDataAAAA(const QByteArray &packetData, QDataStream &dataStream);
27
+
28
+            QByteArray serialize() const override;
29
+
30
+            void serialize(QDataStream &dataStream) const override;
31
+
32
+            virtual QDnsRecordData* clone() const override;
33
+
34
+            const QHostAddress &getIp() const;
35
+
36
+            void setIp(const QHostAddress &ip);
37
+
38
+        private:
39
+            void parse(const QByteArray &packetData, QDataStream &dataStream);
40
+
41
+            QHostAddress m_ip;
42
+        };
43
+    }
44
+}
45
+
46
+
47
+#endif //QDNSAGG_QDNSRECORDDATAAAAA_H

+ 84
- 0
src/modules/dns-base/src/RecordData/QDnsRecordDataAAAA.cpp Parādīt failu

@@ -0,0 +1,84 @@
1
+//
2
+// Created by robin on 1/22/18.
3
+//
4
+
5
+#include "dns-base/RecordData/QDnsRecordDataAAAA.h"
6
+
7
+namespace QDns
8
+{
9
+    namespace Base
10
+    {
11
+        QDnsRecordDataAAAA::QDnsRecordDataAAAA()
12
+                : QDnsRecordData()
13
+        {
14
+        }
15
+
16
+        QDnsRecordDataAAAA::QDnsRecordDataAAAA(const QByteArray &packetData, quint32 pos)
17
+                : QDnsRecordDataAAAA()
18
+        {
19
+            QDataStream dataStream(packetData);
20
+            dataStream.skipRawData(pos);
21
+            parse(packetData, dataStream);
22
+        }
23
+
24
+        QDnsRecordDataAAAA::QDnsRecordDataAAAA(const QByteArray &packetData, QDataStream &dataStream)
25
+                : QDnsRecordDataAAAA()
26
+        {
27
+            parse(packetData, dataStream);
28
+        }
29
+
30
+        void QDnsRecordDataAAAA::parse(const QByteArray &packetData, QDataStream &dataStream)
31
+        {
32
+            if (dataStream.device()->bytesAvailable() < 16)
33
+            {
34
+                m_isValid = false;
35
+            }
36
+            else
37
+            {
38
+                Q_IPV6ADDR ip;
39
+                for (int i = 0; i < 16; ++i)
40
+                {
41
+                    quint8 byte;
42
+                    dataStream >> byte;
43
+                    ip[i] = byte;
44
+                }
45
+                m_ip.setAddress(ip);
46
+            }
47
+        }
48
+
49
+        QByteArray QDnsRecordDataAAAA::serialize() const
50
+        {
51
+            QByteArray byteArray;
52
+            QDataStream dataStream(&byteArray, QIODevice::WriteOnly);
53
+            serialize(dataStream);
54
+            return byteArray;
55
+        }
56
+
57
+        void QDnsRecordDataAAAA::serialize(QDataStream &dataStream) const
58
+        {
59
+            Q_IPV6ADDR ip = m_ip.toIPv6Address();
60
+            for (int i = 0; i < 16; ++i)
61
+            {
62
+                dataStream << ip[i];
63
+            }
64
+        }
65
+
66
+        QDnsRecordData *QDnsRecordDataAAAA::clone() const
67
+        {
68
+            auto data = new QDnsRecordDataAAAA();
69
+            data->m_isValid = m_isValid;
70
+            data->m_ip = m_ip;
71
+            return nullptr;
72
+        }
73
+
74
+        const QHostAddress &QDnsRecordDataAAAA::getIp() const
75
+        {
76
+            return m_ip;
77
+        }
78
+
79
+        void QDnsRecordDataAAAA::setIp(const QHostAddress &ip)
80
+        {
81
+            m_ip = ip;
82
+        }
83
+    }
84
+}

+ 51
- 0
src/modules/dns-base/tests/RecordData/DnsRDataAAAA.cpp Parādīt failu

@@ -0,0 +1,51 @@
1
+//
2
+// Created by robin on 1/14/18.
3
+//
4
+
5
+#include <gtest/gtest.h>
6
+#include <QByteArray>
7
+#include <QString>
8
+#include <QtNetwork/QHostAddress>
9
+#include <dns-base/RecordData/QDnsRecordDataAAAA.h>
10
+
11
+struct DnsRDataAAAATestParams
12
+{
13
+    bool isValid;
14
+    const char* hexData;
15
+    quint32 pos;
16
+
17
+    Q_IPV6ADDR ip;
18
+};
19
+
20
+class DnsRDataAAAATest : public ::testing::TestWithParam<DnsRDataAAAATestParams>
21
+{
22
+};
23
+
24
+TEST_P(DnsRDataAAAATest, parseAndGetters)
25
+{
26
+    auto params = GetParam();
27
+    auto data = QByteArray::fromHex(params.hexData);
28
+    auto rdata = QDns::Base::QDnsRecordDataAAAA(data, params.pos);
29
+    ASSERT_EQ(rdata.isValid(), params.isValid);
30
+    
31
+    if (rdata.isValid())
32
+    {
33
+        for (int i = 0; i < 16; ++i)
34
+        {
35
+            ASSERT_EQ(rdata.getIp().toIPv6Address()[i], params.ip[i]);
36
+        }
37
+        
38
+        ASSERT_EQ(rdata.serialize().toHex(), QString(params.hexData).remove(" "));
39
+    }
40
+}
41
+
42
+INSTANTIATE_TEST_CASE_P(DnsRDataAAAATestInst,
43
+                        DnsRDataAAAATest,
44
+                        ::testing::Values(
45
+                                DnsRDataAAAATestParams {false, "", 0},
46
+                                DnsRDataAAAATestParams {false, "00", 0},
47
+                                DnsRDataAAAATestParams {false, "acd913e3", 0, QHostAddress("172.217.19.227").toIPv6Address()},
48
+                                DnsRDataAAAATestParams {false, "d83ad3a3", 0, QHostAddress("216.58.211.163").toIPv6Address()},
49
+                                DnsRDataAAAATestParams {true, "2a001450400708120000000000002003", 0, QHostAddress("2a00:1450:4007:812::2003").toIPv6Address()},
50
+                                DnsRDataAAAATestParams {true, "2a00145040070812000000000000200e", 0, QHostAddress("2a00:1450:4007:812::200e").toIPv6Address()}
51
+                        ));

Notiek ielāde…
Atcelt
Saglabāt