#package GSM::SMS::PDU # decode a SMSSubmit message (experimental!) sub SMSSubmit_decode { my ($self, $data) = @_; my @msg = split //, $data; # Get service center my $sca = $self->getServiceCenterAddress(\@msg); # Get PDU type my $pdu = $self->getoctet(\@msg); # message ref my $mref = $self->getoctet(\@msg); # destination address my $da = $self->getOriginatingAddress(\@msg); # protocol identifier my $pi = $self->getoctet(\@msg); # data scheme my $ds = $self->getoctet(\@msg); # vp my $vp = $self->getoctet(\@msg); # length my $dl = $self->getoctet(\@msg); my $udh; my $payload; # print join "|", @msg; # print "\n"; if ($pdu=~/51/) { # we have a user data header my $udhl = hex($msg[0].$msg[1]); # print "udhl ($msg[0]): $udhl\n"; $udh = $self->getoctet(\@msg, $udhl+1); $payload = join("", @msg); } else { $payload = $self->decode_7bit( join("", @msg), 160 ); } # print "da : $da\n"; # print "pdu type : $pdu\n"; # print "data scheme : $ds\n"; # print "length : $dl\n"; # print "udh : $udh\n"; # print "pay : $payload\n"; return ($da, $pdu, $ds, $udh, $payload); }