From 07769ca8ec29c50cff5b23e34b873411514c7940 Mon Sep 17 00:00:00 2001 From: Daniel <0xc0decafe@users.noreply.github.com> Date: Tue, 15 Dec 2015 17:11:26 +0100 Subject: Initial commit, including basic HLR testing functionality. --- src/sms_7bit_encoding.erl | 67 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/sms_7bit_encoding.erl (limited to 'src/sms_7bit_encoding.erl') diff --git a/src/sms_7bit_encoding.erl b/src/sms_7bit_encoding.erl new file mode 100644 index 0000000..4c39b78 --- /dev/null +++ b/src/sms_7bit_encoding.erl @@ -0,0 +1,67 @@ +-module(sms_7bit_encoding). + +-author("dawid.figiel@gmail.com"). +-compile(export_all). + +%% 7-bit encoding +%% --------------------------------------------------------------------- +%% Function for converting string to 7-bit encoding according to: +%% GSM 03.38 Version 5.3.0 +%% --------------------------------------------------------------------- +%% Initial Function call: to_7bit(String). +%% --------------------------------------------------------------------- +%% Input: String containing only ASCII characters +%% --------------------------------------------------------------------- +%% Output: Binary encoded String +%% --------------------------------------------------------------------- +to_7bit([]) -> <<>>; +to_7bit(String) -> to_7bit(list_to_binary(String),<<>>,1). + +to_7bit(<>,<<>>,_Cntr) -> <<<>/binary>>; +to_7bit(<<_Char1:8>>,Out,8) -> Out; +to_7bit(<< Char1:8>>,Out,7) -> +%% << Out/binary,<<((Char1 bsr 6) bor 26)>>/binary >>; + << Out/binary,<<((Char1 bsr 6) bor 64)>>/binary >>; +to_7bit(<>,Out,Cntr) -> + << Out/binary,<<(Char1 bsr (Cntr - 1))>>/binary >>; +to_7bit(<<_Char:8,In/binary>>,Out,8)-> + to_7bit(In,Out,1); +to_7bit(<>,Out,Cntr)-> + SRChar1 = Char1 bsr (Cntr - 1), + NewChar1 = <>, + to_7bit(<<<>/binary,In/binary>>,<>,Cntr+1). + +%% 7-bit decoding +%% --------------------------------------------------------------------- +%% Function for converting 7-bit encoding to String according to: +%% GSM 03.38 Version 5.3.0 +%% --------------------------------------------------------------------- +%% Initial Function call: from_7bit(SevenBitEncodedBinary). +%% --------------------------------------------------------------------- +%% Input: Binary encoded String +%% --------------------------------------------------------------------- +%% Output: String containing only ASCII characters +%% --------------------------------------------------------------------- +from_7bit(List) when is_list(List) -> from_7bit(list_to_binary(List)); +from_7bit(<<>>) -> []; +from_7bit(Bin) -> + from_7bit(Bin,<<>>,<<>>,1). + +%%from_7bit(<<>>,<<13>>,Out,8) -> +from_7bit(<<>>,<<32>>,Out,8) -> + binary_to_list(Out); +from_7bit(<<>>,<>,Out,8) -> + binary_to_list(<>); +from_7bit(<<>>,<<0>>,Out,_Cntr) -> + binary_to_list(Out); +from_7bit(<<>>,<>,Out,Cntr) -> + binary_to_list(<>); +from_7bit(<>,<>,Out,8) -> + from_7bit(In,<>,<>,2); +from_7bit(<>,<<>>,<<>>,1) -> + CharN = Byte bsr 7, + from_7bit(In,<>,<<(Byte band 127)>>,2); +from_7bit(<>,<>,Out,Cntr) -> + Char = (Byte bsl (Cntr - 1)) bor CharI, + CharN = Byte bsr (8 - Cntr), + from_7bit(In,<>,<>,Cntr+1). -- cgit v1.2.3