MAP codec: Add functions to encode/decode MAP Address-String

This commit is contained in:
Harald Welte 2011-02-09 21:41:36 +01:00
parent d1710cfeb7
commit 74368cc72e
1 changed files with 47 additions and 1 deletions

View File

@ -19,10 +19,56 @@
-module(map_codec).
-author('Harald Welte <laforge@gnumonks.org>').
-include("map.hrl").
%-include("map.hrl").
-include_lib("osmo_ss7/include/isup.hrl").
-export([parse_tcap_msg/1, encode_tcap_msgt/2]).
-export([parse_addr_string/1, encode_addr_string/1]).
-define(MAP_ADDR_NAT_UNKNOWN, 0).
-define(MAP_ADDR_NAT_INTERNATIONAL, 1).
-define(MAP_ADDR_NAT_NATIONAL, 2).
-define(MAP_ADDR_NAT_NETWORK_SPEC, 3).
-define(MAP_ADDR_NAT_SUBSCRIBER, 4).
-define(MAP_ADDR_NAT_RES, 5).
-define(MAP_ADDR_NAT_ABBREVIATED, 6).
-define(MAP_ADDR_NAT_RES_FOR_EXT, 7).
% convert from MAP -> ISUP 'nature of address'
nature_map2isup(NatureMap) ->
case NatureMap of
?MAP_ADDR_NAT_INTERNATIONAL -> ?ISUP_ADDR_NAT_INTERNATIONAL;
?MAP_ADDR_NAT_NATIONAL -> ?ISUP_ADDR_NAT_NATIONAL;
?MAP_ADDR_NAT_SUBSCRIBER -> ?ISUP_ADDR_NAT_SUBSCRIBER;
_ -> NatureMap
end.
% convert from ISUP -> MAP 'nature of address'
nature_isup2map(NatureIsup) ->
case NatureIsup of
?ISUP_ADDR_NAT_INTERNATIONAL -> ?MAP_ADDR_NAT_INTERNATIONAL;
?ISUP_ADDR_NAT_NATIONAL -> ?MAP_ADDR_NAT_NATIONAL;
?ISUP_ADDR_NAT_SUBSCRIBER -> ?MAP_ADDR_NAT_SUBSCRIBER;
_ -> NatureIsup
end.
parse_addr_string(AddrList) when is_list(AddrList) ->
parse_addr_string(list_to_binary(AddrList));
parse_addr_string(AddrBin) when is_binary(AddrBin) ->
<<1:1, NatureMap:3, Numplan:4, Remain/binary>> = AddrBin,
PhoneNum = isup_codec:parse_isup_party(Remain, 0),
NatureIsup = nature_map2isup(NatureMap),
#party_number{nature_of_addr_ind = NatureIsup,
numbering_plan = Numplan,
phone_number = PhoneNum}.
encode_addr_string(#party_number{nature_of_addr_ind = NatureIsup,
numbering_plan = Numplan,
phone_number = PhoneNum}) ->
NatureMap = nature_isup2map(NatureIsup),
{PhoneBin, _OddEven} = isup_codec:encode_isup_party(PhoneNum),
<<1:1, NatureMap:3, Numplan:4, PhoneBin/binary>>.
parse_tcap_msg(MsgBin) when is_binary(MsgBin) ->
case asn1rt:decode('map', 'MapSpecificPDUs', MsgBin) of