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 + -
显示快捷键?