#!/bin/sh
CUXDIR=/usr/local/addons/cuxd
CONFIG_URL=/addons/cuxd/index.ccc
CONFIG_DIR=/usr/local/etc/config
STARTRC=/etc/init.d/S55cuxd
STARTINIT=/etc/init.d/S55InitAddons
PSPID=`ps -o pid,comm | awk '{if($2=="cuxd"){print $1}}'`
export TZ=`cat /etc/config/TZ`
export LD_LIBRARY_PATH=$CUXDIR:$LD_LIBRARY_PATH

Start () {
    echo -n "Starting CUxD: "
    if [ ! -h $CONFIG_DIR/addons/www/cuxd ]
    then
      ln -sf $CUXDIR $CONFIG_DIR/addons/www/cuxd
    fi
    if [ -f $STARTINIT ]
    then
      if [ -h $STARTRC ]
      then
        mount -o remount,rw /
        rm -f $STARTRC
        mount -o remount,ro /
      fi
    else
      if [ ! -h $STARTRC ]
      then
        mount -o remount,rw /
        ln -sf $CONFIG_DIR/rc.d/cuxdaemon $STARTRC
        mount -o remount,ro /
      fi
    fi
    if [ -f /usr/bin/jq ]
    then
      if [ ! -h $CUXDIR/extra/jq ]
      then
        ln -sf /usr/bin/jq $CUXDIR/extra/jq 
      fi
    fi
    if [ "$PSPID" = "" ]
    then
      modprobe ehci_hcd 2>/dev/null
      if [ -f $CUXDIR/cuxd.ini ]
      then
        grep -v "^HM-SCRIPTHOST=\|^HM-SCRIPTPORT=\|^HM-REGAPORT=" $CUXDIR/cuxd.ini >/tmp/cuxd.ini
        diff -q $CUXDIR/cuxd.ini /tmp/cuxd.ini >/dev/null
        if [ $? -ne 0 ]
        then
          mv /tmp/cuxd.ini $CUXDIR/cuxd.ini
        else
          rm /tmp/cuxd.ini
        fi
      fi
      chmod 0755 $CUXDIR/cuxd
      $CUXDIR/cuxd >/dev/null 2>&1
      logger -t cuxd -p user.info "started cux-daemon"
    fi
    echo "OK"
}

Stop () {
    echo -n "Stopping CUxD: "
    if [ "$PSPID" != "" ]
    then
      kill $1 $PSPID 2>/dev/null
      sleep 1
      kill -0 $PSPID 2>/dev/null
      if [ $? -eq 0 ]
      then
        sleep 10
        kill -KILL $PSPID 2>/dev/null
      fi
      logger -t cuxd -p user.info "stopped cux-daemon"
    fi
    echo "OK"
}

case "$1" in
  ""|init|start)
    if [ -d $CUXDIR ]
    then
      Start
    fi
  ;;

  stop)
    Stop -TERM
  ;;

  restart)
    Stop -HUP
    if [ -d $CUXDIR ]
    then
      echo -n "Starting CUxD: "
      chmod 0755 $CUXDIR/cuxd
      $CUXDIR/cuxd >/dev/null 2>&1
      logger -t cuxd -p user.info "started (restart) cux-daemon"
      echo "OK"
    fi
  ;;

  info)
    if [ -d $CUXDIR ]
    then
      VER=`$CUXDIR/cuxd -v`
      echo "Info: <center><b>CUx-Daemon $VER</b><br><img src="../addons/cuxd/CUXD.PNG"></center>"
      echo "Name: CUx-Daemon"
      echo "Version: $VER"
      echo "Operations: uninstall restart"
      echo "Config-Url: $CONFIG_URL"
      echo "Update: /addons/cuxd/extra/update-check.cgi"
    fi
  ;;

  uninstall)
    logger -t cuxd -p user.info "removing cux-daemon"
    killall -KILL cuxd >/dev/null 2>&1 || true
    /bin/sed -i '/<ipc>/{:a;N;/<\/ipc>/!ba };/<name>CUxD<\/name>/d' /etc/config/InterfacesList.xml
    cat <<-ENDOFTCL >/tmp/remove_cuxd.$$.tcl
load tclrega.so
array set values [rega_script "var o = dom.GetObject('CUxD');if (o) {WriteLine('remove '#o.ID()#' '#o.Name());dom.GetObject(ID_INTERFACES).Remove(o);dom.DeleteObject(o);system.Save();} WriteLine('rega script finished!');"]
puts -nonewline \$values(STDOUT)
ENDOFTCL
    tclsh /tmp/remove_cuxd.$$.tcl
    rm /tmp/remove_cuxd.$$.tcl
    if [ -d $CUXDIR ]
    then
      $CUXDIR/update_addon cuxd
      $CUXDIR/extra/ctl_startup 1 0 rfd HMServer ReGaHss
      rm $CONFIG_DIR/addons/www/cuxd
      rm -rf $CUXDIR
    fi
    if [ -h $STARTRC ]
    then
      mount -o remount,rw /
      rm -f $STARTRC
      mount -o remount,ro /
    fi
  ;;

  *)
    echo "Usage: $0 {init|start|stop|restart|uninstall}" >&2
    exit 1
  ;;
esac

exit 0
