#!/bin/bash

# dlinkdsl-hosted - controls a D-Link DSL modem/router (and maybe others)
#   Shows upload/download stats as tooltips
#   Retrieves the router log via HTTP
#   Icon blinks if there is no PPP traffic 

# Author: Alex Ibrado <alex@kdex.org>
# Part of the Konch distribution, http://konch.kdex.org/

### Don't forget to change the values in dlinkdsl.conf to match your setup ###

SDIR=`dirname $0`
SPATH=`(cd $SDIR; pwd)`

. $SPATH/dlinkdsl.conf
$SPATH/dlinkppp $KONCH &

trap 'kill_dlinkppp' TERM

function kill_dlinkppp {
  killall -9 dlinkppp
  exit
}

function send_router {
  (
  echo $USER
  sleep 0.3
  echo $PASS
  sleep 0.3
  echo $1
  sleep 0.3
  ) | nc -t $HOST $PORT
}

while [ 1 ]; do
  read ID CMD PARMS

  case $CMD in 
    quit)
      kill_dlinkppp
      ;;

    init)
      cat <<END
        name $NAME
        icon $ICON

        menu Get IP address,,ip
        menu Browse admin site,browser,admin
        menu -
        menu Router log,log,log
        menu -
        menu Restart pppd,kppp,hup
        menu Reboot router,network,reboot
END
    ;;

  rclick)
      echo menu show
    ;;

  ip)
      IP=`send_router "ifconfig ppp0 | grep 'inet addr'" | tail -2 | head -1 | cut -d: -f2 | cut -d' ' -f1 | tr -d "\n"`
      if [ -z $IP ]; then
        echo popup Cannot determine IP address.
      else
        echo "popup $IP (in clipboard)"
        dcop klipper klipper setClipboardContents $IP
      fi
    ;; 

  admin)
      konqueror http://$HOST/ &
    ;;

  log)
      export WEBUSER WEBPASS
      $SPATH/routerlog | kdialog --icon "$ICON" --title "$NAME" --textbox /dev/stdin 600 400 &
    ;;

  hup)
      kdialog --icon "$ICON" --title "$NAME" --warningyesno "Are you sure you want to restart PPP on the router?"
      if [ $? -eq 0 ]; then
        echo popup Restarting pppd, please wait...
        send_router "killall -HUP pppd" > /dev/null
      fi
    ;;

  reboot)
      kdialog --icon "$ICON" --title "$NAME" --warningyesno "Are you sure you want to reboot the router?"
      if [ $? -eq 0 ]; then
        echo popup Rebooting router, please wait...
        send_router "reboot" > /dev/null
      fi
    ;;

  esac
done

