[ILUG] Vodafone Webtext
[ILUG] Vodafone Webtext
Darragh
lists at digitaldarragh.com
Wed Jan 21 16:14:42 GMT 2004
sorry to drag this a different way but someone may be able to offer a
suggestion.
Could an app like this be written for Winblows or for web use?
Visually impaired and blind users of the vodafone web site have a
considderable amount of problems with the interface and a simplified method
of sending text messages would be great.
A web version of this which could be used on both Winblows and Linux would
be ideal as using the vodafone site with links is even more difficult than
when in Internet exploder.
At the moment, three people out of the VIP community have phones which will
speek incoming and outgoing text messages so the web service offered by
Vodafone is particularly helpful although the problem of reading them still
applies.
Any thoughts would be appreciated.
Darragh
----- Original Message -----
From: "Greg McRandal" <mcrandal at maths.tcd.ie >
To: "Irish Linux Users Group" <ilug at linux.ie >
Sent: Wednesday, January 21, 2004 3:58 PM
Subject: Re: [ILUG] Vodafone Webtext
> On Wed, Jan 21, 2004 at 11:52:01AM -0000, Paul Kelly :: Blacknight
Solutions wrote:
> > >
> > > [ logging in to 0876997286 at vodafone.ie ... ]
> > > [ login successful ]
> > > [ message sending failed; unknown response from server ]
> > > Retry ? y/n [n]: q
> > > [ okay, I'm outta here. ]
> > >
> > >
> > > Now sadly not knowing Perl I cannot debug this myself,
> > > suggestions as to what I'm doing wrong are most welcome.
> >
> >
> > I was seeing that too.
> >
> > Just check to make sure all the perl modules are installed, especially
> > Net::SSLeay
> >
> > Paul
>
> Sadly I don't have root access to the box I want to run it on, it being a
college box and all. Is it possible to install it as a user?
>
> Thanks,
>
> Greg
>
>
>
>
>
>
>
>
>
>
>
>
> >
> >
> > >
> > > I've attached the script I'm using.
> > >
> > > Thanks,
> > >
> > > Greg
> > >
> > >
> > > On Mon, Jan 19, 2004 at 11:47:24AM +0000, Conall O'Brien wrote:
> > > > On Mon, Jan 19, 2004 at 11:45:06AM GMT, Paul Flynn
> > > > <fl1979ie at utvinternet.com > incoherently babbled:
> > > >
> > > > > Hi,
> > > > >
> > > > > I have just noticed that vodafone has incressed there
> > > webtext to 300
> > > > > and
> > > > > allows the ability to text any network.
> > > > >
> > > > > I was wondering what would the best way to script it to post the
> > > > > form in
> > > > > a script ? I know lynx's has -cmd_log option and all but
> > > was wondering
> > > > > if there was a easyer way.
> > > > >
> > > > > To make it a bit clear I would look to have a script that
> > > will log
> > > > > in
> > > > > and post the txt from the cmd line?
> > > >
> > > > There's already at least one script to do this. It's called vodasms
> > > > and it
> > > > based on o2sms writtem by mackers at netsoc.tcd.ie. See
> > > attached for the
> > > > script. Comments indicate the perl modules needed from CPAN.
> > > >
> > > > --
> > > >
> > > > Conall O'Brien
> > > >
> > > > +353 (0)87 9194139 | http://www.conall.net
> > > >
> > > > GPG Key: http://www.conall.net/gpg/
> > > >
> > > > How C++ is like teenage sex:
> > > >
> > > > 1. It is on everyone's mind all the time.
> > > > 2. Everyone talks about it all the time.
> > > > 3. Everyone thinks everyone else is doing it.
> > > > 4. Almost no one is really doing it.
> > > > 5. The few who are doing it are: A. Doing it poorly. B.
> > > Sure it will
> > > > be better next time. C. Not practising it safely.
> > >
> > > > #!/usr/bin/perl
> > > >
> > > > # $Id: o2sms,v 2.29 2003/11/05 11:11:00 mackers Exp $
> > > > #
> > > > # o2sms
> > > > # a script to send sms's using o2.ie (needs an account)
> > > > # http://www.mackers.com/projects/o2sms/
> > > > #
> > > > # required modules:
> > > > # HTML::Parser
> > > > # IO::Socket::SSL
> > > > # Net::SSLeay
> > > > # Crypt::SSLeay
> > > > # libwww-perl
> > > > # URI
> > > >
> > > > # -- perl modules
> > > > use strict;
> > > > use LWP::UserAgent;
> > > > use HTTP::Request::Common;
> > > > use HTTP::Cookies;
> > > > use URI::Escape;
> > > > use POSIX qw(strftime);
> > > >
> > > > # -- global vars
> > > > my $cvsid = '$Id: o2sms,v 2.29 2003/11/05 11:11:00 mackers
> > > Exp $'; my
> > > > $version = (split(/ /,$cvsid))[2]; my $doreadconf = 0;
> > > > my $showhelp = 0;
> > > > my $debug = 0;
> > > > my $dontsend = 0;
> > > > my $loginbutdontsend = 0;
> > > > my $dontfill = 1;
> > > > my $dontsplit = 0;
> > > > my $dontreuse = 0;
> > > > my $dontuc = 1;
> > > > my $dol_login_url = 'https://apps.o2.ie/NASApp/Portal/Login';
> > > > my $dol_smsform_url =
> > > 'http://webtext.o2.ie/NASApp/TM/O2/proc/sendMessage.jsp';
> > > > my $dol_login_referrer = 'http://www1.o2.ie/home';
> > > > my $dol_smsform_referrer =
> > > 'https://apps.o2.ie/NASApp/redirects/grouptext/webtext.jsp';
> > > > my $voda_login_url =
> > > 'https://www.vodafone.ie/servlet/ie.vodafone.servlets.LoginServlet';
> > > > my $voda_login_referrer = 'http://www.vodafone.ie/';
> > > > my $voda_smsform_referrer =
> > > 'http://www.vodafone.ie/myvodafone/textandwap/index.jsp';
> > > > my $voda_smsform_url =
> > > 'https://www.vodafone.ie/myvodafone/textandwap/webtext/index.jsp';
> > > > my $single_max_length = 160;
> > > > my $sms_max_length = 500;
> > > > my $expiresecs = 1800;
> > > > my $man_delim = "\\\\\\\\";
> > > > my $username = ( getpwuid $< ) [0];
> > > > my $password = "";
> > > > my $sig = "";
> > > > my @recips;
> > > > my @numbers;
> > > > my @message_parts;
> > > > my $message;
> > > > my %aliases;
> > > > my $ua = LWP::UserAgent->new;
> > > > my $proxy = $ENV{HTTP_PROXY};
> > > > my %useragentstrs = ("Mozilla/4.0 (compatible; MSIE 5.5;
> > > Windows NT 5.0)" => "26",
> > > > "Mozilla/4.0 (compatible; MSIE 6.0;
> > > Windows NT 5.1)" => "68",
> > > > "Mozilla/5.0 (X11; U; Linux i686; en-US;
> > > rv:1.0.1) Gecko/20020823 Netscape/7.0" => "72",
> > > > "Mozilla/4.0 (compatible; MSIE 5.5;
> > > Windows NT 5.1)" => "80",
> > > > "Mozilla/4.0 (compatible; MSIE 6.0;
> > > Windows 98)" => "85",
> > > > "Mozilla/4.0 (compatible; MSIE 5.01;
> > > Windows NT 5.0)" => "93",
> > > > "Mozilla/5.0 (Windows; U; Windows NT 5.1;
> > > en-US; rv:0.9.4.1) Gecko/20020314 Netscape6/6.2.2" => "95",
> > > > "Opera/6.05 (Windows 2000; U) [en]" => "96",
> > > > "Mozilla/4.0 (compatible; MSIE 5.5;
> > > Windows NT 4.0)" => "97",
> > > > "Opera/7.0 (Windows 2000; U)" => "98",
> > > > "Mozilla/5.0 (X11; U; SunOS sun4u; en-US;
> > > rv:1.1) Gecko/20020827" => "99",
> > > > "Mozilla/4.0 (compatible; MSIE 5.21;
> > > Mac_PowerPC)" => "100"
> > > > );
> > > > my $is_o2 = 0;
> > > > my $is_voda = 0;
> > > > my $is_meteor = 0;
> > > > my $cookiefile;
> > > > my $msgfile;
> > > > my $conffile;
> > > >
> > > > # -- get command name
> > > > if ($0 =~ /voda(fone)?sms$/i) {
> > > > $is_voda = 1;
> > > > $cookiefile = $ENV{HOME} . "/.vodasmscookie";
> > > > $msgfile = $ENV{HOME} . "/.vodasmsmsg";
> > > > $conffile = $ENV{HOME} . "/.vodasmsrc";
> > > > } elsif ($0 =~ /met(eor)?sms$/i) {
> > > > $is_meteor = 1;
> > > > $cookiefile = $ENV{HOME} . "/.meteorsmscookie";
> > > > $msgfile = $ENV{HOME} . "/.meteorsmsmsg";
> > > > $conffile = $ENV{HOME} . "/.meteorsmsrc";
> > > > } else {
> > > > #if ($0 =~ /o2sms$/i) {
> > > > $is_o2 = 1;
> > > > $cookiefile = $ENV{HOME} . "/.o2smscookie";
> > > > $msgfile = $ENV{HOME} . "/.o2smsmsg";
> > > > $conffile = $ENV{HOME} . "/.o2smsrc";
> > > > }
> > > >
> > > > # -- read user conf file
> > > > read_config_file($conffile);
> > > >
> > > > # -- parse command line
> > > > while ($_ = shift) {
> > > > if ($_ eq "-u") {
> > > > $username = shift;
> > > > $dontreuse = 1;
> > > > } elsif ($_ eq "-p") {
> > > > $password = shift;
> > > > } elsif ($_ eq "-d") {
> > > > $debug = 1;
> > > > } elsif ($_ eq "-f") {
> > > > $dontfill = 1;
> > > > } elsif ($_ eq "-s") {
> > > > $dontsplit = 1;
> > > > } elsif ($_ eq "-r") {
> > > > $dontreuse = 1;
> > > > } elsif ($_ eq "-C") {
> > > > $dontuc = 0;
> > > > } elsif ($_ eq "-c") {
> > > > $conffile = shift;
> > > > $doreadconf = 1;
> > > > $dontreuse = 1;
> > > > } elsif ($_ eq "-P") {
> > > > $proxy = shift;
> > > > } elsif ($_ eq "-v") {
> > > > print "o2sms version $version\n";
> > > > exit(0);
> > > > } elsif ($_ eq "--dont-send") {
> > > > $dontsend = 1;
> > > > } elsif (/^\-\-?\w+/) {
> > > > $showhelp = 1;
> > > > } else {
> > > > push (@recips, $_);
> > > > }
> > > > }
> > > >
> > > > # -- display help message
> > > > if ((scalar(@recips) == 0) || ($showhelp == 1)) {
> > > > print STDERR <<EOF;
> > > > Usage: $0 [options] <number|alias|group> [<number|alias|group> ...]
> > > >
> > > > $0 is a script to send SMSs via the command line. It
> > > works by sending
> > > > requests to your phone operator's website (ie. simulating
> > > a browser). The
> > > > script requires that you have a valid web account, which
> > > is available to o2,
> > > > Vodaphone and Metor phone owners. At the time of writing,
> > > o2 give 250 free
> > > > web texts per month, Vodaphone 300 and Meteor 30.
> > > >
> > > > Options:
> > > > -u <username> use this username (defaults to unix
> > > username or config file
> > > > username) (implies -r)
> > > > -p <password> use this password (defaults to config file
> > > password or
> > > > prompts for password)
> > > > -c <conffile> use this config file (defaults to
> > > ~/.o2smsrc) (implies -r)
> > > > -s don't split message over multiple SMSs
> > > > -f don't fill the end of the message with
> > > spaces (to clear ad)
> > > > -r don't reuse cookies when logging in
> > > > -C capitalise first letter in every sentence
> > > > -P <proxy> use this http proxy
> > > > -v print version
> > > > -h prints this help message
> > > > -d debug mode - prints the entire http dialog
> > > >
> > > > Config File Format:
> > > > username <username>
> > > > password <password>
> > > > alias <name> <number> [number|alias ...]
> > > > sig <text-to-place-at-end-of-every-sms>
> > > > proxy <http://host:port/ >
> > > > nosplit
> > > > nofill
> > > > noreuse
> > > > capitalise
> > > >
> > > > EOF
> > > > exit (0);
> > > > }
> > > >
> > > > # -- read config file again
> > > > if ($doreadconf == 1) {
> > > > unless (read_config_file($conffile)) {
> > > > print STDERR "Couldn't open $conffile.\n";
> > > > exit(1);
> > > > }
> > > > }
> > > >
> > > > # -- explode groups
> > > > my @recips2;
> > > > foreach my $recip (@recips) {
> > > > if(ref($aliases{$recip}) eq 'ARRAY'){
> > > > # is group
> > > > push (@recips2, @{$aliases{$recip}});
> > > > } else {
> > > > push (@recips2, $recip);
> > > > }
> > > > }
> > > > @recips = @recips2;
> > > >
> > > > # -- check for aliases
> > > > for (my $i=0; $i<scalar(@recips); $i++) {
> > > > my $recip = $recips[$i];
> > > > if ($recip =~ /[^\d]/) {
> > > > # has non-numeric character - might be alias
> > > > if (exists($aliases{$recip})) {
> > > > $numbers[$i] = $aliases{$recip};
> > > > } else {
> > > > print STDERR "Not a valid alias: $recip.\n";
> > > > exit (1);
> > > > }
> > > > } else {
> > > > $numbers[$i] = $recip;
> > > > }
> > > > }
> > > >
> > > > foreach my $number (@numbers) {
> > > > # -- check number
> > > > if ($number =~ /^0(8[567])(\d*)/) {
> > > > # is an irish mobile number - check length
> > > > if (length($number) != 10) {
> > > > print STDERR "Number is the wrong length for an Irish
> > > mobile number.\n";
> > > > exit (1);
> > > > }
> > > > # length ok - make international
> > > > $number = "00353$1$2";
> > > > } elsif ($number =~ /^00(\d*)/) {
> > > > # is an international number
> > > > } else {
> > > > # ?
> > > > print STDERR "Not a valid number: $number. Please use
> > > 08[567]xxxxxxx or international number.\n";
> > > > exit(1);
> > > > }
> > > > if (($is_voda) && ($number !~ /^00353/)) {
> > > > print STDERR "Vodafone webtexts can only be sent to
> > > Irish mobile numbers.\n";
> > > > exit(1);
> > > > }
> > > > }
> > > >
> > > > # -- print welcome message
> > > > print "[ recipient(s) : ";
> > > > for (my $i=0; $i<scalar(@recips); $i++) {
> > > > my $recip = $recips[$i];
> > > > if ($recip =~ /[^\d]/) {
> > > > # is alias, print both
> > > > print "$recip (" . $numbers[$i] . ") ";
> > > > } else {
> > > > # just number
> > > > print $numbers[$i] . " ";
> > > > }
> > > > }
> > > > print "]\n";
> > > >
> > > > # -- set the adjusted max length (with sig) $single_max_length =
> > > > $single_max_length - length($sig);
> > > >
> > > > # -- get the text
> > > > while (<STDIN>) {
> > > > last if (/^\./);
> > > > $message .= $_;
> > > > }
> > > >
> > > > # -- prepare the message
> > > > chomp($message); # kill last new line
> > > > $message =~ s/\n/ /gsm; # make other newlines spaces
> > > > unless ($dontuc) { # captialise first letter of every sentence
> > > > $message =~ s/(^\w)/uc($1)/gsme;
> > > > $message =~ s/([\.\?\!:\\]\s*)(\w)/$1 . uc($2)/gsme;
> > > > }
> > > > #$message =~ s/^$man_delim//; # remove unneeded splitters
> > > #$message =~
> > > > s/$man_delim$//; # remove unneeded splitters
> > > >
> > > > # -- split up the message
> > > > if (length($message) > $sms_max_length) {
> > > > print "[ warning : very long message, truncating to
> > > $sms_max_length chars ]\n";
> > > > $message = substr($message,0,$sms_max_length);
> > > > print $message;
> > > > }
> > > > if ((length($message) > $single_max_length) || ($message =~
> > > /$man_delim/)) {
> > > > if ($dontsplit && ($message !~ /$man_delim/)) {
> > > > print "Message is too long (" . length($message) .
> > > "/$single_max_length), exitting.\n";
> > > > exit(1);
> > > > }
> > > > my $restmsg = $message;
> > > > my $partmsg;
> > > > while ((length($restmsg) > $single_max_length) ||
> > > ($restmsg =~ /$man_delim/)) {
> > > > # if manual split, and message part can fit, then add
> > > the first bit and loop
> > > > if ($restmsg =~ /^(.*?)$man_delim(.*)/) {
> > > > if (length($1) < $single_max_length) {
> > > > $partmsg = $1;
> > > > $restmsg = $2;
> > > > push (@message_parts, $partmsg) if ($partmsg =~ /\S/);
> > > > next;
> > > > }
> > > > }
> > > > # if we don't want to split..
> > > > if ($dontsplit) {
> > > > print "Message part " . (scalar(@message_parts) + 1)
> > > . " is too long (" . length($restmsg) .
> > > "/$single_max_length), exitting.\n";
> > > > exit(1);
> > > > }
> > > > # message too long, split at the most natural place
> > > > ($partmsg, $restmsg) =
> > > &split_message($single_max_length, $restmsg);
> > > > push (@message_parts, $partmsg) if ($partmsg =~ /\S/);
> > > > }
> > > > push (@message_parts, $restmsg . $sig) if ($restmsg =~ /\S/);
> > > > print "[ warning : long or split message, splitting into " .
> > > > scalar(@message_parts) . " parts ]\n"; } else {
> > > > push (@message_parts, $message . $sig);
> > > > }
> > > > if (scalar(@message_parts) == 0) {
> > > > print "Nothing to do, exitting.\n";
> > > > exit (2);
> > > > }
> > > >
> > > > # -- fill the end of each message part with white spaces to
> > > clear the
> > > > "free web text" ad if (!$dontfill) {
> > > > foreach my $message_part (@message_parts) {
> > > > my $msg_fill = " " x ($single_max_length -
> > > length($message_part) + length($sig));
> > > > $message_part .= $msg_fill;
> > > > }
> > > > }
> > > >
> > > > # -- set the useragent to some random browser (to avoid suspicion!)
> > > > $ua->agent(&get_weighted_rand_elem_from_hash(%useragentstrs));
> > > > print "sms: using user agent: " . $ua->agent . "\n" if ($debug);
> > > >
> > > > # -- set the proxy
> > > > if (($proxy) && ($proxy ne "")) {
> > > > $ua->proxy('http',$proxy);
> > > > $ua->proxy('https',$proxy);
> > > > print "sms: using proxy: $proxy\n" if ($debug);
> > > > }
> > > >
> > > > # -- get a cookie jar from file or login
> > > > my $cj;
> > > > # check for existing cookie jar and use if hasn't expired
> > > > my @fstat = stat($cookiefile);
> > > > if ((@fstat) && ($debug)) {
> > > > print "sms: found cookiejar in $cookiefile with mtime of " .
> > > > strftime("%a %b %e %H:%M:%S %Y", gmtime($fstat[9])) . "\n"; } if
> > > > (($dontreuse == 0) && (@fstat) && ($fstat[9] + $expiresecs
> > > > time())) {
> > > > # reuse the last cookie
> > > >
> > > > # -- print status
> > > > print "[ reusing last login for $username\@" . &get_sp_domain . "
> > > > ... ]\n";
> > > >
> > > > # -- load the cookie file
> > > > $cj = HTTP::Cookies->new(ignore_discard => 1);
> > > > $cj->load($cookiefile);
> > > >
> > > > # -- touch the cookie jar to keep it up to date
> > > > utime (time, time, $cookiefile);
> > > > } else {
> > > > # cookie jar non existant or expired, login instead
> > > >
> > > > # -- print status
> > > > print "[ logging in to $username\@" . &get_sp_domain . " ... ]\n";
> > > >
> > > > # -- get the password
> > > > if ($password eq "") {
> > > > system "stty -echo"; # Echo off
> > > > print "Password: "; # Prompt for password
> > > > chomp($password = <STDIN>); # Remove newline
> > > > system "stty echo"; # Echo on
> > > > print "\n";
> > > > }
> > > >
> > > > # -- login
> > > > if ($dontsend > 0) {
> > > > $cj = &test_login ($username, $password);
> > > > } elsif ($is_o2) {
> > > > $cj = &o2_login ($username, $password);
> > > > } elsif ($is_voda) {
> > > > $cj = &voda_login ($username, $password);
> > > > } elsif ($is_meteor) {
> > > > $cj = &meteor_login ($username, $password);
> > > > }
> > > > if (!defined($cj)) {
> > > > print STDERR "[ login failed; your username or password
> > > is incorrect ]\n";
> > > > exit(1);
> > > > } else {
> > > > print "[ login successful ]\n";
> > > > }
> > > > }
> > > >
> > > > # -- copy cookies from apps.o2.ie to webtext.o2.ie
> > > > #sub cookie_copy {
> > > > # my $version = $_[0];
> > > > # my $key = $_[1];
> > > > # my $val = $_[2];
> > > > # my $path = "/NASApp/TM";
> > > > # my $domain = "webtext.o2.ie";
> > > > # $cj->set_cookie($version,$key,$val,$path,$domain);
> > > > #}
> > > > #$cj->scan(\&cookie_copy);
> > > > #$cj->save($cookiefile);
> > > >
> > > > # -- pick up the cookies from the other server
> > > > if (($dontsend == 0) && ($is_o2)) {
> > > > print "sms: picking up cookies from
> > > $dol_smsform_referrer\n" if ($debug);
> > > > my $req = HTTP::Request->new();
> > > > $req->uri($dol_smsform_referrer);
> > > > $req->method("GET");
> > > > $req->protocol("HTTP/1.0");
> > > > $cj->add_cookie_header($req);
> > > > print $req->as_string() if ($debug);
> > > > my $resp = $ua->send_request($req);
> > > > $cj->extract_cookies($resp);
> > > > print $resp->as_string() if ($debug);
> > > > $req->uri($resp->header("Location"));
> > > > print $req->as_string() if ($debug);
> > > > $resp = $ua->send_request($req);
> > > > $cj->extract_cookies($resp);
> > > > print $resp->as_string() if ($debug);
> > > > print $cj->as_string() if ($debug);
> > > > }
> > > >
> > > > # -- send off the message
> > > > foreach my $number (@numbers) {
> > > > #foreach my $message (@message_parts) {
> > > > for (my $i=0; $i<scalar(@message_parts); $i++) {
> > > >
> > > > my $retry;
> > > >
> > > > do {
> > > >
> > > > my $message = $message_parts[$i];
> > > > my $failed = 0;
> > > > $retry = 0;
> > > >
> > > > my $retval;
> > > > if (($dontsend > 0) || ($loginbutdontsend > 0)) {
> > > > $retval = &test_send_sms($cj,$message,$number);
> > > > } elsif ($is_o2) {
> > > > $retval = &o2_send_sms($cj,$message,$number);
> > > > } elsif ($is_voda) {
> > > > $retval = &voda_send_sms($cj,$message,$number);
> > > > } elsif ($is_meteor) {
> > > > $retval = &meteor_send_sms($cj,$message,$number);
> > > > }
> > > >
> > > > # get a nice message
> > > > my $partmsg = "";
> > > > if (scalar(@message_parts) > 1) {
> > > > $partmsg = " (part " . ($i+1) . " of " .
> > > scalar(@message_parts) . ")";
> > > > }
> > > >
> > > > # -- check return values
> > > > if (defined($retval) && ($retval == -1)) {
> > > > # unknown repsonse.
> > > > print STDERR "[ message sending failed; unknown
> > > response from server ]\n";
> > > > $failed = 1;
> > > > } elsif ($retval == -2) {
> > > > # message sent, but we don't know how many are left
> > > > print "[ message$partmsg sent to $number, ?
> > > remaining this month ]\n";
> > > > } elsif ($retval == 0) {
> > > > # 0 messages left - probably failed sending
> > > > print STDERR "[ message sending failed; possibly a
> > > malformed message ]\n";
> > > > $failed = 1;
> > > > } elsif ($retval > 0) {
> > > > # message send successful
> > > > print "[ message$partmsg sent to $number, $retval
> > > remaining this month ]\n";
> > > > } else {
> > > > # unknown negative response
> > > > print STDERR "[ message sending failed ]\n";
> > > > $failed = 1;
> > > > }
> > > >
> > > > if ($failed == 1) {
> > > > # ask for a retry
> > > > print "Retry ? y/n [n]: ";
> > > > my $resp = <STDIN>;
> > > > if ($resp =~ /^y/i) {
> > > > $retry = 1;
> > > > } else {
> > > > print "[ okay, I'm outta here. ]\n";
> > > > unlink ($cookiefile);
> > > > exit(1);
> > > > }
> > > > }
> > > > } while ($retry == 1);
> > > > }
> > > > }
> > > >
> > > > # -- write message to message file
> > > > open (SMSMSG, "> $msgfile") || die ("Can't write to message
> > > file!");
> > > > print SMSMSG "$message\n"; close (SMSMSG);
> > > >
> > > > # -- quit with success
> > > > exit(0);
> > > >
> > > > sub o2_login {
> > > > my ($username, $password) = @_;
> > > > print "Logging in... \n" if ($debug);
> > > >
> > > > # my $req = HTTP::Request->new('POST',$dol_login_url,
> > > > # [ referrer => $dol_login_referrer,
> > > > # username => $username,
> > > > # password => $password
> > > > # ]);
> > > > #$req->protocol("HTTP/1.0");
> > > > #my $res = $ua->request($req);
> > > >
> > > > my $res = $ua->post($dol_login_url,
> > > > [ referrer => $dol_login_referrer,
> > > > username => $username,
> > > > password => $password
> > > > ]);
> > > >
> > > > my $lresp = $res->as_string();
> > > > print $lresp if ($debug);
> > > >
> > > > # check for a broken server
> > > > if ($res->code == 500) {
> > > > print STDERR "[ login failed; server returned error 500
> > > (Internal Server Error) ]\n";
> > > > exit(1);
> > > > }
> > > >
> > > > # check for invalid username
> > > > #if ($lresp =~ /your username or password is incorrect/) {
> > > > #if (($res->is_redirect) && ($lresp =~ /error_login_page/)) {
> > > > if ($lresp =~ /Sorry, your username or password is incorrect./) {
> > > > return undef;
> > > > #} elsif ($lresp =~ /Welcome.*back.*$username/i) {
> > > > } else {
> > > > my $cookie_jar = HTTP::Cookies->new(ignore_discard => 1);
> > > > $cookie_jar->extract_cookies($res);
> > > >
> > > > # save the cookies so we can reuse them
> > > > if (defined($cookie_jar) && ($dontreuse == 0)) {
> > > > $cookie_jar->save($cookiefile);
> > > > }
> > > > return $cookie_jar;
> > > > }
> > > > }
> > > >
> > > > sub o2_send_sms {
> > > > my ($cookie_jar, $message, $number) = @_;
> > > >
> > > > # remove whitespace at beginning of message
> > > > $message =~ s/^\s*//;
> > > >
> > > > # encode the message for sending
> > > > $message = uri_escape($message);
> > > >
> > > > # get what to send to server
> > > > #my $msgsize = 132 - length($message);
> > > > my $msgsize = length($message);
> > > > my $postmsg =
> > > >
> > > "msisdn=$number&Msg=$message&recipients=1&grpSTR=&ConSTR=&command=send
> > > > &NumMessages=1";
> > > >
> > > > # construct the request for sending the message
> > > > my $req = HTTP::Request->new();
> > > > $req->push_header("Referer" => $dol_smsform_url);
> > > > $req->push_header("Referrer" => $dol_smsform_url);
> > > > $req->push_header("Host" => "webtext.o2.ie");
> > > > $req->push_header("Cookie2" => "\$Version=\"1\"");
> > > > $req->push_header("Content-Type" =>
> > > "application/x-www-form-urlencoded");
> > > > $req->push_header("Content-Length" => length($postmsg));
> > > > $req->uri($dol_smsform_url);
> > > > $req->method("POST");
> > > > $req->protocol("HTTP/1.0");
> > > >
> > > > #$req = HTTP::Request->new();
> > > > #$req->uri($dol_smsform_url . "?" . $postmsg);
> > > > #$req->method("GET");
> > > > #$req->protocol("HTTP/1.0");
> > > >
> > > > $cookie_jar->add_cookie_header($req);
> > > > $req->content($postmsg);
> > > > print $req->as_string() if ($debug);
> > > >
> > > > my $resp = $ua->request($req);
> > > >
> > > > # print if debug
> > > > print $resp->as_string() if ($debug);
> > > >
> > > > # if we don't get redirected to "sent.jsp" then there's
> > > some problem
> > > > if ($resp->header("Location") !~ /sent\.jsp/i) {
> > > > return -1;
> > > > }
> > > >
> > > > # make redirect absolute
> > > > my $redirh = $resp->header("Location");
> > > > $redirh =~ s#\.\.\/#http://webtext.o2.ie/NASApp/TM/O2/#;
> > > >
> > > > # success - follow the redirect
> > > > $req->method("GET");
> > > > $req->remove_header("Content-Type");
> > > > $req->remove_header("Content-Length");
> > > > $req->content("");
> > > > $req->uri($redirh);
> > > > print $req->as_string() if ($debug);
> > > > $resp = $ua->request($req);
> > > > print $resp->as_string() if ($debug);
> > > >
> > > > # get the html
> > > > my $resp_html = $resp->as_string();
> > > >
> > > > # if number > 0, then message was sent
> > > > #if (($resp_html =~ /Your message has been sent/i) &&
> > > > #($resp_html =~ /You have (\d*) messages remaining this
> > > month/i)) {
> > > > if (($resp_html =~ /<td class="StoryTitle ">Sent <\/td>/i) &&
> > > > ($resp_html =~ /You now have (\d*) Free Messages
> > > remaining this month/i)) {
> > > > #print "Message sent!\n";
> > > > #print "(You have $1 messages left this month)\n";
> > > > return $1;
> > > > } else {
> > > > # the message was sent, but we don't know how many
> > > messages are left
> > > > return -2;
> > > > }
> > > >
> > > > }
> > > >
> > > > sub voda_login {
> > > > my ($username, $password) = @_;
> > > > print "Logging in... \n" if ($debug);
> > > >
> > > > my $res = $ua->post($voda_login_url,
> > > > [ referrer => $voda_login_referrer,
> > > > username => $username,
> > > > password => $password
> > > > ]);
> > > >
> > > > my $lresp = $res->as_string();
> > > > print $lresp if ($debug);
> > > >
> > > > # check for a broken server
> > > > if ($res->code == 500) {
> > > > print STDERR "[ login failed; server returned error 500
> > > (Internal Server Error) ]\n";
> > > > exit(1);
> > > > }
> > > >
> > > > # check for invalid username
> > > > if (($res->is_redirect) && ($res->header("Location") =~
> > > m#myvodafone/services/logon_failed.jsp#i)) {
> > > > return undef;
> > > > #} elsif ($lresp =~ /Welcome.*back.*$username/i) {
> > > > } else {
> > > > my $cookie_jar = HTTP::Cookies->new(ignore_discard => 1);
> > > > $cookie_jar->extract_cookies($res);
> > > >
> > > > # save the cookies so we can reuse them
> > > > if (defined($cookie_jar) && ($dontreuse == 0)) {
> > > > $cookie_jar->save($cookiefile);
> > > > }
> > > > return $cookie_jar;
> > > > }
> > > > }
> > > >
> > > > sub voda_send_sms {
> > > > my ($cookie_jar, $message, $number) = @_;
> > > >
> > > > # remove whitespace at beginning of message
> > > > $message =~ s/^\s*//;
> > > >
> > > > # encode the message for sending
> > > > $message = uri_escape($message);
> > > >
> > > > # make number national
> > > > $number =~ s/^00353/0/;
> > > >
> > > > # get what to send to server
> > > > my $msgsize = length($message);
> > > > my $charleft = $single_max_length - length($message);
> > > > my $postmsg =
> > > > "phoneid1=$number&MESSAGE=$message&num=$charleft&posted=yes";
> > > >
> > > > # construct the request for sending the message
> > > > my $req = HTTP::Request->new();
> > > > $req->push_header("Referer" => $voda_smsform_referrer);
> > > > $req->push_header("Referrer" => $voda_smsform_referrer);
> > > > $req->push_header("Host" => "www.vodafone.ie");
> > > > $req->push_header("Cookie2" => "\$Version=\"1\"");
> > > > $req->push_header("Content-Type" =>
> > > "application/x-www-form-urlencoded");
> > > > $req->push_header("Content-Length" => length($postmsg));
> > > > $req->uri($voda_smsform_url);
> > > > $req->method("POST");
> > > > $req->protocol("HTTP/1.0");
> > > >
> > > > $cookie_jar->add_cookie_header($req);
> > > > $req->content($postmsg);
> > > > print $req->as_string() if ($debug);
> > > >
> > > > my $resp = $ua->request($req);
> > > >
> > > > # get the html
> > > > my $resp_html = $resp->as_string();
> > > >
> > > > # print if debug
> > > > print $resp_html if ($debug);
> > > >
> > > > # this text means successful send
> > > > if ($resp->header("Location") !~ /message_sent/i) {
> > > > return -1;
> > > > }
> > > >
> > > > # go get the page again to see how many messages are left
> > > this month
> > > > my $req2 = HTTP::Request->new();
> > > > $req2->uri($voda_smsform_url);
> > > > $req2->method("GET");
> > > > $req2->protocol("HTTP/1.0");
> > > > $cookie_jar->add_cookie_header($req2);
> > > > $resp = $ua->request($req2);
> > > >
> > > > $resp_html = $resp->as_string();
> > > >
> > > > print $resp_html if ($debug);
> > > >
> > > > if ($resp_html =~ /<td height="16"
> > > width="200"><b>(\d{1,3})<\/b><\/td>/i) {
> > > > return $1;
> > > > } else {
> > > > return -2;
> > > > }
> > > > }
> > > >
> > > > sub meteor_login {
> > > > my ($username, $password) = @_;
> > > > print STDERR "Meteor not supported yet.\n";
> > > > exit -1;
> > > > }
> > > >
> > > > sub meteor_send_sms {
> > > > }
> > > >
> > > > sub test_login {
> > > > my ($username, $password) = @_;
> > > > print "sms: logging in with username $username\n";
> > > > return "x";
> > > > }
> > > >
> > > > sub test_send_sms {
> > > > my ($cookie_jar, $message, $number) = @_;
> > > > $message =~ s/^\s*//;
> > > > $message = uri_escape($message);
> > > > print "sms: message = $message\n";
> > > > print "sms: number = $number\n";
> > > > return 666;
> > > > }
> > > >
> > > > sub split_message {
> > > > my ($len, $message) = @_;
> > > >
> > > > # split the message on a break between words..
> > > > # find the position of the last ' ' in the sentance
> > > > my $pos = index(reverse(substr($message,0, $len-3)), ' ');
> > > > $pos = $len - 3 - $pos;
> > > >
> > > > # the part the message to send
> > > > my $partmessage = substr($message, 0, $pos-1);
> > > > # the remaining part of the message
> > > > my $restofmessage = substr($message, $pos);
> > > >
> > > > return ($partmessage, $restofmessage);
> > > > }
> > > >
> > > > sub read_config_file {
> > > > open (SMSCONF, $_[0]) && do {
> > > > while (<SMSCONF>) {
> > > > chomp();
> > > > next if (/^#/);
> > > > if (/^alias\s*(\w*)\s*(\d*)$/i) {
> > > > $aliases{$1} = $2;
> > > > print "sms: added alias for $1\n" if ($debug);
> > > > } elsif (/^alias\s*(\w*)\s*([\w\d\s]*)/i) {
> > > > my @group = split(/\s+/,$2);
> > > > @{$aliases{$1}} = @group;
> > > > print "sms: added group for $1 (" . join(",
> > > ",@{$aliases{$1}}) . ")\n" if ($debug);
> > > > } elsif (/^username\s*(.*)/i) {
> > > > $username = $1;
> > > > } elsif (/^password\s*(.*)/i) {
> > > > $password = $1;
> > > > } elsif (/^sig\s*(.*)/i) {
> > > > $sig = " $1";
> > > > chomp($sig);
> > > > } elsif (/^proxy\s*(.*)/i) {
> > > > $proxy = $1;
> > > > chomp($proxy);
> > > > } elsif (/^nofill/i) {
> > > > $dontfill = 1;
> > > > } elsif (/^noreuse/i) {
> > > > $dontreuse = 1;
> > > > } elsif (/^nosplit/i) {
> > > > $dontsplit = 1;
> > > > } elsif (/^capitali[sz]e/i) {
> > > > $dontuc = 0;
> > > > } elsif (/^debug\s*on/i) {
> > > > $debug = 1;
> > > > }
> > > > }
> > > > close (SMSCONF);
> > > > return 1;
> > > > };
> > > > return 0;
> > > > }
> > > >
> > > > sub get_rand_elem_from_array {
> > > > my $elem = int(rand(scalar(@_)));
> > > > return $_[$elem];
> > > > }
> > > >
> > > > sub get_weighted_rand_elem_from_hash {
> > > > my %thehash = @_;
> > > > my @uas = sort { $thehash{$b} <=> $thehash{$a} } keys %thehash;
> > > > my $rand = int(rand(100)) + 1;
> > > > foreach my $uastr (@uas) {
> > > > return $uastr if ($rand > $thehash{$uastr});
> > > > }
> > > > return $_[0];
> > > > }
> > > >
> > > > sub get_sp_domain {
> > > > return "o2.ie" if ($is_o2);
> > > > return "vodafone.ie" if ($is_voda);
> > > > return "meteor.ie" if ($is_meteor);
> > > > }
> > >
> > >
> > >
> > >
> > > > --
> > > > Irish Linux Users' Group
> > > > http://www.linux.ie/mailman/listinfo/ilug/
> > > >
> > >
> > >
> >
> --
> Irish Linux Users' Group
> http://www.linux.ie/mailman/listinfo/ilug/
>
More information about the ILUG
mailing list
Read this without the formatting .