Browse Source

Added toString methods and qDebug support

develop
Robin Thoni 6 years ago
parent
commit
5fa6914ec8
22 changed files with 235 additions and 11 deletions
  1. 5
    0
      src/modules/dns-base/includes/dns-base/QDnsHeader.h
  2. 4
    0
      src/modules/dns-base/includes/dns-base/QDnsPacket.h
  3. 4
    0
      src/modules/dns-base/includes/dns-base/QDnsQuery.h
  4. 10
    4
      src/modules/dns-base/includes/dns-base/QDnsResourceRecord.h
  5. 4
    0
      src/modules/dns-base/includes/dns-base/RecordData/QDnsRecordData.h
  6. 2
    0
      src/modules/dns-base/includes/dns-base/RecordData/QDnsRecordDataA.h
  7. 2
    0
      src/modules/dns-base/includes/dns-base/RecordData/QDnsRecordDataAAAA.h
  8. 2
    0
      src/modules/dns-base/includes/dns-base/RecordData/QDnsRecordDataMX.h
  9. 2
    0
      src/modules/dns-base/includes/dns-base/RecordData/QDnsRecordDataPTR.h
  10. 2
    0
      src/modules/dns-base/includes/dns-base/RecordData/QDnsRecordDataRaw.h
  11. 2
    0
      src/modules/dns-base/includes/dns-base/RecordData/QDnsRecordDataSOA.h
  12. 29
    0
      src/modules/dns-base/src/QDnsHeader.cpp
  13. 50
    0
      src/modules/dns-base/src/QDnsPacket.cpp
  14. 18
    0
      src/modules/dns-base/src/QDnsQuery.cpp
  15. 54
    7
      src/modules/dns-base/src/QDnsResourceRecord.cpp
  16. 13
    0
      src/modules/dns-base/src/RecordData/QDnsRecordData.cpp
  17. 5
    0
      src/modules/dns-base/src/RecordData/QDnsRecordDataA.cpp
  18. 5
    0
      src/modules/dns-base/src/RecordData/QDnsRecordDataAAAA.cpp
  19. 5
    0
      src/modules/dns-base/src/RecordData/QDnsRecordDataMX.cpp
  20. 5
    0
      src/modules/dns-base/src/RecordData/QDnsRecordDataPTR.cpp
  21. 5
    0
      src/modules/dns-base/src/RecordData/QDnsRecordDataRaw.cpp
  22. 7
    0
      src/modules/dns-base/src/RecordData/QDnsRecordDataSOA.cpp

+ 5
- 0
src/modules/dns-base/includes/dns-base/QDnsHeader.h View File

@@ -8,6 +8,7 @@
8 8
 #include <qplatformdefs.h>
9 9
 #include <QByteArray>
10 10
 #include <QDataStream>
11
+#include <QDebug>
11 12
 #include "QDnsBase.h"
12 13
 
13 14
 namespace QDns
@@ -99,6 +100,8 @@ namespace QDns
99 100
 
100 101
             void setAdditionalCount(quint16 additionalCount);
101 102
 
103
+            QString toString() const;
104
+
102 105
         private:
103 106
             void parse(QDataStream &dataStream);
104 107
 
@@ -110,6 +113,8 @@ namespace QDns
110 113
             quint16 m_authorityCount;
111 114
             quint16 m_additionalCount;
112 115
         };
116
+
117
+        QDebug operator<<(QDebug debug, const QDnsHeader &h);
113 118
     }
114 119
 }
115 120
 

+ 4
- 0
src/modules/dns-base/includes/dns-base/QDnsPacket.h View File

@@ -53,6 +53,8 @@ namespace QDns
53 53
 
54 54
             void setAdditionalRecords(const QList<QDnsResourceRecord> &additionalRecords);
55 55
 
56
+            QString toString() const;
57
+
56 58
             static QDnsPacket makeSimpleQuery(const QString& host, QDnsBase::RecordType type);
57 59
 
58 60
         private:
@@ -65,6 +67,8 @@ namespace QDns
65 67
             QList<QDnsResourceRecord> m_authorityRecords;
66 68
             QList<QDnsResourceRecord> m_additionalRecords;
67 69
         };
