megaco_pretty_text_encoder.erl
来自「OTP是开放电信平台的简称」· ERL 代码 · 共 580 行 · 第 1/2 页
ERL
580 行
%% ``The contents of this file are subject to the Erlang Public License,%% Version 1.1, (the "License"); you may not use this file except in%% compliance with the License. You should have received a copy of the%% Erlang Public License along with this software. If not, it can be%% retrieved via the world wide web at http://www.erlang.org/.%% %% Software distributed under the License is distributed on an "AS IS"%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See%% the License for the specific language governing rights and limitations%% under the License.%% %% The Initial Developer of the Original Code is Ericsson Utvecklings AB.%% Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings%% AB. All Rights Reserved.''%% %% $Id$%%%%----------------------------------------------------------------------%%% Purpose: Encode PRETTY Megaco/H.248 text messages from internal form%%-----------------------------------------------------------------------module(megaco_pretty_text_encoder).-behaviour(megaco_encoder).-export([encode_message/3, decode_message/3, decode_mini_message/3, version_of/2, encode_transaction/3, encode_action_requests/3, encode_action_request/3, encode_command_request/3, encode_action_reply/3]).%% Backward compatible funcs:-export([encode_message/2, decode_message/2, encode_transaction/1, encode_command_request/1, encode_action_reply/1]).%% Do we need these here?-export([trim_quoted_string/1, term_to_compact_string/1, term_to_pretty_string/1]).-export([token_tag2string/1, token_tag2string/2]).-include("megaco_text_tokens.hrl").-include_lib("megaco/src/engine/megaco_message_internal.hrl").-define(V1_PARSE_MOD, megaco_text_parser_v1).-define(V2_PARSE_MOD, megaco_text_parser_v2).-define(V3_PARSE_MOD, megaco_text_parser_v3).-define(PREV3A_PARSE_MOD, megaco_text_parser_prev3a).-define(PREV3B_PARSE_MOD, megaco_text_parser_prev3b).-define(PREV3C_PARSE_MOD, megaco_text_parser_prev3c).%%----------------------------------------------------------------------%% Convert a 'MegacoMessage' record into a binary%% Return {ok, DeepIoList} | {error, Reason}%%----------------------------------------------------------------------encode_message(EncodingConfig, #'MegacoMessage'{mess = #'Message'{version = V}} = MegaMsg) -> encode_message(EncodingConfig, V, MegaMsg).encode_message([{version3,_}|EC], 1, MegaMsg) -> megaco_pretty_text_encoder_v1:encode_message(EC, MegaMsg);encode_message(EC, 1, MegaMsg) -> megaco_pretty_text_encoder_v1:encode_message(EC, MegaMsg);encode_message([{version3,_}|EC], 2, MegaMsg) -> megaco_pretty_text_encoder_v2:encode_message(EC, MegaMsg);encode_message(EC, 2, MegaMsg) -> megaco_pretty_text_encoder_v2:encode_message(EC, MegaMsg);encode_message([{version3,prev3c}|EC], 3, MegaMsg) -> megaco_pretty_text_encoder_prev3c:encode_message(EC, MegaMsg);encode_message([{version3,prev3b}|EC], 3, MegaMsg) -> megaco_pretty_text_encoder_prev3b:encode_message(EC, MegaMsg);encode_message([{version3,prev3a}|EC], 3, MegaMsg) -> megaco_pretty_text_encoder_prev3a:encode_message(EC, MegaMsg);encode_message([{version3,v3}|EC], 3, MegaMsg) -> megaco_pretty_text_encoder_v3:encode_message(EC, MegaMsg);encode_message(EC, 3, MegaMsg) -> megaco_pretty_text_encoder_v3:encode_message(EC, MegaMsg);encode_message(_EC, V, _MegaMsg) -> {error, {bad_version, V}}. %%----------------------------------------------------------------------%% Convert a binary into a 'MegacoMessage' record%% Return {ok, MegacoMessageRecord} | {error, Reason}%%----------------------------------------------------------------------version_of(_EC, Bin) -> case megaco_text_scanner:scan(Bin) of {ok, _Tokens, V, _LastLine} -> {ok, V}; {error, Reason, Line} -> {error, {decode_failed, Reason, Line}} end.decode_message(EC, Bin) -> decode_message(EC, dynamic, Bin).decode_message([], _, Bin) when binary(Bin) -> %% d("decode_message -> entry"), case megaco_text_scanner:scan(Bin) 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([{version3,prev3c}], _, Bin) when binary(Bin) -> %% d("decode_message(prev3c) -> entry"), case megaco_text_scanner:scan(Bin) 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(?PREV3C_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} -> parse_error(Reason, Line, [], Bin) end;decode_message([{version3,prev3b}], _, Bin) when binary(Bin) -> %% d("decode_message(prev3b) -> entry"), case megaco_text_scanner:scan(Bin) 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(?PREV3B_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,prev3a}], _, Bin) when binary(Bin) ->%% d("decode_message(prev3a) -> entry"), case megaco_text_scanner:scan(Bin) 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(?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}], _, Bin) when binary(Bin) -> %% d("decode_message(prev3a) -> entry"), case megaco_text_scanner:scan(Bin) 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([{flex, Port}], _, Bin) when binary(Bin) -> %% d("decode_message(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([{version3,prev3c},{flex, Port}], _, Bin) when binary(Bin) -> %% d("decode_message(prev3c,flex) -> entry"), case megaco_flex_scanner:scan(Bin, Port) of {ok, Tokens, 1, _LastLine} -> %% io:format("decode_message(prev3c,flex) -> entry with" %% "~n _LastLine: ~p" %% "~n Tokens: ~p" %% "~n", [_LastLine, Tokens]), 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(?PREV3C_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,prev3b},{flex, Port}], _, Bin) when binary(Bin) -> %% d("decode_message(prev3b,flex) -> entry"), case megaco_flex_scanner:scan(Bin, Port) of {ok, Tokens, 1, _LastLine} -> %% io:format("decode_message(prev3b,flex) -> entry with" %% "~n _LastLine: ~p" %% "~n Tokens: ~p" %% "~n", [_LastLine, Tokens]), 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(?PREV3B_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,prev3a},{flex, Port}], _, Bin) when binary(Bin) -> %% d("decode_message(prev3a,flex) -> entry"), case megaco_flex_scanner:scan(Bin, Port) of {ok, Tokens, 1, _LastLine} ->
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?