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