70
+
71
+        QDebug operator<<(QDebug debug, const QDnsPacket &p);
68 72
     }
69 73
 }
70 74
 

+ 4
- 0
src/modules/dns-base/includes/dns-base/QDnsQuery.h View File

@@ -42,6 +42,8 @@ namespace QDns
42 42
 
43 43
             void setClass(QDnsBase::RecordClass aClass);
44 44
 
45
+            QString toString() const;
46
+
45 47
         private:
46 48
             void parse(const QByteArray &packetData, QDataStream &dataStream);
47 49
 
@@ -50,6 +52,8 @@ namespace QDns
50 52
             quint16 m_type;
51 53
             quint16 m_class;
52 54
         };
55
+
56
+        QDebug operator<<(QDebug debug, const QDnsQuery &q);
53 57
     }
54 58
 }
55 59
 

+ 10
- 4
src/modules/dns-base/includes/dns-base/QDnsResourceRecord.h View File

@@ -8,6 +8,8 @@
8 8
 #include <qplatformdefs.h>
9 9
 #include <QByteArray>
10 10
 #include <QDataStream>
11
+#include <QDebug>
12
+#include "dns-base/QDnsBase.h"
11 13
 #include "dns-base/RecordData/QDnsRecordData.h"
12 14
 
13 15
 namespace QDns
@@ -39,13 +41,13 @@ namespace QDns
39 41
 
40 42
             void setName(const QString &name);
41 43
 
42
-            quint16 getType() const;
44
+            QDnsBase::RecordType getType() const;
43 45
 
44
-            void setType(quint16 type);
46
+            void setType(QDnsBase::RecordType type);
45 47
 
46
-            quint16 getClass() const;
48
+            QDnsBase::RecordClass getClass() const;
47 49
 
48
-            void setClass(quint16 aClass);
50
+            void setClass(QDnsBase::RecordClass aClass);
49 51
 
50 52
             quint32 getTtl() const;
51 53
 
@@ -55,6 +57,8 @@ namespace QDns
55 57
 
56 58
             void setData(QDnsRecordData* data);
57 59
 
60
+            QString toString() const;
61
+
58 62
         private:
59 63
             void copy(const QDnsResourceRecord& other);
60 64
             void parse(const QByteArray &packetData, QDataStream &dataStream);
@@ -66,6 +70,8 @@ namespace QDns
66 70
             quint32 m_ttl;
67 71
             QScopedPointer<QDnsRecordData> m_data;
68 72
         };
73
+
74
+        QDebug operator<<(QDebug debug, const QDnsResourceRecord &rr);
69 75
     }
70 76
 }
71 77
 

+ 4
- 0
src/modules/dns-base/includes/dns-base/RecordData/QDnsRecordData.h View File

@@ -26,9 +26,13 @@ namespace QDns
26 26
 
27 27
             virtual QDnsRecordData* clone() const = 0;
28 28
 
29
+            virtual QString toString() const;
30
+
29 31
         protected:
30 32
             bool m_isValid;
31 33
         };
34
+
35
+        QDebug operator<<(QDebug debug, const QDnsRecordData &rd);
32 36
     }
33 37
 }
34 38
 

+ 2
- 0
src/modules/dns-base/includes/dns-base/RecordData/QDnsRecordDataA.h View File

@@ -34,6 +34,8 @@ namespace QDns
34 34
 
35 35
             void setIp(const QHostAddress &ip);
36 36
 
37
+            QString toString() const override;
38
+
37 39
         private:
38 40
             void parse(const QByteArray &packetData, QDataStream &dataStream);
39 41
 

+ 2
- 0
src/modules/dns-base/includes/dns-base/RecordData/QDnsRecordDataAAAA.h View File

@@ -34,6 +34,8 @@ namespace QDns
34 34
 
35 35
             void setIp(const QHostAddress &ip);
36 36
 
37
+            QString toString() const override;
38
+
37 39
         private:
38 40
             void parse(const QByteArray &packetData, QDataStream &dataStream);
39 41
 

+ 2
- 0
src/modules/dns-base/includes/dns-base/RecordData/QDnsRecordDataMX.h View File

