#!/bin/bash
# Filename:      grml-network
# Purpose:       simple frontend to varous connection tools
# Authors:       (c) Klaus Knopper Mar 2004, (c) Michael Prokop <mika@grml.org>
# Bug-Reports:   see http://grml.org/bugs/
# License:       This file is licensed under the GPL v2.
################################################################################

PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin"
export PATH

if [ $(id -ru) -ne 0 ] ; then
  echo 1>&2 "Error: please run this script with uid 0 (root)." ; exit 1
fi

# XDIALOG_HIGH_DIALOG_COMPAT=1
# export XDIALOG_HIGH_DIALOG_COMPAT

CHECK=""
[ "$1" = "check" ] && CHECK="yes"

TMP=$(mktemp)

bailout(){
  rm -f "$TMP"
  exit $1
}

DIALOG="dialog"
# [ -n "$DISPLAY" ] && [ -x /usr/bin/Xdialog ] && DIALOG="Xdialog"

trap bailout 1 2 3 15

# LANGUAGE etc.
[ -r /etc/default/locale ] && . /etc/default/locale

gauge(){
  rm -f "$TMP.done"
  status=0
  while [ ! -e "$TMP.done" ]; do
    echo "$status"
    status="`expr \( 100 - $status \) / 4 + $status`"
    sleep 1
  done | $DIALOG --title "$0" --gauge "$1" 8 75 0
}

# Stop status bar
killgauge(){
  touch "$TMP.done" ; wait ; rm -f "$TMP.done"
}

main(){
  if [ -z "$NOCHECK" -a -x /usr/bin/nmap ] ; then
  gauge "Checking network status..." &
    STATUS=""
    GW="`echo $(route -n | awk '/^0\.0\.0\.0/{print $2}')`"
    GWDEV="`echo $(route -n | awk '/^0\.0\.0\.0/{print $NF}')`"
    NMAP="$(nmap -sP --host_timeout 4000 --max_rtt_timeout 4000 $GW 2>/dev/null)"

    if [ "$?" = 0 ]; then
      echo "$NMAP" | grep -q "down" >/dev/null 2>&1 || STATUS="online"
    fi

    killgauge

    if [ -n "$STATUS" ]; then
       [ -n "$CHECK" ] && exit 0 # exit if we are already connected
       STATUS="Online ($GWDEV)"
    else
       STATUS="Offline"
    fi
  else
    STATUS="Unknown"
  fi

# Language-dependent Messages
case "$LANGUAGE" in
  de*|at*|ch*)
    TITLE1="Netzwerk-Setup"
    STATUS="Status: $STATUS"
    MESSAGE1="Bitte auswaehlen:"
    NETCARD="Netzwerkkarten (LAN/WLAN) Konfiguration"
    DSL="Einwahl per DSL-Modem"
    ISDN="Einwahl per ISDN"
    EXIT="Beenden"
    ;;
  *)
    TITLE1="Network Setup"
    STATUS="Current state: $STATUS"
    MESSAGE1="Please select:"
    NETCARD="Configure network card (LAN/WLAN)"
    DSL="Dial via DSL-adapter"
    ISDN="Dial via ISDN"
    EXIT="Quit"
   ;;
esac

# Shortcut description selected
TYPES=(netcardconfig "$NETCARD" \
pppoeconf "$DSL" \
isdnconfig "$ISDN")

type pppoeconf   >/dev/null 2>&1 || { unset TYPES[2];  unset TYPES[3];  }
type isdnconfig  >/dev/null 2>&1 || { unset TYPES[4];  unset TYPES[5];  }

rm -f "$TMP"

$DIALOG --clear --cancel-label "$EXIT" --title "$TITLE1" --menu "$STATUS

$MESSAGE1" 18 75 10 "${TYPES[@]}" 2>"$TMP" || bailout 1

read TYPE <"$TMP"
TYPE="${TYPE#\"}"; TYPE="${TYPE%\"}"
rm -f "$TMP"

eval $TYPE
return "$?"
}

if [ -z "$NOCHECK" ] ; then
  while true; do
    main
  done
else
  main
fi

## END OF FILE #################################################################
