#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(dirname "$(dirname "$SCRIPT_DIR")")" PACKAGE_PARENT="$(dirname "$ROOT_DIR")" PACKAGE_NAME="$(basename "$ROOT_DIR")" source "$SCRIPT_DIR/runtime-lib.sh" CONFIG_PATH="${1:-$ROOT_DIR/config-udp.json}" RUNTIME_USER="${MYNETSPEEDER_UDP_USER:-mynetspeeder}" PID_FILE="/var/run/mynetspeeder-udp-socks.pid" LOG_FILE="/var/log/mynetspeeder-udp-socks.log" require_root if [[ ! -f "$CONFIG_PATH" ]]; then echo "config not found: $CONFIG_PATH" exit 1 fi SOCKS_HOST_FROM_CONFIG="$(python3 - <<'PY' "$CONFIG_PATH" import json, sys cfg = json.load(open(sys.argv[1])) print(cfg.get("socks_host", "127.0.0.1")) PY )" SOCKS_PORT_FROM_CONFIG="$(python3 - <<'PY' "$CONFIG_PATH" import json, sys cfg = json.load(open(sys.argv[1])) port = int(cfg.get("socks_port", 19180) or 19180) print(port if port > 0 else 19180) PY )" SOCKS_HOST="${MYNETSPEEDER_UDP_SOCKS_HOST:-$SOCKS_HOST_FROM_CONFIG}" SOCKS_PORT="${MYNETSPEEDER_UDP_SOCKS_PORT:-$SOCKS_PORT_FROM_CONFIG}" if ! [[ "$SOCKS_PORT" =~ ^[0-9]+$ ]]; then echo "socks port must be numeric" exit 1 fi ensure_runtime_user "$RUNTIME_USER" ensure_log_file "$LOG_FILE" "$RUNTIME_USER" stop_pid_file "$PID_FILE" "edge-udp --listen-host ${SOCKS_HOST} --listen-port ${SOCKS_PORT} --config ${CONFIG_PATH}" ARGV_JSON="$(python3 - <<'PY' "$PACKAGE_NAME" "$SOCKS_HOST" "$SOCKS_PORT" "$CONFIG_PATH" import json, sys package_name, listen_host, listen_port, config_path = sys.argv[1:] print(json.dumps([ "python3", "-m", package_name, "edge-udp", "--listen-host", listen_host, "--listen-port", listen_port, "--config", config_path, ])) PY )" start_python_service "$RUNTIME_USER" "$PACKAGE_PARENT" "$PACKAGE_PARENT" "$LOG_FILE" "$PID_FILE" \ "edge-udp --listen-host ${SOCKS_HOST} --listen-port ${SOCKS_PORT} --config ${CONFIG_PATH}" "$ARGV_JSON" >/dev/null if ! wait_for_tcp_listen "$SOCKS_HOST" "$SOCKS_PORT" 15; then tail -n 50 "$LOG_FILE" || true stop_pid_file "$PID_FILE" "edge-udp --listen-host ${SOCKS_HOST} --listen-port ${SOCKS_PORT} --config ${CONFIG_PATH}" exit 1 fi echo "udp-only started on ${SOCKS_HOST}:${SOCKS_PORT}"