📄 megaco_test_msg_prev3b_lib.erl
字号:
durationTimer = Dur}.cre_ServiceChangeParm(M, R) when atom(M), list(R) -> #'ServiceChangeParm'{serviceChangeMethod = M, serviceChangeReason = R}.cre_ServiceChangeParm(M, Addr, Prof, Reason) -> cre_ServiceChangeParm(M, Addr, asn1_NOVALUE, Prof, Reason, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE, asn1_NOVALUE). %% Addr = asn1_NOVALUE | {AddrTag, AddrVal}cre_ServiceChangeParm(M, Addr, Ver, Prof, R, D, Mid, TS, I) -> cre_ServiceChangeParm(M, Addr, Ver, Prof, R, D, Mid, TS, I, asn1_NOVALUE). cre_ServiceChangeParm(M, Addr, Ver, Prof, R, D, Mid, TS, I, IF) when is_atom(M) and ((is_integer(Ver) and (0 =< Ver) and (Ver =< 99)) or (Ver == asn1_NOVALUE)) and (is_record(Prof, 'ServiceChangeProfile') or (Prof == asn1_NOVALUE)) and is_list(R) and ((is_integer(D) and (0 =< D) and (D =< 4294967295)) or (D == asn1_NOVALUE)) and (is_record(TS, 'TimeNotation') or (TS == asn1_NOVALUE)) and (is_record(I, 'AuditDescriptor') or (I == asn1_NOVALUE)) and ((IF == 'NULL') or (IF == asn1_NOVALUE)) -> F = fun(A) -> (A == asn1_NOVALUE) orelse (is_tuple(A) andalso is_atom(element(1, A))) end, case (F(Addr) andalso F(Mid)) of true -> #'ServiceChangeParm'{serviceChangeMethod = M, serviceChangeAddress = Addr, serviceChangeVersion = Ver, serviceChangeProfile = Prof, serviceChangeReason = R, serviceChangeDelay = D, serviceChangeMgcId = Mid, timeStamp = TS, serviceChangeInfo = I, serviceChangeIncompleteFlag = IF}; _ -> exit({invalid_ServiceChangeParm_args, {Addr, Mid}}) end. cre_ServiceChangeAddress(portNumber = Tag, P) when integer(P), 0 =< P, P =< 65535 -> {Tag, P};cre_ServiceChangeAddress(ip4Address = Tag, A) when record(A, 'IP4Address') -> {Tag, A};cre_ServiceChangeAddress(ip6Address = Tag, A) when record(A, 'IP6Address') -> {Tag, A};cre_ServiceChangeAddress(domainName = Tag, N) when record(N, 'DomainName') -> {Tag, N};cre_ServiceChangeAddress(deviceName = Tag, N) when list(N) -> {Tag, N};cre_ServiceChangeAddress(mtpAddress = Tag, A) when list(A) -> {Tag, A}.cre_ServiceChangeResParm() -> #'ServiceChangeResParm'{}.cre_ServiceChangeResParm(Addr, Prof) -> cre_ServiceChangeResParm(asn1_NOVALUE, Addr, asn1_NOVALUE, Prof, asn1_NOVALUE).cre_ServiceChangeResParm(Mid, Addr, Ver, Prof, TS) when ((is_integer(Ver) and (0 =< Ver) and (Ver =< 99)) or (Ver == asn1_NOVALUE)) and (is_record(Prof, 'ServiceChangeProfile') or (Prof == asn1_NOVALUE)) and (is_record(TS, 'TimeNotation') or (TS == asn1_NOVALUE)) -> F = fun(A) -> (A == asn1_NOVALUE) orelse (is_tuple(A) andalso is_atom(element(1, A))) end, case (F(Addr) andalso F(Mid)) of true -> #'ServiceChangeResParm'{serviceChangeMgcId = Mid, serviceChangeAddress = Addr, serviceChangeVersion = Ver, serviceChangeProfile = Prof, timeStamp = TS}; _ -> exit({invalid_ServiceChangeResParm_args, {Addr, Mid}}) end.cre_ServiceChangeMethod(failover = M) -> M;cre_ServiceChangeMethod(forced = M) -> M;cre_ServiceChangeMethod(graceful = M) -> M;cre_ServiceChangeMethod(restart = M) -> M;cre_ServiceChangeMethod(disconnected = M) -> M;cre_ServiceChangeMethod(handOff = M) -> M.%% The version field is added to make it look more like ABNFcre_ServiceChangeProfile(N) -> cre_ServiceChangeProfile(N, 1).cre_ServiceChangeProfile(N, V) when is_list(N) and is_integer(V) and (0 =< V) and (V =< 99) -> #'ServiceChangeProfile'{profileName = N, version = V}. cre_PackagesDescriptor([H|_] = D) when record(H, 'PackagesItem') -> D.cre_PackagesItem(N, Ver) when list(N), integer(Ver), 0 =< Ver, Ver =< 99 -> #'PackagesItem'{packageName = N, packageVersion = Ver}.cre_StatisticsDescriptor(D) -> true = is_StatisticsDescriptor(D), D.cre_StatisticsParameter(N) when list(N) -> #'StatisticsParameter'{statName = N}.cre_StatisticsParameter(N, V) when list(N), list(V) -> #'StatisticsParameter'{statName = N, statValue = V}.%% cre_NonStandardData({Tag, _} = Id, Data) when atom(Tag), list(Data) ->%% #'NonStandardData'{nonStandardIdentifier = Id, data = Data}.%% cre_NonStandardIdentifier(H221) when record(H221, 'H221NonStandard') ->%% {h221NonStandard, H221};%% cre_NonStandardIdentifier(Obj) when tuple(Obj) ->%% {object, Obj};%% cre_NonStandardIdentifier(Exp) when list(Exp), length(Exp) == 8 ->%% {experimental, Exp}.%% cre_H221NonStandard(CC1, CC2, Ext, MC) %% when (is_integer(CC1) and (0 =< CC1) and (CC1 =< 255)) and%% (is_integer(CC2) and (0 =< CC2) and (CC2 =< 255)) and%% (is_integer(Ext) and (0 =< Ext) and (Ext =< 255)) and%% (is_integer(MC) and (0 =< MC) and (MC =< 255)) ->%% #'H221NonStandard'{t35CountryCode1 = CC1, %% t35CountryCode2 = CC2, %% t35Extension = Ext, %% manufacturerCode = MC}. cre_TimeNotation(D, T) when list(D), length(D) == 8, list(T), length(T) == 8 -> #'TimeNotation'{date = D, time = T}. cre_Value([H|_] = V) when list(H) -> V.cre_BOOLEAN(true = B) -> B;cre_BOOLEAN(false = B) -> B.%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- MegacoMessage -- is_MegacoMessage(#'MegacoMessage'{authHeader = Auth, mess = Mess}) -> d("is_MegacoMessage -> entry"), is_opt_AuthenticationHeader(Auth) andalso is_Message(Mess);is_MegacoMessage(_) -> false. chk_MegacoMessage(M, M) -> d("chk_MegacoMessage -> entry (1)"), chk_type(fun is_MegacoMessage/1, 'MegacoMessage', M);chk_MegacoMessage(#'MegacoMessage'{authHeader = Auth1, mess = Mess1}, #'MegacoMessage'{authHeader = Auth2, mess = Mess2}) -> d("chk_MegacoMessage -> entry (2)"), chk_opt_AuthenticationHeader(Auth1,Auth2), chk_Message(Mess1,Mess2), ok;chk_MegacoMessage(M1, M2) -> wrong_type('MegacoMessage', M1, M2).%% -- AuthenticationHeader -- is_opt_AuthenticationHeader(AH) -> is_OPTIONAL(fun is_AuthenticationHeader/1, AH).is_AuthenticationHeader(#'AuthenticationHeader'{secParmIndex = SPI, seqNum = SN, ad = AD}) -> is_SecurityParmIndex(SPI) andalso is_SequenceNum(SN) andalso is_AuthData(AD);is_AuthenticationHeader(_) -> false. %% This stuff is not really used, so make it simple...chk_opt_AuthenticationHeader(A1, A2) -> chk_OPTIONAL('AuthenticationHeader', A1, A2, fun is_AuthenticationHeader/1, fun chk_AuthenticationHeader/2).chk_AuthenticationHeader(A, A) -> chk_type(fun is_AuthenticationHeader/1, 'AuthenticationHeader', A);chk_AuthenticationHeader(A1, A2) -> case (is_AuthenticationHeader(A1) andalso is_AuthenticationHeader(A2)) of true -> not_equal('AuthenticationHeader', A1, A2); false -> wrong_type('AuthenticationHeader', A1, A2) end.%% -- SecurityParmIndex --is_SecurityParmIndex(V) -> is_OCTET_STRING(V, {exact, 4}).%% -- SequenceNum --is_SequenceNum(V) -> is_OCTET_STRING(V, {exact, 4}).%% -- AuthData --is_AuthData(V) -> is_OCTET_STRING(V, {range, 12, 32}).%% -- Message --is_Message(#'Message'{version = V, mId = MID, messageBody = Body}) -> d("is_Message -> entry"), is_INTEGER(V, {range, 0, 99}) andalso is_MId(MID) andalso is_Message_messageBody(Body);is_Message(_) -> false.chk_Message(M, M) -> d("chk_Message -> entry (1)"), chk_type(fun is_Message/1, 'Message', M);chk_Message(#'Message'{version = V1, mId = MID1, messageBody = Body1}, #'Message'{version = V2, mId = MID2, messageBody = Body2}) -> d("chk_Message -> entry with" "~n V1: ~p" "~n MID1: ~p" "~n Body1: ~p" "~n V2: ~p" "~n MID2: ~p" "~n Body2: ~p", [V1, MID1, Body1, V2, MID2, Body2]), validate(fun() -> chk_INTEGER(V1, V2, {range, 0, 99}) end, 'Message'), validate(fun() -> chk_MId(MID1, MID2) end, 'Message'), chk_Message_messageBody(Body1, Body2), ok;chk_Message(M1, M2) -> wrong_type('Message', M1, M2).is_Message_messageBody({Tag, Val}) -> d("is_Message_messageBody -> entry"), is_Message_messageBody_tag(Tag) andalso is_Message_messageBody_val(Tag, Val);is_Message_messageBody(_) -> false.is_Message_messageBody_tag(Tag) -> Tags = [messageError, transactions], lists:member(Tag, Tags). is_Message_messageBody_val(messageError, Val) -> is_ErrorDescriptor(Val);is_Message_messageBody_val(transactions, Val) -> is_Message_messageBody_transactions(Val).is_Message_messageBody_transactions([]) -> d("is_Message_messageBody_transactions -> entry when done"), true;is_Message_messageBody_transactions([H|T]) -> d("is_Message_messageBody_transactions -> entry"), is_Transaction(H) andalso is_Message_messageBody_transactions(T);is_Message_messageBody_transactions(_) -> false.chk_Message_messageBody(B, B) -> d("chk_Message_messageBody -> entry (1)"), chk_type(fun is_Message_messageBody/1, 'Message_messageBody', B);chk_Message_messageBody({Tag, Val1} = B1, {Tag, Val2} = B2) -> d("chk_Message_messageBody -> entry (2)"), case (is_Message_messageBody_tag(Tag) andalso is_Message_messageBody_val(Tag, Val1) andalso is_Message_messageBody_val(Tag, Val2)) of true -> chk_Message_messageBody_val(Tag, Val1, Val2); false -> wrong_type('Message_messageBody', B1, B2) end;chk_Message_messageBody({Tag1, Val1} = B1, {Tag2, Val2} = B2) -> d("chk_Message_messageBody -> entry (3)"), case ((is_Message_messageBody_tag(Tag1) andalso is_Message_messageBody_val(Tag1, Val1)) andalso (is_Message_messageBody_tag(Tag2) andalso is_Message_messageBody_val(Tag2, Val2))) of true -> not_equal('Message_messageBody', B1, B2); false -> wrong_type('Message_messageBody', B1, B2) end;chk_Message_messageBody(B1, B2) -> wrong_type('Message_messageBody', B1, B2).chk_Message_messageBody_val(messageError, Val1, Val2) -> validate(fun() -> chk_ErrorDescriptor(Val1, Val2) end, 'Message_messageBody');chk_Message_messageBody_val(transactions, Val1, Val2) -> chk_Message_messageBody_transactions(lists:sort(Val1), lists:sort(Val2)).chk_Message_messageBody_transactions([], []) -> d("chk_Message_messageBody_transactions -> entry - ok (1)"), ok;chk_Message_messageBody_transactions([] = T1, T2) -> d("chk_Message_messageBody_transactions -> entry - not-equal (2)"), not_equal('Message_messageBody_transactions', T1, T2);chk_Message_messageBody_transactions(T1, [] = T2) -> d("chk_Message_messageBody_transactions -> entry - not-equal (3)"), not_equal('Message_messageBody_transactions', T1, T2);chk_Message_messageBody_transactions([H|T1], [H|T2]) -> d("chk_Message_messageBody_transactions -> entry (4)"), case is_Transaction(H) of true -> chk_Message_messageBody_transactions(T1, T2); false -> wrong_type('Message_messageBody_transactions_val', H) end;chk_Message_messageBody_transactions([H1|T1], [H2|T2]) -> d("chk_Message_messageBody_transactions -> entry (5)"), validate(fun() -> chk_Transaction(H1, H2) end, 'Message_messageBody_transactions_val'), chk_Message_messageBody_transactions(T1, T2);chk_Message_messageBody_transactions(T1, T2) -> d("chk_Message_messageBody_transactions -> entry - wrong-type (6)"), wrong_type('Message_messageBody_transactions', T1, T2). %% -- MId --is_opt_MId(M) -> is_OPTIONAL(fun is_MId/1, M).is_MId({Tag, Val}) -> is_MId_tag(Tag) andalso is_MId_val(Tag, Val);is_MId(_) -> false.is_MId_tag(Tag) -> Tags = [ip4Address, ip6Address, domainName, deviceName, mtpAddress], lists:member(Tag, Tags).is_MId_val(ip4Address, Val) -> is_IP4Address(Val);is_MId_val(ip6Address, Val) -> is_IP6Address(Val);is_MId_val(domainName, Val) -> is_DomainName(Val);is_MId_val(deviceName, Val) -> is_PathName(Val);is_MId_val(mtpAddress, Val) -> is_OCTET_STRING(Val, {range, 2, 4}).chk_opt_MId(M1, M2) -> chk_OPTIONAL('MId', M1, M2, fun is_MId/1, fun chk_MId/2).chk_MId(M, M) -> chk_type(fun is_MId/1, 'MId', M);chk_MId({Tag, Val1} = M1, {Tag, Val2} = M2) -> case (is_MId_tag(Tag) andalso is_MId_val(Tag, Val1) andalso is_MId_val(Tag, Val2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -