#pragma once #include #include "DialFields.h" #include "multiplex.h" #include "TLS.h" #include "transport.h" #include "include/configs/baseConfig.h" namespace Configs { class outbound : public baseConfig { public: QString name; QString server; int server_port = 0; bool invalid = false; std::shared_ptr dialFields = std::make_shared(); outbound() { _add(new configItem("name", &name, string)); _add(new configItem("server", &server, string)); _add(new configItem("server_port", &server_port, integer)); _add(new configItem("dial_fields", dynamic_cast(dialFields.get()), jsonStore)); } void ResolveDomainToIP(const std::function &onFinished) { bool noResolve = false; if (IsIpAddress(server) || server.isEmpty()) noResolve = true; if (noResolve) { onFinished(); return; } QHostInfo::lookupHost(server, QApplication::instance(), [=, this](const QHostInfo &host) { auto addrs = host.addresses(); if (!addrs.isEmpty()) server = addrs.first().toString(); onFinished(); }); } virtual QString GetAddress() { return server; } virtual QString DisplayAddress() { return ::DisplayAddress(server, server_port); } virtual QString DisplayName() { if (name.isEmpty()) { return DisplayAddress(); } return name; } virtual QString DisplayType() { return {}; }; QString DisplayTypeAndName() { return QString("[%1] %2").arg(DisplayType(), DisplayName()); } virtual bool HasMux() { return false; } virtual bool HasTransport() { return false; } virtual bool HasTLS() { return false; } virtual bool MustTLS() { return false; } virtual std::shared_ptr GetTLS() { return std::make_shared(); } virtual std::shared_ptr GetTransport() { return std::make_shared(); } virtual std::shared_ptr GetMux() { return std::make_shared(); } virtual bool IsEndpoint() { return false; }; QString ExportJsonLink() { auto json = ExportToJson(); QUrl url; url.setScheme("json"); url.setHost("throne"); url.setFragment(QJsonObject2QString(json, true) .toUtf8() .toBase64(QByteArray::Base64UrlEncoding)); return url.toString(); } // baseConfig overrides bool ParseFromLink(const QString& link) override; bool ParseFromJson(const QJsonObject& object) override; QString ExportToLink() override; QJsonObject ExportToJson() override; BuildResult Build() override; }; }