|
@@ -146,4 +146,78 @@ o.datatype = "port"
|
|
|
o.default = 1080
|
|
|
o.rmempty = false
|
|
|
|
|
|
+-- [[ fragmen Settings ]]--
|
|
|
+if is_finded("xray") then
|
|
|
+s = m:section(TypedSection, "global_xray_fragment", translate("Xray Fragment Settings"))
|
|
|
+s.anonymous = true
|
|
|
+
|
|
|
+o = s:option(Flag, "fragment", translate("Fragment"), translate("TCP fragments, which can deceive the censorship system in some cases, such as bypassing SNI blacklists."))
|
|
|
+o.default = 0
|
|
|
+
|
|
|
+o = s:option(ListValue, "fragment_packets", translate("Fragment Packets"), translate("\"1-3\" is for segmentation at TCP layer, applying to the beginning 1 to 3 data writes by the client. \"tlshello\" is for TLS client hello packet fragmentation."))
|
|
|
+o.default = "tlshello"
|
|
|
+o:value("tlshello", "tlshello")
|
|
|
+o:value("1-2", "1-2")
|
|
|
+o:value("1-3", "1-3")
|
|
|
+o:value("1-5", "1-5")
|
|
|
+o:depends("fragment", true)
|
|
|
+
|
|
|
+o = s:option(Value, "fragment_length", translate("Fragment Length"), translate("Fragmented packet length (byte)"))
|
|
|
+o.default = "100-200"
|
|
|
+o:depends("fragment", true)
|
|
|
+
|
|
|
+o = s:option(Value, "fragment_interval", translate("Fragment Interval"), translate("Fragmentation interval (ms)"))
|
|
|
+o.default = "10-20"
|
|
|
+o:depends("fragment", true)
|
|
|
+
|
|
|
+o = s:option(Flag, "noise", translate("Noise"), translate("UDP noise, Under some circumstances it can bypass some UDP based protocol restrictions."))
|
|
|
+o.default = 0
|
|
|
+
|
|
|
+s = m:section(TypedSection, "xray_noise_packets", translate("Xray Noise Packets"))
|
|
|
+s.description = translate(
|
|
|
+ "<font style='color:red'>" .. translate("To send noise packets, select \"Noise\" in Xray Settings.") .. "</font>" ..
|
|
|
+ "<br/><font><b>" .. translate("For specific usage, see: ") .. "</b></font>" ..
|
|
|
+ "<a href='https://xtls.github.io/config/outbounds/freedom.html' target='_blank'>" ..
|
|
|
+ "<font style='color:green'><b>" .. translate("Click to the page") .. "</b></font></a>")
|
|
|
+s.template = "cbi/tblsection"
|
|
|
+s.sortable = true
|
|
|
+s.anonymous = true
|
|
|
+s.addremove = true
|
|
|
+
|
|
|
+s.remove = function(self, section)
|
|
|
+ for k, v in pairs(self.children) do
|
|
|
+ v.rmempty = true
|
|
|
+ v.validate = nil
|
|
|
+ end
|
|
|
+ TypedSection.remove(self, section)
|
|
|
+end
|
|
|
+
|
|
|
+o = s:option(Flag, "enabled", translate("Enable"))
|
|
|
+o.default = 1
|
|
|
+o.rmempty = false
|
|
|
+
|
|
|
+o = s:option(ListValue, "type", translate("Type"))
|
|
|
+o.default = "base64"
|
|
|
+o:value("rand", "rand")
|
|
|
+o:value("str", "str")
|
|
|
+o:value("base64", "base64")
|
|
|
+
|
|
|
+o = s:option(Value, "domainStrategy", translate("Domain Strategy"))
|
|
|
+o.default = "UseIP"
|
|
|
+o:value("AsIs", "AsIs")
|
|
|
+o:value("UseIP", "UseIP")
|
|
|
+o:value("UseIPv4", "UseIPv4")
|
|
|
+o:value("ForceIP", "ForceIP")
|
|
|
+o:value("ForceIPv4", "ForceIPv4")
|
|
|
+o.rmempty = false
|
|
|
+
|
|
|
+o = s:option(Value, "packet", translate("Packet"))
|
|
|
+o.datatype = "minlength(1)"
|
|
|
+o.rmempty = false
|
|
|
+
|
|
|
+o = s:option(Value, "delay", translate("Delay (ms)"))
|
|
|
+o.datatype = "or(uinteger,portrange)"
|
|
|
+o.rmempty = false
|
|
|
+end
|
|
|
+
|
|
|
return m
|