megaco_test_msg_v2_lib.erl

来自「OTP是开放电信平台的简称」· ERL 代码 · 共 1,969 行 · 第 1/5 页

ERL
1,969
字号
    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}) ->    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([]) ->    true;is_Message_messageBody_transactions([H|T]) ->    is_Transaction(H) andalso is_Message_messageBody_transactions(T);is_Message_messageBody_transactions(_) ->    false.chk_Message_messageBody(B, B) ->    chk_type(fun is_Message_messageBody/1, 'Message_messageBody', B);chk_Message_messageBody({Tag, Val1} = B1, {Tag, Val2} = B2) ->    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) ->    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(Val1, Val2).chk_Message_messageBody_transactions([], []) ->    ok;chk_Message_messageBody_transactions([] = T1, T2) ->    not_equal('Message_messageBody_transactions', T1, T2);chk_Message_messageBody_transactions(T1, [] = T2) ->    not_equal('Message_messageBody_transactions', T1, T2);chk_Message_messageBody_transactions([H|T1], [H|T2]) ->    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]) ->    validate(fun() -> chk_Transaction(H1, H2) end, 	     'Message_messageBody_transactions_val'),    chk_Message_messageBody_transactions(T1, T2);chk_Message_messageBody_transactions(T1, T2) ->    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)) of	true ->	    chk_MId_val(Tag, Val1, Val2);	false ->	    wrong_type('MId', M1, M2)    end;chk_MId({Tag1, Val1} = M1, {Tag2, Val2} = M2) ->    case ((is_MId_tag(Tag1) andalso	   is_MId_val(Tag1, Val1)) andalso	  (is_MId_tag(Tag2) andalso	   is_MId_val(Tag2, Val2))) of	true ->	    not_equal('MId', M1, M2);	false ->	    wrong_type('MId', M1, M2)    end;chk_MId(M1, M2) ->    wrong_type('MId', M1, M2).chk_MId_val(ip4Address, M1, M2) -> chk_IP4Address(M1, M2);chk_MId_val(ip6Address, M1, M2) -> chk_IP6Address(M1, M2);chk_MId_val(domainName, M1, M2) -> chk_DomainName(M1, M2);chk_MId_val(deviceName, M1, M2) -> chk_PathName(M1,   M2);chk_MId_val(mtpAddress, M1, M2) -> chk_OCTET_STRING(M1, M2, {range, 2, 4}).%% -- DomainName --is_DomainName(#'DomainName'{name = N, portNumber = PN}) ->    is_IA5String(N) andalso is_opt_INTEGER(PN, {range, 0, 65535});is_DomainName(_) ->    false.chk_DomainName(N, N) ->    ok;chk_DomainName(N1, N2) ->    not_equal('DomainName', N1, N2).%% -- IP4Address --is_IP4Address(#'IP4Address'{address = A, portNumber = PN}) ->    is_OCTET_STRING(A, {exact, 4}) andalso 	is_opt_INTEGER(PN, {range, 0, 65535});is_IP4Address(_) ->    false.chk_IP4Address(A, A) ->    ok;chk_IP4Address(A1, A2) ->    not_equal('IP4Address', A1, A2).%% -- IP6Address --is_IP6Address(#'IP6Address'{address = A, portNumber = PN}) ->    is_OCTET_STRING(A, {exact, 16}) andalso 	is_opt_INTEGER(PN, {range, 0, 65535});is_IP6Address(_) ->    false.chk_IP6Address(A, A) ->    ok;chk_IP6Address(A1, A2) ->    not_equal('IP6Address', A1, A2).%% -- PathName --is_PathName(N) -> is_IA5String(N, {range, 1, 64}).    chk_PathName(N, N) ->    ok;chk_PathName(N1, N2) ->    not_equal('PathName', N1, N2).%% -- Transaction --is_Transaction({Tag, Val}) ->    is_Transaction_tag(Tag) andalso is_Transaction_val(Tag, Val);is_Transaction(_) ->    false.is_Transaction_tag(Tag) ->    Tags = [transactionRequest,	    transactionPending,	    transactionReply,	    transactionResponseAck],    lists:member(Tag, Tags).is_Transaction_val(transactionRequest, V)     -> is_TransactionRequest(V);is_Transaction_val(transactionPending, V)     -> is_TransactionPending(V);is_Transaction_val(transactionReply, V)       -> is_TransactionReply(V);is_Transaction_val(transactionResponseAck, V) -> is_TransactionResponseAck(V).    chk_Transaction({Tag, Val} = Trans, {Tag, Val}) ->    case (is_Transaction_tag(Tag) andalso is_Transaction_val(Tag, Val)) of	true ->	    ok;	false ->	    wrong_type('Transaction', Trans, Trans)    end;chk_Transaction({Tag, Val1} = Trans1, {Tag, Val2} = Trans2) ->    case (is_Transaction_tag(Tag) and	  is_Transaction_val(Tag, Val1) and	  is_Transaction_val(Tag, Val2)) of	true ->	    chk_Transaction_val(Tag, Val1, Val2);	false ->	    wrong_type('Transaction', Trans1, Trans2)    end;chk_Transaction({Tag1, Val1} = Trans1, {Tag2, Val2} = Trans2) ->    case ((is_Transaction_tag(Tag1) andalso 	   is_Transaction_val(Tag1, Val1)) andalso	  (is_Transaction_tag(Tag2) andalso 	   is_Transaction_val(Tag2, Val2))) of	true ->	    not_equal('Transaction', Trans1, Trans2);	false ->	    wrong_type('Transaction', Trans1, Trans2)    end;chk_Transaction(Trans1, Trans2) ->    wrong_type('Transaction', Trans1, Trans2).chk_Transaction_val(transactionRequest, T1, T2) ->    chk_TransactionRequest(T1, T2);chk_Transaction_val(transactionPending, T1, T2) ->    chk_TransactionPending(T1, T2);chk_Transaction_val(transactionReply, T1, T2) ->    chk_TransactionReply(T1,T2);chk_Transaction_val(transactionResponseAck, T1, T2) ->    chk_TransactionResponseAck(T1, T2). %% -- TransactionId --is_opt_TransactionId(TID) ->     is_OPTIONAL(fun is_TransactionId/1, TID).is_TransactionId(TID) -> is_INTEGER(TID, {range, 0, 4294967295}).chk_opt_TransactionId(TID1, TID2) ->    chk_OPTIONAL('TransactionId', TID1, TID2, 		 fun is_TransactionId/1, fun chk_TransactionId/2).chk_TransactionId(TID, TID) ->    chk_type(fun is_TransactionId/1, 'TransactionId', TID);chk_TransactionId(TID1, TID2) ->    case (is_TransactionId(TID1) andalso is_TransactionId(TID2)) of	true ->	    not_equal('TransactionId', TID1, TID2);	false ->	    wrong_type('TransactionId', TID1, TID2)    end.%% -- TransactionRequest --is_TransactionRequest(#'TransactionRequest'{transactionId = TID,					    actions       = Acts}) ->    is_TransactionId(TID) andalso is_TransactionRequest_actions(Acts);is_TransactionRequest(_) ->    false.chk_TransactionRequest(T, T) ->    chk_type(fun is_TransactionRequest/1, 'TransactionRequest', T);chk_TransactionRequest(#'TransactionRequest'{transactionId = TID1,					     actions       = Acts1}, 		       #'TransactionRequest'{transactionId = TID2,					     actions       = Acts2}) ->    validate(fun() -> chk_TransactionId(TID1, TID2) end, 'TransactionRequest'),    chk_TransactionRequest_actions(Acts1, Acts2),    ok;chk_TransactionRequest(T1, T2) ->    wrong_type('TransactionRequest', T1, T2).is_TransactionRequest_actions([]) ->    true;is_TransactionRequest_actions([H|T]) ->    is_ActionRequest(H) andalso is_TransactionRequest_actions(T);is_TransactionRequest_actions(_) ->    false.chk_TransactionRequest_actions([], []) ->    ok;chk_TransactionRequest_actions([] = Acts1, Acts2) ->    not_equal('TransactionRequest_actions', Acts1, Acts2);chk_TransactionRequest_actions(Acts1, [] = Acts2) ->    not_equal('TransactionRequest_actions', Acts1, Acts2);chk_TransactionRequest_actions([H|T1], [H|T2]) ->    case is_ActionRequest(H) of	true ->	    chk_TransactionRequest_actions(T1, T2);	false ->	    wrong_type('TransactionRequest_actions_val', H)    end;chk_TransactionRequest_actions([H1|T1], [H2|T2]) ->    validate(fun() -> chk_ActionRequest(H1, H2) end, 	     'TransactionRequest_actions_val'),    chk_TransactionRequest_actions(T1, T2);chk_TransactionRequest_actions(Acts1, Acts2) ->    wrong_type('TransactionRequest_actions', Acts1, Acts2).%% -- TransactionPending --is_TransactionPending(#'TransactionPending'{transactionId = TID}) ->    is_TransactionId(TID);is_TransactionPending(_) ->    false.chk_TransactionPending(T, T) ->    chk_type(fun is_TransactionPending/1, 'TransactionPending', T);chk_TransactionPending(#'TransactionPending'{transactionId = TID1}, 		       #'TransactionPending'{transactionId = TID2}) ->    validate(fun() -> chk_TransactionId(TID1, TID2) end, 'TransactionPending'),    ok;chk_TransactionPending(T1, T2) ->    wrong_type('TransactionPending', T1, T2).    %% -- TransactionReply --is_TransactionReply(#'TransactionReply'{transactionId     = TID,					immAckRequired    = IAR,					transactionResult = TR}) ->    is_TransactionId(TID) andalso 	is_opt_NULL(IAR) andalso 	is_TransactionReply_transactionResult(TR);is_TransactionReply(_) ->    false.chk_TransactionReply(T, T) ->    chk_type(fun is_TransactionReply/1, 'TransactionReply', T);chk_TransactionReply(#'TransactionReply'{transactionId     = TID1,					 immAckRequired    = IAR1,					 transactionResult = TR1},		     #'TransactionReply'{transactionId     = TID2,					 immAckRequired    = IAR2,					 transactionResult = TR2}) ->    validate(fun() -> chk_TransactionId(TID1, TID2) end, 'TransactionReply'),    validate(fun() -> chk_opt_NULL(IAR1, IAR2) end, 'TransactionReply'),    chk_TransactionReply_transactionResult(TR1, TR2),    ok;chk_TransactionReply(T1, T2) ->    wrong_type('TransactionReply', T1, T2).	is_TransactionReply_transactionResult({Tag, Val}) ->    is_TransactionReply_transactionResult_tag(Tag) andalso	is_TransactionReply_transactionResult_val(Tag, Val);is_TransactionReply_transactionResult(_) ->    false.is_TransactionReply_transactionResult_tag(T) ->    lists:member(T, [transactionError, actionReplies]).is_TransactionReply_transactionResult_val(transactionError, V) ->    is_ErrorDescriptor(V);is_TransactionReply_transactionResult_val(actionReplies, V) ->    is_TransactionReply_actionReplies(V).chk_TransactionReply_transactionResult(Res, Res) ->    chk_type(fun is_TransactionReply_transactionResult/1, 	     'TransactionReply_transactionResult', Res);chk_TransactionReply_transactionResult({Tag, Val1} = Res1, 				       {Tag, Val2} = Res2) ->    case (is_TransactionReply_transactionResult_tag(Tag) and	  is_TransactionReply_transactionResult_val(Tag, Val1) and	  is_TransactionReply_transactionResult_val(Tag, Val2)) of	true ->	    chk_TransactionReply_transactionResult_val(Tag, Val1, Val2);	false ->	    wrong_type('TransactionReply_transactionResult', Res1, Res2)    end;chk_TransactionReply_transactionResult({Tag1, Val1} = Res1, 				       {Tag2, Val2} = Res2) ->    case ((is_TransactionReply_transactionResult_tag(Tag1) and	   is_TransactionReply_transactionResult_val(Tag1, Val1)) and	  (is_TransactionReply_transactionResult_tag(Tag2) and	   is_TransactionReply_transactionResult_val(Tag2, Val2))) of	true ->	   

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?