1 package GSM::SMS::Transport::NovelSoft;
4 # HTTP access to the NovelSoft (sms-wap.com) SMS center
7 use GSM::SMS::Transport::Transport;
8 @ISA = qw(GSM::SMS::Transport::Transport);
12 use HTTP::Request::Common qw(POST);
19 # All the parameters I need to run
35 my $class = ref($proto) || $proto;
40 $self->{'__LOGGER__'} = GSM::SMS::Log->new( $self->{cfg}->{"log"} );
47 # Send a (PDU encoded) message
49 my ($self, $msisdn, $pdu) = @_;
50 my $logger = $self->{'__LOGGER__'};
52 $logger->logentry("send [$pdu]") if $logger;
54 $self->_add_to_spool( $msisdn, $pdu, $self->{cfg}->{"spoolout"} );
55 if ( $self->_transmit($pdu, $self->{cfg}->{"smsserver"}) ) {
57 if ( $self->_transmit($pdu, $self->{cfg}->{"backupsmsserver"}) ) {
58 $logger->logentry( "Error sending" ) if $logger;
62 $self->_remove_from_spool( $msisdn, $pdu, $self->{cfg}->{"spoolout"} );
66 # Receive a PDU encoded message
67 # $ is a ref to a PDU string
70 # -1 if no message pending
72 my ($self, $pduref) = @_;
81 my $logger = $self->{'__LOGGER__'};
83 $logger->logentry("NovelSoft Transport ended.") if $logger;
86 # A ping command .. just return an informative string on success
90 return "Pong.. NovelSoft transport ok";
94 # give out the needed config paramters
95 sub get_config_parameters {
101 # Do we have a valid route for this msisdn
102 sub has_valid_route {
103 my ($self, $msisdn) = @_;
105 # print "in route\n";
106 # print Dumper $self->{cfg};
107 foreach my $route ( split /,/, $self->{cfg}->{"match"} ) {
109 return -1 if $msisdn =~ /$route/;
114 #####################################################################
116 #####################################################################
118 my ($self, $pdustr, $server) = @_;
120 my $logger = $self->{'__LOGGER__'};
122 my $uid = $self->{cfg}->{"userid"};
123 my $pwd = $self->{cfg}->{"password"};
124 my $originator = $self->{cfg}->{"originator"};
125 my $proxy = $self->{cfg}->{"proxy"};
126 my $url = url( $server );
128 my $decoder = GSM::SMS::PDU->new();
129 my ($da, $pdutype, $dcs, $udh, $payload) = $decoder->SMSSubmit_decode($pdustr);
133 if (length($udh) > 0) {
134 $udh = '01' . sprintf("%02X", int(length($udh)/2)) . $udh;
135 $msg="|$udh|$payload";
140 my $ua = LWP::UserAgent->new();
141 $ua->proxy( 'http', $proxy ) if ( $proxy ne "" );
142 my $req = POST "$server",
151 $req->header( Host => $url->host );
153 my $res = $ua->request($req);
155 # print "#" x 80 . "\n";
156 # print $res->content;
157 # print "#" x 80 . "\n";
159 if ($res->is_success) {
160 my $content = $res->content;
161 $logger->logentry( "return: $content" ) if $logger;
162 return 0 if ($content=~/01/);
165 $logger->logentry( "error!" ) if $logger;
166 $logger->logentry( $res->error_as_HTML ) if $logger;
172 my ($self, $msisdn, $pdu, $dir) = @_;
175 my $filename = $self->_create_spoolname($msisdn, $pdu);
176 open F, ">".$dir."/".$filename;
182 sub _remove_from_spool {
183 my ($self, $msisdn, $pdu, $dir) = @_;
185 my $filename = $self->_create_spoolname($msisdn, $pdu);
186 unlink( $dir."/".$filename );
189 sub _create_spoolname {
190 my ($self, $msisdn, $pdu) = @_;
193 my $filename = $msisdn . "_" . $$ . time . substr($pdu,-32);
201 GSM::SMS::Transport::NovelSoft
205 Implements a ( send-only ) transport for the www.sms-wap.com http based sms center. This is a swiss company and they provide a very nice service. A pity that all, but one, GSM operator stopped roaming with Swiss. this way it is not possible anymore for us ( Belgium ) to use this service ... But they have still more then 1 hundred countries served!
207 Also can do PDU messages and as such can be used to send NBS messages.
211 Johan Van den Brande <johan@vandenbrande.com>