#!/usr/bin/perl
# -*- Perl -*-

#---------------------------------------------------------------------
#
# File:
#     alpha_page
# Description:
#     A perl script for sending a text string to an alphanumeric pager.
#     This script is specific for PageMart pagers, but could be modified
#     to work with other pager companies.
# Author:
#     Craig Schaeffer    cschaeffer@yahoo.com
# Change log:
#   - 06/12/99 v 1.0 Created
#   - 05/08/2004     Brian McKissick
#       Added support for Arch wireless one-way and two-way service types.
#       Refer to http://content.arch.com/developer/http.html for more info.
#
#  This software is licensed under the terms of the GNU public license.
#  Copyright 1999 Craig Schaeffer
#-----------------------------------------------------------------------

use strict;

my ($Pgm_Path, $Pgm_Name, $Version);
use vars '$Pgm_Root';           # So we can see it in eval var subs in read_parms

BEGIN {
     ($Version) = q$Revision: 1.3 $ =~ /: (\S+)/; # Note: revision number is auto-updated by cvs
     ($Pgm_Path, $Pgm_Name) = $0 =~ /(.*)[\\\/](.+)\.?/;
     ($Pgm_Name) = $0 =~ /([^.]+)/, $Pgm_Path = '.' unless $Pgm_Name;
     $Pgm_Root = "$Pgm_Path/..";
     eval "use lib '$Pgm_Path/../lib', '$Pgm_Path/../lib/site'"; # Use BEGIN eval to keep perl2exe happy
}


use Getopt::Long;
my %parms;
if (!&GetOptions(\%parms, "h", "help", "message=s", "name:s", "pin:i", "service:s") or
     @ARGV or $parms{h} or $parms{help} or !$parms{message} or !$parms{service}) {
     print<<eof;

$Pgm_Name (version $Version) sends alphanumeric page.

   Usage:

     $Pgm_Name [options]

       -h              => This help text
       -help           => This help text
       -service xxx    => 'PageMart', 'Arch1way', or 'Arch2way' (defaults to 'PageMart' if not provided)
       -name xxx       => name of recipient (must be defined in mh.ini)
       -pin xxx        => pin number
       -message xxx    => text of message to send

   Examples:
     $Pgm_Name -pin 123456 -message 'Bring home bread and milk'
     $Pgm_Name -name craig -message 'Bring home bread and milk'
     $Pgm_Name -service Arch2way -pin 123456 -message 'Bring home bread and milk'

eof

   exit;
}

my (%pin_numbers);

&setup;

$parms{service} = "PageMart" unless $parms{service};
unless ( ($parms{service} eq "PageMart") | ($parms{service} eq "Arch1way") | ($parms{service} eq "Arch2way") ) {
     print "\nParameter error: $parms{service}\n";
     print "The only accepted values for -service are:\n";
     print "    PageMart\n";
     print "    Arch1way\n";
     print "    Arch2way\n";
     print "(Note: not specifying -service will default to PageMart for backward compatibility.)\n";
     exit;
}

$parms{pin} = $pin_numbers{$parms{name}} unless $parms{pin};
unless ($parms{pin}) {
     print "\nYou must specifies mh.ini parm alpha_page_NAME_pin and -name option\n";
     print "or specify -pin option.\n";
     exit;
}
&send_page ($parms{service}, $parms{pin}, "$parms{message}");

use vars "%config_parms";
sub setup {

     require 'handy_utilities.pl';

     my $private_parms = $Pgm_Path . "/mh.private.ini";
     &main::read_opts(\%config_parms, $Pgm_Path . "/mh.ini");
     &main::read_opts(\%config_parms, $private_parms) if -e $private_parms;

                                 # Get pager parms
     for my $parm (keys %config_parms) {
         next unless $config_parms{$parm}; # Ingore blank parms
         $pin_numbers{$1} = $config_parms{$parm} if $parm =~ /alpha_page_(\S+)_pin/;
     }

     for my $name (keys %pin_numbers) {
         print "$name=$pin_numbers{$name}\n" if $config_parms{debug} eq 'page';
     }
}

sub send_page {
     use LWP::UserAgent;
     use HTTP::Request::Common;
     my ($srv, $pin, $msg) = @_;

     print "send page: ($srv) pin=$pin, $msg\n" if $config_parms{debug} eq 'page';

     my $ua = new LWP::UserAgent;
     $ua->timeout([60]);         # Time out after 60 seconds
     $ua->env_proxy();           # use proxy if defined

     my $request;

     if ( $srv eq "Arch2way" ) {
         $request = POST 'http://www.Arch.com/cgi-bin/wwwtwoway.exe',
                   [ gw_pin              => $pin,
                     MSSG                => $msg,
                     Q1                  => '0',                     # (No echo) or '1' (echo)
# The remaining fields have been tested and do work, but I am leaving commented out for now until I decide whether or not
# it is worth the effort to make them all config_parms and/or ARGS...
# ATM I am envisioning something like MH seeing a sensor above limit, sends page to 2way and then acts based on response.
# e.g. -message 'No motion detected in house for 2 hours - should all lights be set OFF?'
#      -resp_a_string 'Yes'
#      -resp_b_string 'No'
#      -resp_c_string 'Just Inside Lights'
                     #resp_route          => 'Email',                 # or 'Pager', (type of response)
                     #resp_addr           => 'account@server.TLD',    # address for response
                     # Note: All below fields require resp_route and resp_addr to be set
# confirm_receipt_str can only be 'confirm_page_delivery', so if confirmation not desired, leave it commented out
                     #confirm_receipt_str => 'confirm_page_delivery', # optional, (only option)
                     #resp_a_string       => 'A',                     # Custom response option A
                     #resp_b_string       => 'B',                     # Custom response option B
                     #resp_c_string       => 'C',                     # Custom response option C
                     #resp_d_string       => 'D',                     # Custom response option D
                     #resp_e_string       => 'E',                     # Custom response option E
                     #resp_f_string       => 'F',                     # Custom response option F
                   ];
     }
     elsif ( $srv eq "Arch1way" ) {
         $request = POST 'http://www.Arch.com/cgi-bin/wwwpage.exe',
                   [ PIN             => $pin,
                     MSSG            => $msg,
                   ];
     }
     elsif ( $srv eq "PageMart" ) {
         $request = POST 'http://www2.pagemart.com/cgi-bin/rbox/pglpage-cgi',
                   [ pin2            => $pin,
                     PAGELAUNCHERID  => '2',
                     message1        => $msg,
                   ];
     }

     my $response = $ua->request($request);

     if ( $response ->is_success ) {
         print "page sent\n" if $config_parms{debug} eq 'page';
     }
     else {
         printf "page failed, %s\n", $response->status_line;
     }
}

#
# $Log: alpha_page,v $
# Revision 1.3  2004/06/06 21:38:38  winter
# *** empty log message ***
#
# Revision 1.2  2000/01/27 13:11:40  winter
# update version
#
# Revision 1.1  1999/09/06 16:48:37  winter
# - Received from Craig.
#
#


