op-packages/vlmcsd/files/vlmcsd.init
2026-06-17 04:40:21 +08:00

138 lines
2.8 KiB
Bash

#!/bin/sh /etc/rc.common
USE_PROCD=1
START=90
STOP=10
NAME="vlmcsd"
CONF="$NAME"
PROG="/usr/bin/vlmcsd"
INI_FILE="/etc/vlmcsd.ini"
KMS_PORT="1688"
DHCP_SECTION="$NAME"
normalize_bool() {
case "$1" in
1|on|true|yes|enabled)
return 0
;;
*)
return 1
;;
esac
}
config_get_bool_compat() {
local __var="$1"
local section="$2"
local option="$3"
local default="${4:-0}"
local legacy_option="$5"
local value
config_get value "$section" "$option"
if [ -z "$value" ] && [ -n "$legacy_option" ]; then
config_get value "$section" "$legacy_option"
fi
if normalize_bool "${value:-$default}"; then
eval "$__var=1"
else
eval "$__var=0"
fi
}
reload_dnsmasq() {
[ -x /etc/init.d/dnsmasq ] || return 0
/etc/init.d/dnsmasq reload >/dev/null 2>&1 || \
/etc/init.d/dnsmasq restart >/dev/null 2>&1 || true
}
sync_dns_srv() {
local enabled="$1"
local before after hostname domain srv target
before="$(uci -q show "dhcp.${DHCP_SECTION}" 2>/dev/null)"
uci -q delete "dhcp.${DHCP_SECTION}"
if [ "$enabled" = "1" ]; then
hostname="$(uci -q get system.@system[0].hostname)"
domain="$(uci -q get dhcp.@dnsmasq[0].domain)"
[ -n "$hostname" ] || hostname="OpenWrt"
srv="_vlmcs._tcp"
target="$hostname"
if [ -n "$domain" ]; then
srv="${srv}.${domain}"
target="${target}.${domain}"
fi
uci -q set "dhcp.${DHCP_SECTION}=srvhost"
uci -q set "dhcp.${DHCP_SECTION}.srv=${srv}"
uci -q set "dhcp.${DHCP_SECTION}.target=${target}"
uci -q set "dhcp.${DHCP_SECTION}.port=${KMS_PORT}"
fi
after="$(uci -q show "dhcp.${DHCP_SECTION}" 2>/dev/null)"
[ "$before" = "$after" ] && return 0
uci -q commit dhcp
reload_dnsmasq
}
start_service() {
local enabled auto_activate internet_access
config_load "$CONF"
config_get_bool_compat enabled config enabled 0
config_get_bool_compat auto_activate config auto_activate 1 autoactivate
config_get_bool_compat internet_access config internet_access 0
if [ "$enabled" -ne 1 ]; then
sync_dns_srv 0
return 1
fi
[ -x "$PROG" ] || return 1
sync_dns_srv "$auto_activate"
procd_open_instance "$NAME"
procd_set_param command "$PROG" -D -i "$INI_FILE" -L "0.0.0.0:${KMS_PORT}"
procd_set_param file "$INI_FILE"
procd_set_param respawn
procd_set_param stdout 1
procd_set_param stderr 1
if [ "$internet_access" -eq 1 ]; then
procd_open_data
json_add_array firewall
json_add_object ""
json_add_string type rule
json_add_string name "Allow-vlmcsd"
json_add_string proto "tcp"
json_add_string src "*"
json_add_string dest_port "$KMS_PORT"
json_add_string target "ACCEPT"
json_close_object
json_close_array
procd_close_data
fi
procd_close_instance
}
stop_service() {
sync_dns_srv 0
}
service_triggers() {
procd_add_reload_trigger "$CONF" dhcp system
}
reload_service() {
restart
}