mirror of
https://github.com/MatsuriDayo/nekoray.git
synced 2025-12-17 20:44:38 +03:00
feat: add ducksoft link for VMess
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
#include "QUICBean.hpp"
|
||||
#include "db/ProxyEntity.hpp"
|
||||
#include "fmt/includes.h"
|
||||
|
||||
@@ -99,22 +98,69 @@ namespace NekoGui_fmt {
|
||||
}
|
||||
|
||||
QString VMessBean::ToShareLink() {
|
||||
QJsonObject N{
|
||||
{"v", "2"},
|
||||
{"ps", name},
|
||||
{"add", serverAddress},
|
||||
{"port", Int2String(serverPort)},
|
||||
{"id", uuid},
|
||||
{"aid", Int2String(aid)},
|
||||
{"net", stream->network},
|
||||
{"host", stream->host},
|
||||
{"path", stream->path},
|
||||
{"type", stream->header_type},
|
||||
{"scy", security},
|
||||
{"tls", stream->security == "tls" ? "tls" : ""},
|
||||
{"sni", stream->sni},
|
||||
};
|
||||
return "vmess://" + QJsonObject2QString(N, true).toUtf8().toBase64();
|
||||
if (NekoGui::dataStore->old_share_link_format) {
|
||||
// v2rayN format
|
||||
QJsonObject N{
|
||||
{"v", "2"},
|
||||
{"ps", name},
|
||||
{"add", serverAddress},
|
||||
{"port", Int2String(serverPort)},
|
||||
{"id", uuid},
|
||||
{"aid", Int2String(aid)},
|
||||
{"net", stream->network},
|
||||
{"host", stream->host},
|
||||
{"path", stream->path},
|
||||
{"type", stream->header_type},
|
||||
{"scy", security},
|
||||
{"tls", stream->security == "tls" ? "tls" : ""},
|
||||
{"sni", stream->sni},
|
||||
};
|
||||
return "vmess://" + QJsonObject2QString(N, true).toUtf8().toBase64();
|
||||
} else {
|
||||
// ducksoft format
|
||||
QUrl url;
|
||||
QUrlQuery query;
|
||||
url.setScheme("vmess");
|
||||
url.setUserName(uuid);
|
||||
url.setHost(serverAddress);
|
||||
url.setPort(serverPort);
|
||||
if (!name.isEmpty()) url.setFragment(name);
|
||||
|
||||
query.addQueryItem("encryption", security);
|
||||
|
||||
// security
|
||||
auto security = stream->security;
|
||||
if (security == "tls" && !stream->reality_pbk.trimmed().isEmpty()) security = "reality";
|
||||
query.addQueryItem("security", security);
|
||||
|
||||
if (!stream->sni.isEmpty()) query.addQueryItem("sni", stream->sni);
|
||||
if (stream->allow_insecure) query.addQueryItem("allowInsecure", "1");
|
||||
if (!stream->utlsFingerprint.isEmpty()) query.addQueryItem("fp", stream->utlsFingerprint);
|
||||
|
||||
if (security == "reality") {
|
||||
query.addQueryItem("pbk", stream->reality_pbk);
|
||||
if (!stream->reality_sid.isEmpty()) query.addQueryItem("sid", stream->reality_sid);
|
||||
if (!stream->reality_spx.isEmpty()) query.addQueryItem("spx", stream->reality_spx);
|
||||
}
|
||||
|
||||
// type
|
||||
query.addQueryItem("type", stream->network);
|
||||
|
||||
if (stream->network == "ws" || stream->network == "http") {
|
||||
if (!stream->path.isEmpty()) query.addQueryItem("path", stream->path);
|
||||
if (!stream->host.isEmpty()) query.addQueryItem("host", stream->host);
|
||||
} else if (stream->network == "grpc") {
|
||||
if (!stream->path.isEmpty()) query.addQueryItem("serviceName", stream->path);
|
||||
} else if (stream->network == "tcp") {
|
||||
if (stream->header_type == "http") {
|
||||
query.addQueryItem("headerType", "http");
|
||||
query.addQueryItem("host", stream->host);
|
||||
}
|
||||
}
|
||||
|
||||
url.setQuery(query);
|
||||
return url.toString(QUrl::FullyEncoded);
|
||||
}
|
||||
}
|
||||
|
||||
QString NaiveBean::ToShareLink() {
|
||||
|
||||
Reference in New Issue
Block a user