KVIrc 5.2.6
Developer APIs
KviDnsResolver.h
Go to the documentation of this file.
1#ifndef _KVI_DNS_H_
2#define _KVI_DNS_H_
3//=============================================================================
4//
5// File : KviDnsResolver.h
6// Creation date : Sat Jul 21 2000 13:59:11 by Szymon Stefanek
7//
8// This file is part of the KVIrc IRC client distribution
9// Copyright (C) 2000-2010 Szymon Stefanek (pragma at kvirc dot net)
10//
11// This program is FREE software. You can redistribute it and/or
12// modify it under the terms of the GNU General Public License
13// as published by the Free Software Foundation; either version 2
14// of the License, or (at your option) any later version.
15//
16// This program is distributed in the HOPE that it will be USEFUL,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19// See the GNU General Public License for more details.
20//
21// You should have received a copy of the GNU General Public License
22// along with this program. If not, write to the Free Software Foundation,
23// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24//
25//=============================================================================
26
27#include "kvi_settings.h"
28#include "KviError.h"
29#include "KviHeapObject.h"
30
31#include <QObject>
32#include <QString>
33#include <vector>
34
36
38{
39 friend class KviDnsResolver;
41
42protected:
44
45protected:
47 std::vector<QString> m_pHostnameList;
48 std::vector<QString> m_pIpAddressList;
49 QString m_szQuery;
50
51public:
53 {
54 return m_eError;
55 }
56
57 const std::vector<QString> & hostnameList()
58 {
59 return m_pHostnameList;
60 }
61
62 const std::vector<QString> & ipAddressList()
63 {
64 return m_pIpAddressList;
65 }
66
67 const QString & query()
68 {
69 return m_szQuery;
70 }
71
72protected:
74 {
75 m_eError = eError;
76 }
77
78 void setQuery(const QString & szQuery)
79 {
80 m_szQuery = szQuery;
81 }
82
83 void appendHostname(const QString & szHost);
84 void appendAddress(const QString & szAddr);
85};
86
87#include <QObject>
88
89class KVILIB_API KviDnsResolver : public QObject, public KviHeapObject
90{
91 Q_OBJECT
92 Q_PROPERTY(bool blockingDelete READ isRunning)
93public:
96
97public:
99 {
103 };
111
112protected:
116
117public:
118 //
119 // Public interface
120 //
121
122 // Lookup start
123 bool lookup(const QString & szQuery, QueryType type);
124
125 // Current object state
126 State state() { return m_state; };
127
128 // Results (return always non null-data..but valid results only if state() == Success or Failure)
129 KviError::Code error();
130 QString errorString();
131 const QString & hostName();
132 const QString & firstIpAddress();
133 std::size_t hostnameCount();
134 std::size_t ipAddressCount();
135 const std::vector<QString> & hostnameList();
136 const std::vector<QString> & ipAddressList();
137 const QString & query();
138 bool isRunning() const;
139
140protected:
141 bool event(QEvent * e) override;
142
143private:
144 KviDnsResolverResult * result();
145signals:
147};
148
149//
150// INTERNAL CLASSES
151//
152
153#include <QEvent>
154#include <QThread>
155
156#include "kvi_debug.h"
157
158class KviDnsResolverThreadEvent : public QEvent
159{
160private:
162
163public:
165 : QEvent(QEvent::User), m_pResult(pResult)
166 {
167 KVI_ASSERT(pResult);
168 }
169
171 {
172 delete m_pResult;
173 }
174
175public:
177 {
179 m_pResult = nullptr;
180 return pResult;
181 }
182};
183
184class KviDnsResolverThread : public QThread
185{
186 friend class KviDnsResolver;
187
188protected:
191
192protected:
193 QString m_szQuery;
196
197public:
198 void setQuery(const QString & szQuery, KviDnsResolver::QueryType type)
199 {
200 m_szQuery = szQuery;
201 m_queryType = type;
202 };
203
204protected:
205 void run() override;
208};
209
210#endif //_KVI_DNS_H_
const QString & firstIpAddress()
Error List.
Heap Object.
Definition KviDnsResolver.h:38
std::vector< QString > m_pHostnameList
Definition KviDnsResolver.h:47
friend class KviDnsResolver
Definition KviDnsResolver.h:39
KviError::Code error()
Definition KviDnsResolver.h:52
QString m_szQuery
Definition KviDnsResolver.h:49
KviError::Code m_eError
Definition KviDnsResolver.h:46
friend class KviDnsResolverThread
Definition KviDnsResolver.h:40
void setQuery(const QString &szQuery)
Definition KviDnsResolver.h:78
const QString & query()
Definition KviDnsResolver.h:67
std::vector< QString > m_pIpAddressList
Definition KviDnsResolver.h:48
KviDnsResolverResult()
Definition KviDnsResolver.cpp:60
const std::vector< QString > & hostnameList()
Definition KviDnsResolver.h:57
void setError(KviError::Code eError)
Definition KviDnsResolver.h:73
const std::vector< QString > & ipAddressList()
Definition KviDnsResolver.h:62
KviDnsResolverThreadEvent(KviDnsResolverResult *pResult)
Definition KviDnsResolver.h:164
~KviDnsResolverThreadEvent()
Definition KviDnsResolver.h:170
KviDnsResolverResult * releaseResult()
Definition KviDnsResolver.h:176
KviDnsResolverResult * m_pResult
Definition KviDnsResolver.h:161
Definition KviDnsResolver.h:185
friend class KviDnsResolver
Definition KviDnsResolver.h:186
void setQuery(const QString &szQuery, KviDnsResolver::QueryType type)
Definition KviDnsResolver.h:198
KviDnsResolver::QueryType m_queryType
Definition KviDnsResolver.h:194
KviDnsResolver * m_pParentDns
Definition KviDnsResolver.h:195
KviDnsResolverThread(KviDnsResolver *pDns)
Definition KviDnsResolver.cpp:75
void run() override
Definition KviDnsResolver.cpp:149
void postDnsError(KviDnsResolverResult *pDns, KviError::Code error)
Definition KviDnsResolver.cpp:141
QString m_szQuery
Definition KviDnsResolver.h:193
KviError::Code translateDnsError(int iErr)
Definition KviDnsResolver.cpp:84
bool blockingDelete
Definition KviDnsResolver.h:92
bool isRunning() const
Definition KviDnsResolver.cpp:396
QueryType
Definition KviDnsResolver.h:99
@ IPv6
Definition KviDnsResolver.h:101
@ IPv4
Definition KviDnsResolver.h:100
@ Any
Definition KviDnsResolver.h:102
State
Definition KviDnsResolver.h:105
@ Idle
Definition KviDnsResolver.h:106
@ Failure
Definition KviDnsResolver.h:108
@ Busy
Definition KviDnsResolver.h:107
@ Success
Definition KviDnsResolver.h:109
KviDnsResolverThread * m_pSlaveThread
Definition KviDnsResolver.h:113
KviDnsResolverResult * m_pDnsResult
Definition KviDnsResolver.h:114
void lookupDone(KviDnsResolver *)
State m_state
Definition KviDnsResolver.h:115
bool lookup(const QString &szQuery, QueryType type)
Definition KviDnsResolver.cpp:401
KviDnsResolver()
Definition KviDnsResolver.cpp:376
State state()
Definition KviDnsResolver.h:126
Definition KviHeapObject.h:119
#define e
Definition detector.cpp:70
This file contains the definition of the debug macros;.
#define KVI_ASSERT(condition)
GNUC
Definition kvi_debug.h:137
This file contains compile time settings.
#define KVILIB_API
Definition kvi_settings.h:124
QString szHost
Definition libkvisetup.cpp:48
Code
Contains all error codes.
Definition KviError.h:48