| GSM-SMS documentation | Contained in the GSM-SMS distribution. |
GSM::SMS::Transport::NovelSoft - Send SMS messages via the sms-wap.com service.
Implements a send-only transport for the http://www.sms-wap.com HTTP based SMS center. This is a swiss company and they provide a very nice service.
Also can do PDU messages and as such can be used to send NBS messages.
my $novelsoft = GSM::SMS::Transport::NovelSoft->new(
-name=> $name_of_transport,
-proxy=> $http_proxy,
-userid=> $userid_credential_for_novelsoft,
-password=> $password_credential_for_novelsoft,
-originator=> $originator,
-smsserver=> $primary_novelsoft_sms_server,
-backupsmsserver=> $secundary_novelsoft_sms_server,
-match=> $matching_regex_for_allowed_msisdn
);
Johan Van den Brande <johan@vandenbrande.com>
| GSM-SMS documentation | Contained in the GSM-SMS distribution. |
package GSM::SMS::Transport::NovelSoft;
use strict; use vars qw( $VERSION $AUTOLOAD ); use base qw( GSM::SMS::Transport::Transport ); $VERSION = "0.161"; use Carp; use HTTP::Request::Common qw(POST); use LWP::UserAgent; use URI::URL qw(url); use GSM::SMS::PDU; use Log::Agent; use constant PRIMARY_SERVER => 'http://clients.sms-wap.com:80/cgi/csend.cgi'; use constant SECONDARY_SERVER => 'http://clients.sms-wap.com:80/cgi/csend.cgi'; { my %_attrs = ( _name => 'read', _proxy => 'read/write', _userid => 'read/write', _password => 'read/write', _originator => 'read/write', _smsserver => 'read/write', _backupsmsserver => 'read/write', _match => 'read/write' ); sub _accessible { my ($self, $attr, $mode) = @_; return $_attrs{$attr} =~ /$mode/ if exists $_attrs{$attr}; } }
sub new { my ($proto, %args) = @_; my $class = ref($proto) || $proto; logdbg "debug", "$class constructor called"; my $self = $class->SUPER::new(%args); $self->{_proxy} = $args{-proxy}; $self->{_userid} = $args{-userid} || croak("missing userid"); $self->{_password} = $args{-password} || croak("missing password"); $self->{_smsserver} = $args{-smsserver} || PRIMARY_SERVER; $self->{_backupsmsserver} = $args{-backupsmsserver} || SECONDARY_SERVER; bless $self, $class; logdbg "debug", "GSM::SMS::Transport::NovelSoft started"; return $self; }
sub get_info { my ($self) = @_; my $revision = '$Revision: 1.2 $'; my $date = '$Date: 2003/01/11 14:16:34 $'; print <<EOT; NovelSoft transport $VERSION Revision: $revision Date: $date EOT } # Send a (PDU encoded) message sub send { my ($self, $msisdn, $pdu) = @_; logdbg "debug", "NovelSoft: msisdn=$msisdn"; logdbg "debug", "NovelSoft: pdu=$pdu"; if ( $self->_transmit($pdu, $self->get_smsserver()) ) { # trying backup if ( $self->_transmit($pdu, $self->get_backupsmsserver()) ) { logerr "Novelsoft: Error sending"; return -1; } } return 0; }; sub receive { my ($self, $pduref) = @_; return -1; }; # Close sub close { my ($self) = @_; logdbg "debug", "NovelSoft Transport ended"; } # A ping command .. just return an informative string on success sub ping { my ($self) = @_; return "Pong.. NovelSoft transport ok"; } ##################################################################### # transport specific ##################################################################### sub _transmit { my ($self, $pdustr, $server) = @_; my $object_class = ref($self); my $uid = $self->get_userid(); my $pwd = $self->get_password(); my $originator = $self->get_originator(); my $proxy = $self->get_proxy(); my $url = url( $server ); my $msg; my $decoder = GSM::SMS::PDU->new(); my ($da, $pdutype, $dcs, $udh, $payload) = $decoder->SMSSubmit_decode($pdustr); $da=~s/^\+//; if ( $udh && (length($udh) > 0) ) { $udh = '01' . sprintf("%02X", int(length($udh)/2)) . $udh; $msg="|$udh|$payload"; } else { $msg=$payload; } my $ua = LWP::UserAgent->new(); $ua->proxy( 'http', $proxy ) if ( $proxy ne "" ); my $req = POST "$server", [ UID => $uid, PW => $pwd, N => $da, O => $originator, M => $msg ]; $req->header( Host => $url->host ); my $res = $ua->request($req); if ($res->is_success) { my $content = $res->content; logdbg "debug", "In ${object_class} HTTP response [$content]"; return 0 if ($content=~/01/); return -1; } else { my $err_msg = "In ${object_class} HTTP error with result : " . $res->error_as_HTML; logdbg "debug", $err_msg; logerr $err_msg; return -1; } } 1;