#!/usr/bin/perl -w

# Skrypt wysyłający SMS-y na wszystkie polskie sieci przez bramkę
# www.smsall.glt.pl
#
# FIXME: niedokończony
# 
# Napisany w Perlu. 
# Wymaga: perl + LWP (RPM dla RedHat: perl-libwww)
#
# (c) 2003 Jacek Fiok <jfiok@jfiok.org>; http://sms.jfiok.org
#
# wysyła wiadomości: do 150 znaków; sieci: wszystkie.

use strict;
use HTTP::Request::Common;
use HTTP::Cookies;
use LWP::UserAgent;
 use LWP::Debug qw(+ -conns);
 LWP::Debug::trace('send()');

# ----------------------- pomocnicze -------------------------
my $debug = 1;				# czy "tryb gadatliwy"

sub debug { if ($debug) { print "[", shift, "]\n"; } }

sub zakoncz {
  my ($tekst, $ret) = @_;
  print "$tekst\n";
  exit $ret;
}

# format struktury danych:
# string który możemy znaleźć w odpowiedzi z serwera =>
# [co należy z niego wywnioskować-opis, kod powrotu ze skryptu ]
my %odpowiedzi = (
	"Skrzynka wiadomości" => ["Wszystko OK", 0],
	"Zły numer" => ["Zły numer!", 2],
	"został wyczerpany" => ["Limit wiadomości na dziś przekroczony!", 3]
);

# główna procedurka analizująca odpowiedź serwera
# jeśli nie umiemy nic wywnioskować -> rzucamy [Nieznana Odpowiedz, 127]
sub analizujWynik {
	my $res = $_[0];
	my $searchString;
	my @val;
	while ( ($searchString, @val) = each (%odpowiedzi) ) {
	  if ($res =~ /$searchString/ ) {
		  print $odpowiedzi{$searchString}[0], "\n";
		  exit $odpowiedzi{$searchString}[1];
	  }		  
	}
	# jeśli nie znaleziono w opisach
	print "Nieznana odpowiedź:\n$res\n";
	exit 127;
}

# getCookie ($nazwa) -> wartość cookie; wymaga: $cookie_jar.
my $ckey = "";
my $cval = "";
my $cookie_jar = HTTP::Cookies->new;
# zwraca wartość ciasteczka dla podanej nazwy klucza
sub cookieScanner {
	# my $i; for ($i=0; $i<5; $i++) { print $i, " : ", $_[$i], "\n"; }
	($ckey eq $_[1]) and $cval = $_[2]; 
}
sub getCookie {
	$cval = "";
	$ckey = shift;
	$cookie_jar->scan (\&cookieScanner);
	return $cval;
}

my $ua = new LWP::UserAgent;
$ua->timeout(30);
$ua->agent("Mozilla/5.0 Galeon/1.2.7 (X11; Linux i686; U;) Gecko/20021216");
$ua->env_proxy();
$ua->cookie_jar($cookie_jar);

# odwiedza stronę $_[0]; w razie błędu wychodzi z tekstem $_[1] i kodem $_[2].
# w zmiennej globalnej $res ląduje HTML -- wynik zapytania.
my $res; my $req;
sub visit {
        $res = $ua->request (GET $_[0]);
        if (!($res->is_success)) { zakoncz($_[1], $_[2]); }
}
# ----------------------- main() -----------------------------

select(STDERR); $| = 1;     # make unbuffered
select(STDOUT); $| = 1;     # make unbuffered

if ($#ARGV != 1 ) { die "Zła ilość parametrów - podaj numer i treść sms-a"; }

my $numer = $ARGV[0];
my $tresc = $ARGV[1];

$numer =~ s/^\+48//;
$numer =~ s/^00//;

push @{ $ua->requests_redirectable }, 'POST';

# --------- konwersacja -----------

# 1. get sms-index
$req = GET 'http://www.smsall.glt.pl/sms.php', [
	tekst => $tresc,
	podpis => 'SMS',
	kraj => '+48',
	numer => $numer
];

debug ("sending");

$res = $ua->request($req);
if (!($res->is_success)) { zakoncz("Błąd przy wysyłaniu - zerwane połączenie [1]", 1); }
#if (!($res->content =~ /Limit wiadomości/)) { 
#	zakoncz("Błąd przy logowaniu - nieprawidłowe hasło [1]", 1); 
#} 
print $res->content;
# debug ("zalogowany");
# zakoncz ("Wszystko OK", 0); 

