connection_resolving.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. This file is part of Telegram Desktop,
  3. the official desktop application for the Telegram messaging service.
  4. For license and copyright information please follow this link:
  5. https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
  6. */
  7. #pragma once
  8. #include "mtproto/mtproto_auth_key.h"
  9. #include "mtproto/connection_abstract.h"
  10. #include "base/timer.h"
  11. namespace MTP {
  12. namespace details {
  13. class ResolvingConnection : public AbstractConnection {
  14. public:
  15. ResolvingConnection(
  16. not_null<Instance*> instance,
  17. QThread *thread,
  18. const ProxyData &proxy,
  19. ConnectionPointer &&child);
  20. ConnectionPointer clone(const ProxyData &proxy) override;
  21. crl::time pingTime() const override;
  22. crl::time fullConnectTimeout() const override;
  23. void sendData(mtpBuffer &&buffer) override;
  24. void disconnectFromServer() override;
  25. void connectToServer(
  26. const QString &address,
  27. int port,
  28. const bytes::vector &protocolSecret,
  29. int16 protocolDcId,
  30. bool protocolForFiles) override;
  31. bool isConnected() const override;
  32. int32 debugState() const override;
  33. QString transport() const override;
  34. QString tag() const override;
  35. private:
  36. void setChild(ConnectionPointer &&child);
  37. bool refreshChild();
  38. void emitError(int errorCode);
  39. void domainResolved(
  40. const QString &host,
  41. const QStringList &ips,
  42. qint64 expireAt);
  43. void handleError(int errorCode);
  44. void handleConnected();
  45. void handleDisconnected();
  46. void handleReceivedData();
  47. not_null<Instance*> _instance;
  48. ConnectionPointer _child;
  49. bool _connected = false;
  50. int _ipIndex = -1;
  51. QString _address;
  52. int _port = 0;
  53. bytes::vector _protocolSecret;
  54. int16 _protocolDcId = 0;
  55. bool _protocolForFiles = false;
  56. base::Timer _timeoutTimer;
  57. };
  58. } // namespace details
  59. } // namespace MTP