📄 megaco_text_gen_v1.hrl
字号:
[ enc_Name(Val#'SigParameter'.sigParameterName, State), enc_propertyParmValues(Val#'SigParameter'.value, Val#'SigParameter'.extraInfo, State) ].enc_RequestID({'RequestID',Val}, State) -> enc_RequestID(Val, State);enc_RequestID(Val, _State) when Val == ?megaco_all_request_id -> "*";enc_RequestID(Val, State) -> enc_UINT32(Val, State).enc_ModemDescriptor(#'ModemDescriptor'{mtl = [Val], mpl = [], nonStandardData = asn1_NOVALUE}, State) -> [ ?ModemToken, ?EQUAL, enc_ModemType(Val, State) ];enc_ModemDescriptor(Val, State) when record(Val, 'ModemDescriptor') -> [ ?ModemToken, ?LSBRKT, enc_list([{Val#'ModemDescriptor'.mtl, fun enc_ModemType/2}], State), ?RSBRKT, enc_opt_brackets( enc_list([{Val#'ModemDescriptor'.mpl, fun enc_PropertyParm/2}], ?INC_INDENT(State)), State) %% BUGBUG: Is PropertyParm == NAME parmValue? ].enc_ModemType({'ModemType',Val}, State)-> enc_ModemType(Val, State);enc_ModemType(Val, _State) -> %% BUGBUG: Does not handle extensionParameter case Val of v18 -> ?V18Token; v22 -> ?V22Token; v22bis -> ?V22bisToken; v32 -> ?V32Token; v32bis -> ?V32bisToken; v34 -> ?V34Token; v90 -> ?V90Token; v91 -> ?V91Token; synchISDN -> ?SynchISDNToken end.enc_DigitMapDescriptor(Val, State) when record(Val, 'DigitMapDescriptor') -> [ ?DigitMapToken, ?EQUAL, enc_DigitMapName(Val#'DigitMapDescriptor'.digitMapName, State), ?LBRKT_INDENT(State), enc_DigitMapValue(Val#'DigitMapDescriptor'.digitMapValue, ?INC_INDENT(State)), ?RBRKT_INDENT(State) ].enc_DigitMapName({'DigitMapName',Val}, State) -> enc_DigitMapName(Val, State);enc_DigitMapName(Val, State) -> enc_Name(Val, State).enc_DigitMapValue(Val, State) when record(Val, 'DigitMapValue') -> [ enc_timer(Val#'DigitMapValue'.startTimer, $T, State), enc_timer(Val#'DigitMapValue'.shortTimer, $S, State), enc_timer(Val#'DigitMapValue'.longTimer, $L, State), %% BUGBUG: digitMapBody not handled at all enc_STRING(Val#'DigitMapValue'.digitMapBody, State, 0, infinity) ].enc_timer(asn1_NOVALUE, _Prefix, _State) -> [];enc_timer(Timer, Prefix, State) -> [ Prefix, ?COLON, enc_DIGIT(Timer, State, 0, 99), ?COMMA_INDENT(State) ].enc_ServiceChangeParm(Val, State) when record(Val, 'ServiceChangeParm') -> [ ?ServicesToken, ?LBRKT_INDENT(State), enc_list([{[Val#'ServiceChangeParm'.serviceChangeMethod], fun enc_ServiceChangeMethod/2}, {[Val#'ServiceChangeParm'.serviceChangeAddress], fun enc_ServiceChangeAddress/2}, {[Val#'ServiceChangeParm'.serviceChangeVersion], fun enc_serviceChangeVersion/2}, {[Val#'ServiceChangeParm'.serviceChangeProfile], fun enc_ServiceChangeProfile/2}, {[{reason, Val#'ServiceChangeParm'.serviceChangeReason}], fun enc_serviceChangeReason/2}, {[Val#'ServiceChangeParm'.serviceChangeDelay], fun enc_serviceChangeDelay/2}, {[Val#'ServiceChangeParm'.serviceChangeMgcId], fun enc_serviceChangeMgcId/2}, {[Val#'ServiceChangeParm'.timeStamp], fun enc_TimeNotation/2}], ?INC_INDENT(State)), ?RBRKT_INDENT(State) ].enc_ServiceChangeMethod({'ServiceChangeMethod',Val}, State) -> enc_ServiceChangeMethod(Val, State);enc_ServiceChangeMethod(Val, _State) -> [ ?MethodToken, ?EQUAL, case Val of failover -> ?FailoverToken; forced -> ?ForcedToken; graceful -> ?GracefulToken; restart -> ?RestartToken; disconnected -> ?DisconnectedToken; handOff -> ?HandOffToken end %% BUGBUG: extension ].enc_ServiceChangeAddress({'ServiceChangeAddress',Val}, State) -> enc_ServiceChangeAddress(Val, State);enc_ServiceChangeAddress({Tag, Val}, State) -> [ ?ServiceChangeAddressToken, ?EQUAL, case Tag of portNumber -> enc_portNumber(Val, State); ip4Address -> enc_IP4Address(Val, State); ip6Address -> enc_IP6Address(Val, State); domainName -> enc_DomainName(Val, State); deviceName -> enc_PathName(Val, State); mtpAddress -> enc_mtpAddress(Val, State); _ -> error({invalid_ServiceChangeAddress_tag, Tag}) end ].enc_serviceChangeVersion(Val, State) -> [ ?VersionToken, ?EQUAL, enc_version(Val, State) ].enc_ServiceChangeProfile(#'ServiceChangeProfile'{profileName = Name, version = Version}, State) -> [ ?ProfileToken, ?EQUAL, enc_Name(Name, State), ?SLASH, enc_version(Version, State) ].enc_serviceChangeReason({reason, Val}, State) -> case Val of asn1_NOVALUE -> []; [List] when list(List) -> [ ?ReasonToken, ?EQUAL, enc_QUOTED_STRING(List,State) % OTP-4632 enc_Value(List, State) ] end.enc_serviceChangeDelay(Val, State) -> [ ?DelayToken, ?EQUAL, enc_UINT32(Val, State) ].enc_serviceChangeMgcId(Val, State) -> [ ?MgcIdToken, ?EQUAL, enc_MId(Val, State) ].enc_portNumber(Val, State) when integer(Val), Val >= 0 -> enc_UINT16(Val, State). enc_ServiceChangeResParm(Val, State) when record(Val, 'ServiceChangeResParm') -> enc_list([{[Val#'ServiceChangeResParm'.serviceChangeAddress], fun enc_ServiceChangeAddress/2}, {[Val#'ServiceChangeResParm'.serviceChangeVersion], fun enc_serviceChangeVersion/2}, {[Val#'ServiceChangeResParm'.serviceChangeProfile], fun enc_ServiceChangeProfile/2}, {[Val#'ServiceChangeResParm'.serviceChangeMgcId], fun enc_serviceChangeMgcId/2}, {[Val#'ServiceChangeResParm'.timeStamp], fun enc_TimeNotation/2}], State).enc_PackagesDescriptor({'PackagesDescriptor',Val}, State) -> enc_PackagesDescriptor(Val, State);enc_PackagesDescriptor(Val, State) -> [ ?PackagesToken, ?LBRKT_INDENT(State), enc_list([{Val, fun enc_PackagesItem/2}], ?INC_INDENT(State)), ?RBRKT_INDENT(State) ].enc_PackagesItem(Val, State) when record(Val, 'PackagesItem') -> PkgdName = ?META_ENC(package, Val#'PackagesItem'.packageName), [ enc_Name(PkgdName, State), "-", enc_UINT16(Val#'PackagesItem'.packageVersion, State) ].enc_StatisticsDescriptor({'StatisticsDescriptor',Val}, State) -> enc_StatisticsDescriptor(Val, State);enc_StatisticsDescriptor(List, State) when list(List) -> [ ?StatsToken, ?LBRKT_INDENT(State), enc_list([{List, fun enc_StatisticsParameter/2}], ?INC_INDENT(State)), ?RBRKT_INDENT(State) ].enc_StatisticsParameter(Val, State) when record(Val, 'StatisticsParameter') -> PkgdName = ?META_ENC(statistics, Val#'StatisticsParameter'.statName), case Val#'StatisticsParameter'.statValue of asn1_NOVALUE -> [ enc_PkgdName(PkgdName, State) ]; [StatVal] when list(StatVal) -> [ enc_PkgdName(PkgdName, State), ?EQUAL, enc_Value(StatVal, State) ] end.enc_TimeNotation(Val, State) when record(Val, 'TimeNotation') -> [ enc_STRING(Val#'TimeNotation'.date, State, 8, 8), % "yyyymmdd" "T", enc_STRING(Val#'TimeNotation'.time, State, 8, 8) % "hhmmssss" ].%% BUGBUG: Does not verify that string must contain at least one char%% BUGBUG: This violation of the is required in order to comply with%% BUGBUG: the dd/ce ds parameter that may possibly be empty.enc_Value({'Value',Val}, State) -> enc_Value(Val, State);enc_Value(String, _State) -> case quoted_string_count(String, 0, true) of {_, 0} -> [?DQUOTE, String, ?DQUOTE]; {false, _} -> [?DQUOTE, String, ?DQUOTE]; {true, _} -> [String] end. quoted_string_count([H | T], Count, IsSafe) -> case ?classify_char(H) of safe_char_upper -> quoted_string_count(T, Count + 1, IsSafe); safe_char -> quoted_string_count(T, Count + 1, IsSafe); rest_char -> quoted_string_count(T, Count + 1, false); white_space -> quoted_string_count(T, Count + 1, false); _ -> error({illegal_char, H}) end;quoted_string_count([], Count, IsSafe) -> {IsSafe, Count}.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Encode an octet string, escape } by \ if necessary enc_OCTET_STRING(List, State, Min, Max) -> do_enc_OCTET_STRING(List, State, Min, Max, 0). do_enc_OCTET_STRING([H | T], State, Min, Max, Count) -> case H of $} -> [$\\, H | do_enc_OCTET_STRING(T, State, Min, Max, Count + 1)]; _ -> [H | do_enc_OCTET_STRING(T, State, Min, Max, Count + 1)] end;do_enc_OCTET_STRING([], _State, Min, Max, Count) -> verify_count(Count, Min, Max), [].enc_QUOTED_STRING(String, _State) when list(String) -> {_IsSafe, Count} = quoted_string_count(String, 0, true), verify_count(Count, 1, infinity), [?DQUOTE, String, ?DQUOTE].%% The internal format of hex digits is a list of octets%% Min and Max means #hexDigits%% Leading zeros are prepended in order to fulfill Minenc_HEXDIG(Octets, State, Min, Max) when list(Octets) -> do_enc_HEXDIG(Octets, State, Min, Max, 0, []).do_enc_HEXDIG([Octet | Rest], State, Min, Max, Count, Acc) when Octet >= 0, Octet =< 255 -> Hex = hex(Octet), % OTP-4921 if Octet =< 15 -> Acc2 = [[$0|Hex]|Acc], % OTP-4921 do_enc_HEXDIG(Rest, State, Min, Max, Count + 2, Acc2); true -> Acc2 = [Hex|Acc], % OTP-4921 do_enc_HEXDIG(Rest, State, Min, Max, Count + 2, Acc2) end;do_enc_HEXDIG([], State, Min, Max, Count, Acc) when integer(Min), Count < Min -> do_enc_HEXDIG([0], State, Min, Max, Count, Acc);do_enc_HEXDIG([], _State, Min, Max, Count, Acc) -> %% OTP-4710 verify_count(Count, Min, Max), lists:reverse(Acc).enc_DIGIT(Val, State, Min, Max) -> enc_integer(Val, State, Min, Max).enc_STRING(String, _State, Min, Max) when list(String) -> verify_count(length(String), Min, Max), String.enc_UINT16(Val, State) -> enc_integer(Val, State, 0, 65535).enc_UINT32(Val, State) -> enc_integer(Val, State, 0, 4294967295).enc_integer(Val, _State, Min, Max) -> verify_count(Val, Min, Max), integer_to_list(Val).%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Encodes a list of elements with separator tokens between%% the elements. Optional asn1_NOVALUE values are ignored.%% enc_list(asn1_NOVALUE, _State) ->%% [];%% enc_list([], _State) ->%% [];enc_list(List, State) -> enc_list(List, State, fun(_S) -> ?COMMA_INDENT(_S) end, false).enc_list([], _State, _SepEncoder, _NeedsSep) -> [];enc_list([{Elems, ElemEncoder} | Tail], State, SepEncoder, NeedsSep) -> case do_enc_list(Elems, State, ElemEncoder, SepEncoder, NeedsSep) of [] -> enc_list(Tail, State, SepEncoder, NeedsSep); List -> [List, enc_list(Tail, State, SepEncoder, true)] end;enc_list(A, B, C, D) -> error({invlid_list, A, B, C, D}).do_enc_list(asn1_NOVALUE, _State, _ElemEncoder, _SepEncoder, _NeedsSep) -> [];do_enc_list([], _State, _ElemEncoder, _SepEncoder, _NeedsSep) -> [];do_enc_list([asn1_NOVALUE | T], State, ElemEncoder, SepEncoder, NeedsSep) -> do_enc_list(T, State, ElemEncoder, SepEncoder, NeedsSep);do_enc_list([H | T], State, ElemEncoder, SepEncoder, NeedsSep) when function(ElemEncoder), function(SepEncoder) -> case ElemEncoder(H, State) of [] -> do_enc_list(T, State, ElemEncoder, SepEncoder, NeedsSep); List when NeedsSep == true -> [SepEncoder(State), List, do_enc_list(T, State, ElemEncoder, SepEncoder, true)]; List when NeedsSep == false -> [List, do_enc_list(T, State, ElemEncoder, SepEncoder, true)] end.%% Add brackets if list is non-emptyenc_opt_brackets([], _State) -> [];enc_opt_brackets(List, _State) when list(List) -> [?LBRKT_INDENT(_State), List, ?RBRKT_INDENT(_State)].%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Int -> list of hex charshex(Int) -> hexi(get_lo_bits(Int, 4), []).hexi({0, Lo}, Ack) -> [hex4(Lo) | Ack];hexi({Hi, Lo} , Ack) -> hexi(get_lo_bits(Hi, 4), [hex4(Lo) | Ack]).hex4(Int) when Int < 10 -> Int + $0;hex4(Int) -> ($A - 10) + Int.get_lo_bits(Int, Size) -> Lo = Int band ones_mask(Size), Hi = Int bsr Size, {Hi, Lo}.ones_mask(Ones) -> (1 bsl Ones) - 1.%% Verify that Count is within the range of Min and Maxverify_count(Count, Min, Max) -> if integer(Count) -> if integer(Min), Count >= Min -> if integer(Max), Count =< Max -> Count; Max == infinity -> Count; true -> error({count_too_large, Count, Max}) end; true -> error({count_too_small, Count, Min}) end; true -> error({count_not_an_integer, Count}) end.%% ---------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -