#!/usr/local/bin/perl
#
# Sends sms warning using smssend and the totalise SMS service
#
# Based on sms.plugin, written by Paul van Tilburg <paul@luon.net>
#
# Written as warning plugin for Checkservice, by Jeroen Latour <q@ds9.com>
#
# Arguments are: -c confdir -h host -p port -s service -r result 

use strict;
use Getopt::Std;
use HTTP::Request::Common;
use LWP::UserAgent;

getopts("h:p:s:c:r:");
my ($host, $port, $service, $confdir) = ($main::opt_h, $main::opt_p, $main::opt_s, $main::opt_c);
my $res;   
my %config = ();
my $key;
my $value;

(! -d "$confdir") and
  die "$0: Can't find config dir ($confdir)\n";
                        
# Parsing global conffile
open (CONFIG, "$confdir/checkservice.conf") or                   
  die "$0: Can't open global configfile " 
      . "'$confdir/checkservice.conf'\n";

while (<CONFIG>) {
  chomp; s/#.*//;
  if (($key, $value) = /^\s*(\S+)\s*=\s*(\S.*)/) { $config{$key} = $value; }
}

# Parsing sms plugin's conffile
open (OCONFIG, "$confdir/plugins/smsnet.conf") or
  die "$0: Can't open plugins' configfile "
      . "'$confdir/plugins/smsnet.conf'\n";

while (<OCONFIG>) {
  chomp; s/#.*//;
  if (($key, $value) = /^\s*(\S+)\s*=\s*(\S.*)/) { $config{$key} = $value; }
}
              
my $lockf = "$config{lockpath}/sms.$host.$service";
my @wmethods = split(":", $config{wmethod});

if (! -r $lockf) {
  unless ((defined $config{phonenr}) || ($config{phonenr})) { die "$0: No phone number specified\n"; }
  unless ((defined $config{country}) || ($config{country})) { die "$0: No country code specified\n"; }
  if ($service eq "-") {
    $res = &sendsms($config{country}, $config{phonenr}, "DOWN $host");
  } else {
    $res = &sendsms($config{country}, $config{phonenr}, "DOWN $service/$host");
  }
  open LOCKF, ">$lockf" or
    die "$0: Could not create lockfile $lockf: $!\n";
  print LOCKF time, "\n";
}

sub sendsms {
  my $country = shift;
  my $phone = shift;
  my $message = shift;
  $message = pack("A126", $message);
  $message = "$message [SW]";

  my $ua = new LWP::UserAgent;
  $ua->agent("Mozilla/3.0 (CheckService)");
  my $res = $ua->request(POST 'http://sms.totalise.net/send.asp',
       [ AREA    => $country,
         tnumber => $phone,
         email   => '',
         snumber => '',
         message => $message
       ]
     );
  return $res->is_success;
}


syntax highlighted by Code2HTML, v. 0.9.1