You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

QDnsClient.h 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. //
  2. // Created by robin on 2/2/18.
  3. //
  4. #ifndef QDNSAGG_QDNSCLIENT_H
  5. #define QDNSAGG_QDNSCLIENT_H
  6. #include <QObject>
  7. #include <QHostAddress>
  8. #include "dns-base/QDnsPacket.h"
  9. namespace QDns
  10. {
  11. namespace Client
  12. {
  13. class QDnsClient : public QObject
  14. {
  15. Q_OBJECT
  16. public:
  17. enum ClientState
  18. {
  19. Disconnected = 0,
  20. Connecting = 1,
  21. Connected = 2,
  22. Disconnecting = 3
  23. };
  24. Q_ENUM(ClientState)
  25. enum ErrorCode
  26. {
  27. Unknown = 0,
  28. Timeout = 1,
  29. InvalidData = 2,
  30. UnknownId = 3,
  31. NotAnswer = 4,
  32. SocketError = 5,
  33. NotConnected = 6
  34. };
  35. Q_ENUM(ErrorCode)
  36. struct OnStateChangedParams
  37. {
  38. quint64 reserved;
  39. ClientState state;
  40. };
  41. struct OnAnswerParams
  42. {
  43. quint64 reserved;
  44. QDns::Base::QDnsPacket query;
  45. QDns::Base::QDnsPacket answer;
  46. QHostAddress host;
  47. quint16 port;
  48. };
  49. struct OnErrorParams
  50. {
  51. quint64 reserved;
  52. ErrorCode error;
  53. QAbstractSocket::SocketError socketError;
  54. QDns::Base::QDnsPacket query;
  55. QByteArray data;
  56. QDns::Base::QDnsPacket answer;
  57. QHostAddress host;
  58. quint16 port;
  59. };
  60. explicit QDnsClient(const QHostAddress& host, quint16 port = 53, QObject* parent = nullptr);
  61. const QHostAddress &getHost() const;
  62. quint16 getPort() const;
  63. quint32 getQueryTimeout() const;
  64. void setQueryTimeout(quint32 queryTimeout);
  65. ClientState getState() const;
  66. signals:
  67. void onStateChanged(OnStateChangedParams params);
  68. void onAnswer(OnAnswerParams params);
  69. void onError(OnErrorParams params);
  70. public slots:
  71. virtual void connectToHost() = 0;
  72. virtual void query(QDns::Base::QDnsPacket packet);
  73. virtual void disconnectFromHost() = 0;
  74. protected:
  75. struct ProcessDataParams
  76. {
  77. QByteArray data;
  78. QHostAddress senderAddress;
  79. quint16 senderPort;
  80. };
  81. virtual void doQuery(QDns::Base::QDnsPacket packet) = 0;
  82. void processData(ProcessDataParams params);
  83. void setState(ClientState state);
  84. QHostAddress m_host;
  85. quint16 m_port;
  86. quint32 m_queryTimeout;
  87. QMap<quint16, QDns::Base::QDnsPacket> m_pendingQueries;
  88. ClientState m_state;
  89. };
  90. }
  91. }
  92. #endif //QDNSAGG_QDNSCLIENT_H