gui: VLESS Flow

This commit is contained in:
arm64v8a
2023-04-09 12:58:23 +09:00
parent 4fbb13248a
commit d6de7e4aff
6 changed files with 51 additions and 3 deletions

View File

@@ -125,6 +125,7 @@ namespace NekoRay::fmt {
QJsonObject settings;
if (proxy_type == proxy_VLESS) {
outbound["uuid"] = password.trimmed();
outbound["flow"] = flow;
} else {
outbound["password"] = password;
}

View File

@@ -39,6 +39,7 @@ namespace NekoRay::fmt {
if (!stream->sni.isEmpty()) query.addQueryItem("sni", stream->sni);
if (stream->allow_insecure) query.addQueryItem("allowInsecure", "1");
if (IS_NEKO_BOX && !stream->utlsFingerprint.isEmpty()) query.addQueryItem("fp", stream->utlsFingerprint);
if (security == "reality") {
query.addQueryItem("pbk", stream->reality_pbk);
@@ -60,6 +61,13 @@ namespace NekoRay::fmt {
}
}
// protocol
if (proxy_type == proxy_VLESS) {
if (!flow.isEmpty()) {
query.addQueryItem("flow", flow);
}
}
url.setQuery(query);
return url.toString(QUrl::FullyEncoded);
}

View File

@@ -55,6 +55,7 @@ namespace NekoRay::fmt {
password = url.userName();
if (serverPort == -1) serverPort = 443;
// security
stream->network = GetQueryValue(query, "type", "tcp");
stream->security = GetQueryValue(query, "security", "tls").replace("reality", "tls");
auto sni1 = GetQueryValue(query, "sni");
@@ -64,7 +65,9 @@ namespace NekoRay::fmt {
if (!query.queryItemValue("allowInsecure").isEmpty()) stream->allow_insecure = true;
stream->reality_pbk = GetQueryValue(query, "pbk", "");
stream->reality_sid = GetQueryValue(query, "sid", "");
if (IS_NEKO_BOX) stream->utlsFingerprint = GetQueryValue(query, "fp", "");
// type
if (stream->network == "ws") {
stream->path = GetQueryValue(query, "path", "");
stream->host = GetQueryValue(query, "host", "");
@@ -80,6 +83,11 @@ namespace NekoRay::fmt {
}
}
// protocol
if (proxy_type == proxy_VLESS) {
flow = GetQueryValue(query, "flow", "");
}
return !password.isEmpty();
}

View File

@@ -11,6 +11,7 @@ namespace NekoRay::fmt {
int proxy_type = proxy_Trojan;
QString password = "";
QString flow = "";
QSharedPointer<V2rayStreamSettings> stream = QSharedPointer<V2rayStreamSettings>(new V2rayStreamSettings());
QString custom = "";
@@ -18,6 +19,7 @@ namespace NekoRay::fmt {
explicit TrojanVLESSBean(int _proxy_type) : AbstractBean(0) {
proxy_type = _proxy_type;
_add(new configItem("pass", &password, itemType::string));
_add(new configItem("flow", &flow, itemType::string));
_add(new configItem("stream", dynamic_cast<JsonStore *>(stream.get()), itemType::jsonStore));
_add(new configItem("custom", &custom, itemType::string));
};

View File

@@ -14,12 +14,20 @@ EditTrojanVLESS::~EditTrojanVLESS() {
void EditTrojanVLESS::onStart(QSharedPointer<NekoRay::ProxyEntity> _ent) {
this->ent = _ent;
auto bean = this->ent->TrojanVLESSBean();
if (bean->proxy_type == NekoRay::fmt::TrojanVLESSBean::proxy_VLESS) ui->label->setText("UUID");
if (bean->proxy_type == NekoRay::fmt::TrojanVLESSBean::proxy_VLESS) {
ui->label->setText("UUID");
}
if (!IS_NEKO_BOX || bean->proxy_type != NekoRay::fmt::TrojanVLESSBean::proxy_VLESS) {
ui->flow->hide();
ui->flow_l->hide();
}
ui->password->setText(bean->password);
ui->flow->setCurrentText(bean->flow);
}
bool EditTrojanVLESS::onEnd() {
auto bean = this->ent->TrojanVLESSBean();
bean->password = ui->password->text();
bean->flow = ui->flow->currentText();
return true;
}

View File

@@ -14,6 +14,9 @@
<string notr="true"/>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
<widget class="MyLineEdit" name="password"/>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
@@ -21,8 +24,26 @@
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="MyLineEdit" name="password"/>
<item row="1" column="0">
<widget class="QLabel" name="flow_l">
<property name="text">
<string notr="true">Flow</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="flow">
<item>
<property name="text">
<string notr="true"/>
</property>
</item>
<item>
<property name="text">
<string notr="true">xtls-rprx-vision</string>
</property>
</item>
</widget>
</item>
</layout>
</widget>