#!/bin/sh

add_chain() {
  /sbin/iptables -N $1
  /sbin/iptables -A $1 -p $2 --dport $3 -j ACCEPT
  /sbin/iptables -A in_mod -j $1
  /sbin/iptables -t nat -N $1
  /sbin/iptables -t nat -A $1 -p $2 --dport $3 -j ACCEPT
  /sbin/iptables -t nat -A pre_mod -j $1
}

del_chain() {
  /sbin/iptables -D in_mod -j $1
  /sbin/iptables -F $1
  /sbin/iptables -X $1
  /sbin/iptables -t nat -D pre_mod -j $1
  /sbin/iptables -t nat -F $1
  /sbin/iptables -t nat -X $1
}

MODNAME=dnpOut

if [ ! -d "/run/$MODNAME" ]; then
  mkdir -p /run/$MODNAME
fi

case "$1" in

  start|restart)
    . /opt/$MODNAME/etc/settings
    if [ "$1" = "restart" ]; then
      echo -n "Restarting module dnpOut: "
      killall dnpOutd 2>/dev/null
      del_chain mod_dnpout 2>/dev/null
    else
      echo -n "Starting module dnpOut: "
    fi
    if [ "$MOD_DNPOUT_ENABLED" != "1" ]; then
      echo "skipped"
      exit 0
    fi
    if [ "$MOD_DNPOUT_PROTOCOL" = "1" ]; then
      add_chain mod_dnpout udp $MOD_DNPOUT_PORT 2>/dev/null
    else
      add_chain mod_dnpout tcp $MOD_DNPOUT_PORT 2>/dev/null
    fi
    rm -rf /run/$MODNAME/*
    /opt/$MODNAME/bin/dnpOutd &
    RETVAL=$?
    if [ $RETVAL = 0 ]; then echo "done"; else echo "failed"; fi
    exit $RETVAL
  ;;

  stop)
    echo -n "Stopping module dnpOut: "
    killall dnpOutd 2>/dev/null
    del_chain mod_dnpout 2>/dev/null
    RETVAL=$?
    if [ $RETVAL = 0 ]; then echo "done"; else echo "failed"; fi
    exit $RETVAL
  ;;

  status)
    echo -n "Module dnpOut is "
    killall -0 dnpOutd 2>/dev/null
    RETVAL=$?
    if [ $RETVAL = 0 ]; then echo "running"; else echo "stopped"; fi
    exit $RETVAL
  ;;

  defaults)
    cp /opt/$MODNAME/etc/defaults /opt/$MODNAME/etc/settings 2>/dev/null
    exit 0
  ;;

  *)
    echo "Usage: $0 {start|stop|restart|status|defaults}"
    exit 1
  ;;

esac
