megaco_mess_test.erl

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

ERL
2,078
字号
        fun rarpaop_mgc_verify_handle_connect/1).-define(rarpaop_mgc_verify_service_change_req_fun(Mid),        rarpaop_mgc_verify_service_change_req_fun(Mid)).-define(rarpaop_mgc_verify_notify_req_fun(),	rarpaop_mgc_verify_notify_request_fun()).-define(rarpaop_mgc_verify_reply_ack_fun(),	rarpaop_mgc_verify_reply_ack_fun()).-define(rarpaop_mgc_verify_handle_disconnect_fun(),	fun rarpaop_mgc_verify_handle_disconnect/1).-endif.rarpaop_mgc_event_sequence(text, tcp) ->    Mid = {deviceName,"ctrl"},    RI = [          {port,             2944},          {encoding_module,  megaco_pretty_text_encoder},          {encoding_config,  []},          {transport_module, megaco_tcp}         ],    ConnectVerify = ?rarpaop_mgc_verify_handle_connect_fun(),     ScrVerify     = ?rarpaop_mgc_verify_service_change_req_fun(Mid),    NrVerify      = ?rarpaop_mgc_verify_notify_req_fun(),    AckVerify     = ?rarpaop_mgc_verify_reply_ack_fun(),    DiscoVerify   = ?rarpaop_mgc_verify_handle_disconnect_fun(), %%     ConnectVerify = fun rarpaop_mgc_verify_handle_connect/1,%%     ScrVerify     = rarpaop_mgc_verify_service_change_req_fun(Mid),%%     NrVerify      = rarpaop_mgc_verify_notify_request_fun(),%%     AckVerify     = rarpaop_mgc_verify_reply_ack_fun(),%%     DiscoVerify   = fun rarpaop_mgc_verify_handle_disconnect/1,    EvSeq = [             {debug, true},             {megaco_trace, disable},             {megaco_trace, max},             megaco_start,             {megaco_start_user, Mid, RI, []},             {megaco_update_user_info, sent_pending_limit, 100},             start_transport,             listen,             {megaco_callback, handle_connect,       ConnectVerify},             {megaco_conn_info, all},             {megaco_callback, handle_trans_request, ScrVerify},	     {megaco_callback, handle_trans_request, NrVerify},	     {megaco_callback, handle_trans_ack,     AckVerify},             {megaco_callback, nocall, 10000},             {megaco_callback, handle_disconnect,    DiscoVerify},             megaco_stop_user,             megaco_stop            ],    EvSeq.%% Connect verificationrarpaop_mgc_verify_handle_connect({handle_connect, CH, ?VERSION}) ->    {ok, CH, ok};rarpaop_mgc_verify_handle_connect(Else) ->    {error, Else, ok}.%% Service Change verification-ifndef(megaco_hipe_special).rarpaop_mgc_verify_service_change_req_fun(Mid) ->    fun(Req) -> 	    rarpaop_mgc_verify_service_change_req(Req, Mid)     end.-endif.rarpaop_mgc_verify_service_change_req(  {handle_trans_request, _, ?VERSION, [AR]}, Mid) ->    (catch rarpaop_do_verify_service_change_req(AR, Mid));rarpaop_mgc_verify_service_change_req(Crap, _Mid) ->    ED       = cre_ErrDesc(Crap),    ErrReply = {discard_ack, ED},    {error, Crap, ErrReply}.rarpaop_do_verify_service_change_req(AR, Mid) ->    CR = 	case AR of	    #'ActionRequest'{commandRequests = [CmdReq]} ->		CmdReq;	    _ ->		Err1      = {invalid_action_request, AR},		ED1       = cre_ErrDesc(AR),		ErrReply1 = {discard_ack, ED1},		throw({error, Err1, ErrReply1})	end,    Cmd = 	case CR of	    #'CommandRequest'{command = Command} ->		Command; 	    _ ->		Err2      = {invalid_command_request, CR},		ED2       = cre_ErrDesc(CR),		ErrReply2 = {discard_ack, ED2},		throw({error, Err2, ErrReply2})	end,    {Tid, Parms} = 	case Cmd of	    {serviceChangeReq, 	     #'ServiceChangeRequest'{terminationID = [TermID],				     serviceChangeParms = ServChParms}} ->		{TermID, ServChParms};	    _ ->		Err3      = {invalid_command, Cmd},		ED3       = cre_ErrDesc(Cmd),		ErrReply3 = {discard_ack, ED3},		throw({error, Err3, ErrReply3})	end,    case Tid of	#megaco_term_id{contains_wildcards = false, id = ["root"]} ->	    ok;	_ ->	    Err4      = {invalid_termination_id, Tid},	    ED4       = cre_ErrDesc(Tid),	    ErrReply4 = {discard_ack, ED4},	    throw({error, Err4, ErrReply4})    end,    case Parms of	#'ServiceChangeParm'{serviceChangeMethod = restart,			     serviceChangeReason = [[$9,$0,$1|_]]} ->	    AckData = [rarpaop_mgc_service_change_reply_ar(Mid, 1)], 	    Reply   = {discard_ack, AckData},	    {ok, AR, Reply};	_ ->	    Err5      = {invalid_SCP, Parms},	    ED5       = cre_ErrDesc(Parms),	    ErrReply5 = {discard_ack, ED5},	    {error, Err5, ErrReply5}    end.%% Notify Request verification-ifndef(megaco_hipe_special).rarpaop_mgc_verify_notify_request_fun() ->    fun(Req) -> 	    rarpaop_mgc_verify_notify_request(Req)     end.-endif.rarpaop_mgc_verify_notify_request({handle_trans_request, _, ?VERSION, [AR]}) ->    (catch rarpaop_mgc_do_verify_notify_request(AR));rarpaop_mgc_verify_notify_request(Crap) ->    ED       = cre_ErrDesc(Crap),    ErrReply = {discard_ack, ED},    {error, Crap, ErrReply}.rarpaop_mgc_do_verify_notify_request(AR) ->    {Cid, CR} = 	case AR of	    #'ActionRequest'{contextId       = CtxID,			     commandRequests = [CmdReq]} ->		{CtxID, CmdReq};	    _ ->		Err1      = {invalid_action_request, AR},		ED1       = cre_ErrDesc(AR),		ErrReply1 = {discard_ack, ED1},		throw({error, Err1, ErrReply1})	end,    Cmd = 	case CR of	    #'CommandRequest'{command = Command} ->		Command;	    _ ->		Err2      = {invalid_command_request, CR},		ED2       = cre_ErrDesc(CR),		ErrReply2 = {discard_ack, ED2},		throw({error, Err2, ErrReply2})	end,    NR = 	case Cmd of	    {notifyReq, NotifReq} ->		NotifReq;	    _ ->		Err3      = {invalid_command, Cmd},		ED3       = cre_ErrDesc(Cmd),		ErrReply3 = {discard_ack, ED3},		throw({error, Err3, ErrReply3})	end,    {Tid, OED} = 	case NR of	    #'NotifyRequest'{terminationID            = [TermID],			     observedEventsDescriptor = ObsEvsDesc,			     errorDescriptor          = asn1_NOVALUE} ->		{TermID, ObsEvsDesc};	    _ ->		Err4      = {invalid_NR, NR},		ED4       = cre_ErrDesc(NR),		ErrReply4 = {discard_ack, ED4},		throw({error, Err4, ErrReply4})	end,    OE = 	case OED of 	    #'ObservedEventsDescriptor'{observedEventLst = [ObsEvLst]} ->		ObsEvLst;	    _ ->		Err5      = {invalid_OED, OED},		ED5       = cre_ErrDesc(NR),		ErrReply5 = {discard_ack, ED5},		throw({error, Err5, ErrReply5})	end,    case OE of	#'ObservedEvent'{eventName = "al/of"} ->	    AckData = notify_request_verified, 	    Replies = [rarpaop_mgc_notify_reply_ar(Cid, Tid)],	    Reply   = {{handle_pending_ack, AckData}, Replies},	    {ok, 5000, AR, Reply};	_ ->	    Err6      = {invalid_OE, OE},	    ED6       = cre_ErrDesc(OE),	    ErrReply6 = {discard_ack, ED6},	    throw({error, Err6, ErrReply6})    end.%% Ack verification-ifndef(megaco_hipe_special).rarpaop_mgc_verify_reply_ack_fun() ->    fun(M) -> 	    rarpaop_mgc_verify_reply_ack(M)     end.-endif.rarpaop_mgc_verify_reply_ack({handle_trans_ack, _, ?VERSION, ok, _}) ->    io:format("rarpaop_mgc_verify_reply_ack -> ok~n", []),    {ok, ok, ok};rarpaop_mgc_verify_reply_ack({handle_trans_ack, _, ?VERSION, AS, AD} = Crap) ->    io:format("rarpaop_mgc_verify_reply_ack -> incorrect ack-status:"	      "~n   AS: ~p"	      "~n   AD: ~p"	      "~n", [AS, AD]),    ED       = cre_ErrDesc({invalid_ack_status, {AS, AD}}),    ErrReply = {discard_ack, ED},    {error, Crap, ErrReply};rarpaop_mgc_verify_reply_ack(Crap) ->    io:format("rarpaop_mgc_verify_reply_ack -> invalid ack:"	      "~n   Crap: ~p"	      "~n", [Crap]),    ED       = cre_ErrDesc(Crap),    ErrReply = {discard_ack, ED},    {error, Crap, ErrReply}.%% Disconnect verificationrarpaop_mgc_verify_handle_disconnect({handle_disconnect, CH, ?VERSION, _R}) ->    {ok, CH, ok};rarpaop_mgc_verify_handle_disconnect(Else) ->    {error, Else, ok}.rarpaop_mgc_service_change_reply_ar(Mid, Cid) ->    SCRP  = cre_serviceChangeResParm(Mid),    SCRes = cre_serviceChangeResult(SCRP),    Root  = #megaco_term_id{id = ["root"]},    SCR   = cre_serviceChangeReply([Root], SCRes),    CR    = cre_cmdReply(SCR),    AR    = cre_actionReply(Cid, [CR]),    AR.rarpaop_mgc_notify_reply_ar(Cid, TermId) ->    NR    = cre_notifyReply([TermId]),    CR    = cre_cmdReply(NR),    cre_actionReply(Cid, [CR]).%%%% MG generator stuff%%-ifdef(megaco_hipe_special).-define(rarpaop_mg_decode_msg_fun(Mod, Conf),	{?MODULE, decode_msg, [Mod, Conf]}).-define(rarpaop_mg_encode_msg_fun(Mod, Conf),	{?MODULE, encode_msg, [Mod, Conf]}).-define(rarpaop_mg_verify_service_change_rep_msg_fun(),	{?MODULE, rarpaop_mg_verify_service_change_rep_msg, []}).-define(rarpaop_mg_verify_pending_msg_fun(TransId),	{?MODULE, rarpaop_mg_verify_pending_msg, [TransId]}).-define(rarpaop_mg_verify_notify_rep_msg_fun(TransId, TermId),	{?MODULE, rarpaop_mg_verify_notify_rep_msg, [TransId, TermId]}).-else.-define(rarpaop_mg_decode_msg_fun(Mod, Conf),	rarpaop_mg_decode_msg_fun(Mod, Conf)).-define(rarpaop_mg_encode_msg_fun(Mod, Conf),	rarpaop_mg_encode_msg_fun(Mod, Conf)).-define(rarpaop_mg_verify_service_change_rep_msg_fun(),	rarpaop_mg_verify_service_change_rep_msg_fun()).-define(rarpaop_mg_verify_pending_msg_fun(TransId),	rarpaop_mg_verify_pending_msg_fun(TransId)).-define(rarpaop_mg_verify_notify_rep_msg_fun(TransId, TermId),	rarpaop_mg_verify_notify_rep_msg_fun(TransId, TermId)).-endif.rarpaop_mg_event_sequence(text, tcp) ->    DecodeFun = ?rarpaop_mg_decode_msg_fun(megaco_pretty_text_encoder, []),    EncodeFun = ?rarpaop_mg_encode_msg_fun(megaco_pretty_text_encoder, []),    Mid       = {deviceName,"mg"},    TransId = 2,     TermId = #megaco_term_id{id = ["00000000","00000000","01101101"]},    ServiceChangeReq = rarpaop_mg_service_change_request_msg(Mid, 1, 0),    NotifyReq = rarpaop_mg_notify_request_msg(Mid, TransId, 1, TermId, 1),    Ack = rarpaop_mg_ack_msg(Mid, TransId),    ScrVerifyFun  = ?rarpaop_mg_verify_service_change_rep_msg_fun(),    PendVerifyFun = ?rarpaop_mg_verify_pending_msg_fun(TransId),    NrVerifyFun   = ?rarpaop_mg_verify_notify_rep_msg_fun(TransId, TermId),%%     ScrVerifyFun  = rarpaop_mg_verify_service_change_rep_msg_fun(),%%     PendVerifyFun = rarpaop_mg_verify_pending_msg_fun(TransId),%%     NrVerifyFun   = rarpaop_mg_verify_notify_rep_msg_fun(TransId, TermId),    EvSeq = [{debug,  true},             {decode, DecodeFun},             {encode, EncodeFun},             {connect, 2944},             {send, "service-change-request", ServiceChangeReq},             {expect_receive, "service-change-reply", {ScrVerifyFun, 10000}},             {send, "notify request", NotifyReq},             {sleep, 2000},             {send, "notify request", NotifyReq},             {expect_receive, "pending", {PendVerifyFun, 5000}},             {expect_receive, "notify-reply", {NrVerifyFun, 5000}},             {send, "reply ack", Ack},             {expect_nothing, 11000},             disconnect            ],    EvSeq.-ifndef(megaco_hipe_special).rarpaop_mg_encode_msg_fun(Mod, Conf) ->    fun(M) ->            encode_msg(M, Mod, Conf)    end.-endif.-ifndef(megaco_hipe_special).rarpaop_mg_decode_msg_fun(Mod, Conf) ->    fun(M) ->            decode_msg(M, Mod, Conf)    end.-endif.-ifndef(megaco_hipe_special).rarpaop_mg_verify_service_change_rep_msg_fun() ->    fun(Msg) -> 	    (catch rarpaop_mg_verify_service_change_rep_msg(Msg))     end.-endif.rarpaop_mg_verify_service_change_rep_msg(#'MegacoMessage'{mess = Mess} = M) ->    Body = 	case Mess of 	    #'Message'{version     = _V,                       mId         = _MgMid,                       messageBody = MsgBody} ->		MsgBody;	    _ ->		throw({error, {invalid_Message, Mess}})	end,    Trans = 	case Body of            {transactions, [Transactions]} ->		Transactions;	    _ ->		throw({error, {invalid_messageBody, Body}})	end,    TR = 	case Trans of            {transactionReply, TransReply} ->		TransReply;	    _ ->		throw({error, {invalid_transactions, Trans}})	end,    TRes = 	case TR of            #'TransactionReply'{transactionId = _Tid,                                immAckRequired = asn1_NOVALUE,                                transactionResult = TransRes} ->		TransRes;	    _ ->		throw({error, {invalid_transactionReply, TR}})	end,    AR = 	case TRes of            {actionReplies, [ActRes]} ->		ActRes;	    _ ->		throw({error, {invalid_transactionResult, TRes}})	end,    CR = 	case AR of            #'ActionReply'{contextId       = _Cid,                           errorDescriptor = asn1_NOVALUE,                           contextReply    = _CtxReq,                           commandReply    = [CmdRep]} ->		CmdRep;	    _ ->		throw({error, {invalid_actionReplies, AR}})	end,    SCR = 	case CR of            {serviceChangeReply, ServChRep} ->		ServChRep;	    _ ->		throw({error, {invalid_commandReply, CR}})	end,    SCRes = 	case SCR of            #'ServiceChangeReply'{terminationID       = _TermID,                                  serviceChangeResult = ServChRes} ->		ServChRes;	    _ ->		throw({error, {invalid_serviceChangeReply, SCR}})	end,    SCRP = 	case SCRes of            {serviceChangeResParms, Parms} ->		Parms;	    _ ->		throw({error, {invalid_serviceChangeResult, SCRes}})	end,    case SCRP of	#'ServiceChangeResParm'{serviceChangeMgcId = _MgcMid} ->            {ok, M};	_ ->

⌨️ 快捷键说明

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