Send SMS by the paid WWW::SMS
authorshort <>
Wed, 19 Mar 2003 00:22:54 +0000 (00:22 +0000)
committershort <>
Wed, 19 Mar 2003 00:22:54 +0000 (00:22 +0000)
+Respect "$HOME/idle" file
SMS idle max: 60 -> 120

Makefile.PL
perlmail-accept

index 67f3d69..c67d531 100644 (file)
@@ -40,6 +40,7 @@ WriteMakefile(
                                "Sys::Syslog"=>0,
                                "URI::Escape"=>0,
                                "User::Utmp"=>0,
+                               "WWW::SMS::TMobileCZ"=>0,
                                },
                "EXE_FILES"=>["lacemail-accept","lacemail-submit","lacemail-sendmail","contacts-n9k2mutt"],
                );
index 43b4d62..f51f0db 100755 (executable)
@@ -46,16 +46,17 @@ require HTTP::Cookies;
 require HTTP::Request;
 require LWP::UserAgent;
 use URI::Escape 'uri_escape';
+require WWW::SMS;
 
 
 my $HOME="/home/lace";
 my $Mail="$HOME/Mail";
 my @ValidUsers=qw(root lace short kratochvil _local);
-my $IdleMax=60;
+my $IdleMax=120;
 my $MaxBodySMS=0x1000; # max bytes to pass to Lingua::EN::Squeeze
 my $SMSmailError='short+err@ucw.cz';
-my $SMSwebRcpt='00420602431329';
-my $SMSmailRcpt=$SMSwebRcpt.'@sms.eurotel.cz';
+my @SMSwebRcpt=qw(420 602 431329);
+my $SMSwebRcpt_username="lace2";
 my $SMScontact='<short@ucw.cz>';
 
 our($Message,$Audit,@AuditStored,$store_ignore,$store_ignorenewmail,$store_profile,$DoBell);
