#!/bin/sh

# postsms
# liest Handynummer von der Kommandozeile und Nachricht von stdin. 
# Copyright (C) Harald Milz und Linux New Media AG 2001
# Licensed under the GNU General Public License Version 2

if [ $# -gt 4 ] ; then
    echo "maximal vier Rufnummern gleichzeitig!"
    echo "der Rest geht verloren."
    exit
fi

BASEURL="http://freesms.web.de/SMS+schreiben"
SMSNUMS=$*
# so tun als wäre man Netscape
USERAGENT="Mozilla/5.0"

# temporäres Verzeichnis herstellen
TEMPDIR=$(mktemp -d /tmp/postsms.XXXXXX)
cd $TEMPDIR
# und Nachricht einfangen, nur erste 120 Zeichen, eine Zeile
MESSAGE=$(fmt -w 120 - | head -1)

# session handle besorgen
# holt den Namen der Cookie-Imagedatei und der ACTION
lynx -source "$BASEURL"/ > text.html
IMAGE=$(sed -n 's/^.*src=\"\/\(.*SMS.*.*\)\" wi.*/\1/ip' text.html)
ACTION=$(sed -n 's/^.*action=\"\/\(.*\)" method.*/\1/ip' text.html)
CSTRING=$(sed -n 's/^.*c_cstring.*value=\"\(.*\)\">.*$/\1/ip' text.html)
UID1=$(sed -n 's/^.*uid1.*value=\"\([^\"]*\)\">.*$/\1/ip' text.html)

# holt die Imagedatei selbst und extrahiert die dreistellige Zahl
COOKIE=$(lynx -dump "http://freesms.web.de/$IMAGE" | giftopnm | gocr - | sed 's/ *//')

# da das Cookie eine gewisse Lebensdauer hat, können wir es 
# gleich zeitsparend mehrfach nutzen (max viermal). 

for NUM in $SMSNUMS ; do
    # alle nicht-Ziffern rauswerfen
    NUM=$(echo $NUM | sed 's/[^[:digit:]]//g')
    PROVIDER=$(echo $NUM | sed -n 's/^\(....\).*/\1/p')
    NUMMER=$(echo $NUM | sed -n 's/^....//p')

    # jetzt Nachricht posten und freuen. 
    QUERY="provider=$PROVIDER"
    QUERY="$QUERY&smsnr=$NUMMER"
    QUERY="$QUERY&message=$MESSAGE"
    QUERY="$QUERY&magicnumber=$COOKIE"
    QUERY="$QUERY&uid1=$UID1"
    QUERY="$QUERY&banner1.x=1"
    QUERY="$QUERY&banner1.y=1"
    QUERY="$QUERY&sendemail="
    QUERY="$QUERY&email="
    QUERY="$QUERY&rv_counter=0"
    QUERY="$QUERY&c_cstring=$CSTRING"

    echo -e "$QUERY\n---" |
    lynx -post_data -useragent="$USERAGENT" "http://freesms.web.de/$ACTION" >/dev/null
    echo message sent to $NUM
done 

cd
rm -fr $TEMPDIR





