GSM::Nbit - GSM 7bit and 8bit data encoder and decoder.
Throughout GSM world "special" encodings called 7bit and 8bit are used. Encoding in 8bit is just plain HEX value and is provided here for completeness and ease of use, 7bit packs 8bit data into 7bit HEX value by limiting it to the lower 127 characters - and hence gaining 1 extra char every 8 characters.
That's how you get 160 characters limit on plain text (ASCII + few Greek chars) messages with only 140 bytes for data.
Since many modules need such encodings in them, those functions are refactored here. It's released as separate module and not part of some other distribution exactly for that reason.
use Encode qw/encode decode/; use GSM::Nbit; my $gsm = GSM::Nbit->new(); my $txt = "some text"; # We need to encode it first - for details see: # http://www.dreamfabric.com/sms/default_alphabet.html my $txt0338 = encode("gsm0338", $txt); my $txt_7bit = $gsm->encode_7bit_wlen($txt); # ... we submit it to the GSM network # ... latter we receive something from GSM network my $txt_gsm = $gsm->decode_7bit_wlen($txt_7bit); # we need to decode it back to computer/Perl representation my $txt_orig = decode("gsm0338", $txt_gsm);
This is the constructor. Accepts no params.
This function encodes the string as 7bit packed data in HEX representation. Please note that you probably need to convert the text into gsm0338 format first - we don't automatically do that.
For details see http://www.dreamfabric.com/sms/default_alphabet.html.
You can use Perl's Encode module for that - see: http://search.cpan.org/perldoc?Encode::GSM0338
Beside encoding the string as 7bit packed data in HEX representation, this method also adds the length in front of the encoded string, it's needed in some GSM protocols as a kind of checksum and to help with certain edge cases.
This function decodes the 7bit data in HEX representation back to a "readable" string. Second optional parameter is length - it's used in edge cases when we can't be sure if the last seven 0's in bit representation are meant to be @ sign, or it's a filler and there to just fit the 7bit representation into 8bit data computers (and cellphones) use.
Edge cases happen when length of original text is 7, 15, 23, 31 ... (+8) chars.
This function decodes back to a "readable" text string the 7bit data in HEX representation that includes the length as the first value.
This function encodes the string as 8bit HEX representation of the string.
This function encodes the string as 8bit HEX representation of the string and also adds the length in front of the encoded string since it's needed in some GSM protocols as a kind of checksum.
This function decodes back to a "readable" text string the 8bit HEX representation with length at the start of the string.
This function decodes the 8bit HEX representation of the string back to readable text string.
Note that you might need to update your Encode.pm module beforehand for tests to pass (and to be able to use this in a meaningful way) since older version had a bug for gsm0338 encode/decode of @ char.
<techcode at cpan.org>
Please report any bugs or feature requests to
bug-gsm-nbit at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=GSM-Nbit. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
You can find documentation for this module with the perldoc command.
You can also look for information at:
Copyright 2010 Aleksandar Petrovic.
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.