📄 megaco_binary_name_resolver_v2.erl
字号:
decode_item(Scope, [A, B], Item) -> ?d("decode_item -> entry",[]), case A of 16#00 -> case B of 16#01 -> decode_g(Scope, Item); 16#02 -> decode_root(Scope, Item); 16#03 -> decode_tonegen(Scope, Item); 16#04 -> decode_tonedet(Scope, Item); 16#05 -> decode_dg(Scope, Item); 16#06 -> decode_dd(Scope, Item); 16#07 -> decode_cg(Scope, Item); 16#08 -> decode_cd(Scope, Item); 16#09 -> decode_al(Scope, Item); 16#0a -> decode_ct(Scope, Item); 16#0b -> decode_nt(Scope, Item); 16#0c -> decode_rtp(Scope, Item); 16#0d -> decode_tdmc(Scope, Item); 16#00 -> decode_native(Scope, Item) end; 16#fe -> case B of %% Proprietary extension 16#fe -> decode_swb(Scope, Item) end; 16#ff -> case B of 16#ff when Item == [16#ff, 16#ff] -> "*" end end.decode_package(Package) -> ?d("decode_package -> entry with" "~n Package: ~p", [Package]), [A, B] = Package, case A of 16#00 -> case B of 16#01 -> "g"; 16#02 -> "root"; 16#03 -> "tonegen"; 16#04 -> "tonedet"; 16#05 -> "dg"; 16#06 -> "dd"; 16#07 -> "cg"; 16#08 -> "cd"; 16#09 -> "al"; 16#0a -> "ct"; 16#0b -> "nt"; 16#0c -> "rtp"; 16#0d -> "tdmc"; 16#00 -> "" end; 16#fe -> case B of 16#fe -> "swb" end; 16#ff -> case B of 16#ff -> "*" end end.decode_profile([A, B]) -> case A of 16#00 -> case B of 16#fe -> "resgw"; _ -> "profile" ++ [A + $0, B + $0] end; _ -> "profile" ++ [A + $0, B + $0] end.decode_dialplan([A, B]) -> "dialplan" ++ [A + $0, B + $0].decode_mid(Mid) -> case Mid of {domainName, DN} -> Lower = to_lower(DN#'DomainName'.name), {domainName, DN#'DomainName'{name = Lower}}; {deviceName, PathName} -> Lower = to_lower(PathName), {deviceName, Lower}; Other -> Other end.to_lower(Chars) -> [?LOWER(Char) || Char <- Chars].%%----------------------------------------------------------------------%% Encode package name from internal form%% Scope ::= property | event | signal | statistics%%----------------------------------------------------------------------encode(mid, Package) -> encode_mid(Package);encode(package, Package) -> encode_package(Package);encode(profile, Profile) -> encode_profile(Profile);encode(dialplan, Dialplan) -> encode_dialplan(Dialplan);encode(Scope, PackageItem) when atom(Scope) -> ?d("encode(~p) -> entry with" "~n PackageItem: ~p", [Scope, PackageItem]), case string:tokens(PackageItem, [$/]) of [Package, Item] -> ?d("encode -> " "~n Package: ~p" "~n Item: ~p", [Package, Item]), encode_package(Package) ++ encode_item(Scope, Package, Item); [Item] -> ?d("encode -> Item: ~p", [Item]), [16#00, 16#00 | encode_native(Scope, Item)] end;encode({Scope, PackageItem}, SubItem) when atom(Scope) -> ?d("encode(~p) -> entry with" "~n PackageItem: ~p" "~n SubItem: ~p", [Scope, PackageItem, SubItem]), case string:tokens(PackageItem, [$/]) of [Package, Item] -> ?d("encode -> " "~n Package: ~p" "~n Item: ~p", [Package, Item]), encode_item({Scope, Item}, Package, SubItem); [_Item] -> ?d("encode -> _Item: ~p", [_Item]), encode_native(Scope, SubItem) end.encode_item(_Scope, _Package, "*") -> [16#ff, 16#ff];encode_item(Scope, Package, Item) -> ?d("encode_item(~s) -> entry", [Package]), case Package of "g" -> encode_g(Scope, Item); "root" -> encode_root(Scope, Item); "tonegen" -> encode_tonegen(Scope, Item); "tonedet" -> encode_tonedet(Scope, Item); "dg" -> encode_dg(Scope, Item); "dd" -> encode_dd(Scope, Item); "cg" -> encode_cg(Scope, Item); "cd" -> encode_cd(Scope, Item); "al" -> encode_al(Scope, Item); "ct" -> encode_ct(Scope, Item); "nt" -> encode_nt(Scope, Item); "rtp" -> encode_rtp(Scope, Item); "tdmc" -> encode_tdmc(Scope, Item); "swb" -> encode_swb(Scope, Item) end.encode_package(Package) -> case Package of "g" -> [16#00, 16#01]; "root" -> [16#00, 16#02]; "tonegen" -> [16#00, 16#03]; "tonedet" -> [16#00, 16#04]; "dg" -> [16#00, 16#05]; "dd" -> [16#00, 16#06]; "cg" -> [16#00, 16#07]; "cd" -> [16#00, 16#08]; "al" -> [16#00, 16#09]; "ct" -> [16#00, 16#0a]; "nt" -> [16#00, 16#0b]; "rtp" -> [16#00, 16#0c]; "tdmc" -> [16#00, 16#0d]; "" -> [16#00, 16#00]; "*" -> [16#ff, 16#ff]; "swb" -> [16#fe, 16#fe] end.encode_profile(Profile) -> case Profile of "resgw" -> [16#00, 16#fe]; [$p, $r, $o, $f, $i, $l, $e | Name] -> case Name of [A, B] -> [A - $0, B - $0]; [B] -> [0, B - $0]; [] -> [0, 0] end end.encode_dialplan(Dialplan) -> case Dialplan of [$d, $i, $a, $l, $p, $l, $a, $n | Name] -> case Name of [A, B] -> [A - $0, B - $0]; [B] -> [0, B - $0]; [] -> [0, 0] end end.encode_mid(Mid) -> Mid.%%----------------------------------------------------------------------%% Name: g - Generic%% Version: 1%% Extends: None%% Purpose: Generic package for commonly encountered items%%----------------------------------------------------------------------capabilities_g() -> [ {event, "cause"}, {event, "sc"} ].encode_g(event, Item) -> case Item of "cause" -> [16#00, 16#01]; "sc" -> [16#00, 16#02] end;encode_g({event_parameter, Item}, SubItem) -> case Item of "cause" -> case SubItem of "Generalcause" -> [16#00, 16#01]; "Failurecause" -> [16#00, 16#02] end; "sc" -> case SubItem of "SigID" -> [16#00, 16#01]; "Meth" -> [16#00, 16#02]; "SLID" -> [16#00, 16#03] end end.decode_g(event, Item) -> case Item of [16#00, 16#01] -> "cause"; [16#00, 16#02] -> "sc" end;decode_g({event_parameter, Item}, SubItem) -> case Item of [16#00, 16#01] -> % Event: cause case SubItem of [16#00, 16#01] -> "Generalcause"; [16#00, 16#02] -> "Failurecause" end; [16#00, 16#02] -> % Event: sc case SubItem of [16#00, 16#01] -> "SigID"; [16#00, 16#02] -> "Meth"; [16#00, 16#03] -> "SLID" end end.%%----------------------------------------------------------------------%% Name: root - Base Root Package%% Version: 1%% Extends: None%% Purpose: This package defines Gateway wide properties.%%----------------------------------------------------------------------capabilities_root() -> [ {property, "maxNumberOfContexts"}, {property, "maxTerminationsPerContext"}, {property, "normalMGExecutionTime"}, {property, "normalMGCExecutionTime"}, {property, "MGProvisionalResponseTimerValue"}, {property, "MGCProvisionalResponseTimerValue"}, {property, "MGCOriginatedPendingLimit"}, {property, "MGOriginatedPendingLimit"} ].encode_root(Scope, Item) -> case Scope of property -> case Item of "maxNumberOfContexts" -> [16#00, 16#01]; "maxTerminationsPerContext" -> [16#00, 16#02]; "normalMGExecutionTime" -> [16#00, 16#03]; "normalMGCExecutionTime" -> [16#00, 16#04]; "MGProvisionalResponseTimerValue" -> [16#00, 16#05]; "MGCProvisionalResponseTimerValue" -> [16#00, 16#06]; "MGCOriginatedPendingLimit" -> [16#00, 16#07]; "MGOriginatedPendingLimit" -> [16#00, 16#08] end end.decode_root(Scope, Item) -> case Scope of property -> case Item of [16#00, 16#01] -> "maxNumberOfContexts"; [16#00, 16#02] -> "maxTerminationsPerContext"; [16#00, 16#03] -> "normalMGExecutionTime"; [16#00, 16#04] -> "normalMGCExecutionTime"; [16#00, 16#05] -> "MGProvisionalResponseTimerValue"; [16#00, 16#06] -> "MGCProvisionalResponseTimerValue"; [16#00, 16#07] -> "MGCOriginatedPendingLimit"; [16#00, 16#08] -> "MGOriginatedPendingLimit" end end.%%----------------------------------------------------------------------%% Name: tonegen - Tone Generator Package%% Version: 1%% Extends: None%% Purpose: This package defines signals to generate audio tones.%% This package does not specify parameter values. It is%% intended to be extendable. Generally, tones are defined%% as an individual signal with a parameter, ind,%% representing "interdigit" time delay, and a tone id to%% be used with playtones. A tone id should be kept%% consistent with any tone generation for the same tone.%% MGs are expected to be provisioned with the characteristics%% of appropriate tones for the country in which the MG is located.%%----------------------------------------------------------------------capabilities_tonegen() -> [ {signal, "pt"} ].encode_tonegen(signal, Item) -> case Item of "pt" -> [16#00, 16#01] end;encode_tonegen({signal_parameter, Item}, SubItem) -> case Item of "pt" -> case SubItem of "tl" -> [16#00, 16#01]; "ind" -> [16#00, 16#02] end end.decode_tonegen(signal, Item) -> case Item of [16#00, 16#01] -> "pt" end;decode_tonegen({signal_parameter, Item}, SubItem) -> case Item of [16#00, 16#01] -> % Event: pt case SubItem of [16#00, 16#01] -> "tl"; [16#00, 16#02] -> "ind" end end.%%----------------------------------------------------------------------%% Name: tonedet - Tone Detection Package%% Version: 1%% Extends: None%% Purpose: This Package defines events for audio tone detection.%% Tones are selected by name (tone id). MGs are expected%% to be provisioned with the characteristics of appropriate%% tones for the country in which the MG is located.%% %% This package does not specify parameter values.%% It is intended to be extendable.%%----------------------------------------------------------------------capabilities_tonedet() -> [ {event, "std"}, {event, "etd"}, {event, "ltd"} ].encode_tonedet(event, Item) -> case Item of "std" -> [16#00, 16#01]; "etd" -> [16#00, 16#02]; "ltd" -> [16#00, 16#03] end;encode_tonedet({event_parameter, Item}, SubItem) -> case Item of "std" -> case SubItem of "tl" -> [16#00, 16#01]; "tid" -> [16#00, 16#03] end; "etd" -> case SubItem of "tl" -> [16#00, 16#01]; "tid" -> [16#00, 16#03]; "dur" -> [16#00, 16#02] end; "ltd" -> case SubItem of "tl" -> [16#00, 16#01]; "dur" -> [16#00, 16#02]; "tid" -> [16#00, 16#03] end end.decode_tonedet(event, Item) -> case Item of [16#00, 16#01] -> "std"; [16#00, 16#02] -> "etd"; [16#00, 16#03] -> "ltd" end;decode_tonedet({event_parameter, Item}, SubItem) -> case Item of [16#00, 16#01] -> % Event std case SubItem of [16#00, 16#01] -> "tl"; [16#00, 16#03] -> "tid" end; [16#00, 16#02] -> % Event etd case SubItem of
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -