mirror of
https://github.com/bolucat/Archive.git
synced 2025-09-27 04:30:12 +08:00
80 lines
2.7 KiB
C++
80 lines
2.7 KiB
C++
#include "includes.h"
|
|
|
|
#include <QApplication>
|
|
#include <QHostInfo>
|
|
#include <QUrl>
|
|
|
|
namespace NekoGui_fmt {
|
|
AbstractBean::AbstractBean(int version) {
|
|
this->version = version;
|
|
_add(new configItem("_v", &this->version, itemType::integer));
|
|
_add(new configItem("name", &name, itemType::string));
|
|
_add(new configItem("addr", &serverAddress, itemType::string));
|
|
_add(new configItem("port", &serverPort, itemType::integer));
|
|
_add(new configItem("c_cfg", &custom_config, itemType::string));
|
|
_add(new configItem("c_out", &custom_outbound, itemType::string));
|
|
}
|
|
|
|
QString AbstractBean::ToNekorayShareLink(const QString &type) {
|
|
auto b = ToJson();
|
|
QUrl url;
|
|
url.setScheme("nekoray");
|
|
url.setHost(type);
|
|
url.setFragment(QJsonObject2QString(b, true)
|
|
.toUtf8()
|
|
.toBase64(QByteArray::Base64UrlEncoding));
|
|
return url.toString();
|
|
}
|
|
|
|
QString AbstractBean::DisplayAddress() {
|
|
return ::DisplayAddress(serverAddress, serverPort);
|
|
}
|
|
|
|
QString AbstractBean::DisplayName() {
|
|
if (name.isEmpty()) {
|
|
return DisplayAddress();
|
|
}
|
|
return name;
|
|
}
|
|
|
|
QString AbstractBean::DisplayTypeAndName() {
|
|
return QStringLiteral("[%1] %2").arg(DisplayType(), DisplayName());
|
|
}
|
|
|
|
void AbstractBean::ResolveDomainToIP(const std::function<void()> &onFinished) {
|
|
bool noResolve = false;
|
|
if (dynamic_cast<ChainBean *>(this) != nullptr) noResolve = true;
|
|
if (dynamic_cast<CustomBean *>(this) != nullptr) noResolve = true;
|
|
if (dynamic_cast<NaiveBean *>(this) != nullptr) noResolve = true;
|
|
if (IsIpAddress(serverAddress)) noResolve = true;
|
|
if (noResolve) {
|
|
onFinished();
|
|
return;
|
|
}
|
|
|
|
#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0) // TODO older QT
|
|
QHostInfo::lookupHost(serverAddress, QApplication::instance(), [=](const QHostInfo &host) {
|
|
auto addr = host.addresses();
|
|
if (!addr.isEmpty()) {
|
|
auto domain = serverAddress;
|
|
auto stream = GetStreamSettings(this);
|
|
|
|
// replace serverAddress
|
|
serverAddress = addr.first().toString();
|
|
|
|
// replace ws tls
|
|
if (stream != nullptr) {
|
|
if (stream->security == "tls" && stream->sni.isEmpty()) {
|
|
stream->sni = domain;
|
|
}
|
|
if (stream->network == "ws" && stream->host.isEmpty()) {
|
|
stream->host = domain;
|
|
}
|
|
}
|
|
}
|
|
onFinished();
|
|
});
|
|
#endif
|
|
}
|
|
} // namespace NekoGui_fmt
|