#!/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  ''