#!/bin/sh
#
# TCP proxy announces the charger via mDNS and can also create tunnels to
# other chargers.

TCP_PROXY_INFO_PORT=8010
TCP_PROXY_ANNOUNCE_PORT=80
CP_ID_FILE="/home/charge/persistency/ChargePointID_ocpp"
MFG_SN_FILE="/home/charge/persistency/SerialNumberManufacturer_custom"

MS_MODE_FILE="/home/charge/persistency/MasterSlaveMode_ms"
DEFAULT_ID="Ebee Chargepoint"

_get_p_value() {
    head -n 1 "$1" 2>/dev/null
}

CP_ID="$(_get_p_value "$CP_ID_FILE" || _get_p_value "$MFG_SN_FILE" || echo "$DEFAULT_ID")"

_start_tcp_proxy()
{
    echo -n "Starting TCP Proxy / mDNS announcer..."
    start-stop-daemon -S -q -m -b -p /var/run/tcp_proxy.pid \
        --exec /home/charge/tcp_proxy -- \
        -p "$TCP_PROXY_INFO_PORT" -s "$TCP_PROXY_ANNOUNCE_PORT" \
        "$CP_ID" \
        && echo "done" || echo "failed"
}

start_tcp_proxy()
{
    if [ -e "$MS_MODE_FILE" -a "$(head -n 1 "$MS_MODE_FILE")" = Slave ] ; then
        echo "TCP Proxy / mDNS announcer disabled on slave controller"
    else
        _start_tcp_proxy
    fi
}

stop_tcp_proxy()
{
    [ -e "/var/run/tcp_proxy.pid" ] || return

    echo -n "Stopping TCP Proxy / mDNS announcer..."
    start-stop-daemon -K -q -p /var/run/tcp_proxy.pid \
    && echo "done" || echo "failed"
}


case "$1" in
    start)
        start_tcp_proxy
        ;;
    stop)
        stop_tcp_proxy
        ;;
    restart|reload)
        "$0" stop
        "$0" start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
        ;;
esac