@@ -39,6 +39,8 @@ namespace QDns
39 39
 
40 40
             void setMx(const QString &mx);
41 41
 
42
+            QString toString() const override;
43
+
42 44
         private:
43 45
             void parse(const QByteArray &packetData, QDataStream &dataStream);
44 46
 

+ 2
- 0
src/modules/dns-base/includes/dns-base/RecordData/QDnsRecordDataPTR.h View File

@@ -34,6 +34,8 @@ namespace QDns
34 34
 
35 35
             void setHostname(const QString &hostname);
36 36
 
37
+            QString toString() const override;
38
+
37 39
         private:
38 40
             void parse(const QByteArray &packetData, QDataStream &dataStream);
39 41
 

+ 2
- 0
src/modules/dns-base/includes/dns-base/RecordData/QDnsRecordDataRaw.h View File

@@ -30,6 +30,8 @@ namespace QDns
30 30
 
31 31
             void setData(const QByteArray &data);
32 32
 
33
+            QString toString() const override;
34
+
33 35
         private:
34 36
             void parse(const QByteArray &packetData, QDataStream &dataStream);
35 37
 

+ 2
- 0
src/modules/dns-base/includes/dns-base/RecordData/QDnsRecordDataSOA.h View File

@@ -58,6 +58,8 @@ namespace QDns
58 58
 
59 59
             void setMinimumTtl(quint32 minimumTtl);
60 60
 
61
+            QString toString() const override;
62
+
61 63
         private:
62 64
             void parse(const QByteArray &packetData, QDataStream &dataStream);
63 65
 

+ 29
- 0
src/modules/dns-base/src/QDnsHeader.cpp View File

@@ -2,6 +2,8 @@
2 2
 // Created by robin on 1/7/18.
3 3
 //
4 4
 
5
+#include <QDebugStateSaver>
6
+#include <QMetaEnum>
5 7
 #include "dns-base/QDnsHeader.h"
6 8
 
7 9
 namespace QDns
@@ -253,5 +255,32 @@ namespace QDns
253 255
         {
254 256
             m_additionalCount = additionalCount;
255 257
         }
258
+
259
+        QString QDnsHeader::toString() const
260
+        {
261
+            static int headerOpcodeId = QDns::Base::QDnsBase::staticMetaObject.indexOfEnumerator("HeaderOpcode");
262
+            static int headerReplyCodeId = QDns::Base::QDnsBase::staticMetaObject.indexOfEnumerator("HeaderReplyCode");
263
+            auto headerOpcodeStr = QString(QDns::Base::QDnsBase::staticMetaObject.enumerator(headerOpcodeId).valueToKey(getOpcode())).toUpper();
264
+            auto replyCodeStr = QString(QDns::Base::QDnsBase::staticMetaObject.enumerator(headerReplyCodeId).valueToKey(getReplyCode())).toUpper();
265
+            return QString(";; ->>HEADER<<- opcode: ") + headerOpcodeStr + ", status: "
266
+                   + replyCodeStr + ", id: " + QString::number(getId()) + "\n"
267
+                   + ";; flags:"
268
+                   + (!isQuery() ? " qr" : "")
269
+                   + (isAuthoritative() ? " aa" : "")
270
+                   + (isTruncated() ? " tc" : "")
271
+                   + (isRecursionDesired() ? " rd" : "")
272
+                   + (isRecursionAvailable() ? " ra" : "")
273
+                   + (isAnswerAuthenticated() ? " ad" : "")
274
+                   + (isNonAuthenticatedAcceptable() ? " cd" : "")
275
+                   + "; QUERY: " + QString::number(getQueryCount()) + ", ANSWER: " + QString::number(getAnswerCount())
276
+                   + ", AUTHORITY: " + QString::number(getAuthorityCount()) + ", ADDITIONAL: " + QString::number(getAdditionalCount());
277
+        }
278
+
279
+        QDebug operator<<(QDebug debug, const QDnsHeader &h)
280
+        {
281
+            QDebugStateSaver saver(debug);
282
+            debug.noquote() << h.toString();
283
+            return debug;
284
+        }
256 285
     }
257 286
 }

+ 50
- 0
src/modules/dns-base/src/QDnsPacket.cpp View File

