⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 megaco_text_gen_v1.hrl

📁 OTP是开放电信平台的简称
💻 HRL
📖 第 1 页 / 共 5 页
字号:
    [     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 + -