123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- //
- // Created by robin on 2/2/18.
- //
-
- #ifndef QDNSAGG_QDNSCLIENT_H
- #define QDNSAGG_QDNSCLIENT_H
-
- #include <QObject>
- #include <QHostAddress>
- #include "dns-base/QDnsPacket.h"
-
- namespace QDns
- {
- namespace Client
- {
- class QDnsClient : public QObject
- {
- Q_OBJECT
- public:
- enum ClientState
- {
- Disconnected = 0,
- Connecting = 1,
- Connected = 2,
- Disconnecting = 3
- };
- Q_ENUM(ClientState)
-
- enum ErrorCode
- {
- Unknown = 0,
- Timeout = 1,
- InvalidData = 2,
- UnknownId = 3,
- NotAnswer = 4,
- SocketError = 5,
- NotConnected = 6
- };
- Q_ENUM(ErrorCode)
-
- struct OnStateChangedParams
- {
- quint64 reserved;
- ClientState state;
- };
-
- struct OnAnswerParams
- {
- quint64 reserved;
- QDns::Base::QDnsPacket query;
- QDns::Base::QDnsPacket answer;
- QHostAddress host;
- quint16 port;
- };
-
- struct OnErrorParams
- {
- quint64 reserved;
- ErrorCode error;
- QAbstractSocket::SocketError socketError;
- QDns::Base::QDnsPacket query;
- QByteArray data;
- QDns::Base::QDnsPacket answer;
- QHostAddress host;
- quint16 port;
- };
-
- explicit QDnsClient(const QHostAddress& host, quint16 port = 53, QObject* parent = nullptr);
-
- const QHostAddress &getHost() const;
-
- quint16 getPort() const;
-
- quint32 getQueryTimeout() const;
-
- void setQueryTimeout(quint32 queryTimeout);
-
- ClientState getState() const;
-
- signals:
- void onStateChanged(OnStateChangedParams params);
- void onAnswer(OnAnswerParams params);
- void onError(OnErrorParams params);
-
- public slots:
- virtual void connectToHost() = 0;
- virtual void query(QDns::Base::QDnsPacket packet);
- virtual void disconnectFromHost() = 0;
-
- protected:
- struct ProcessDataParams
- {
- QByteArray data;
- QHostAddress senderAddress;
- quint16 senderPort;
- };
-
- virtual void doQuery(QDns::Base::QDnsPacket packet) = 0;
-
- void processData(ProcessDataParams params);
-
- void setState(ClientState state);
-
- QHostAddress m_host;
-
- quint16 m_port;
-
- quint32 m_queryTimeout;
-
- QMap<quint16, QDns::Base::QDnsPacket> m_pendingQueries;
-
- ClientState m_state;
- };
- }
- }
-
- #endif //QDNSAGG_QDNSCLIENT_H
|