summaryrefslogtreecommitdiffstats
path: root/applications/luci-app-rustdesk-server/root/etc/init.d/rustdesk-server
blob: eaaf9cfe84734229a848d46aaa5d29bea388e7c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/bin/sh /etc/rc.common
# shellcheck disable=SC2034,SC2154

START=98
STOP=10
USE_PROCD=1

NAME=rustdesk-server
# Use wrapper scripts that set working directory for key generation
# See /usr/libexec/rustdesk-hbbs and /usr/libexec/rustdesk-hbbr for details
PROG_HBBS=/usr/libexec/rustdesk-hbbs
PROG_HBBR=/usr/libexec/rustdesk-hbbr
BIN_HBBS=/usr/bin/hbbs
BIN_HBBR=/usr/bin/hbbr
KEY_DIR=/etc/rustdesk

get_config() {
	config_get_bool enabled "$1" enabled 0
	config_get_bool enabled_relay "$1" enabled_relay 0

	# HBBS settings
	config_get server_port "$1" server_port
	config_get server_key "$1" server_key
	config_get server_relay_servers "$1" server_relay_servers
	config_get server_rendezvous_servers "$1" server_rendezvous_servers
	config_get server_mask "$1" server_mask
	config_get server_rmem "$1" server_rmem
	config_get server_serial "$1" server_serial
	config_get server_software_url "$1" server_software_url
	config_get_bool server_env_always_use_relay "$1" server_env_always_use_relay 0
	config_get server_env_rust_log "$1" server_env_rust_log

	# HBBR settings
	config_get relay_port "$1" relay_port
	config_get relay_key "$1" relay_key
	config_get relay_env_rust_log "$1" relay_env_rust_log
	config_get relay_env_limit_speed "$1" relay_env_limit_speed
	config_get relay_env_single_bandwidth "$1" relay_env_single_bandwidth
	config_get relay_env_total_bandwidth "$1" relay_env_total_bandwidth
	config_get relay_env_downgrade_threshold "$1" relay_env_downgrade_threshold
	config_get relay_env_downgrade_start_check "$1" relay_env_downgrade_start_check
}

start_hbbs() {
	[ "$enabled" = "1" ] || return 0
	[ -x "$BIN_HBBS" ] || {
		logger -t "$NAME" "Error: $BIN_HBBS not found or not executable"
		return 1
	}

	# Convert UCI lists (space-separated) to comma-separated for CLI
	local relay_servers_csv="${server_relay_servers// /,}"
	local rendezvous_servers_csv="${server_rendezvous_servers// /,}"

	# Build command arguments
	local cmd_args="${server_port:+ -p $server_port}${relay_servers_csv:+ -r $relay_servers_csv}${server_key:+ -k $server_key}${rendezvous_servers_csv:+ -R $rendezvous_servers_csv}${server_mask:+ --mask $server_mask}${server_rmem:+ -M $server_rmem}${server_serial:+ -s $server_serial}${server_software_url:+ -u $server_software_url}"

	procd_open_instance hbbs
	procd_set_param command "$PROG_HBBS" $cmd_args

	procd_set_param respawn 3600 5 5
	procd_set_param stdout 1
	procd_set_param stderr 1
	procd_set_param pidfile /var/run/hbbs.pid

	# Environment variables
	procd_append_param env "DB_URL=/tmp/rustdesk_db_v2.sqlite3"
	[ "$server_env_always_use_relay" = "1" ] && procd_append_param env "ALWAYS_USE_RELAY=Y"
	[ -n "$server_env_rust_log" ] && procd_append_param env "RUST_LOG=$server_env_rust_log"

	procd_close_instance
}

start_hbbr() {
	[ "$enabled_relay" = "1" ] || return 0
	[ -x "$BIN_HBBR" ] || {
		logger -t "$NAME" "Error: $BIN_HBBR not found or not executable"
		return 1
	}

	# Build command arguments
	local cmd_args="${relay_port:+ -p $relay_port}${relay_key:+ -k $relay_key}"

	procd_open_instance hbbr
	procd_set_param command "$PROG_HBBR" $cmd_args

	procd_set_param respawn 3600 5 5
	procd_set_param stdout 1
	procd_set_param stderr 1
	procd_set_param pidfile /var/run/hbbr.pid

	# Environment variables
	[ -n "$relay_env_rust_log" ] && procd_append_param env "RUST_LOG=$relay_env_rust_log"
	[ "${relay_env_limit_speed:-0}" != "0" ] && procd_append_param env "LIMIT_SPEED=$relay_env_limit_speed"
	[ "${relay_env_single_bandwidth:-0}" != "0" ] && procd_append_param env "SINGLE_BANDWIDTH=$relay_env_single_bandwidth"
	[ "${relay_env_total_bandwidth:-0}" != "0" ] && procd_append_param env "TOTAL_BANDWIDTH=$relay_env_total_bandwidth"
	[ -n "$relay_env_downgrade_threshold" ] && procd_append_param env "DOWNGRADE_THRESHOLD=$relay_env_downgrade_threshold"
	[ -n "$relay_env_downgrade_start_check" ] && procd_append_param env "DOWNGRADE_START_CHECK=$relay_env_downgrade_start_check"

	procd_close_instance
}

start_service() {
	mkdir -p "$KEY_DIR"

	config_load "$NAME"
	config_foreach get_config "$NAME"

	[ "$enabled" != "1" ] && [ "$enabled_relay" != "1" ] && {
		logger -t "$NAME" "Services disabled. Not starting."
		return 0
	}

	start_hbbs
	start_hbbr
}

stop_service() {
	logger -t "$NAME" "Service stopping"
}

service_triggers() {
	procd_add_reload_trigger "$NAME"
}

reload_service() {
	stop
	start
}