1 package GSM::SMS::Transport::MCube;
3 use vars qw( $VERSION );
7 # HTTP access to the MCube SMS center
10 use base qw( GSM::SMS::Transport::Transport );
13 use HTTP::Request::Common qw(GET);
16 use URI::Escape qw(uri_escape);
21 # All the parameters I need to run
36 my $class = ref($proto) || $proto;
41 $self->{'__LOGGER__'} = GSM::SMS::Log->new( $self->{cfg}->{"log"} );
48 # Send a (PDU encoded) message
50 my ($self, $msisdn, $pdu) = @_;
51 my $logger = $self->{'__LOGGER__'};
53 $logger->logentry("send [$pdu]") if $logger;
55 $self->_add_to_spool( $msisdn, $pdu, $self->{cfg}->{"spoolout"} );
56 if ( $self->_transmit($pdu, $self->{cfg}->{"smsserver"}) ) {
57 $logger->logentry( "Error sending" ) if $logger;
60 $self->_remove_from_spool( $msisdn, $pdu, $self->{cfg}->{"spoolout"} );
64 # Receive a PDU encoded message
65 # $ is a ref to a PDU string
68 # -1 if no message pending
70 my ($self, $pduref) = @_;
79 my $logger = $self->{'__LOGGER__'};
81 $logger->logentry("MCube Transport ended.") if $logger;
84 # A ping command .. just return an informative string on success
88 return "Pong.. MCube transport ok";
92 # give out the needed config paramters
93 sub get_config_parameters {
99 # Do we have a valid route for this msisdn
100 sub has_valid_route {
101 my ($self, $msisdn) = @_;
103 # print "in route\n";
104 # print Dumper $self->{cfg};
105 foreach my $route ( split /,/, $self->{cfg}->{"match"} ) {
107 return -1 if $msisdn =~ /$route/;
112 #####################################################################
114 #####################################################################
116 my ($self, $pdustr, $server) = @_;
118 my $logger = $self->{'__LOGGER__'};
120 my $uid = $self->{cfg}->{"userid"};
121 my $pwd = $self->{cfg}->{"password"};
122 my $originator = $self->{cfg}->{"originator"};
123 my $proxy = $self->{cfg}->{"proxy"};
124 my $url = url( $server );
126 my $decoder = GSM::SMS::PDU->new();
127 my ($da, $pdutype, $dcs, $udh, $payload) = $decoder->SMSSubmit_decode($pdustr);
132 if (defined($udh) && (length($udh) > 0)) {
133 # transfor to hexprints
134 #$udh = $self->serialize_to_hex( $decoder->decode_7bit( $udh, length($udh) ));
135 #$payload = $self->serialize_to_hex( $decoder->decode_7bit( $payload, length($payload) ) );
137 # $udh = $decoder->decode_7bit( $udh, length($udh));
138 # $payload = $decoder->decode_7bit( $payload, length($payload) );
154 oastring : $originator
158 my $ua = LWP::UserAgent->new();
159 $ua->proxy( 'http', $proxy ) if ( $proxy ne "" );
160 my $urlstring = "$server"
164 "login=" . uri_escape( $uid )
166 "&password=" . uri_escape( $pwd )
168 "&togsm=" . uri_escape( $da )
170 "&oastring=" . uri_escape( $originator )
174 "&datas=" . uri_escape( $payload )
176 "&header=" . uri_escape( $udh )
179 # $urlstring = 'http://www.m3.be/scripts/httpgate1.cfm?login=vdb&password=xserd54&togsm=32475567606&oastring=MCUBE&type=1&datas=Hello+World';
181 print "$urlstring\n";
183 my $req = GET $urlstring;
184 $req->header( Host => $url->host );
186 my $res = $ua->request($req);
188 print "#" x 80 . "\n";
190 print "#" x 80 . "\n";
192 if ($res->is_success) {
193 my $content = $res->content;
194 $logger->logentry( "return: $content" ) if $logger;
195 return 0 if ($content=~/01/);
198 $logger->logentry( "error!" ) if $logger;
199 $logger->logentry( $res->error_as_HTML ) if $logger;
204 sub serialize_to_hex {
205 my ($self, $ud) = @_;
208 while (length($ud)) {
209 $msg .= sprintf("%.2X", ord(substr($ud,0,1)));
216 my ($self, $msisdn, $pdu, $dir) = @_;
219 my $filename = $self->_create_spoolname($msisdn, $pdu);
220 open F, ">".$dir."/".$filename;
226 sub _remove_from_spool {
227 my ($self, $msisdn, $pdu, $dir) = @_;
229 my $filename = $self->_create_spoolname($msisdn, $pdu);
230 unlink( $dir."/".$filename );
233 sub _create_spoolname {
234 my ($self, $msisdn, $pdu) = @_;
237 my $filename = $msisdn . "_" . $$ . time . substr($pdu,-32);
245 GSM::SMS::Transport::MCube
249 Implements a ( send-only ) transport for the MCube ss7 SMS gateway.
250 Please visit www.mcube.be for getting an account.
252 Also can do PDU messages and as such can be used to send NBS messages.
256 Johan Van den Brande <johan@vandenbrande.com>