@@ -141,6 +142,7 @@ sub bell
 
 sub useridle
 {
+       return 0 if ! -e $ENV{"HOME"}."/idle";
        my %valid_users=map(($_=>1),@ValidUsers);
        my($idlebest,$linebest);
        for my $utmp (User::Utmp::getut(),{ "ut_line"=>"psaux" }) {
@@ -245,129 +247,6 @@ my($smsi,$smscount)=@_;
        return "";
 }
 
-# FIXME: rewrite &send_cz_eurotel properly by own code
-# patch for http://kiwi.ms.mff.cuni.cz/%7Etom/programming/src/sendsms.tar.gz/sendsms.pl
-my $agent=LWP::UserAgent->new();
-$agent->agent("LaceMail $VERSION; contact=$SMScontact; ");
-my($request1,$response1);      # for &send_cz_eurotel
-my($name,$value,$type,$disabled,$q2);
-
-# &send_cz_eurotel returns: error
-# BEGIN http://kiwi.ms.mff.cuni.cz/%7Etom/programming/src/sendsms.tar.gz/sendsms.pl
-sub parse_inputs
-{
-       my ($resp) = @_;
-       my @inputs;
-       my $ct;
-       my @c;
-       $ct=$resp->content();
-
-       @c=split '>', $ct;
-       grep {
-          if (/(<input|<select|<textarea)([^<>]*)(>|$)/i) { 
-            my $txt=$2, $name="", $value="", $type="x", $disabled=0;
-            my $ipoc;
-            if ($txt =~ /type="([^"]*)"/i) { $type=$1; }
-            elsif ($txt =~ /type=([^" ]*)[ >]/i) { $type=$1; }
-            if ($txt =~ /name="([^"]*)"/i) { $name=$1; }
-            elsif ($txt =~ /name=([^" ]*)[ >]/i) { $name=$1; }
-            if ($txt =~ /value="([^"]*)"/i) { $value=$1; }
-            elsif ($txt =~ /value=([^" ]*)[ >]/i) { $value=$1; }
-            if ($txt =~ /disabled/i) { $disabled=1; }
-            if ($name ne "" && $type ne "" && $type ne "button" && ! $disabled)
-            {
-              $ipoc=$#inputs;
-              $inputs[$ipoc+1][0]=$name;
-              $inputs[$ipoc+1][1]=$value;
-            }
-          }
-        0; } @c;
-       return @inputs;
-}
-
-sub make_query
-{
-       my (@inputs) = @_;
-
-       my $i;
-       my $query = "";
-
-       for ($i=0; $i<=$#inputs; $i++)
-       {
-         my($q1, $q2);
-         if ($i>0) { $query="$query&"; }
-         $q1=uri_escape($inputs[$i][0]);
-         $q2=uri_escape($inputs[$i][1]);
-         $query="$query$q1=$q2";
-       }
-
-       #change @ and space back
-       $query=~ s/%20/+/g;
-       $query=~ s/%40/@/g;
-       return $query;
-}
-
-sub send_cz_eurotel
-{
-       my ($id,$text,$mail,$directd) = @_;
-       my $src_url = "http://www2.eurotel.cz/sms/index.html";
-       my @inputs;
-       my $query = "";
-       my $cookie = HTTP::Cookies->new;
-       my $pref;
-
-       #check if correct number
-       if (substr($id,0,5)!="00420") { return -1; }
-       $pref=substr($id,5,3);
-       if (!($pref eq "601" || $pref eq "602" || $pref eq "606" || $pref eq "607"  || ($pref ge "720" && $pref le "729"))) { return -1; }
-       
-       #get form page, extract cookies
-       $request1=new HTTP::Request('GET', "$src_url?n_pagestyle=new");
-       $response1=$agent->request($request1);
-       if ($response1->code != 200) { return -3; }
-       $cookie->extract_cookies($response1);
-
-       #parse the form
-       @inputs=parse_inputs($response1);
-       
-       #fill the form
-       $inputs[2][1]=substr($id,5,3);
-       $inputs[3][1]=substr($id,8,6);
-       $inputs[4][1]=$mail;
-
-       #direct display
-       $inputs[6][1]="sms";
-       $inputs[6][1]="show" if ($directd>0);
-
-       $inputs[7][1]=$text;
-
-#      for ($i=0; $i<=$#inputs; $i++) { print "[$i] $inputs[$i][0] $inputs[$i][1]\n"; } 
-
-       #make query
-       $query=make_query(@inputs);
-
-       #POST the form
-       my $header = new HTTP::Headers( 
-               'Content-Length' => length($query),
-               'Content-Type' => 'application/x-www-form-urlencoded',
-               'Accept' => '*/*',
-               'Referer' => $src_url
-       );
-       my $request2 = new HTTP::Request('POST',$src_url, $header, $query);
-       $cookie->add_cookie_header($request2);
-       my $response2 = $agent->request($request2);
-
-       if ($response2->code != 200) { return -3; }
-
-       #check for success
-       if ($response2->content() !~ /byla.*odesl.*na na SMS centrum/)
-       {
-         return -2;
-       }
-       return 0;
-}
-# END http://kiwi.ms.mff.cuni.cz/%7Etom/programming/src/sendsms.tar.gz/sendsms.pl
-
 sub smslens
 {
 my($ignorenewmail,$smscount,%args)=@_;
@@ -379,8 +258,7 @@ my($ignorenewmail,$smscount,%args)=@_;
                                $l-=length(smsbuild($_,$smscount));
                                }
                        else {  # send by web
-                               $l-=length("Z WWW x/5: ");
-                               $l-=length(smsbuild($_,POSIX::ceil($smscount/5)));
+                               $l-=6;  # 154 is the max length before split; why?
                                }
                        $l;
                        } (0..$smscount-1));
@@ -396,7 +274,18 @@ my($squeezed,$smscount,@lens)=@_;
                $squeezed=~/^.{0,$len}/s;
                my $frag=$&;
                $squeezed=$';
-               return 0 if send_cz_eurotel($SMSwebRcpt,$frag,"",0);
+               return 0 if 3!=@SMSwebRcpt;
+               local *F;
+               open F,"$HOME/priv/WWW-SMS-$SMSwebRcpt_username.pwd" or return 0;
+               my $pwd=<F>;
+               chomp $pwd;
+               close F;
+               my $sms=WWW::SMS->new(@SMSwebRcpt,$frag,"username"=>$SMSwebRcpt_username,"passwd"=>$pwd);
+               for ($sms->gateways("sorted"=>"reliability")) {
+                       last if $sms->send($_);
+                       Sys::Syslog::syslog("warning","Web SMS send failed: %s",$WWW::SMS::Error);
+                       my $void=$WWW::SMS::Error;      # Prevent: Name "WWW::SMS::Error" used only once
+                       }
                }
        return 1;
 }
@@ -405,27 +294,7 @@ sub smssend_mail
 {
 my($squeezed,$smscount,@lens)=@_;
 
-       my $recalclen=0;
-       for ($smscount=0;$recalclen<length $squeezed;$smscount++) {
-               $recalclen+=$lens[$smscount];
-               }
-       for my $smsi (0..$smscount-1) {
-               my $len=$lens[$smsi];
-               $squeezed=~/^.{0,$len}/s;
-               my $frag=$&;
-               $squeezed=$';
-               my $mail=Mail::Mailer->new("sendmail","-f","$SMSmailError");
-               $mail->open({
-                               "To"=>$SMSmailRcpt,
-                               "From"=>$SMSmailError,  # no longer displayed anyway
-                               "X-LaceMail-Version"=>$VERSION,
-                               "X-LaceMail-Contact"=>$SMScontact,
-                               });
-               print $mail smsbuild($smsi,$smscount).$frag."\n";
-               # FIXME: check errors
-               $mail->close();
-               }
-       return 1;
+       return 0;
 }
 
 sub smssend