@@ -180,6 +180,49 @@ namespace QDns
180 180
             m_header.setAdditionalCount((quint16) m_additionalRecords.length());
181 181
         }
182 182
 
183
+        QString QDnsPacket::toString() const
184
+        {
185
+            auto str = getHeader().toString();
186
+
187
+            if (getHeader().getQueryCount())
188
+            {
189
+                str += "\n;; QUESTION SECTION:\n";
190
+                for (const auto& query : getQueries())
191
+                {
192
+                    str += ";" + query.toString() + "\n";
193
+                }
194
+            }
195
+
196
+            if (getHeader().getAnswerCount())
197
+            {
198
+                str += "\n;; ANSWER SECTION:\n";
199
+                for (const auto& answer : getAnswerRecords())
200
+                {
201
+                    str += answer.toString() + "\n";
202
+                }
203
+            }
204
+
205
+            if (getHeader().getAuthorityCount())
206
+            {
207
+                str += "\n;; AUTHORITY SECTION:\n";
208
+                for (const auto& answer : getAuthorityRecords())
209
+                {
210
+                    str += answer.toString() + "\n";
211
+                }
212
+            }
213
+
214
+            if (getHeader().getAdditionalCount())
215
+            {
216
+                str += "\n;; ADDITIONAL SECTION:\n";
217
+                for (const auto& answer : getAdditionalRecords())
218
+                {
219
+                    str += answer.toString() + "\n";
220
+                }
221
+            }
222
+
223
+            return str;
224
+        }
225
+
183 226
         QDnsPacket QDnsPacket::makeSimpleQuery(const QString& host, QDnsBase::RecordType type)
184 227
         {
185 228
             QDns::Base::QDnsPacket packet;
@@ -194,5 +237,12 @@ namespace QDns
194 237
             packet.setQueries(QList<QDns::Base::QDnsQuery>() << query);
195 238
             return packet;
196 239
         }
240
+
241
+        QDebug operator<<(QDebug debug, const QDnsPacket &p)
242
+        {
243
+            QDebugStateSaver saver(debug);
244
+            debug.noquote() << p.toString();
245
+            return debug;
246
+        }
197 247
     }
198 248
 }

+ 18
- 0
src/modules/dns-base/src/QDnsQuery.cpp View File

@@ -2,6 +2,8 @@
2 2
 // Created by robin on 1/8/18.
3 3
 //
4 4
 
5
+#include <QDebugStateSaver>
6
+#include <QMetaEnum>
5 7
 #include "dns-base/QDnsLabel.h"
6 8
 #include "dns-base/QDnsQuery.h"
7 9
 
@@ -93,5 +95,21 @@ namespace QDns
93 95
         {
94 96
             m_class = aClass;
95 97
         }
98
+
99
+        QString QDnsQuery::toString() const
100
+        {
101
+            static int recordClassId = QDns::Base::QDnsBase::staticMetaObject.indexOfEnumerator("RecordClass");
102
+            static int recordTypeId = QDns::Base::QDnsBase::staticMetaObject.indexOfEnumerator("RecordType");
103
+            auto recordClassStr = QString(QDns::Base::QDnsBase::staticMetaObject.enumerator(recordClassId).valueToKey(getClass())).toUpper();
104
+            auto recordTypeStr = QString(QDns::Base::QDnsBase::staticMetaObject.enumerator(recordTypeId).valueToKey(getType())).toUpper();
105
+            return getName() + "\t" + recordClassStr + "\t" + recordTypeStr;
106
+        }
107
+
108
+        QDebug operator<<(QDebug debug, const QDnsQuery &q)
109
+        {
110
+            QDebugStateSaver saver(debug);
111
+            debug.noquote() << q.toString();
112
+            return debug;
113
+        }
96 114
     }
97 115
 }

+ 54
- 7
src/modules/dns-base/src/QDnsResourceRecord.cpp View File

@@ -2,6 +2,12 @@
2 2
 // Created by robin on 1/10/18.
3 3
 //
4 4
 
