Webinterface

Das Webinterface dient dazu, die Einwahl und andere Funktionen zu steuern. Weiterhin sollen noch einige Statusinformationen abrufbar sein.

Webinterface
Webinterface

Jeder Button, der gedrückt wird, initiert die Ausführung eines CGI-Skriptes. Jedes CGI-Programm muß am Anfang einen bestimmten Header senden.

Gehen wir exemplarisch das Einwahlskript durch: Wollen wir eine Einwahl starten, so muß ein Provider ausgewählt werden. Dieser Provider wird als Parameter an das Skript übergeben. Anhand des Wertes wird entschieden, über welche Nummer ins Internet gegangen wird. Da der Einwahlprozess an einigen Stellen root-Rechte benötigt, benutzen wir sudoers, um bestimmte Befehle auch für den Webserver freizuschalten. Hierbei sollte man wirklich so wenig wie möglich freischalten, denn jedes Programm kann auch jeder andere Nutzer ausführen, solange er CGI's auf dem Server benutzen darf. Die Befehle, die der Webserver ausführen darf, sind in der /etc/sudoers aufgelistet. Die Datei wird mit dem Kommando

visudo

editiert. Mit ESC :x und Enter speichert man die Änderungen.

Nun jedoch zu den Einwahlskripten. Ich verwende die ISDN- und CAPI-Treiber parallel. Damit ist es möglich, einen Kanal separat zu benutzen, um z.B. zu spielen, so dass andere Benutzer einen nicht stören. Bei der Einwahl mit ISDN ist außerdem Kanalbündelung verfügbar.

Betrachten wir das Einwahlskript für ISDN: /usr/local/apache/cgi-bin/idial_start.cgi. Ich habe die restlichen Skripte im Archiv zusammengefaßt.

#!/bin/sh

echo "Content-type: text/html"
echo

PIDFILE=/var/run/ipppd.ippp0.pid
Provider=`echo $QUERY_STRING | gawk -F '=' '{print $2}'`

case "$Provider" in
nexgo)
  Number="0192072"
  ;;
nexgo2)
  Number="80961030"
  ;;
otelo)
  Number="28702000"
  ;;
mirado)
  Number="22188988"
  ;;
tub)
  Number="3984780"
  ;;
*)
  echo "No provider selected..."
  exit 1
 ;;
esac

PIDS=`ps h -C ipppd | gawk '{print $1}'`
if [ ! -z "$PIDS" ]
then
  #ipppd is running, kill all old instances
  DEVICE=`cat /proc/net/dev | grep ippp0 | gawk -F ':' '{print$1}'` \\
   > /dev/null 2>&1
  IP=`sudo /sbin/ifconfig $DEVICE | grep "inet addr" | gawk '{print $2}' \\
   | gawk -F ':' '{print $2}'`
  sudo /sbin/isdnctrl hangup ippp1
  sudo /sbin/isdnctrl hangup ippp0
  sudo /bin/kill $PIDS

  sleep 1
  ps h -C ipppd > /dev/null 2>&1
  i=$?
  while [ $i -eq 0 ]
  do
    sleep 1
    ps h -C ipppd > /dev/null 2>&1
    i=$?
  done
fi

#delete outgoing numbers
Nummer=`sudo /sbin/isdnctrl list ippp0 | grep Outgoing | gawk -F ':' '{print $2}'`
if [ ! -z "$Nummer" ]
then
  for n in $Nummer
  do
    sudo /sbin/isdnctrl delphone ippp0 out $n
    sudo /sbin/isdnctrl delphone ippp1 out $n
  done
fi

echo "connecting to $Provider ($Number) ..."
sudo -b /sbin/ipppd pidfile $PIDFILE file /etc/ppp/ioptions_$Provider
sleep 1
sudo /sbin/isdnctrl addphone ippp0 out $Number
sudo /sbin/isdnctrl addphone ippp1 out $Number
sudo /sbin/isdnctrl dialmode ippp0 auto
sleep 1
sudo /sbin/isdnctrl dial ippp0

exit 0

Zuerst wird die übergebene Variable vom Browser abgefragt. Passt sie auf einen der vorgegebenen Provider, so wird der Wählvorgang initiiert. Andernfalls wird eine Fehlermeldung ausgegeben und abgebrochen. Die Providernamen sollten mit denen aus dem Webinterface übereinstimmen.

Nachdem der Provider ermittelt ist, wird geprüft, ob vielleicht schon eine Verbindung besteht. Falls ja, so wird sie beendet. Falls durch irgendwelche Umstände noch frühere Einwahlnummern gespeichert sind, so werden diese auch entfernt.

Sind alle Bedingungen erfüllt, kann die Einwahl starten.