#!/bin/sh /etc/rc.common
-# Copyright (C) 2022 Dengfeng Liu <liu_df@qq.com>
+# Copyright (C) 2022 Dengfeng Liu <liudf0716@gmail.com>
#
# This is free software, licensed under the GNU General Public License v3.
# See /LICENSE for more information.
handle_xfrpc() {
- local name="$1"
+ local section="$1"
+ local config="$2"
+
+ case "$section" in
+ common)
+ uci_validate_section xfrpc xfrpc common \
+ 'server_addr:host' \
+ 'server_port:uinteger' \
+ 'token:string:'
+ ;;
+ esac
+
+ # Write the validated settings to the config file
+ echo "[${section}]" >> "$config"
+ [ -z "$server_addr" ] || echo "server_addr = $server_addr" >> "$config"
+ [ -z "$server_port" ] || echo "server_port = $server_port" >> "$config"
+ [ -z "$token" ] || echo "token = $token" >> "$config"
+}
+
+handle_tcp() {
+ local section="$1"
local config="$2"
- echo "[$name]" >> "$config"
-
- handle_type() {
- uci_validate_section xfrpc xfrpc "$name" \
- 'type:or("tcp", "http", "https")' \
- 'local_ip:ipaddr:127.0.0.1' \
- 'local_port:uinteger'
-
- echo "type = $type" >> "$config"
- echo "local_ip = $local_ip" >> "$config"
- echo "local_port = $local_port" >> "$config"
- case "$type" in
- tcp|mstsc|socks5)
- config_get remote_port "$name" remote_port
- echo "remote_port = $remote_port" >> "$config"
- ;;
- http|https)
- config_get custom_domains "$name" custom_domains
- [ -z "$custom_domains" ] || echo "custom_domains = $custom_domains" >> "$config"
- config_get subdomain "$name" subdomain
- [ -z "$subdomain" ] || echo "subdomain = $subdomain" >> "$config"
- ;;
- esac
- }
-
- if [ "$name" = "common" ]; then
- uci_validate_section xfrpc xfrp "$name" \
- 'server_addr:host' \
- 'server_port:uinteger' \
- 'token:string:'
-
- echo "server_addr = $server_addr" >> "$config"
- echo "server_port = $server_port" >> "$config"
- [ -z "$token" ] || echo "token = $token" >> "$config"
- else
- handle_type
- fi
+ uci_validate_section xfrpc tcp $section \
+ 'enabled:bool:1' \
+ 'local_ip:host' \
+ 'local_port:uinteger' \
+ 'remote_port:uinteger'
+
+ # if enabled is 0, then return
+ [ $enabled = 0 ] && return
+
+ # Write the validated settings to the config file
+ echo "[${section}]" >> "$config"
+ echo "type = tcp" >> "$config"
+ [ -z "$local_ip" ] || echo "local_ip = $local_ip" >> "$config"
+ [ -z "$local_port" ] || echo "local_port = $local_port" >> "$config"
+ [ -z "$remote_port" ] || echo "remote_port = $remote_port" >> "$config"
+}
+
+handle_http() {
+ local section="$1"
+ local config="$2"
+
+ uci_validate_section xfrpc http $section \
+ 'enabled:bool:1' \
+ 'local_ip:host' \
+ 'local_port:uinteger' \
+ 'custom_domains:string' \
+ 'subdomain:string' \
+
+ # if enabled is 0, then return
+ [ $enabled = 0 ] && return
+
+ # Write the validated settings to the config file
+ echo "[${section}]" >> "$config"
+ echo "type = http" >> "$config"
+ [ -z "$local_ip" ] || echo "local_ip = $local_ip" >> "$config"
+ [ -z "$local_port" ] || echo "local_port = $local_port" >> "$config"
+ [ -z "$custom_domains" ] || echo "custom_domains = $custom_domains" >> "$config"
+ [ -z "$subdomain" ] || echo "subdomain = $subdomain" >> "$config"
+}
+
+handle_https() {
+ local section="$1"
+ local config="$2"
+
+ uci_validate_section xfrpc https $section \
+ 'enabled:bool:1' \
+ 'local_ip:host' \
+ 'local_port:uinteger' \
+ 'custom_domains:string' \
+ 'subdomain:string'
+
+ # if enabled is 0, then return
+ [ $enabled = 0 ] && return
+
+ # Write the validated settings to the config file
+ echo "[${section}]" >> "$config"
+ echo "type = https" >> "$config"
+ [ -z "$local_ip" ] || echo "local_ip = $local_ip" >> "$config"
+ [ -z "$local_port" ] || echo "local_port = $local_port" >> "$config"
+ [ -z "$custom_domains" ] || echo "custom_domains = $custom_domains" >> "$config"
+ [ -z "$subdomain" ] || echo "subdomain = $subdomain" >> "$config"
+}
+
+handle_socks5() {
+ local section="$1"
+ local config="$2"
+
+ uci_validate_section xfrpc socks5 $section \
+ 'enabled:bool:1' \
+ 'remote_port:uinteger'
+
+ # if enabled is 0, then return
+ [ $enabled = 0 ] && return
+
+ # Write the validated settings to the config file
+ echo "[${section}]" >> "$config"
+ echo "type = socks5" >> "$config"
+ [ -z "$remote_port" ] || echo "remote_port = $remote_port" >> "$config"
}
service_triggers() {
> "$conf_file"
config_load "$NAME"
- uci_validate_section xfrpc xfrp init \
- 'disabled:bool:0' \
+ uci_validate_section xfrpc xfrpc common \
+ 'enabled:bool:0' \
'loglevel:uinteger:0'
- if [ $disabled = 1 ]; then
+ if [ $enabled = 0 ]; then
echo "xfrpc service disabled"
return
fi
config_foreach handle_xfrpc xfrpc "$conf_file"
+ config_foreach handle_tcp tcp "$conf_file"
+ config_foreach handle_http http "$conf_file"
+ config_foreach handle_https https "$conf_file"
+ config_foreach handle_socks5 socks5 "$conf_file"
procd_open_instance
procd_set_param command "$PROG" -c "$conf_file" -f -d $loglevel