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

TCP_PROXY_INFO_PORT=8010

if grep -qi 'On' /home/charge/persistency/EnableHTTPS_encryption 2> /dev/null
then
    TCP_PROXY_ANNOUNCE_PORT=443
else
    TCP_PROXY_ANNOUNCE_PORT=80
fi

HOSTNAME_FILE="/home/charge/persistency/NetworkConfigDHCPHostname_tcpip"
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
}

_get_macaddr() {
    _get_p_value "$1" | tr -d :
}

_get_one_mac() {
    IF_DIR=/sys/class/net
    for IF in $IF_DIR/eth0 $IF_DIR/qca0 $IF_DIR/* ; do
        IFADDR_F="$IF/address"
        if [ -f "$IFADDR_F" -a -r "$IFADDR_F" ] ; then
            MADDR=$(_get_macaddr "$IFADDR_F")
            if [ -n "$MADDR" -a "$MADDR" != "000000000000" ] ; then
                echo " $MADDR"
                return
            fi
        fi
    done
}

_get_default_name() {
    _MADDR=$(_get_one_mac)
    echo $DEFAULT_ID $_MADDR
}

CP_ID="$(_get_p_value "$HOSTNAME_FILE" || _get_p_value "$CP_ID_FILE" || _get_p_value "$MFG_SN_FILE" || _get_default_name)"

_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 grep -qi 'Slave' $MS_MODE_FILE 2>/dev/null
    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


# Local variables:
# tab-width: 4
# indent-tabs-mode: nil
# End:
