#!/bin/sh
# sms.ua - interfejs do wysyania SMSw na telefony rnych sieci
# (c) Jacek Fiok <j.fiok@zodiac.mimuw.edu.pl>
# Strona domowa: http://www.jfiok.org
#
# Ten program moe by wykorzystywany jedynie do celw niekomercyjnych.
# Uywanie go bez wiedzy i zgody autora w celach zarobkowych jest
# niedozwolone.
# Autor nie ponosi odpowiedzialnoci za adne skutki wynike z dziaania 
# programu, nie gwarantuje te poprawnoci jego dziaania.

[ -r /usr/local/share/sms/smsrc ] && . /usr/local/share/sms/smsrc
[ -r /etc/smsrc ] && . /etc/smsrc
[ -r $HOME/etc/smsrc ] && . $HOME/etc/smsrc
[ -r $HOME/.smsrc ] && . $HOME/.smsrc

[ -z "$KATALOG" ] && KATALOG=/usr/local/share/sms
[ -z "$NETCAT" ] && [ -x /bin/nc -o -x /usr/bin/nc ] && NETCAT="nc"
[ -z "$NETCAT" -a -f "$KATALOG/nc" ] && NETCAT=". $KATALOG/nc"
if [ -z "$NETCAT" ]; then
	echo "Nie moge znalezc netcata!"
	exit 127
fi
[ -z "$TIMEOUT" ] && TIMEOUT=20
[ -z "$PRZEGLADARKA" ] && PRZEGLADARKA="Links (current; Linux 2.2.14 i586)"

RAPTIMEOUT=5
HOST=sms.gt.com.ua
echo NETCAT=$NETCAT

NUMER="$1"
NUMER=${NUMER#00}
NUMER=${NUMER#+}
NUMER=${NUMER#48}

WIADOMOSC="$2"
ZOSTALO=$(( 160 - ${#WIADOMOSC} ))
if [ "$ZOSTALO" -lt 0 ]; then
	WIADOMOSC="`echo \"${WIADOMOSC}\" | cut -c 1-160`"
fi

WIADOMOSCENCODED=$( echo "$WIADOMOSC" | tr '\n' ' ' | sed -e 's/%/%25/g' -e 's/\@/%40/g' -e 's/\!/%21/g' -e 's/\#/%23/g' -e 's/\$/%24/g' -e 's/\^/%5e/g' -e 's/&/%26/g' -e 's/\*/%2a/g' -e 's/)/%29/g' -e 's/(/%28/g' -e 's/_/%5f/g' -e 's/\+/%2b/g' -e 's/-/%2d/g' -e 's/=/%3d/g' -e 's/\\/%5c/g' -e 's/|/%7c/g' -e 's/\//%2f/g' -e 's/,/%2c/g' -e 's/:/%3a/g' -e 's/;/%3b/g' -e 's/'\''/%27/g' -e 's/\"/%22/g' -e 's/ /+/g' -e 's/+$//' )

DLUGOSC=$(( 28 + ${#ZOSTALO} + ${#WIADOMOSCENCODED} ))

echo "Wysylane Content-length: ""$DLUGOSC"

ODP=$( echo -e 'POST /SendSM.htm HTTP/1.1\r\nConnection: close\r\nReferer: http://sms.gt.com.ua\r\nUser-Agent: '"$PRZEGLADARKA"'\r\nHost: sms.gt.com.ua:8080\r\nContent-type: application/x-www-form-urlencoded\r\nContent-length: '"$DLUGOSC"'\r\n\r\nSM='"$WIADOMOSCENCODED"'&num='"$ZOSTALO"'&CS=s&MN=48'"$NUMER" | $NETCAT -w "$TIMEOUT" "$HOST" 8080 )

if
	{ echo "$ODP" | grep -q "200 OK" ; [ "$?" = "1" ] ;} 2>/dev/null
then
	echo "Blad przy polaczeniu! Wiadomo moga nie zosta wysana..."
	echo -e "Odpowied serwera: $ODP"
	exit 1
elif
        { echo "$ODP" | grep -qi "was temporarily closed." ;} 2>/dev/null
then
        echo "Dostep zablokowany przez operatora adresata."
        exit 4
elif
	{ echo "$ODP" | grep -qi "network unknown" ;} 2>/dev/null
then
        echo "$ODP" > ua-log.html
	echo "Nieznana sie docelowa!"
	exit 2
elif
	{ echo "$ODP" | grep -qi "Invalid Mobile number" ;} 2>/dev/null
then
        echo "$ODP" > ua-log.html
        echo "Nieprawidowy numer."
        exit 2
elif
	{ echo "$ODP" | egrep 'Daily SM limit.*is reached' > /dev/null ;} 2>/dev/null
then
        echo "Limit wiadomoci przekroczony - \"for this subscriber\"."
        exit 3
elif
        { echo "$ODP" | egrep 'Daily Text-.* limit reached' > /dev/null ;} 2>/dev/null
then
	echo "Limit wiadomoci na dzi przekroczony \"daily text-template\"."
	exit 3
elif
	{ echo "$ODP" | grep -qi "message sent" ;} 2>/dev/null
then
	echo "Wiadomo wysana."
	# skrypt wywoany bez trzeciego parametru - nie czekaj na raporty
	[ $# -eq 2 ] && exit 0
	RPURL="`echo "$ODP" | grep "to check SM de" | cut -f 2 -d '"'`"
	echo "Aby sprawdzi status wiadomoci rcznie:"
	echo "$RPURL"
	echo -n "Czekam na potwierdzenie dorczenia..."
	# sleep $RAPTIMEOUT
	ASK=$( echo "$RPURL" | cut -f 4 -d '/' )
	echo -e "\nZAPYTANIE DO:""$ASK"
ODP=$( echo -e 'GET /'"$ASK"' HTTP/1.1
Host: sms.gt.com.ua:8080
User-Agent: Links (0.96; Unix)
Accept: */*
Accept-Charset: us-ascii, ISO-8859-1, ISO-8859-2, ISO-8859-4, ISO-8895-5, ISO-8859-7, ISO-8895-9, ISO-8859-13, windows-1250, windows-1251, windows-1257, cp437,
cp737, cp850, cp852, cp866, x-cp866-u, x-mac, x-mac-ce, x-kam-cs, koi8-r, koi8-u,
TCVN-5712, VISCII, utf-8
Connection: Keep-Alive
Referer: http://sms.gt.com.ua:8080/SendSM.htm\r\n' | $NETCAT -w "$TIMEOUT" sms.gt.com.ua 8080 ) 
	
	if
        	{ echo "$ODP" | grep -q "200 OK" ; [ "$?" = "1" ] ;} 2>/dev/null
	then
       		echo "\nBlad przy polaczeniu."
        	echo -e "Odpowied serwera: $ODP"
        	exit 1	
	elif
	        { echo "$ODP" | grep -qi "elivered" ;} 2>/dev/null
	then
		echo -e "OK\nWiadomo dorczona!"
	elif
		{ echo "$ODP" | grep -qi "aiting\|In queue to SMSC" ;} 2>/dev/null
	then
		echo -e "OK\nWiadomo czeka w kolejce na serwerze."
	else
		echo -e"\nOdebrano dziwny komunikat. Status wiadomoci nieznany"
		echo "$ODP"
                echo "$ODP" > ua-log.html
	fi
	exit 0
else
        echo "Error, logged: ua-log.html"
        echo "$ODP" > ua-log.html 
#	echo -e "Nieznana odpowiedz:\n$ODP"
	exit 127
fi
