| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #!/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}"
|