/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef SERVER_H #define SERVER_H #include #include #include class QJsonObject; class Server final { public: Server(); Server(const QString& countryCode, const QString& cityName); Server(const Server& other); Server& operator=(const Server& other); ~Server(); [[nodiscard]] bool fromJson(const QJsonObject& obj); bool fromMultihop(const Server& exit, const Server& entry); static const Server& weightChooser(const QList& servers); bool initialized() const { return !m_hostname.isEmpty(); } const QString& hostname() const { return m_hostname; } const QString& ipv4AddrIn() const { return m_ipv4AddrIn; } const QString& ipv4Gateway() const { return m_ipv4Gateway; } const QString& ipv6AddrIn() const { return m_ipv6AddrIn; } const QString& ipv6Gateway() const { return m_ipv6Gateway; } const QString& publicKey() const { return m_publicKey; } const QString& socksName() const { return m_socksName; } uint32_t weight() const { return m_weight; } uint32_t choosePort() const; uint32_t multihopPort() const { return m_multihopPort; } const QString& countryCode() const { return m_countryCode; } const QString& cityName() const { return m_cityName; } bool forcePort(uint32_t port); bool operator==(const Server& other) const { return m_publicKey == other.m_publicKey; } // Allow checking against QString, so we can easily search a QList for // a public key. bool operator==(const QString& otherPublicKey) const { return m_publicKey == otherPublicKey; } private: QString m_hostname; QString m_ipv4AddrIn; QString m_ipv4Gateway; QString m_ipv6AddrIn; QString m_ipv6Gateway; QList> m_portRanges; QString m_publicKey; QString m_socksName; uint32_t m_weight = 0; uint32_t m_multihopPort = 0; QString m_countryCode; QString m_cityName; }; #endif // SERVER_H