#!/bin/sh
# Script um E-Mails über
Inmarsat an DOS Client zu senden
# Manuel Raeber
# 8. Dezember 2003
# Pfad der DialScripts und des
Hauptscripts
inm_dir='/tools/inmarsat/'
# Mailbox Username
mailboxname='****'
# Modem
modemdev='/dev/ttyS1'
# Pfad zu den Mailbox Files
mailboxpath='/var/spool/mail/'
# Pfad zur Outbox
outmail='outbox/'
# Logfile und Tageslogfile (inkl.
Pfad)
day_log=${inm_dir}day.log
all_log='/var/log/inmarsat'
# Eingene Domain für
Mailfilter
own_domain='**.**'
# Maximale Grösse eines Mails
maxmailsize=*
# Modem Chat Scripts
dial='s_dial'
hangup='s_hangup'
# Telefonnummern und Prefix
pre_smart='10703'
pre_sunri=''
pre_swsco='10741'
inm_nbr='00870********'
# Pfad und Namen der temporaere
Dateien
temppath=$inm_dir
temptxt='mail.txt'
tempzip='mail.zip'
log()
{
log_dat=`date +"%a,
%d.%m.%Y, %T"`
echo -e "$log_dat: $1"
>> $day_log
}
mailboxsize=`filesize
$mailboxpath$mailboxname`
if [ $mailboxsize -gt 0 ]
then
# Tageslogfile loeschen
if [ -f $day_log ]
then
rm $day_log
fi
# Temporaere Files loeschen,
falls vorhanden
if [ -f $temppath$temptxt ]
then
rm $temppath$temptxt
fi
if [ -f $temppath$tempzip ]
then
rm $temppath$tempzip
fi
# Mails separieren, nicht
benötigte Header löschen
# und als einzelen Files in
$outmail speichern
datu=`date +"%j"`
export inm_dir
export outmail
export datu
formail -k -X From: -X Subject:
-X Date: -s sh -c 'cat > $inm_dir$outmail$datu.$FILENO' <
$mailboxpath$mailboxname
# Mails, die nicht von
$own_domain sind oder grösser als
# $maxmailsize sind löschen.
Nach DOS-Format wandeln.
for file in $inm_dir$outmail*;
do
mailsize=`filesize $file`
from=`formail -zrx To:
<$file`
dom=` echo -e $from | grep
$own_domain`
if test -z $dom
then
formail -i
"Subject: Fremde Domain" <$file | sendmail mr@irtech.ch
formail -i
"Subject: Rejected Mail (Foreign Domain)" <$file | sendmail $from
rm $file
else
if [ $mailsize
-gt $maxmailsize ]
then
formail -i "Subject: Zu grosses Mail" <$file | sendmail mr@irtech.ch
formail -i "Subject: Rejected Mail (Size exceeds maximum)" \
<$file | sendmail $from
rm
$file
else
unix2dos -q $file
fi
fi
done
# Alle Files in $outmail zippen
zip -jqX $temppath$tempzip
$inm_dir$outmail*
# Alle Files in $outmail
löschen
rm $inm_dir$outmail*
# Mgetty anhalten
pkill -STOP mgetty
# Anwahlversuch mit SmartPhone
for (( i = 0 ; i < 3 ; i++ ))
do
log "Smartphone $i"
chat -v -T
$pre_smart$inm_nbr -f $inm_dir$dial <$modemdev >$modemdev
chatcode=$?
# Wenn OK dann Schleife
verlassen
if [ $chatcode -eq 0 ]
then
i=10
fi
# Wenn Timeout
if [ $chatcode -eq 3 ]
then
log TIMEOUT
sleep 5
fi
# Wenn BUSY (erstes ABORT
in chat)
if [ $chatcode -eq 4 ]
then
log BUSY
sleep 10
fi
if [ $chatcode -eq 5 ]
then
log "NO CARRIER"
sleep 20
fi
done
# Anwahlversuch mit Sunrise, wenn
SmartPhone gescheitert
if [ $i -lt 5 ]
then
for (( i = 0 ; i < 3 ; i++ ))
do
log "Sunrise $i"
chat -v -T
$pre_sunri$inm_nbr -f $inm_dir$dial <$modemdev >$modemdev
chatcode=$?
# Wenn OK dann Schleife
verlassen
if [ $chatcode -eq 0 ]
then
i=10
fi
# Wenn Timeout
if [ $chatcode -eq 3 ]
then
log TIMEOUT
sleep 5
fi
# Wenn BUSY (erstes ABORT
in chat)
if [ $chatcode -eq 4 ]
then
log BUSY
sleep 10
fi
if [ $chatcode -eq 5 ]
then
log "NO CARRIER"
sleep 20
fi
done
fi
# Anwahl mit Swisscom, wenn
SmartPhone und Sunrise gescheitert
if [ $i -lt 5 ]
then
for (( i = 0 ; i < 3 ; i++ ))
do
log "Swisscom $i"
chat -v -T
$pre_swsco$inm_nbr -f $inm_dir$dial <$modemdev >$modemdev
chatcode=$?
# Wenn OK dann Schleife
verlassen
if [ $chatcode -eq 0 ]
then
i=10
fi
# Wenn Timeout
if [ $chatcode -eq 3 ]
then
log TIMEOUT
sleep 5
fi
# Wenn BUSY (erstes ABORT
in chat)
if [ $chatcode -eq 4 ]
then
log BUSY
sleep 10
fi
if [ $chatcode -eq 5 ]
then
log "NO CARRIER"
sleep 20
fi
done
fi
# Verarbeitung, wenn Verbindung
zustande gekommen
if [ $i -gt 5 ]
then
# Mails an Client senden
sz $temppath$tempzip
<$modemdev >$modemdev
# Mails von Client
empfangen
rz <$modemdev
>$modemdev
sleep 1
# Verbindung trennen
chat -v -f $inm_dir$hangup
<$modemdev >$modemdev
# Mailboxfile löschen
(mit Leerer Datei ueberschreiben)
echo -n '' >
$mailboxpath$mailboxname
fi
# Mgetty weiterfuehren
pkill -CONT mgetty
# Versenden der Nachrichten und
uebergeben der Positionsdaten
sh recv_inmarsat
# Tageslogfile an Hauptlogfile
anhängen
cat $day_log >> $all_log
fi
#!/bin/sh
# Script um die von Inmarsat
empfangenen Daten zu verarbeiten
# und per EMail zu versenden.
# Manuel Raeber
# 9. Dezember 2003
# Pfad und Namen zu der
temporaeren Dateien
inm_dir='/tools/inmarsat/'
inmail='inbox/'
tempzip='client.zip'
# Filename und Zielpfad der
Positions-Daten
pos_file='pos.gps'
map_dir='/tools/map/'
unzip $inm_dir$tempzip -d
$inm_dir$inmail
# Mitgesendetes Positionsfile an
Maptool uebergeben
mv $inm_dir$inmail$pos_file
$map_dir
# Footer an jedes File in $inmail
anhaengen
for file in $inm_dir$inmail*;
do
base=`basename $file`
cat $file $inm_dir/footer
> $file.txt
rm $file
done
# Jedes File in inmail versenden
for file in $inm_dir$inmail*;
do
sendmail < $file
if [ $? -eq 0 ]
then
rm $file
fi
done
rm $temppath$tempzip
# Dialscript ueber SmartPhone
ABORT BUSY
ABORT 'NO CARRIER'
''
ATZ4
OK
ATS9=40
OK
ATS10=15
OK
ATX5
OK
AT&N14
OK
ATDM\T
TIMEOUT 90
ONNECT ''