diff options
author | Daniel <0xc0decafe@users.noreply.github.com> | 2016-10-05 12:42:59 +0200 |
---|---|---|
committer | Daniel <0xc0decafe@users.noreply.github.com> | 2016-10-05 12:42:59 +0200 |
commit | e7d5812d17e1165492ad342c016c80bad24ae9aa (patch) | |
tree | 3c67a47eb255f04f831f535848658f20d9493480 /src/ss7_helper.erl | |
parent | b99ffff4982e19424fc78abadd57100a8032bdad (diff) |
Structure changed in regard to erlang OTP. Added binary release.
Diffstat (limited to 'src/ss7_helper.erl')
-rw-r--r-- | src/ss7_helper.erl | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/ss7_helper.erl b/src/ss7_helper.erl new file mode 100644 index 0000000..194cbad --- /dev/null +++ b/src/ss7_helper.erl @@ -0,0 +1,53 @@ +-module(ss7_helper). +-author('Daniel Mende <mail@c0decafe.de>'). + +-export([encode_phonenumber/4, + decode_phonenumber/1, + encode_msisdn/4, + decode_imsi/1, + remove_firstN/2, + tup2bin/1]). + +decode_imsi(<<>>) -> + []; +decode_imsi(Imsi) -> + <<First:4,Second:4,Rest/bits>> = Imsi, + Dec = decode_imsi(Rest), + if + First==15 -> lists:append([Second], Dec); + true -> lists:append([Second,First], Dec) + end. + +%% =================================================================== +%% Phone Number helper +%% =================================================================== + +encode_phonenumber(Extension, NatureOfNumber, NumberPlan, Number) -> + {EncNumber, Digits} = encode_phonenumber(Number), + <<Digits:8, Extension:1, NatureOfNumber:3, NumberPlan:4, EncNumber/binary>>. +encode_phonenumber([First,Second|Tail]) -> + {EncNumber, Digits} = encode_phonenumber(Tail), + {<<Second:4, First:4, EncNumber/binary>>, Digits + 2}; +encode_phonenumber([Last]) -> + {<<15:4, Last:4>>, 1}; +encode_phonenumber([]) -> + {<<>>, 0}. + +decode_phonenumber(<<_Extension:1, _NatureOfNumber:1, _NumberPlan:4, Number/binary>>) -> + decode_imsi(Number). + +encode_msisdn(Extension, NatureOfNumber, NumberPlan, Number) -> + {EncNumber, _} = encode_phonenumber(Number), + <<Extension:1, NatureOfNumber:3, NumberPlan:4, EncNumber/binary>>. + +%% =================================================================== +%% List helper +%% =================================================================== + +remove_firstN(_, []) -> []; +remove_firstN(1, [_|T]) -> T; +remove_firstN(N, [_|T]) -> remove_firstN(N-1, T). + + +tup2bin(Tupel) -> + binary:list_to_bin([element(I,Tupel) || I <- lists:seq(1,tuple_size(Tupel))]). |