5
+#include <QMetaEnum>
6
+#include "dns-base/RecordData/QDnsRecordDataA.h"
7
+#include "dns-base/RecordData/QDnsRecordDataAAAA.h"
8
+#include "dns-base/RecordData/QDnsRecordDataMX.h"
9
+#include "dns-base/RecordData/QDnsRecordDataPTR.h"
10
+#include "dns-base/RecordData/QDnsRecordDataSOA.h"
5 11
 #include "dns-base/RecordData/QDnsRecordDataRaw.h"
6 12
 #include "dns-base/QDnsLabel.h"
7 13
 #include "dns-base/QDnsResourceRecord.h"
@@ -75,7 +81,32 @@ namespace QDns
75 81
                     dataStream.readRawData(data, length);
76 82
                     QByteArray byteArray(data, length);
77 83
                     QDataStream dataStream2(byteArray);
78
-                    m_data.reset(new QDnsRecordDataRaw(packetData, dataStream2));
84
+                    QDnsRecordData* recordData = nullptr;
85
+                    if (m_type == QDns::Base::QDnsBase::RecordType::A)
86
+                    {
87
+                        recordData = new QDnsRecordDataA(packetData, dataStream2);
88
+                    }
89
+                    else if (m_type == QDns::Base::QDnsBase::RecordType::AAAA)
90
+                    {
91
+                        recordData = new QDnsRecordDataAAAA(packetData, dataStream2);
92
+                    }
93
+                    else if (m_type == QDns::Base::QDnsBase::RecordType::MX)
94
+                    {
95
+                        recordData = new QDnsRecordDataMX(packetData, dataStream2);
96
+                    }
97
+                    else if (m_type == QDns::Base::QDnsBase::RecordType::PTR)
98
+                    {
99
+                        recordData = new QDnsRecordDataPTR(packetData, dataStream2);
100
+                    }
101
+                    else if (m_type == QDns::Base::QDnsBase::RecordType::SOA)
102
+                    {
103
+                        recordData = new QDnsRecordDataSOA(packetData, dataStream2);
104
+                    }
105
+                    else
106
+                    {
107
+                        recordData = new QDnsRecordDataRaw(packetData, dataStream2);
108
+                    }
109
+                    m_data.reset(recordData);
79 110
                 }
80 111
             }
81 112
         }
@@ -117,22 +148,22 @@ namespace QDns
117 148
             m_name = name;
118 149
         }
119 150
 
120
-        quint16 QDnsResourceRecord::getType() const
151
+        QDnsBase::RecordType QDnsResourceRecord::getType() const
121 152
         {
122
-            return m_type;
153
+            return (QDnsBase::RecordType) m_type;
123 154
         }
124 155
 
125
-        void QDnsResourceRecord::setType(quint16 type)
156
+        void QDnsResourceRecord::setType(QDnsBase::RecordType type)
126 157
         {
127 158
             m_type = type;
128 159
         }
129 160
 
130
-        quint16 QDnsResourceRecord::getClass() const
161
+        QDnsBase::RecordClass QDnsResourceRecord::getClass() const
131 162
         {
132
-            return m_class;
163
+            return (QDnsBase::RecordClass) m_class;
133 164
         }
134 165
 
135
-        void QDnsResourceRecord::setClass(quint16 aClass)
166
+        void QDnsResourceRecord::setClass(QDnsBase::RecordClass aClass)
136 167
         {
137 168
             m_class = aClass;
138 169
         }
@@ -156,5 +187,21 @@ namespace QDns
156 187
         {
157 188
             m_data.reset(data);
158 189
         }
190
+
191
+        QString QDnsResourceRecord::toString() const
192
+        {
193
+            static int recordClassId = QDns::Base::QDnsBase::staticMetaObject.indexOfEnumerator("RecordClass");
194
+            static int recordTypeId = QDns::Base::QDnsBase::staticMetaObject.indexOfEnumerator("RecordType");
195
+            auto recordClassStr = QString(QDns::Base::QDnsBase::staticMetaObject.enumerator(recordClassId).valueToKey(getClass())).toUpper();
196
+            auto recordTypeStr = QString(QDns::Base::QDnsBase::staticMetaObject.enumerator(recordTypeId).valueToKey(getType())).toUpper();
197
+            return getName() + "\t" + QString::number(getTtl()) + "\t" + recordClassStr + "\t" + recordTypeStr + "\t" + getData()->toString();
198
+        }
199
+
200
+        QDebug operator<<(QDebug debug, const QDnsResourceRecord &rr)
201
+        {
202
+            QDebugStateSaver saver(debug);
203
+            debug.noquote() << rr.toString();
204
+            return debug;
205
+        }
159 206
     }
