aboutsummaryrefslogtreecommitdiff
path: root/src/ss7test_helper.erl
blob: f6821b0852822ab47704c84959965710623f576a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
-module(ss7test_helper).
-author('Daniel Mende <mail@c0decafe.de>').

-export([encode_phonenumber/4, 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}.

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))]).