mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-07-27 02:11:19 +08:00
🌈 Sync 2026-07-19 23:47:22
This commit is contained in:
parent
c0107db2e8
commit
ac831f0b74
@ -652,12 +652,16 @@ function renderListeners(s, uciconfig, isClient) {
|
|||||||
const type = this.section.getOption('type').formvalue(section_id);
|
const type = this.section.getOption('type').formvalue(section_id);
|
||||||
|
|
||||||
if (value) {
|
if (value) {
|
||||||
if (type === 'snell' && !['obfs', 'shadow-tls'].includes(value)) {
|
if (type === 'snell' && !['obfs', 'shadow-tls', 'restls', 'jls'].includes(value)) {
|
||||||
return _('Expecting: Only support %s.').format(_('obfs-simple') +
|
return _('Expecting: Only support %s.').format(_('obfs-simple') +
|
||||||
' / ' + _('ShadowTLS'));
|
' / ' + _('ShadowTLS') +
|
||||||
|
' / ' + _('Restls') +
|
||||||
|
' / ' + _('JLS'));
|
||||||
}
|
}
|
||||||
if (['vmess', 'vless', 'trojan', 'anytls'].includes(type) && !['jls'].includes(value)) {
|
if (['vmess', 'vless', 'trojan', 'anytls'].includes(type) && !['shadow-tls', 'restls', 'jls'].includes(value)) {
|
||||||
return _('Expecting: Only support %s.').format(_('JLS'));
|
return _('Expecting: only support %s.').format(_('ShadowTLS') +
|
||||||
|
' / ' + _('Restls') +
|
||||||
|
' / ' + _('JLS'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -726,7 +730,7 @@ function renderListeners(s, uciconfig, isClient) {
|
|||||||
...hm.loadLabelValues(this.config, 'proxy_group')
|
...hm.loadLabelValues(this.config, 'proxy_group')
|
||||||
], section_id);
|
], section_id);
|
||||||
}
|
}
|
||||||
o.depends({plugin_type: /^(restls|jls)$/});
|
o.depends({plugin_type: /^(shadow-tls|restls|jls)$/});
|
||||||
o.depends({type: 'shadowquic'});
|
o.depends({type: 'shadowquic'});
|
||||||
o.modalonly = true;
|
o.modalonly = true;
|
||||||
}
|
}
|
||||||
@ -1033,8 +1037,8 @@ function renderListeners(s, uciconfig, isClient) {
|
|||||||
|
|
||||||
o = s.taboption('field_tls', form.Value, 'tls_sni', _('TLS SNI'),
|
o = s.taboption('field_tls', form.Value, 'tls_sni', _('TLS SNI'),
|
||||||
_('Hostname that the client attempts to connect to at the start of the TLS handshake process.'));
|
_('Hostname that the client attempts to connect to at the start of the TLS handshake process.'));
|
||||||
o.depends('plugin_type', 'jls');
|
|
||||||
o.depends({tls: '1', type: 'shadowquic'});
|
o.depends({tls: '1', type: 'shadowquic'});
|
||||||
|
o.depends('plugin_type', 'jls');
|
||||||
o.modalonly = true;
|
o.modalonly = true;
|
||||||
|
|
||||||
o = s.taboption('field_tls', form.DynamicList, 'tls_alpn', _('TLS ALPN'),
|
o = s.taboption('field_tls', form.DynamicList, 'tls_alpn', _('TLS ALPN'),
|
||||||
@ -1092,9 +1096,11 @@ function renderListeners(s, uciconfig, isClient) {
|
|||||||
const plugin_type = this.section.getOption('plugin_type').formvalue(section_id);
|
const plugin_type = this.section.getOption('plugin_type').formvalue(section_id);
|
||||||
const tls_reality = this.section.getOption('tls_reality').formvalue(section_id);
|
const tls_reality = this.section.getOption('tls_reality').formvalue(section_id);
|
||||||
|
|
||||||
if (plugin_type === 'jls' || tls_reality == 1) {
|
if (['shadow-tls', 'restls', 'jls'].includes(plugin_type) || tls_reality == 1) {
|
||||||
if (value)
|
if (value)
|
||||||
return _('Expecting: Keep empty when %s is enabled.').format(_('JLS') +
|
return _('Expecting: Keep empty when %s is enabled.').format(_('ShadowTLS') +
|
||||||
|
' / ' + _('Restls') +
|
||||||
|
' / ' + _('JLS') +
|
||||||
' / ' + _('REALITY'));
|
' / ' + _('REALITY'));
|
||||||
} else if (!value) {
|
} else if (!value) {
|
||||||
return _('Expecting: Cannot be empty.');
|
return _('Expecting: Cannot be empty.');
|
||||||
@ -1207,8 +1213,10 @@ function renderListeners(s, uciconfig, isClient) {
|
|||||||
const plugin_type = this.section.getOption('plugin_type').formvalue(section_id);
|
const plugin_type = this.section.getOption('plugin_type').formvalue(section_id);
|
||||||
value = this.formvalue(section_id);
|
value = this.formvalue(section_id);
|
||||||
|
|
||||||
if (value == 1 && plugin_type === 'jls')
|
if (value == 1 && ['shadow-tls', 'restls', 'jls'].includes(plugin_type))
|
||||||
return _('Expecting: Cannot be enabled when %s is enabled.').format(_('JLS'));
|
return _('Expecting: cannot be enabled when %s is enabled.').format(_('ShadowTLS') +
|
||||||
|
' / ' + _('Restls') +
|
||||||
|
' / ' + _('JLS'));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -104,7 +104,7 @@ const parseProviderYaml = hm.parseYaml.extend({
|
|||||||
if (!cfg.type)
|
if (!cfg.type)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
// key mapping // 2026/07/12
|
// key mapping // 2026/07/18
|
||||||
let config = hm.removeBlankAttrs({
|
let config = hm.removeBlankAttrs({
|
||||||
id: this.id,
|
id: this.id,
|
||||||
label: this.label,
|
label: this.label,
|
||||||
@ -968,6 +968,7 @@ return view.extend({
|
|||||||
so = ss.taboption('field_general', form.Flag, 'plugin', _('Plugin'));
|
so = ss.taboption('field_general', form.Flag, 'plugin', _('Plugin'));
|
||||||
so.default = so.disabled;
|
so.default = so.disabled;
|
||||||
so.depends({type: /^(ss|snell)$/});
|
so.depends({type: /^(ss|snell)$/});
|
||||||
|
so.depends({type: /^(vmess|vless|trojan|anytls)$/});
|
||||||
so.modalonly = true;
|
so.modalonly = true;
|
||||||
|
|
||||||
so = ss.taboption('field_plugin', form.ListValue, 'plugin_type', _('Plugin type'));
|
so = ss.taboption('field_plugin', form.ListValue, 'plugin_type', _('Plugin type'));
|
||||||
@ -982,9 +983,16 @@ return view.extend({
|
|||||||
const type = this.section.getOption('type').formvalue(section_id);
|
const type = this.section.getOption('type').formvalue(section_id);
|
||||||
|
|
||||||
if (value) {
|
if (value) {
|
||||||
if (type === 'snell' && !['obfs', 'shadow-tls'].includes(value)) {
|
if (type === 'snell' && !['obfs', 'shadow-tls', 'restls', 'jls'].includes(value)) {
|
||||||
return _('Expecting: Only support %s.').format(_('obfs-simple') +
|
return _('Expecting: Only support %s.').format(_('obfs-simple') +
|
||||||
' / ' + _('ShadowTLS'));
|
' / ' + _('ShadowTLS') +
|
||||||
|
' / ' + _('Restls') +
|
||||||
|
' / ' + _('JLS'));
|
||||||
|
}
|
||||||
|
if (['vmess', 'vless', 'trojan', 'anytls'].includes(type) && !['shadow-tls', 'restls', 'jls'].includes(value)) {
|
||||||
|
return _('Expecting: only support %s.').format(_('ShadowTLS') +
|
||||||
|
' / ' + _('Restls') +
|
||||||
|
' / ' + _('JLS'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1028,6 +1036,8 @@ return view.extend({
|
|||||||
|
|
||||||
so = ss.taboption('field_plugin', form.Value, 'plugin_opts_restls_versionhint', _('Version hint'));
|
so = ss.taboption('field_plugin', form.Value, 'plugin_opts_restls_versionhint', _('Version hint'));
|
||||||
so.default = 'tls13';
|
so.default = 'tls13';
|
||||||
|
so.value('tls12', _('tls12'));
|
||||||
|
so.value('tls13', _('tls13'));
|
||||||
so.rmempty = false;
|
so.rmempty = false;
|
||||||
so.depends({plugin_type: 'restls'});
|
so.depends({plugin_type: 'restls'});
|
||||||
so.modalonly = true;
|
so.modalonly = true;
|
||||||
@ -1167,14 +1177,6 @@ return view.extend({
|
|||||||
|
|
||||||
so = ss.taboption('field_tls', form.Value, 'tls_sni', _('TLS SNI'),
|
so = ss.taboption('field_tls', form.Value, 'tls_sni', _('TLS SNI'),
|
||||||
_('Hostname that the client attempts to connect to at the start of the TLS handshake process.'));
|
_('Hostname that the client attempts to connect to at the start of the TLS handshake process.'));
|
||||||
so.validate = function(section_id, value) {
|
|
||||||
const tls_jls = this.section.getOption('tls_jls').formvalue(section_id);
|
|
||||||
|
|
||||||
if (tls_jls == 1 && !value)
|
|
||||||
return _('Expecting: %s cannot be empty when %s is enabled.').format(_('TLS SNI'), _('JLS'));
|
|
||||||
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
so.depends({tls: '1', type: /^(http|vmess|vless|trojan|anytls|hysteria|hysteria2|shadowquic|trusttunnel|masque)$/});
|
so.depends({tls: '1', type: /^(http|vmess|vless|trojan|anytls|hysteria|hysteria2|shadowquic|trusttunnel|masque)$/});
|
||||||
so.depends({tls: '1', type: /^(tuic)$/, tls_disable_sni: '0'});
|
so.depends({tls: '1', type: /^(tuic)$/, tls_disable_sni: '0'});
|
||||||
so.modalonly = true;
|
so.modalonly = true;
|
||||||
@ -1222,8 +1224,8 @@ return view.extend({
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
so.depends({tls: '1', type: /^(vmess|vless|trojan|anytls|tuic|hysteria|hysteria2|shadowquic|trusttunnel)$/});
|
so.depends({tls: '1', type: /^(vmess|vless|trojan|anytls|tuic|hysteria|hysteria2|shadowquic|trusttunnel)$/});
|
||||||
so.depends({type: /^(ss|snell)$/, plugin_type: 'shadow-tls'});
|
so.depends({type: 'ss', plugin_type: /^(shadow-tls|jls)$/});
|
||||||
so.depends({type: 'ss', plugin_type: 'jls'});
|
so.depends({type: 'snell', plugin_type: 'shadow-tls'});
|
||||||
so.modalonly = true;
|
so.modalonly = true;
|
||||||
|
|
||||||
so = ss.taboption('field_tls', form.Value, 'tls_fingerprint', _('Cert fingerprint'),
|
so = ss.taboption('field_tls', form.Value, 'tls_fingerprint', _('Cert fingerprint'),
|
||||||
@ -1305,28 +1307,23 @@ return view.extend({
|
|||||||
so.value.apply(so, res);
|
so.value.apply(so, res);
|
||||||
})
|
})
|
||||||
so.depends({tls: '1', type: /^(vmess|vless|trojan|anytls|trusttunnel)$/});
|
so.depends({tls: '1', type: /^(vmess|vless|trojan|anytls|trusttunnel)$/});
|
||||||
so.depends({type: /^(ss|snell)$/, plugin_type: /^(shadow-tls|restls)$/});
|
so.depends({type: /^(ss|snell)$/, plugin_type: /^(shadow-tls|restls|jls)$/});
|
||||||
so.depends({type: 'ss', plugin_type: 'jls'});
|
|
||||||
so.modalonly = true;
|
|
||||||
|
|
||||||
so = ss.taboption('field_tls', form.Flag, 'tls_jls', _('JLS'));
|
|
||||||
so.default = so.disabled;
|
|
||||||
so.depends({tls: '1', type: /^(vmess|vless|trojan|anytls)$/});
|
|
||||||
so.modalonly = true;
|
|
||||||
|
|
||||||
so = ss.taboption('field_tls', form.Value, 'tls_jls_username', _('JLS username'));
|
|
||||||
so.rmempty = false;
|
|
||||||
so.depends('tls_jls', '1');
|
|
||||||
so.modalonly = true;
|
|
||||||
|
|
||||||
so = ss.taboption('field_tls', form.Value, 'tls_jls_password', _('JLS password'));
|
|
||||||
so.rmempty = false;
|
|
||||||
so.depends('tls_jls', '1');
|
|
||||||
so.modalonly = true;
|
so.modalonly = true;
|
||||||
|
|
||||||
so = ss.taboption('field_tls', form.Flag, 'tls_reality', _('REALITY'));
|
so = ss.taboption('field_tls', form.Flag, 'tls_reality', _('REALITY'));
|
||||||
so.default = so.disabled;
|
so.default = so.disabled;
|
||||||
so.depends({tls: '1', tls_jls: '0', type: /^(vmess|vless|trojan)$/});
|
so.validate = function(section_id, value) {
|
||||||
|
const plugin_type = this.section.getOption('plugin_type').formvalue(section_id);
|
||||||
|
value = this.formvalue(section_id);
|
||||||
|
|
||||||
|
if (value == 1 && ['shadow-tls', 'restls', 'jls'].includes(plugin_type))
|
||||||
|
return _('Expecting: cannot be enabled when %s is enabled.').format(_('ShadowTLS') +
|
||||||
|
' / ' + _('Restls') +
|
||||||
|
' / ' + _('JLS'));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
so.depends({tls: '1', type: /^(vmess|vless|trojan)$/});
|
||||||
so.modalonly = true;
|
so.modalonly = true;
|
||||||
|
|
||||||
so = ss.taboption('field_tls', form.Value, 'tls_reality_public_key', _('REALITY public key'));
|
so = ss.taboption('field_tls', form.Value, 'tls_reality_public_key', _('REALITY public key'));
|
||||||
@ -1985,7 +1982,7 @@ return view.extend({
|
|||||||
|
|
||||||
so = ss.taboption('field_override', form.DynamicList, 'override_expr', _('Programmable replacement'),
|
so = ss.taboption('field_override', form.DynamicList, 'override_expr', _('Programmable replacement'),
|
||||||
_('For format see <a target="_blank" href="%s" rel="noreferrer noopener">%s</a>.')
|
_('For format see <a target="_blank" href="%s" rel="noreferrer noopener">%s</a>.')
|
||||||
.format('https://wiki.metacubex.one/config/proxy-providers/#override_expr', _('override.override-expr')));
|
.format('https://wiki.metacubex.one/config/proxy-providers/#overrideoverride-expr', _('override.override-expr')));
|
||||||
so.placeholder = '.name = "[provider1] " + .name';
|
so.placeholder = '.name = "[provider1] " + .name';
|
||||||
so.depends({type: 'inline', '!reverse': true});
|
so.depends({type: 'inline', '!reverse': true});
|
||||||
so.modalonly = true;
|
so.modalonly = true;
|
||||||
|
|||||||
@ -50,7 +50,7 @@ migrate() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# plugin -> plugin_type
|
# plugin -> plugin_type
|
||||||
if isDefined "$1" plugin; then
|
if isDefined "$1" plugin && ! isDefined "$1" plugin_type; then
|
||||||
local plugin
|
local plugin
|
||||||
config_get plugin "$1" plugin ""
|
config_get plugin "$1" plugin ""
|
||||||
uci_set "$CONF" "$1" plugin "1"
|
uci_set "$CONF" "$1" plugin "1"
|
||||||
|
|||||||
@ -76,7 +76,7 @@ migrate() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# plugin -> plugin_type
|
# plugin -> plugin_type
|
||||||
if isDefined "$1" plugin; then
|
if isDefined "$1" plugin && ! isDefined "$1" plugin_type; then
|
||||||
local plugin
|
local plugin
|
||||||
config_get plugin "$1" plugin ""
|
config_get plugin "$1" plugin ""
|
||||||
uci_set "$CONF" "$1" plugin "1"
|
uci_set "$CONF" "$1" plugin "1"
|
||||||
|
|||||||
@ -58,7 +58,7 @@ migrate() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# plugin -> plugin_type
|
# plugin -> plugin_type
|
||||||
if isDefined "$1" plugin; then
|
if isDefined "$1" plugin && ! isDefined "$1" plugin_type; then
|
||||||
local plugin
|
local plugin
|
||||||
config_get plugin "$1" plugin ""
|
config_get plugin "$1" plugin ""
|
||||||
uci_set "$CONF" "$1" plugin "1"
|
uci_set "$CONF" "$1" plugin "1"
|
||||||
|
|||||||
@ -345,6 +345,8 @@ uci.foreach(uciconf, uciinbd, (cfg) => {
|
|||||||
|
|
||||||
const listener = parseListener(cfg);
|
const listener = parseListener(cfg);
|
||||||
listener.proxy = get_proxy(listener.proxy);
|
listener.proxy = get_proxy(listener.proxy);
|
||||||
|
if (listener["shadow-tls"])
|
||||||
|
listener["shadow-tls"].handshake.proxy = get_proxy(listener["shadow-tls"].handshake.proxy);
|
||||||
if (listener["res-tls"])
|
if (listener["res-tls"])
|
||||||
listener["res-tls"].proxy = get_proxy(listener["res-tls"].proxy);
|
listener["res-tls"].proxy = get_proxy(listener["res-tls"].proxy);
|
||||||
if (listener["jls-config"])
|
if (listener["jls-config"])
|
||||||
@ -541,7 +543,7 @@ uci.foreach(uciconf, ucinode, (cfg) => {
|
|||||||
|
|
||||||
/* Snell */
|
/* Snell */
|
||||||
psk: cfg.snell_psk,
|
psk: cfg.snell_psk,
|
||||||
version: cfg.snell_version,
|
version: strToInt(cfg.snell_version),
|
||||||
reuse: strToBool(cfg.snell_reuse),
|
reuse: strToBool(cfg.snell_reuse),
|
||||||
|
|
||||||
/* VMess / VLESS */
|
/* VMess / VLESS */
|
||||||
@ -641,38 +643,49 @@ uci.foreach(uciconf, ucinode, (cfg) => {
|
|||||||
|
|
||||||
/* Plugin fields */
|
/* Plugin fields */
|
||||||
...(cfg.plugin === '1' ? (
|
...(cfg.plugin === '1' ? (
|
||||||
cfg.type === 'snell' ? {
|
cfg.type in ['vmess', 'vless', 'trojan', 'anytls'] ? {
|
||||||
// snell
|
...arrToObj([[(cfg.type in ['vmess', 'vless']) ? 'servername' : 'sni', cfg.plugin_opts_host]]),
|
||||||
"obfs-opts": {
|
// shadow-tls
|
||||||
mode: cfg.plugin_type === 'shadow-tls' ? cfg.plugin_type : cfg.plugin_opts_obfsmode,
|
"shadow-tls-opts": cfg.plugin_type === 'shadow-tls' ? {
|
||||||
host: cfg.plugin_opts_host,
|
|
||||||
password: cfg.plugin_opts_thetlspassword,
|
|
||||||
version: strToInt(cfg.plugin_opts_shadowtls_version),
|
version: strToInt(cfg.plugin_opts_shadowtls_version),
|
||||||
alpn: cfg.tls_alpn // Array
|
password: cfg.plugin_opts_thetlspassword
|
||||||
}
|
} : null,
|
||||||
} : {
|
// restls
|
||||||
// others
|
"restls-opts": cfg.plugin_type === 'restls' ? {
|
||||||
plugin: cfg.plugin_type,
|
|
||||||
"plugin-opts": {
|
|
||||||
mode: cfg.plugin_opts_obfsmode,
|
|
||||||
host: cfg.plugin_opts_host,
|
|
||||||
username: cfg.plugin_opts_thetlsusername,
|
|
||||||
password: cfg.plugin_opts_thetlspassword,
|
password: cfg.plugin_opts_thetlspassword,
|
||||||
version: strToInt(cfg.plugin_opts_shadowtls_version),
|
|
||||||
alpn: cfg.tls_alpn, // Array
|
|
||||||
"version-hint": cfg.plugin_opts_restls_versionhint,
|
"version-hint": cfg.plugin_opts_restls_versionhint,
|
||||||
"restls-script": cfg.plugin_opts_restls_script
|
"restls-script": cfg.plugin_opts_restls_script
|
||||||
}
|
} : null,
|
||||||
|
// jls
|
||||||
|
"jls-opts": cfg.plugin_type === 'jls' ? {
|
||||||
|
username: cfg.plugin_opts_thetlsusername,
|
||||||
|
password: cfg.plugin_opts_thetlspassword
|
||||||
|
} : null,
|
||||||
|
} : {
|
||||||
|
// snell / shadowsocks
|
||||||
|
plugin: cfg.type === 'snell' ? null : cfg.plugin_type,
|
||||||
|
...arrToObj([[cfg.type === 'snell' ? "obfs-opts" : "plugin-opts",
|
||||||
|
{
|
||||||
|
mode: (cfg.type === 'snell' && cfg.plugin_type !== 'obfs') ? cfg.plugin_type : cfg.plugin_opts_obfsmode,
|
||||||
|
host: cfg.plugin_opts_host,
|
||||||
|
username: cfg.plugin_opts_thetlsusername,
|
||||||
|
password: cfg.plugin_opts_thetlspassword,
|
||||||
|
version: strToInt(cfg.plugin_opts_shadowtls_version),
|
||||||
|
alpn: cfg.tls_alpn, // Array
|
||||||
|
"version-hint": cfg.plugin_opts_restls_versionhint,
|
||||||
|
"restls-script": cfg.plugin_opts_restls_script
|
||||||
|
}
|
||||||
|
]])
|
||||||
}
|
}
|
||||||
) : {}),
|
) : {}),
|
||||||
|
|
||||||
/* SSH / WireGuard / Masque */
|
/* SSH / WireGuard / Masque */
|
||||||
/* TLS fields */
|
/* TLS fields */
|
||||||
tls: (cfg.type in ['trojan', 'anytls', 'tuic', 'hysteria', 'hysteria2', 'shadowquic', 'trusttunnel']) ? null : strToBool(cfg.tls),
|
tls: (cfg.type in ['trojan', 'anytls', 'tuic', 'hysteria', 'hysteria2', 'shadowquic', 'trusttunnel', 'masque']) ? null : strToBool(cfg.tls),
|
||||||
"disable-sni": strToBool(cfg.tls_disable_sni),
|
"disable-sni": strToBool(cfg.tls_disable_sni),
|
||||||
...arrToObj([[(cfg.type in ['vmess', 'vless']) ? 'servername' : 'sni', cfg.tls_sni]]),
|
...(cfg.tls_sni ? arrToObj([[(cfg.type in ['vmess', 'vless']) ? 'servername' : 'sni', cfg.tls_sni]]) : {}),
|
||||||
fingerprint: cfg.tls_fingerprint,
|
fingerprint: cfg.tls_fingerprint,
|
||||||
alpn: cfg.plugin_type in ['shadow-tls', 'jls'] ? null : cfg.tls_alpn, // Array
|
alpn: cfg.tls === '1' ? cfg.tls_alpn : null, // Array
|
||||||
"name-cert-verify": cfg.tls_name_cert_verify,
|
"name-cert-verify": cfg.tls_name_cert_verify,
|
||||||
"skip-cert-verify": strToBool(cfg.tls_skip_cert_verify),
|
"skip-cert-verify": strToBool(cfg.tls_skip_cert_verify),
|
||||||
certificate: cfg.tls_cert_path, // mTLS
|
certificate: cfg.tls_cert_path, // mTLS
|
||||||
@ -684,10 +697,6 @@ uci.foreach(uciconf, ucinode, (cfg) => {
|
|||||||
config: cfg.tls_ech_config,
|
config: cfg.tls_ech_config,
|
||||||
"query-server-name": cfg.tls_ech_query_server_name
|
"query-server-name": cfg.tls_ech_query_server_name
|
||||||
} : null,
|
} : null,
|
||||||
"jls-opts": cfg.tls_jls === '1' ? {
|
|
||||||
"username": cfg.tls_jls_username,
|
|
||||||
"password": cfg.tls_jls_password
|
|
||||||
} : null,
|
|
||||||
"reality-opts": cfg.tls_reality === '1' ? {
|
"reality-opts": cfg.tls_reality === '1' ? {
|
||||||
"public-key": cfg.tls_reality_public_key,
|
"public-key": cfg.tls_reality_public_key,
|
||||||
"short-id": cfg.tls_reality_short_id,
|
"short-id": cfg.tls_reality_short_id,
|
||||||
|
|||||||
@ -385,7 +385,8 @@ export function parseListener(cfg) {
|
|||||||
],
|
],
|
||||||
} : { password: cfg.plugin_opts_thetlspassword }),
|
} : { password: cfg.plugin_opts_thetlspassword }),
|
||||||
handshake: {
|
handshake: {
|
||||||
dest: cfg.plugin_opts_handshake_dest
|
dest: cfg.plugin_opts_handshake_dest,
|
||||||
|
proxy: cfg.plugin_opts_dest_proxy // raw data need post-processing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} : cfg.plugin_type === 'restls' ? {
|
} : cfg.plugin_type === 'restls' ? {
|
||||||
|
|||||||
@ -5,8 +5,8 @@
|
|||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=mihomo
|
PKG_NAME:=mihomo
|
||||||
PKG_VERSION:=1.19.28
|
PKG_VERSION:=1.19.29
|
||||||
PKG_RELEASE:=30
|
PKG_RELEASE:=31
|
||||||
|
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||||
PKG_SOURCE_URL:=https://codeload.github.com/metacubex/mihomo/tar.gz/v$(PKG_VERSION)?
|
PKG_SOURCE_URL:=https://codeload.github.com/metacubex/mihomo/tar.gz/v$(PKG_VERSION)?
|
||||||
|
|||||||
@ -8,11 +8,11 @@ PKG_NAME:=go-stun
|
|||||||
PKG_UPSTREAM_VERSION:=0.1.4
|
PKG_UPSTREAM_VERSION:=0.1.4
|
||||||
PKG_UPSTREAM_GITHASH:=d32c135f5e509d278e95ba9945849903f966a91f
|
PKG_UPSTREAM_GITHASH:=d32c135f5e509d278e95ba9945849903f966a91f
|
||||||
PKG_VERSION:=$(PKG_UPSTREAM_VERSION)~$(call version_abbrev,$(PKG_UPSTREAM_GITHASH))
|
PKG_VERSION:=$(PKG_UPSTREAM_VERSION)~$(call version_abbrev,$(PKG_UPSTREAM_GITHASH))
|
||||||
PKG_RELEASE:=5
|
PKG_RELEASE:=6
|
||||||
|
|
||||||
PKG_SOURCE_PROTO:=git
|
PKG_SOURCE_PROTO:=git
|
||||||
PKG_SOURCE_URL:=https://github.com/ccding/go-stun.git
|
PKG_SOURCE_URL:=https://github.com/ccding/go-stun.git
|
||||||
PKG_SOURCE_VERSION:=c6f6521d99a27227538c3bd8a7729f8b2f2a69dd
|
PKG_SOURCE_VERSION:=65c0568253e3a432f330b346d5ecad938d35d5aa
|
||||||
PKG_MIRROR_HASH:=skip
|
PKG_MIRROR_HASH:=skip
|
||||||
|
|
||||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_UPSTREAM_VERSION)
|
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_UPSTREAM_VERSION)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user