mirror of
https://github.com/MatsuriDayo/nekoray.git
synced 2025-12-17 20:44:38 +03:00
feat: add sharelink for TUIC
This commit is contained in:
committed by
HystericalDragon
parent
1c6fe29ea6
commit
e6fc84e97b
@@ -198,8 +198,23 @@ namespace NekoGui_fmt {
|
|||||||
if (streamReceiveWindow > 0) q.addQueryItem("recv_window_conn", Int2String(streamReceiveWindow));
|
if (streamReceiveWindow > 0) q.addQueryItem("recv_window_conn", Int2String(streamReceiveWindow));
|
||||||
if (!q.isEmpty()) url.setQuery(q);
|
if (!q.isEmpty()) url.setQuery(q);
|
||||||
if (!name.isEmpty()) url.setFragment(name);
|
if (!name.isEmpty()) url.setFragment(name);
|
||||||
|
|
||||||
} else if (proxy_type == proxy_TUIC) {
|
} else if (proxy_type == proxy_TUIC) {
|
||||||
// TODO std link
|
url.setScheme("tuic");
|
||||||
|
url.setUserName(uuid);
|
||||||
|
url.setPassword(password);
|
||||||
|
url.setHost(serverAddress);
|
||||||
|
url.setPort(serverPort);
|
||||||
|
|
||||||
|
QUrlQuery q;
|
||||||
|
if (!congestionControl.isEmpty()) q.addQueryItem("congestion_control", congestionControl);
|
||||||
|
if (!alpn.isEmpty()) q.addQueryItem("alpn", alpn);
|
||||||
|
if (!sni.isEmpty()) q.addQueryItem("sni", sni);
|
||||||
|
if (!udpRelayMode.isEmpty()) q.addQueryItem("udp_relay_mode", udpRelayMode);
|
||||||
|
if (allowInsecure) q.addQueryItem("allow_insecure", "1");
|
||||||
|
if (disableSni) q.addQueryItem("disable_sni", "1");
|
||||||
|
if (!q.isEmpty()) url.setQuery(q);
|
||||||
|
if (!name.isEmpty()) url.setFragment(name);
|
||||||
}
|
}
|
||||||
return url.toString(QUrl::FullyEncoded);
|
return url.toString(QUrl::FullyEncoded);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -218,12 +218,12 @@ namespace NekoGui_fmt {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool QUICBean::TryParseLink(const QString &link) {
|
bool QUICBean::TryParseLink(const QString &link) {
|
||||||
// https://hysteria.network/docs/uri-scheme/
|
|
||||||
auto url = QUrl(link);
|
auto url = QUrl(link);
|
||||||
auto query = QUrlQuery(url.query());
|
auto query = QUrlQuery(url.query());
|
||||||
if (url.host().isEmpty() || url.port() == -1) return false;
|
if (url.host().isEmpty() || url.port() == -1) return false;
|
||||||
|
|
||||||
if (url.scheme() == "hysteria") {
|
if (url.scheme() == "hysteria") {
|
||||||
|
// https://hysteria.network/docs/uri-scheme/
|
||||||
if (!query.hasQueryItem("upmbps") || !query.hasQueryItem("downmbps")) return false;
|
if (!query.hasQueryItem("upmbps") || !query.hasQueryItem("downmbps")) return false;
|
||||||
|
|
||||||
name = url.fragment();
|
name = url.fragment();
|
||||||
@@ -253,12 +253,28 @@ namespace NekoGui_fmt {
|
|||||||
|
|
||||||
connectionReceiveWindow = query.queryItemValue("recv_window").toInt();
|
connectionReceiveWindow = query.queryItemValue("recv_window").toInt();
|
||||||
streamReceiveWindow = query.queryItemValue("recv_window_conn").toInt();
|
streamReceiveWindow = query.queryItemValue("recv_window_conn").toInt();
|
||||||
} else {
|
|
||||||
// TODO TUIC std link
|
} else if (url.scheme() == "tuic") {
|
||||||
return false;
|
// by daeuniverse
|
||||||
|
// https://github.com/daeuniverse/dae/discussions/182
|
||||||
|
|
||||||
|
name = url.fragment();
|
||||||
|
serverAddress = url.host();
|
||||||
|
if (serverPort == -1) serverPort = 443;
|
||||||
|
serverPort = url.port();
|
||||||
|
|
||||||
|
uuid = url.userName();
|
||||||
|
password = url.password();
|
||||||
|
|
||||||
|
congestionControl = query.queryItemValue("congestion_control");
|
||||||
|
alpn = query.queryItemValue("alpn");
|
||||||
|
sni = query.queryItemValue("sni");
|
||||||
|
udpRelayMode = query.queryItemValue("udp_relay_mode");
|
||||||
|
allowInsecure = query.queryItemValue("allow_insecure") == "1";
|
||||||
|
disableSni = query.queryItemValue("disable_sni") == "1";
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace NekoGui_fmt
|
} // namespace NekoGui_fmt
|
||||||
@@ -133,6 +133,14 @@ namespace NekoGui_sub {
|
|||||||
if (!ok) return;
|
if (!ok) return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TUIC
|
||||||
|
if (str.startsWith("tuic://")) {
|
||||||
|
needFix = false;
|
||||||
|
ent = NekoGui::ProfileManager::NewProxyEntity("tuic");
|
||||||
|
auto ok = ent->QUICBean()->TryParseLink(str);
|
||||||
|
if (!ok) return;
|
||||||
|
}
|
||||||
|
|
||||||
if (ent == nullptr) return;
|
if (ent == nullptr) return;
|
||||||
|
|
||||||
// Fix
|
// Fix
|
||||||
|
|||||||
Reference in New Issue
Block a user