megaco_pretty_text_encoder.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 580 行 · 第 1/2 页
ERL
580 行
do_decode_message(?V1_PARSE_MOD, Tokens, Bin); {ok, Tokens, 2, _LastLine} -> do_decode_message(?V2_PARSE_MOD, Tokens, Bin); {ok, Tokens, 3, _LastLine} -> do_decode_message(?PREV3A_PARSE_MOD, Tokens, Bin); {ok, _Tokens, V, _LastLine} -> {error, {unsupported_version, V}}; %% {error, Reason, Tokens, Line} -> %% parse_error(Reason, Line, Tokens, Bin); {error, Reason, Line} -> %% OTP-4007 parse_error(Reason, Line, [], Bin) %% OTP-4007 end;decode_message([{version3,v3},{flex, Port}], _, Bin) when binary(Bin) -> %% d("decode_message(v3,flex) -> entry"), case megaco_flex_scanner:scan(Bin, Port) of {ok, Tokens, 1, _LastLine} -> do_decode_message(?V1_PARSE_MOD, Tokens, Bin); {ok, Tokens, 2, _LastLine} -> do_decode_message(?V2_PARSE_MOD, Tokens, Bin); {ok, Tokens, 3, _LastLine} -> do_decode_message(?V3_PARSE_MOD, Tokens, Bin); {ok, _Tokens, V, _LastLine} -> {error, {unsupported_version, V}}; %% {error, Reason, Tokens, Line} -> %% parse_error(Reason, Line, Tokens, Bin); {error, Reason, Line} -> %% OTP-4007 parse_error(Reason, Line, [], Bin) %% OTP-4007 end;decode_message(EC, _, Bin) when binary(Bin) -> {error, {bad_encoding_config, EC}};decode_message(_EC, _, _BadBin) -> {error, bad_binary}.do_decode_message(ParseMod, Tokens, Bin) ->%% io:format("do_decode_message -> entry with"%% "~n ParseMod: ~p"%% "~n", [ParseMod]), case (catch ParseMod:parse(Tokens)) of {ok, MegacoMessage} -> {ok, MegacoMessage}; {error, Reason} -> parse_error(Reason, Tokens, Bin); %% OTP-4007 {'EXIT', Reason} -> parse_error(Reason, Tokens, Bin) end.decode_mini_message(EC, _, Bin) when binary(Bin) -> megaco_text_mini_decoder:decode_message(EC, Bin).parse_error(Reason, Tokens, Chars) ->%% io:format("do_decode_message -> entry with"%% "~n Reason: ~p"%% "~n Tokens: ~p"%% "~n", [Reason, Tokens]), {error, [{reason, Reason}, {token, Tokens}, {chars, Chars}]}.parse_error(Reason, Line, Tokens, Chars) ->%% io:format("do_decode_message -> entry with"%% "~n Reason: ~p"%% "~n Line: ~p"%% "~n Tokens: ~p"%% "~n", [Reason, Line, Tokens]), {error, [{reason, Reason, Line}, {token, Tokens}, {chars, Chars}]}.%%----------------------------------------------------------------------%% Convert a transaction record into a binary%% Return {ok, Bin} | {error, Reason}%%----------------------------------------------------------------------encode_transaction(Trans) -> encode_transaction([], 1, Trans).encode_transaction([{version3,_}|EC], 1, Trans) -> megaco_pretty_text_encoder_v1:encode_transaction(EC, Trans);encode_transaction(EC, 1, Trans) -> megaco_pretty_text_encoder_v1:encode_transaction(EC, Trans);encode_transaction([{version3,_}|EC], 2, Trans) -> megaco_pretty_text_encoder_v2:encode_transaction(EC, Trans);encode_transaction(EC, 2, Trans) -> megaco_pretty_text_encoder_v2:encode_transaction(EC, Trans);encode_transaction([{version3,prev3c}|EC], 3, Trans) -> megaco_pretty_text_encoder_prev3c:encode_transaction(EC, Trans);encode_transaction([{version3,prev3b}|EC], 3, Trans) -> megaco_pretty_text_encoder_prev3b:encode_transaction(EC, Trans);encode_transaction([{version3,prev3a}|EC], 3, Trans) -> megaco_pretty_text_encoder_prev3a:encode_transaction(EC, Trans);encode_transaction([{version3,v3}|EC], 3, Trans) -> megaco_pretty_text_encoder_v3:encode_transaction(EC, Trans);encode_transaction(EC, 3, Trans) -> megaco_pretty_text_encoder_v3:encode_transaction(EC, Trans);encode_transaction(_EC, V, _Trans) -> {error, {bad_version, V}}.%%----------------------------------------------------------------------%% Convert a list of ActionRequest record's into a binary%% Return {ok, DeepIoList} | {error, Reason}%%----------------------------------------------------------------------encode_action_requests([{version3,_}|EC], 1, ActReqs) when list(ActReqs) -> megaco_pretty_text_encoder_v1:encode_action_requests(EC, ActReqs);encode_action_requests(EC, 1, ActReqs) when list(ActReqs) -> megaco_pretty_text_encoder_v1:encode_action_requests(EC, ActReqs);encode_action_requests([{version3,_}|EC], 2, ActReqs) when list(ActReqs) -> megaco_pretty_text_encoder_v2:encode_action_requests(EC, ActReqs);encode_action_requests(EC, 2, ActReqs) when list(ActReqs) -> megaco_pretty_text_encoder_v2:encode_action_requests(EC, ActReqs);encode_action_requests([{version3,prev3c}|EC], 3, ActReqs) when list(ActReqs) -> megaco_pretty_text_encoder_prev3c:encode_action_requests(EC, ActReqs);encode_action_requests([{version3,prev3b}|EC], 3, ActReqs) when list(ActReqs) -> megaco_pretty_text_encoder_prev3b:encode_action_requests(EC, ActReqs);encode_action_requests([{version3,prev3a}|EC], 3, ActReqs) when list(ActReqs) -> megaco_pretty_text_encoder_prev3a:encode_action_requests(EC, ActReqs);encode_action_requests([{version3,v3}|EC], 3, ActReqs) when list(ActReqs) -> megaco_pretty_text_encoder_v3:encode_action_requests(EC, ActReqs);encode_action_requests(EC, 3, ActReqs) when list(ActReqs) -> megaco_pretty_text_encoder_v3:encode_action_requests(EC, ActReqs);encode_action_requests(_EC, V, _ActReqs) -> {error, {bad_version, V}}.%%----------------------------------------------------------------------%% Convert a ActionRequest record into a binary%% Return {ok, DeepIoList} | {error, Reason}%%----------------------------------------------------------------------encode_action_request([{version3,_}|EC], 1, ActReq) -> megaco_pretty_text_encoder_v1:encode_action_request(EC, ActReq);encode_action_request(EC, 1, ActReq) -> megaco_pretty_text_encoder_v1:encode_action_request(EC, ActReq);encode_action_request([{version3,_}|EC], 2, ActReq) -> megaco_pretty_text_encoder_v2:encode_action_request(EC, ActReq);encode_action_request(EC, 2, ActReq) -> megaco_pretty_text_encoder_v2:encode_action_request(EC, ActReq);encode_action_request([{version3,prev3c}|EC], 3, ActReq) -> megaco_pretty_text_encoder_prev3c:encode_action_request(EC, ActReq);encode_action_request([{version3,prev3b}|EC], 3, ActReq) -> megaco_pretty_text_encoder_prev3b:encode_action_request(EC, ActReq);encode_action_request([{version3,prev3a}|EC], 3, ActReq) -> megaco_pretty_text_encoder_prev3a:encode_action_request(EC, ActReq);encode_action_request([{version3,v3}|EC], 3, ActReq) -> megaco_pretty_text_encoder_v3:encode_action_request(EC, ActReq);encode_action_request(EC, 3, ActReq) -> megaco_pretty_text_encoder_v3:encode_action_request(EC, ActReq);encode_action_request(_EC, V, _ActReq) -> {error, {bad_version, V}}.%%----------------------------------------------------------------------%% Convert a CommandRequest record into a binary%% Return {ok, DeepIoList} | {error, Reason}%%----------------------------------------------------------------------encode_command_request(CmdReq) -> encode_command_request([], 1, CmdReq).encode_command_request([{version3,_}|EC], 1, CmdReq) -> megaco_pretty_text_encoder_v1:encode_command_request(EC, CmdReq);encode_command_request(EC, 1, CmdReq) -> megaco_pretty_text_encoder_v1:encode_command_request(EC, CmdReq);encode_command_request([{version3,_}|EC], 2, CmdReq) -> megaco_pretty_text_encoder_v2:encode_command_request(EC, CmdReq);encode_command_request(EC, 2, CmdReq) -> megaco_pretty_text_encoder_v2:encode_command_request(EC, CmdReq);encode_command_request([{version3,prev3c}|EC], 3, CmdReq) -> megaco_pretty_text_encoder_prev3c:encode_command_request(EC, CmdReq);encode_command_request([{version3,prev3b}|EC], 3, CmdReq) -> megaco_pretty_text_encoder_prev3b:encode_command_request(EC, CmdReq);encode_command_request([{version3,prev3a}|EC], 3, CmdReq) -> megaco_pretty_text_encoder_prev3a:encode_command_request(EC, CmdReq);encode_command_request([{version3,v3}|EC], 3, CmdReq) -> megaco_pretty_text_encoder_v3:encode_command_request(EC, CmdReq);encode_command_request(EC, 3, CmdReq) -> megaco_pretty_text_encoder_v3:encode_command_request(EC, CmdReq);encode_command_request(_EC, V, _CmdReq) -> {error, {bad_version, V}}.%%----------------------------------------------------------------------%% Convert a action reply into a deep io list%% Return {ok, DeepIoList} | {error, Reason}%%----------------------------------------------------------------------encode_action_reply(ActRep) -> encode_action_reply([], 1, ActRep). encode_action_reply([{version3,_}|EC], 1, ActRep) -> megaco_pretty_text_encoder_v1:encode_action_reply(EC, ActRep);encode_action_reply(EC, 1, ActRep) -> megaco_pretty_text_encoder_v1:encode_action_reply(EC, ActRep);encode_action_reply([{version3,_}|EC], 2, ActRep) -> megaco_pretty_text_encoder_v2:encode_action_reply(EC, ActRep);encode_action_reply(EC, 2, ActRep) -> megaco_pretty_text_encoder_v2:encode_action_reply(EC, ActRep);encode_action_reply([{version3,prev3c}|EC], 3, ActRep) -> megaco_pretty_text_encoder_prev3c:encode_action_reply(EC, ActRep);encode_action_reply([{version3,prev3b}|EC], 3, ActRep) -> megaco_pretty_text_encoder_prev3b:encode_action_reply(EC, ActRep);encode_action_reply([{version3,prev3a}|EC], 3, ActRep) -> megaco_pretty_text_encoder_prev3a:encode_action_reply(EC, ActRep);encode_action_reply([{version3,v3}|EC], 3, ActRep) -> megaco_pretty_text_encoder_v3:encode_action_reply(EC, ActRep);encode_action_reply(EC, 3, ActRep) -> megaco_pretty_text_encoder_v3:encode_action_reply(EC, ActRep);encode_action_reply(_EC, V, _ActRep) -> {error, {bad_version, V}}.%%----------------------------------------------------------------------term_to_compact_string(Term) -> case catch io_lib:format("~s", [Term]) of {'EXIT', _} -> lists:flatten(io_lib:format("~w", [Term])); GoodString -> lists:flatten(GoodString) end.%%----------------------------------------------------------------------term_to_pretty_string(Term) -> case catch io_lib:format("~s", [Term]) of {'EXIT', _} -> lists:flatten(io_lib:format("~p", [Term])); GoodString -> lists:flatten(GoodString) end.%%----------------------------------------------------------------------trim_quoted_string([H | T]) -> case ?classify_char(H) of safe_char -> [H | trim_quoted_string(T)]; rest_char -> [H | trim_quoted_string(T)]; white_space -> [H | trim_quoted_string(T)]; _BadChar -> [$? | trim_quoted_string(T)] end;trim_quoted_string([]) -> [].%%----------------------------------------------------------------------%% A utility function to pretty print the tags found in a megaco message%%-----------------------------------------------------------------------define(TT2S_BEST_VERSION, prev3c).token_tag2string(Tag) -> token_tag2string(Tag, ?TT2S_BEST_VERSION).token_tag2string(Tag, 1) -> token_tag2string(Tag, v1);token_tag2string(Tag, v1) -> megaco_pretty_text_encoder_v1:token_tag2string(Tag);token_tag2string(Tag, 2) -> token_tag2string(Tag, v2);token_tag2string(Tag, v2) -> megaco_pretty_text_encoder_v2:token_tag2string(Tag);token_tag2string(Tag, 3) -> token_tag2string(Tag, prev3c);token_tag2string(Tag, v3) -> token_tag2string(Tag, prev3c);token_tag2string(Tag, prev3b) -> megaco_pretty_text_encoder_prev3b:token_tag2string(Tag);token_tag2string(Tag, prev3c) -> megaco_pretty_text_encoder_prev3c:token_tag2string(Tag);token_tag2string(Tag, _Vsn) -> token_tag2string(Tag, ?TT2S_BEST_VERSION).%% d(F) ->%% d(F, []).%% %% d(F, A) ->%% d(get(dbg), F, A).%% %% d(true, F, A) ->%% io:format("~p:" ++ F ++ "~n", [?MODULE|A]);%% d(_, _, _) ->%% ok.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?