160 207
 }

+ 13
- 0
src/modules/dns-base/src/RecordData/QDnsRecordData.cpp View File

@@ -2,6 +2,7 @@
2 2
 // Created by robin on 1/12/18.
3 3
 //
4 4
 
5
+#include <QDebugStateSaver>
5 6
 #include "dns-base/RecordData/QDnsRecordData.h"
6 7
 
7 8
 namespace QDns
@@ -17,5 +18,17 @@ namespace QDns
17 18
         {
18 19
             return m_isValid;
19 20
         }
21
+
22
+        QString QDnsRecordData::toString() const
23
+        {
24
+            return "NOT_IMPLEMENTED";
25
+        }
26
+
27
+        QDebug operator<<(QDebug debug, const QDnsRecordData &rd)
28
+        {
29
+            QDebugStateSaver saver(debug);
30
+            debug.noquote().nospace() << rd.toString();
31
+            return debug;
32
+        }
20 33
     }
21 34
 }

+ 5
- 0
src/modules/dns-base/src/RecordData/QDnsRecordDataA.cpp View File

@@ -71,5 +71,10 @@ namespace QDns
71 71
         {
72 72
             m_ip = ip;
73 73
         }
74
+
75
+        QString QDnsRecordDataA::toString() const
76
+        {
77
+            return getIp().toString();
78
+        }
74 79
     }
75 80
 }

+ 5
- 0
src/modules/dns-base/src/RecordData/QDnsRecordDataAAAA.cpp View File

@@ -80,5 +80,10 @@ namespace QDns
80 80
         {
81 81
             m_ip = ip;
82 82
         }
83
+
84
+        QString QDnsRecordDataAAAA::toString() const
85
+        {
86
+            return getIp().toString();
87
+        }
83 88
     }
84 89
 }

+ 5
- 0
src/modules/dns-base/src/RecordData/QDnsRecordDataMX.cpp View File

@@ -87,5 +87,10 @@ namespace QDns
87 87
         {
88 88
             m_mx = mx;
89 89
         }
90
+
91
+        QString QDnsRecordDataMX::toString() const
92
+        {
93
+            return QString::number(getPreference()) + " " + getMx();
94
+        }
90 95
     }
91 96
 }

+ 5
- 0
src/modules/dns-base/src/RecordData/QDnsRecordDataPTR.cpp View File

@@ -74,5 +74,10 @@ namespace QDns
74 74
         {
75 75
             m_hostname = hostname;
76 76
         }
77
+
78
+        QString QDnsRecordDataPTR::toString() const
79
+        {
80
+            return getHostname();
81
+        }
77 82
     }
78 83
 }

+ 5
- 0
src/modules/dns-base/src/RecordData/QDnsRecordDataRaw.cpp View File

@@ -68,5 +68,10 @@ namespace QDns
68 68
         {
69 69
             m_data = data;
70 70
         }
71
+
72
+        QString QDnsRecordDataRaw::toString() const
73
+        {
74
+            return m_data.toHex();
75
+        }
71 76
     }
72 77
 }

+ 7
- 0
src/modules/dns-base/src/RecordData/QDnsRecordDataSOA.cpp View File

@@ -162,5 +162,12 @@ namespace QDns
162 162
         {
163 163
             m_minimumTtl = minimumTtl;
164 164
         }
165
+
166
+        QString QDnsRecordDataSOA::toString() const
167
+        {
168
+            return getPrimaryNs() + " " + getAdminMb() + " " + QString::number(getSerialNumber())
169
+                   + " " + QString::number(getRefreshInterval()) + " " + QString::number(getRetryInterval())
170
+                   + " " + QString::number(getExpirationLimit()) + " " + QString::number(getMinimumTtl());
171
+        }
165 172
     }
166 173
 }

Loading…
Cancel
Save