Webinterface
Das Webinterface dient dazu, die Einwahl und andere Funktionen zu steuern. Weiterhin sollen noch einige Statusinformationen abrufbar sein.
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.