diff --git a/web/assets/js/model/xray.js b/web/assets/js/model/xray.js
index 66a5980f..b9c0f2e9 100644
--- a/web/assets/js/model/xray.js
+++ b/web/assets/js/model/xray.js
@@ -1270,14 +1270,26 @@ Inbound.VLESSSettings.Fallback = class extends XrayCommonClass {
};
Inbound.TrojanSettings = class extends Inbound.Settings {
- constructor(protocol, clients=[new Inbound.TrojanSettings.Client()]) {
+ constructor(protocol,
+ clients=[new Inbound.TrojanSettings.Client()],
+ fallbacks=[],) {
super(protocol);
this.clients = clients;
+ this.fallbacks = fallbacks;
+ }
+
+ addTrojanFallback() {
+ this.fallbacks.push(new Inbound.TrojanSettings.Fallback());
+ }
+
+ delTrojanFallback(index) {
+ this.fallbacks.splice(index, 1);
}
toJson() {
return {
clients: Inbound.TrojanSettings.toJsonArray(this.clients),
+ fallbacks: Inbound.TrojanSettings.toJsonArray(this.fallbacks),
};
}
@@ -1286,7 +1298,10 @@ Inbound.TrojanSettings = class extends Inbound.Settings {
for (const c of json.clients) {
clients.push(Inbound.TrojanSettings.Client.fromJson(c));
}
- return new Inbound.TrojanSettings(Protocols.TROJAN, clients);
+ return new Inbound.TrojanSettings(
+ Protocols.TROJAN,
+ clients,
+ Inbound.TrojanSettings.Fallback.fromJson(json.fallbacks),);
}
};
Inbound.TrojanSettings.Client = class extends XrayCommonClass {
@@ -1307,6 +1322,45 @@ Inbound.TrojanSettings.Client = class extends XrayCommonClass {
};
+Inbound.TrojanSettings.Fallback = class extends XrayCommonClass {
+ constructor(name="", alpn='', path='', dest='', xver=0) {
+ super();
+ this.name = name;
+ this.alpn = alpn;
+ this.path = path;
+ this.dest = dest;
+ this.xver = xver;
+ }
+
+ toJson() {
+ let xver = this.xver;
+ if (!Number.isInteger(xver)) {
+ xver = 0;
+ }
+ return {
+ name: this.name,
+ alpn: this.alpn,
+ path: this.path,
+ dest: this.dest,
+ xver: xver,
+ }
+ }
+
+ static fromJson(json=[]) {
+ const fallbacks = [];
+ for (let fallback of json) {
+ fallbacks.push(new Inbound.TrojanSettings.Fallback(
+ fallback.name,
+ fallback.alpn,
+ fallback.path,
+ fallback.dest,
+ fallback.xver,
+ ))
+ }
+ return fallbacks;
+ }
+};
+
Inbound.ShadowsocksSettings = class extends Inbound.Settings {
constructor(protocol,
method=SSMethods.AES_256_GCM,
diff --git a/web/html/xui/form/protocol/trojan.html b/web/html/xui/form/protocol/trojan.html
index e0cc8e5f..78c98191 100644
--- a/web/html/xui/form/protocol/trojan.html
+++ b/web/html/xui/form/protocol/trojan.html
@@ -4,4 +4,40 @@
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+ fallback[[ index + 1 ]]
+ inbound.settings.delTrojanFallback(index)"
+ style="color: rgb(255, 77, 79);cursor: pointer;"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{end}}
\ No newline at end of file