megaco_ber_bin_encoder.erl

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

ERL
710
字号
%%     TransMod = ?V3_TRANS_MOD,%%     ?BIN_LIB:encode_action_requests(EC, ActReqs,%% 						 AsnMod, TransMod, %% 						 io_list);    {error, not_implemented}.%%----------------------------------------------------------------------%% Convert a ActionRequest record into a binary%% Return {ok, DeepIoList} | {error, Reason}%%----------------------------------------------------------------------%% encode_action_request([] = EC, 1, ActReqs) when list(ActReqs) ->%%     AsnMod   = ?V1_ASN1_MOD, %%     TransMod = ?V1_TRANS_MOD,%%     ?BIN_LIB:encode_action_request(EC, ActReqs,%% 						AsnMod, TransMod, %% 						io_list);%% encode_action_request([native] = EC, 1, ActReqs) when list(ActReqs) ->%%     AsnMod   = ?V1_ASN1_MOD, %%     TransMod = ?V1_TRANS_MOD,%%     ?BIN_LIB:encode_action_request(EC, ActReqs,%% 						AsnMod, TransMod, %% 						io_list);%% encode_action_request([driver|EC], 1, ActReqs) when list(ActReqs) ->%%     AsnMod   = ?V1_ASN1_MOD_DRV, %%     TransMod = ?V1_TRANS_MOD,%%     ?BIN_LIB:encode_action_request(EC, ActReqs,%% 						AsnMod, TransMod, %% 						io_list);encode_action_request(_EC, 1, ActReqs) when list(ActReqs) ->%%     AsnMod   = ?V1_ASN1_MOD, %%     TransMod = ?V1_TRANS_MOD,%%     ?BIN_LIB:encode_action_request(EC, ActReqs,%% 						AsnMod, TransMod, %% 						io_list);    {error, not_implemented};%% encode_action_request([] = EC, 2, ActReqs) when list(ActReqs) ->%%     AsnMod   = ?V2_ASN1_MOD, %%     TransMod = ?V2_TRANS_MOD,%%     ?BIN_LIB:encode_action_request(EC, ActReqs,%% 						AsnMod, TransMod, %% 						io_list);%% encode_action_request([native] = EC, 2, ActReqs) when list(ActReqs) ->%%     AsnMod   = ?V2_ASN1_MOD, %%     TransMod = ?V2_TRANS_MOD,%%     ?BIN_LIB:encode_action_request(EC, ActReqs,%% 						AsnMod, TransMod, %% 						io_list);%% encode_action_request([driver|EC], 2, ActReqs) when list(ActReqs) ->%%     AsnMod   = ?V2_ASN1_MOD_DRV, %%     TransMod = ?V2_TRANS_MOD,%%     ?BIN_LIB:encode_action_request(EC, ActReqs,%% 						AsnMod, TransMod, %% 						io_list);encode_action_request(_EC, 2, ActReqs) when list(ActReqs) ->%%     AsnMod   = ?V2_ASN1_MOD, %%     TransMod = ?V2_TRANS_MOD,%%     ?BIN_LIB:encode_action_request(EC, ActReqs,%% 						AsnMod, TransMod, %% 						io_list);    {error, not_implemented};%% encode_action_request([] = EC, 3, ActReqs) when list(ActReqs) ->%%     AsnMod   = ?V3_ASN1_MOD, %%     TransMod = ?V3_TRANS_MOD,%%     ?BIN_LIB:encode_action_request(EC, ActReqs,%% 						AsnMod, TransMod, %% 						io_list);%% encode_action_request([native] = EC, 3, ActReqs) when list(ActReqs) ->%%     AsnMod   = ?V3_ASN1_MOD, %%     TransMod = ?V3_TRANS_MOD,%%     ?BIN_LIB:encode_action_request(EC, ActReqs,%% 						AsnMod, TransMod, %% 						io_list);%% encode_action_request([driver|EC], 3, ActReqs) when list(ActReqs) ->%%     AsnMod   = ?V3_ASN1_MOD_DRV, %%     TransMod = ?V3_TRANS_MOD,%%     ?BIN_LIB:encode_action_request(EC, ActReqs,%% 						AsnMod, TransMod, %% 						io_list);encode_action_request(_EC, 3, ActReqs) when list(ActReqs) ->%%     AsnMod   = ?V3_ASN1_MOD, %%     TransMod = ?V3_TRANS_MOD,%%     ?BIN_LIB:encode_action_request(EC, ActReqs,%% 						AsnMod, TransMod, %% 						io_list);    {error, not_implemented}.%%----------------------------------------------------------------------%% Convert a binary into a 'MegacoMessage' record%% Return {ok, MegacoMessageRecord} | {error, Reason}%%----------------------------------------------------------------------%% Old decode functiondecode_message(EC, Binary) ->    decode_message(EC, 1, Binary).%% -- Dynamic version detection --%% Select from messagedecode_message([{version3,prev3c},driver|EC], dynamic, Binary) ->    Mods = [{?V1_ASN1_MOD_DRV,     ?V1_TRANS_MOD},	    {?V2_ASN1_MOD_DRV,     ?V2_TRANS_MOD}, 	    {?PREV3C_ASN1_MOD_DRV, ?PREV3C_TRANS_MOD}],     ?BIN_LIB:decode_message_dynamic(EC, Binary, Mods, binary);decode_message([{version3,prev3b},driver|EC], dynamic, Binary) ->    Mods = [{?V1_ASN1_MOD_DRV,     ?V1_TRANS_MOD},	    {?V2_ASN1_MOD_DRV,     ?V2_TRANS_MOD}, 	    {?PREV3B_ASN1_MOD_DRV, ?PREV3B_TRANS_MOD}],     ?BIN_LIB:decode_message_dynamic(EC, Binary, Mods, binary);decode_message([{version3,prev3a},driver|EC], dynamic, Binary) ->    Mods = [{?V1_ASN1_MOD_DRV,     ?V1_TRANS_MOD},	    {?V2_ASN1_MOD_DRV,     ?V2_TRANS_MOD}, 	    {?PREV3A_ASN1_MOD_DRV, ?PREV3A_TRANS_MOD}],     ?BIN_LIB:decode_message_dynamic(EC, Binary, Mods, binary);decode_message([{version3,v3},driver|EC], dynamic, Binary) ->    Mods = [{?V1_ASN1_MOD_DRV, ?V1_TRANS_MOD},	    {?V2_ASN1_MOD_DRV, ?V2_TRANS_MOD}, 	    {?V3_ASN1_MOD_DRV, ?V3_TRANS_MOD}],     ?BIN_LIB:decode_message_dynamic(EC, Binary, Mods, binary);decode_message([{version3,prev3c}|EC], dynamic, Binary) ->    Mods = [{?V1_ASN1_MOD,     ?V1_TRANS_MOD},	    {?V2_ASN1_MOD,     ?V2_TRANS_MOD}, 	    {?PREV3C_ASN1_MOD, ?PREV3C_TRANS_MOD}],     ?BIN_LIB:decode_message_dynamic(EC, Binary, Mods, binary);decode_message([{version3,prev3b}|EC], dynamic, Binary) ->    Mods = [{?V1_ASN1_MOD,     ?V1_TRANS_MOD},	    {?V2_ASN1_MOD,     ?V2_TRANS_MOD}, 	    {?PREV3B_ASN1_MOD, ?PREV3B_TRANS_MOD}],     ?BIN_LIB:decode_message_dynamic(EC, Binary, Mods, binary);decode_message([{version3,prev3a}|EC], dynamic, Binary) ->    Mods = [{?V1_ASN1_MOD,     ?V1_TRANS_MOD},	    {?V2_ASN1_MOD,     ?V2_TRANS_MOD}, 	    {?PREV3A_ASN1_MOD, ?PREV3A_TRANS_MOD}],     ?BIN_LIB:decode_message_dynamic(EC, Binary, Mods, binary);decode_message([{version3,v3}|EC], dynamic, Binary) ->    Mods = [{?V1_ASN1_MOD, ?V1_TRANS_MOD},	    {?V2_ASN1_MOD, ?V2_TRANS_MOD}, 	    {?V3_ASN1_MOD, ?V3_TRANS_MOD}],     ?BIN_LIB:decode_message_dynamic(EC, Binary, Mods, binary);decode_message([driver|EC], dynamic, Binary) ->    Mods = [{?V1_ASN1_MOD_DRV, ?V1_TRANS_MOD},	    {?V2_ASN1_MOD_DRV, ?V2_TRANS_MOD}, 	    {?V3_ASN1_MOD_DRV, ?V3_TRANS_MOD}],     ?BIN_LIB:decode_message_dynamic(EC, Binary, Mods, binary);%% All values we need to take (special) care of has been delt with, %% so just pass the rest ondecode_message(EC, dynamic, Binary) ->    Mods = [{?V1_ASN1_MOD, ?V1_TRANS_MOD},	    {?V2_ASN1_MOD, ?V2_TRANS_MOD}, 	    {?V3_ASN1_MOD, ?V3_TRANS_MOD}],     ?BIN_LIB:decode_message_dynamic(EC, Binary, Mods, binary);%% -- Version 1 --decode_message([{version3,_},driver|EC], 1, Binary) ->    AsnMod   = ?V1_ASN1_MOD_DRV,     TransMod = ?V1_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);decode_message([driver|EC], 1, Binary) ->    AsnMod   = ?V1_ASN1_MOD_DRV,     TransMod = ?V1_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);decode_message([{version3,_}|EC], 1, Binary) ->    AsnMod   = ?V1_ASN1_MOD,     TransMod = ?V1_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);%% All values we need to take (special) care of has been delt with, %% so just pass the rest ondecode_message(EC, 1, Binary) ->    AsnMod   = ?V1_ASN1_MOD,     TransMod = ?V1_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);%% -- Version 2 --decode_message([{version3,_},driver|EC], 2, Binary) ->    AsnMod   = ?V2_ASN1_MOD_DRV,     TransMod = ?V2_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);decode_message([driver|EC], 2, Binary) ->    AsnMod   = ?V2_ASN1_MOD_DRV,     TransMod = ?V2_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);decode_message([{version3,_}|EC], 2, Binary) ->    AsnMod   = ?V2_ASN1_MOD,     TransMod = ?V2_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);%% All values we need to take (special) care of has been delt with, %% so just pass the rest ondecode_message(EC, 2, Binary) ->    AsnMod   = ?V2_ASN1_MOD,     TransMod = ?V2_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);%% -- Version 3 --decode_message([{version3,prev3c},driver|EC], 3, Binary) ->    AsnMod   = ?PREV3C_ASN1_MOD_DRV,     TransMod = ?PREV3C_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);decode_message([{version3,prev3b},driver|EC], 3, Binary) ->    AsnMod   = ?PREV3B_ASN1_MOD_DRV,     TransMod = ?PREV3B_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);decode_message([{version3,prev3a},driver|EC], 3, Binary) ->    AsnMod   = ?PREV3A_ASN1_MOD_DRV,     TransMod = ?PREV3A_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);decode_message([{version3,v3},driver|EC], 3, Binary) ->    AsnMod   = ?V3_ASN1_MOD_DRV,     TransMod = ?V3_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);decode_message([{version3,prev3c}|EC], 3, Binary) ->    AsnMod   = ?PREV3C_ASN1_MOD,     TransMod = ?PREV3C_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);decode_message([{version3,prev3b}|EC], 3, Binary) ->    AsnMod   = ?PREV3B_ASN1_MOD,     TransMod = ?PREV3B_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);decode_message([{version3,prev3a}|EC], 3, Binary) ->    AsnMod   = ?PREV3A_ASN1_MOD,     TransMod = ?PREV3A_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);decode_message([{version3,v3}|EC], 3, Binary) ->    AsnMod   = ?V3_ASN1_MOD,     TransMod = ?V3_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);decode_message([driver|EC], 3, Binary) ->    AsnMod   = ?V3_ASN1_MOD_DRV,     TransMod = ?V3_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary);%% All values we need to take (special) care of has been delt with, %% so just pass the rest ondecode_message(EC, 3, Binary) ->    AsnMod   = ?V3_ASN1_MOD,     TransMod = ?V3_TRANS_MOD,     ?BIN_LIB:decode_message(EC, Binary, AsnMod, TransMod, binary).decode_mini_message([{version3,prev3c},driver|EC], dynamic, Bin) ->    Mods = [?V1_ASN1_MOD_DRV, 	    ?V2_ASN1_MOD_DRV, 	    ?PREV3C_ASN1_MOD_DRV],     ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary);decode_mini_message([{version3,prev3b},driver|EC], dynamic, Bin) ->    Mods = [?V1_ASN1_MOD_DRV, 	    ?V2_ASN1_MOD_DRV, 	    ?PREV3B_ASN1_MOD_DRV],     ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary);decode_mini_message([{version3,prev3a},driver|EC], dynamic, Bin) ->    Mods = [?V1_ASN1_MOD_DRV, 	    ?V2_ASN1_MOD_DRV, 	    ?PREV3A_ASN1_MOD_DRV],     ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary);decode_mini_message([{version3,v3},driver|EC], dynamic, Bin) ->    Mods = [?V1_ASN1_MOD_DRV, 	    ?V2_ASN1_MOD_DRV, 	    ?V3_ASN1_MOD_DRV],     ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary);decode_mini_message([{version3,prev3c}|EC], dynamic, Bin) ->    Mods = [?V1_ASN1_MOD, 	    ?V2_ASN1_MOD, 	    ?PREV3C_ASN1_MOD],     ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary);decode_mini_message([{version3,prev3b}|EC], dynamic, Bin) ->    Mods = [?V1_ASN1_MOD, 	    ?V2_ASN1_MOD, 	    ?PREV3B_ASN1_MOD],     ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary);decode_mini_message([{version3,prev3a}|EC], dynamic, Bin) ->    Mods = [?V1_ASN1_MOD, 	    ?V2_ASN1_MOD, 	    ?PREV3A_ASN1_MOD],     ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary);decode_mini_message([{version3,v3}|EC], dynamic, Bin) ->    Mods = [?V1_ASN1_MOD, 	    ?V2_ASN1_MOD, 	    ?V3_ASN1_MOD],     ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary);decode_mini_message([driver|EC], dynamic, Bin) ->    Mods = [?V1_ASN1_MOD_DRV, 	    ?V2_ASN1_MOD_DRV, 	    ?V3_ASN1_MOD_DRV],     ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary);decode_mini_message(EC, dynamic, Bin) ->    Mods = [?V1_ASN1_MOD, 	    ?V2_ASN1_MOD, 	    ?V3_ASN1_MOD],     ?BIN_LIB:decode_mini_message_dynamic(EC, Bin, Mods, binary);decode_mini_message([{version3,_},driver|EC], 1, Bin) ->    AsnMod = ?V1_ASN1_MOD_DRV,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message([{version3,_}|EC], 1, Bin) ->    AsnMod = ?V1_ASN1_MOD,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message([driver|EC], 1, Bin) ->    AsnMod = ?V1_ASN1_MOD_DRV,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message(EC, 1, Bin) ->    AsnMod = ?V1_ASN1_MOD,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message([{version3,_},driver|EC], 2, Bin) ->    AsnMod = ?V2_ASN1_MOD_DRV,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message([{version3,_}|EC], 2, Bin) ->    AsnMod = ?V2_ASN1_MOD,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message([driver|EC], 2, Bin) ->    AsnMod = ?V2_ASN1_MOD_DRV,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message(EC, 2, Bin) ->    AsnMod = ?V2_ASN1_MOD,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message([{version3,prev3c},driver|EC], 3, Bin) ->    AsnMod = ?PREV3C_ASN1_MOD_DRV,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message([{version3,prev3b},driver|EC], 3, Bin) ->    AsnMod = ?PREV3B_ASN1_MOD_DRV,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message([{version3,prev3a},driver|EC], 3, Bin) ->    AsnMod = ?PREV3A_ASN1_MOD_DRV,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message([{version3,v3},driver|EC], 3, Bin) ->    AsnMod = ?V3_ASN1_MOD_DRV,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message([{version3,prev3c}|EC], 3, Bin) ->    AsnMod = ?PREV3C_ASN1_MOD,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message([{version3,prev3b}|EC], 3, Bin) ->    AsnMod = ?PREV3B_ASN1_MOD,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message([{version3,prev3a}|EC], 3, Bin) ->    AsnMod = ?PREV3A_ASN1_MOD,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message([{version3,v3}|EC], 3, Bin) ->    AsnMod = ?V3_ASN1_MOD,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message([driver|EC], 3, Bin) ->    AsnMod = ?V3_ASN1_MOD_DRV,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary);decode_mini_message(EC, 3, Bin) ->    AsnMod = ?V3_ASN1_MOD,     ?BIN_LIB:decode_mini_message(EC, Bin, AsnMod, binary).

⌨️ 快捷键说明

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