diff --git a/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js b/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js
index 9e772073d..efaa3c857 100644
--- a/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js
+++ b/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/client.js
@@ -155,13 +155,13 @@ return view.extend({
o.rmempty = false;
o = s.taboption('routing', form.Value, 'main_urltest_interval', _('Test interval'),
- _('The test interval in seconds. 180
will be used if empty.'));
+ _('The test interval in seconds.'));
o.datatype = 'uinteger';
o.placeholder = '180';
o.depends('main_node', 'urltest');
o = s.taboption('routing', form.Value, 'main_urltest_tolerance', _('Test tolerance'),
- _('The test tolerance in milliseconds. 50
will be used if empty.'));
+ _('The test tolerance in milliseconds.'));
o.datatype = 'uinteger';
o.placeholder = '50';
o.depends('main_node', 'urltest');
@@ -184,13 +184,13 @@ return view.extend({
o.rmempty = false;
o = s.taboption('routing', form.Value, 'main_udp_urltest_interval', _('Test interval'),
- _('The test interval in seconds. 180
will be used if empty.'));
+ _('The test interval in seconds.'));
o.datatype = 'uinteger';
o.placeholder = '180';
o.depends('main_udp_node', 'urltest');
o = s.taboption('routing', form.Value, 'main_udp_urltest_tolerance', _('Test tolerance'),
- _('The test tolerance in milliseconds. 50
will be used if empty.'));
+ _('The test tolerance in milliseconds.'));
o.datatype = 'uinteger';
o.placeholder = '50';
o.depends('main_udp_node', 'urltest');
@@ -491,7 +491,7 @@ return view.extend({
so.modalonly = true;
so = ss.option(form.Value, 'urltest_url', _('Test URL'),
- _('The URL to test. https://www.gstatic.com/generate_204
will be used if empty.'));
+ _('The URL to test.'));
so.placeholder = 'https://www.gstatic.com/generate_204';
so.validate = function(section_id, value) {
if (section_id && value) {
@@ -511,7 +511,7 @@ return view.extend({
so.modalonly = true;
so = ss.option(form.Value, 'urltest_interval', _('Test interval'),
- _('The test interval in seconds. 180
will be used if empty.'));
+ _('The test interval in seconds.'));
so.datatype = 'uinteger';
so.placeholder = '180';
so.validate = function(section_id, value) {
@@ -527,14 +527,14 @@ return view.extend({
so.modalonly = true;
so = ss.option(form.Value, 'urltest_tolerance', _('Test tolerance'),
- _('The test tolerance in milliseconds. 50
will be used if empty.'));
+ _('The test tolerance in milliseconds.'));
so.datatype = 'uinteger';
so.placeholder = '50';
so.depends('node', 'urltest');
so.modalonly = true;
so = ss.option(form.Value, 'urltest_idle_timeout', _('Idle timeout'),
- _('The idle timeout in seconds. 1800
will be used if empty.'));
+ _('The idle timeout in seconds.'));
so.datatype = 'uinteger';
so.placeholder = '1800';
so.depends('node', 'urltest');
@@ -1228,7 +1228,8 @@ return view.extend({
so.depends('type', 'remote');
so = ss.option(form.Value, 'update_interval', _('Update interval'),
- _('Update interval of rule set.
1d
will be used if empty.'));
+ _('Update interval of rule set.'));
+ so.placeholder = '1d';
so.depends('type', 'remote');
/* Rule set settings end */
diff --git a/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/server.js b/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/server.js
index cf8c6d83d..e540fff25 100644
--- a/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/server.js
+++ b/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/server.js
@@ -796,9 +796,9 @@ return view.extend({
o.modalonly = true;
o = s.option(form.Value, 'udp_timeout', _('UDP NAT expiration time'),
- _('In seconds. 300
is used by default.'));
+ _('In seconds.'));
o.datatype = 'uinteger';
- o.default = '300';
+ o.placeholder = '300';
o.depends({'network': 'tcp', '!reverse': true});
o.modalonly = true;
diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_client.uc b/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_client.uc
index 034d53d0e..f4d1d4dbb 100755
--- a/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_client.uc
+++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_client.uc
@@ -619,7 +619,7 @@ if (!isEmpty(main_node)) {
tolerance: strToInt(main_udp_urltest_tolerance),
idle_timeout: (strToInt(main_udp_urltest_interval) > 1800) ? `${main_udp_urltest_interval * 2}s` : null,
});
- urltest_nodes = [...urltest_nodes, ...filter(main_udp_urltest_nodes, ((l) => !~index(urltest_nodes, l)))];
+ urltest_nodes = [...urltest_nodes, ...filter(main_udp_urltest_nodes, (l) => !~index(urltest_nodes, l))];
} else if (dedicated_udp_node) {
const main_udp_node_cfg = uci.get_all(uciconfig, main_udp_node) || {};
push(config.outbounds, generate_outbound(main_udp_node_cfg));
@@ -650,7 +650,7 @@ if (!isEmpty(main_node)) {
idle_timeout: cfg.urltest_idle_timeout ? (cfg.urltest_idle_timeout + 's') : null,
interrupt_exist_connections: (cfg.urltest_interrupt_exist_connections === '1')
});
- urltest_nodes = [...urltest_nodes, ...filter(cfg.urltest_nodes, ((l) => !~index(urltest_nodes, l)))];
+ urltest_nodes = [...urltest_nodes, ...filter(cfg.urltest_nodes, (l) => !~index(urltest_nodes, l))];
} else {
const outbound = uci.get_all(uciconfig, cfg.node) || {};
push(config.outbounds, generate_outbound(outbound));
@@ -661,7 +661,7 @@ if (!isEmpty(main_node)) {
}
});
- for (let i in filter(urltest_nodes, ((l) => !~index(routing_nodes, l))))
+ for (let i in filter(urltest_nodes, (l) => !~index(routing_nodes, l)))
push(config.outbounds, generate_outbound(uci.get_all(uciconfig, i)));
}
/* Outbound end */
diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc b/luci-app-homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc
index b10dc5edd..7d1603e7f 100755
--- a/luci-app-homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc
+++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/update_subscriptions.uc
@@ -570,7 +570,18 @@ function main() {
if (!isEmpty(main_node)) {
const first_server = uci.get_first(uciconfig, ucinode);
if (first_server) {
- if (!uci.get(uciconfig, main_node)) {
+ let main_urltest_nodes;
+ if (main_node === 'urltest') {
+ main_urltest_nodes = filter(uci.get(uciconfig, ucimain, 'main_urltest_nodes'), (v) => {
+ if (!uci.get(uciconfig, v)) {
+ log(sprintf('Node %s is gone, removing from urltest list.', node));
+ return false;
+ }
+ return true;
+ });
+ }
+
+ if ((main_node === 'urltest') ? !length(main_urltest_nodes) : !uci.get(uciconfig, main_node)) {
uci.set(uciconfig, ucimain, 'main_node', first_server);
uci.commit(uciconfig);
need_restart = true;
@@ -579,7 +590,18 @@ function main() {
}
if (!isEmpty(main_udp_node) && main_udp_node !== 'same') {
- if (!uci.get(uciconfig, main_udp_node)) {
+ let main_udp_urltest_nodes;
+ if (main_udp_node === 'urltest') {
+ main_udp_urltest_nodes = filter(uci.get(uciconfig, ucimain, 'main_udp_urltest_nodes'), (v) => {
+ if (!uci.get(uciconfig, v)) {
+ log(sprintf('Node %s is gone, removing from urltest list.', node));
+ return false;
+ }
+ return true;
+ });
+ }
+
+ if ((main_udp_node === 'urltest') ? !length(main_udp_urltest_nodes) : !uci.get(uciconfig, main_udp_node)) {
uci.set(uciconfig, ucimain, 'main_udp_node', first_server);
uci.commit(uciconfig);
need_restart = true;