From c3132fb478ed161b6636bcd87c761592d74304f4 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Mon, 21 Apr 2025 16:30:28 +0800 Subject: [PATCH] fix --- apps/efka/include/message_pb.hrl | 134 ++ apps/efka/src/efka_agent.erl | 1 + apps/efka/src/efka_codec.erl | 41 + apps/efka/src/efka_util.erl | 82 +- apps/efka/src/proto/message_pb.erl | 2821 ++++++++++++++++++++++++++++ config/sys.config | 9 + efkamove | 4 +- 7 files changed, 3089 insertions(+), 3 deletions(-) create mode 100644 apps/efka/include/message_pb.hrl create mode 100644 apps/efka/src/efka_codec.erl create mode 100644 apps/efka/src/proto/message_pb.erl diff --git a/apps/efka/include/message_pb.hrl b/apps/efka/include/message_pb.hrl new file mode 100644 index 0000000..dbc8538 --- /dev/null +++ b/apps/efka/include/message_pb.hrl @@ -0,0 +1,134 @@ +%% -*- coding: utf-8 -*- +%% Automatically generated, do not edit +%% Generated by gpb_compile version 4.21.1 + +-ifndef(message_pb). +-define(message_pb, true). + +-define(message_pb_gpb_version, "4.21.1"). + + +-ifndef('AUTH_REQUEST_PB_H'). +-define('AUTH_REQUEST_PB_H', true). +-record(auth_request, + {uuid = <<>> :: unicode:chardata() | undefined, % = 1, optional + username = <<>> :: unicode:chardata() | undefined, % = 2, optional + password = <<>> :: unicode:chardata() | undefined, % = 3, optional + salt = <<>> :: unicode:chardata() | undefined, % = 4, optional + token = <<>> :: unicode:chardata() | undefined, % = 5, optional + timestamp = 0 :: non_neg_integer() | undefined % = 6, optional, 32 bits + }). +-endif. + +-ifndef('AUTH_REPLY_PB_H'). +-define('AUTH_REPLY_PB_H', true). +-record(auth_reply, + {code = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + message = <<>> :: unicode:chardata() | undefined % = 2, optional + }). +-endif. + +-ifndef('SESSION_REQUEST_PB_H'). +-define('SESSION_REQUEST_PB_H', true). +-record(session_request, + { + }). +-endif. + +-ifndef('SESSION_REPLY_PB_H'). +-define('SESSION_REPLY_PB_H', true). +-record(session_reply, + {a = false :: boolean() | 0 | 1 | undefined % = 1, optional + }). +-endif. + +-ifndef('DATA_PB_H'). +-define('DATA_PB_H', true). +-record(data, + {device_uuid = <<>> :: unicode:chardata() | undefined, % = 1, optional + service_name = <<>> :: unicode:chardata() | undefined, % = 2, optional + at = 0 :: integer() | undefined, % = 3, optional, 32 bits + tags = [] :: [{unicode:chardata(), unicode:chardata()}] | undefined, % = 4 + fields = [] :: [iodata()] | undefined % = 5, repeated + }). +-endif. + +-ifndef('PING_PB_H'). +-define('PING_PB_H', true). +-record(ping, + {adcode = <<>> :: unicode:chardata() | undefined, % = 1, optional + boot_time = 0 :: non_neg_integer() | undefined, % = 2, optional, 32 bits + province = <<>> :: unicode:chardata() | undefined, % = 3, optional + city = <<>> :: unicode:chardata() | undefined, % = 4, optional + efka_version = <<>> :: unicode:chardata() | undefined, % = 5, optional + kernel_arch = <<>> :: unicode:chardata() | undefined, % = 6, optional + ips = [] :: [unicode:chardata()] | undefined, % = 7, repeated + cpu_core = 0 :: non_neg_integer() | undefined, % = 8, optional, 32 bits + cpu_load = 0 :: non_neg_integer() | undefined, % = 9, optional, 32 bits + cpu_temperature = 0.0 :: float() | integer() | infinity | '-infinity' | nan | undefined, % = 10, optional + disk = [] :: [integer()] | undefined, % = 11, repeated, 32 bits + memory = [] :: [integer()] | undefined, % = 12, repeated, 32 bits + interfaces = [] :: [iodata()] | undefined % = 13, repeated + }). +-endif. + +-ifndef('SERVICE_INFORM_PB_H'). +-define('SERVICE_INFORM_PB_H', true). +-record(service_inform, + {name = <<>> :: unicode:chardata() | undefined, % = 1, optional + props = <<>> :: unicode:chardata() | undefined, % = 2, optional + version = <<>> :: unicode:chardata() | undefined, % = 3, optional + version_copy = <<>> :: unicode:chardata() | undefined, % = 4, optional + status = 0 :: non_neg_integer() | undefined, % = 5, optional, 32 bits + at = 0 :: non_neg_integer() | undefined % = 6, optional, 32 bits + }). +-endif. + +-ifndef('FEEDBACK_STEP_PB_H'). +-define('FEEDBACK_STEP_PB_H', true). +-record(feedback_step, + {task_id = <<>> :: unicode:chardata() | undefined, % = 1, optional + code = 0 :: non_neg_integer() | undefined % = 2, optional, 32 bits + }). +-endif. + +-ifndef('FEEDBACK_RESULT_PB_H'). +-define('FEEDBACK_RESULT_PB_H', true). +-record(feedback_result, + {task_id = <<>> :: unicode:chardata() | undefined, % = 1, optional + task_type = <<>> :: unicode:chardata() | undefined, % = 2, optional + time = 0 :: non_neg_integer() | undefined, % = 3, optional, 32 bits + code = 0 :: non_neg_integer() | undefined, % = 4, optional, 32 bits + reason = <<>> :: unicode:chardata() | undefined, % = 5, optional + error = <<>> :: unicode:chardata() | undefined % = 6, optional + }). +-endif. + +-ifndef('EVENT_PB_H'). +-define('EVENT_PB_H', true). +-record(event, + {event_type = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + params = <<>> :: iodata() | undefined % = 2, optional + }). +-endif. + +-ifndef('AI_EVENT_PB_H'). +-define('AI_EVENT_PB_H', true). +-record(ai_event, + {event_type = 0 :: non_neg_integer() | undefined, % = 1, optional, 32 bits + params = <<>> :: iodata() | undefined % = 2, optional + }). +-endif. + +-ifndef('DIRECTIVE_PB_H'). +-define('DIRECTIVE_PB_H', true). +-record(directive, + {device_uuid = <<>> :: unicode:chardata() | undefined, % = 1, optional + version = <<>> :: unicode:chardata() | undefined, % = 2, optional + directive_type = 0 :: non_neg_integer() | undefined, % = 3, optional, 32 bits + timeout = 0 :: non_neg_integer() | undefined, % = 4, optional, 32 bits + directive = <<>> :: iodata() | undefined % = 5, optional + }). +-endif. + +-endif. diff --git a/apps/efka/src/efka_agent.erl b/apps/efka/src/efka_agent.erl index 4abff1a..2fd6b9d 100644 --- a/apps/efka/src/efka_agent.erl +++ b/apps/efka/src/efka_agent.erl @@ -8,6 +8,7 @@ %%%------------------------------------------------------------------- -module(efka_agent). -author("anlicheng"). +-include("message_pb.hrl"). -behaviour(gen_server). diff --git a/apps/efka/src/efka_codec.erl b/apps/efka/src/efka_codec.erl new file mode 100644 index 0000000..6b629ef --- /dev/null +++ b/apps/efka/src/efka_codec.erl @@ -0,0 +1,41 @@ +%%%------------------------------------------------------------------- +%%% @author anlicheng +%%% @copyright (C) 2025, +%%% @doc +%%% +%%% @end +%%% Created : 21. 4月 2025 16:18 +%%%------------------------------------------------------------------- +-module(efka_codec). +-author("anlicheng"). +-include("message_pb.hrl"). + +%% 消息体类型 +-define(PACKET_REQUEST, 16#01). +-define(PACKET_RESPONSE, 16#02). +%% 服务器端推送消息 +-define(PACKET_PUBLISH, 16#03). +-define(PACKET_PUBLISH_RESPONSE, 16#04). + +%% API +-export([auth_request/1]). + +-spec auth_request(PacketId :: integer()) -> binary(). +auth_request(PacketId) when is_integer(PacketId), PacketId > 0 -> + {ok, AuthInfo} = application:get_env(efka, auth), + UUID = proplists:get_value(uuid, AuthInfo), + Username = proplists:get_value(username, AuthInfo), + Password = proplists:get_value(password, AuthInfo), + Salt = proplists:get_value(salt, AuthInfo), + Token = proplists:get_value(token, AuthInfo), + + RequestBin = message_pb:encode_msg(#auth_request{ + uuid = unicode:characters_to_binary(UUID), + username = unicode:characters_to_binary(Username), + password = unicode:characters_to_binary(Password), + salt = unicode:characters_to_binary(Salt), + token = unicode:characters_to_binary(Token), + timestamp = efka_util:timestamp() + }), + + <>. diff --git a/apps/efka/src/efka_util.erl b/apps/efka/src/efka_util.erl index 9c2b389..8e5578b 100644 --- a/apps/efka/src/efka_util.erl +++ b/apps/efka/src/efka_util.erl @@ -11,8 +11,88 @@ %% API -export([get_file_md5/1]). +-export([timestamp/0, number_format/2, timestamp_ms/0, float_to_binary/2, int_format/2]). +-export([chunks/2, rand_bytes/1, uuid/0, md5/1]). +-export([json_data/1, json_error/2]). get_file_md5(FilePath) when is_list(FilePath) -> {ok, FileData} = file:read_file(FilePath), Md5Binary = crypto:hash(md5, FileData), - string:lowercase(lists:flatten([io_lib:format("~2.16.0b", [X]) || X <- binary_to_list(Md5Binary)])). \ No newline at end of file + string:lowercase(lists:flatten([io_lib:format("~2.16.0b", [X]) || X <- binary_to_list(Md5Binary)])). + +%% 时间,精确到毫秒 +timestamp_ms() -> + {Mega, Seconds, Micro} = os:timestamp(), + (Mega * 1000000 + Seconds) * 1000 + Micro div 1000. + +timestamp() -> + {Mega, Seconds, _Micro} = os:timestamp(), + Mega * 1000000 + Seconds. + +number_format(Num, _Decimals) when is_integer(Num) -> + Num; +number_format(Float, Decimals) when is_float(Float) -> + list_to_float(float_to_list(Float, [{decimals, Decimals}, compact])). + +int_format(Num, Len) when is_integer(Num), Len > 0 -> + S = integer_to_list(Num), + case length(S) > Len of + true -> + list_to_integer(lists:sublist(S, 1, Len)); + false -> + Num + end. + +%% 将数据分组 +-spec chunks(list(), integer()) -> [list()]. +chunks(List, Size) when is_list(List), is_integer(Size), Size > 0, length(List) =< Size -> + [List]; +chunks(List, Size) when is_list(List), is_integer(Size), Size > 0 -> + chunks0(List, Size, Size, [], []). +chunks0([], _, _, [], AccTarget) -> + lists:reverse(AccTarget); +chunks0([], _, _, Target, AccTarget) -> + lists:reverse([lists:reverse(Target) | AccTarget]); +chunks0(List, Size, 0, Target, AccTarget) -> + chunks0(List, Size, Size, [], [lists:reverse(Target) | AccTarget]); +chunks0([Hd | Tail], Size, Num, Target, AccTarget) -> + chunks0(Tail, Size, Num - 1, [Hd | Target], AccTarget). + +json_data(Data) -> + jiffy:encode(#{ + <<"result">> => Data + }, [force_utf8]). + +json_error(ErrCode, ErrMessage) when is_integer(ErrCode), is_binary(ErrMessage) -> + jiffy:encode(#{ + <<"error">> => #{ + <<"code">> => ErrCode, + <<"message">> => ErrMessage + } + }, [force_utf8]). + +uuid() -> + rand_bytes(16). + +-spec rand_bytes(Size :: integer()) -> string(). +rand_bytes(Size) when is_integer(Size), Size > 0 -> + Size1 = erlang:ceil(Size / 2), + Bytes = crypto:strong_rand_bytes(Size1), + S = lists:flatten([integer_to_list(E, 16) || <> <= Bytes]), + lists:sublist(string:to_lower(S), 1, Size). + +-spec md5(Str :: binary()) -> binary(). +md5(Str) when is_binary(Str) -> + list_to_binary(lists:flatten([hex(X) || <> <= erlang:md5(Str)])). + +hex(N) when N < 10 -> + $0 + N; +hex(N) -> + $a + (N - 10). + +-spec float_to_binary(Num :: number(), integer()) -> binary(). +float_to_binary(V, _) when is_integer(V) -> + integer_to_binary(V); +float_to_binary(V, Decimals) when is_float(V), is_integer(Decimals) -> + S = float_to_list(V, [{decimals, Decimals}, compact]), + list_to_binary(S). \ No newline at end of file diff --git a/apps/efka/src/proto/message_pb.erl b/apps/efka/src/proto/message_pb.erl new file mode 100644 index 0000000..f37f2ad --- /dev/null +++ b/apps/efka/src/proto/message_pb.erl @@ -0,0 +1,2821 @@ +%% -*- coding: utf-8 -*- +%% % this file is @generated +%% @private +%% Automatically generated, do not edit +%% Generated by gpb_compile version 4.21.1 +%% Version source: git +-module(message_pb). + +-export([encode_msg/1, encode_msg/2, encode_msg/3]). +-export([decode_msg/2, decode_msg/3]). +-export([merge_msgs/2, merge_msgs/3, merge_msgs/4]). +-export([verify_msg/1, verify_msg/2, verify_msg/3]). +-export([get_msg_defs/0]). +-export([get_msg_names/0]). +-export([get_group_names/0]). +-export([get_msg_or_group_names/0]). +-export([get_enum_names/0]). +-export([find_msg_def/1, fetch_msg_def/1]). +-export([find_enum_def/1, fetch_enum_def/1]). +-export([enum_symbol_by_value/2, enum_value_by_symbol/2]). +-export([get_service_names/0]). +-export([get_service_def/1]). +-export([get_rpc_names/1]). +-export([find_rpc_def/2, fetch_rpc_def/2]). +-export([fqbin_to_service_name/1]). +-export([service_name_to_fqbin/1]). +-export([fqbins_to_service_and_rpc_name/2]). +-export([service_and_rpc_name_to_fqbins/2]). +-export([fqbin_to_msg_name/1]). +-export([msg_name_to_fqbin/1]). +-export([fqbin_to_enum_name/1]). +-export([enum_name_to_fqbin/1]). +-export([get_package_name/0]). +-export([uses_packages/0]). +-export([source_basename/0]). +-export([get_all_source_basenames/0]). +-export([get_all_proto_names/0]). +-export([get_msg_containment/1]). +-export([get_pkg_containment/1]). +-export([get_service_containment/1]). +-export([get_rpc_containment/1]). +-export([get_enum_containment/1]). +-export([get_proto_by_msg_name_as_fqbin/1]). +-export([get_proto_by_service_name_as_fqbin/1]). +-export([get_proto_by_enum_name_as_fqbin/1]). +-export([get_protos_by_pkg_name_as_fqbin/1]). +-export([gpb_version_as_string/0, gpb_version_as_list/0]). +-export([gpb_version_source/0]). + +-include("message_pb.hrl"). +-include_lib("gpb/include/gpb.hrl"). + +%% enumerated types + +-export_type([]). + +%% message types +-type auth_request() :: #auth_request{}. + +-type auth_reply() :: #auth_reply{}. + +-type session_request() :: #session_request{}. + +-type session_reply() :: #session_reply{}. + +-type data() :: #data{}. + +-type ping() :: #ping{}. + +-type service_inform() :: #service_inform{}. + +-type feedback_step() :: #feedback_step{}. + +-type feedback_result() :: #feedback_result{}. + +-type event() :: #event{}. + +-type ai_event() :: #ai_event{}. + +-type directive() :: #directive{}. + +-export_type(['auth_request'/0, 'auth_reply'/0, 'session_request'/0, 'session_reply'/0, 'data'/0, 'ping'/0, 'service_inform'/0, 'feedback_step'/0, 'feedback_result'/0, 'event'/0, 'ai_event'/0, 'directive'/0]). +-type '$msg_name'() :: auth_request | auth_reply | session_request | session_reply | data | ping | service_inform | feedback_step | feedback_result | event | ai_event | directive. +-type '$msg'() :: auth_request() | auth_reply() | session_request() | session_reply() | data() | ping() | service_inform() | feedback_step() | feedback_result() | event() | ai_event() | directive(). +-export_type(['$msg_name'/0, '$msg'/0]). + +-record('map',{key, value}). +-if(?OTP_RELEASE >= 24). +-dialyzer({no_underspecs, encode_msg/1}). +-endif. +-spec encode_msg('$msg'()) -> binary(). +encode_msg(Msg) when tuple_size(Msg) >= 1 -> encode_msg(Msg, element(1, Msg), []). + +-if(?OTP_RELEASE >= 24). +-dialyzer({no_underspecs, encode_msg/2}). +-endif. +-spec encode_msg('$msg'(), '$msg_name'() | list()) -> binary(). +encode_msg(Msg, MsgName) when is_atom(MsgName) -> encode_msg(Msg, MsgName, []); +encode_msg(Msg, Opts) when tuple_size(Msg) >= 1, is_list(Opts) -> encode_msg(Msg, element(1, Msg), Opts). + +-if(?OTP_RELEASE >= 24). +-dialyzer({no_underspecs, encode_msg/3}). +-endif. +-spec encode_msg('$msg'(), '$msg_name'(), list()) -> binary(). +encode_msg(Msg, MsgName, Opts) -> + case proplists:get_bool(verify, Opts) of + true -> verify_msg(Msg, MsgName, Opts); + false -> ok + end, + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + auth_request -> encode_msg_auth_request(id(Msg, TrUserData), TrUserData); + auth_reply -> encode_msg_auth_reply(id(Msg, TrUserData), TrUserData); + session_request -> encode_msg_session_request(id(Msg, TrUserData), TrUserData); + session_reply -> encode_msg_session_reply(id(Msg, TrUserData), TrUserData); + data -> encode_msg_data(id(Msg, TrUserData), TrUserData); + ping -> encode_msg_ping(id(Msg, TrUserData), TrUserData); + service_inform -> encode_msg_service_inform(id(Msg, TrUserData), TrUserData); + feedback_step -> encode_msg_feedback_step(id(Msg, TrUserData), TrUserData); + feedback_result -> encode_msg_feedback_result(id(Msg, TrUserData), TrUserData); + event -> encode_msg_event(id(Msg, TrUserData), TrUserData); + ai_event -> encode_msg_ai_event(id(Msg, TrUserData), TrUserData); + directive -> encode_msg_directive(id(Msg, TrUserData), TrUserData) + end. + + +encode_msg_auth_request(Msg, TrUserData) -> encode_msg_auth_request(Msg, <<>>, TrUserData). + + +encode_msg_auth_request(#auth_request{uuid = F1, username = F2, password = F3, salt = F4, token = F5, timestamp = F6}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> e_type_string(TrF1, <>, TrUserData) + end + end + end, + B2 = if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> e_type_string(TrF2, <>, TrUserData) + end + end + end, + B3 = if F3 == undefined -> B2; + true -> + begin + TrF3 = id(F3, TrUserData), + case is_empty_string(TrF3) of + true -> B2; + false -> e_type_string(TrF3, <>, TrUserData) + end + end + end, + B4 = if F4 == undefined -> B3; + true -> + begin + TrF4 = id(F4, TrUserData), + case is_empty_string(TrF4) of + true -> B3; + false -> e_type_string(TrF4, <>, TrUserData) + end + end + end, + B5 = if F5 == undefined -> B4; + true -> + begin + TrF5 = id(F5, TrUserData), + case is_empty_string(TrF5) of + true -> B4; + false -> e_type_string(TrF5, <>, TrUserData) + end + end + end, + if F6 == undefined -> B5; + true -> + begin + TrF6 = id(F6, TrUserData), + if TrF6 =:= 0 -> B5; + true -> e_varint(TrF6, <>, TrUserData) + end + end + end. + +encode_msg_auth_reply(Msg, TrUserData) -> encode_msg_auth_reply(Msg, <<>>, TrUserData). + + +encode_msg_auth_reply(#auth_reply{code = F1, message = F2}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end + end, + if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> e_type_string(TrF2, <>, TrUserData) + end + end + end. + +encode_msg_session_request(_Msg, _TrUserData) -> <<>>. + +encode_msg_session_reply(Msg, TrUserData) -> encode_msg_session_reply(Msg, <<>>, TrUserData). + + +encode_msg_session_reply(#session_reply{a = F1}, Bin, TrUserData) -> + if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= false -> Bin; + true -> e_type_bool(TrF1, <>, TrUserData) + end + end + end. + +encode_msg_data(Msg, TrUserData) -> encode_msg_data(Msg, <<>>, TrUserData). + + +encode_msg_data(#data{device_uuid = F1, service_name = F2, at = F3, tags = F4, fields = F5}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> e_type_string(TrF1, <>, TrUserData) + end + end + end, + B2 = if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> e_type_string(TrF2, <>, TrUserData) + end + end + end, + B3 = if F3 == undefined -> B2; + true -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> e_type_int32(TrF3, <>, TrUserData) + end + end + end, + B4 = begin + TrF4 = id(F4, TrUserData), + if TrF4 == [] -> B3; + true -> e_field_data_tags(TrF4, B3, TrUserData) + end + end, + begin + TrF5 = id(F5, TrUserData), + if TrF5 == [] -> B4; + true -> e_field_data_fields(TrF5, B4, TrUserData) + end + end. + +encode_msg_ping(Msg, TrUserData) -> encode_msg_ping(Msg, <<>>, TrUserData). + + +encode_msg_ping(#ping{adcode = F1, boot_time = F2, province = F3, city = F4, efka_version = F5, kernel_arch = F6, ips = F7, cpu_core = F8, cpu_load = F9, cpu_temperature = F10, disk = F11, memory = F12, interfaces = F13}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> e_type_string(TrF1, <>, TrUserData) + end + end + end, + B2 = if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end + end, + B3 = if F3 == undefined -> B2; + true -> + begin + TrF3 = id(F3, TrUserData), + case is_empty_string(TrF3) of + true -> B2; + false -> e_type_string(TrF3, <>, TrUserData) + end + end + end, + B4 = if F4 == undefined -> B3; + true -> + begin + TrF4 = id(F4, TrUserData), + case is_empty_string(TrF4) of + true -> B3; + false -> e_type_string(TrF4, <>, TrUserData) + end + end + end, + B5 = if F5 == undefined -> B4; + true -> + begin + TrF5 = id(F5, TrUserData), + case is_empty_string(TrF5) of + true -> B4; + false -> e_type_string(TrF5, <>, TrUserData) + end + end + end, + B6 = if F6 == undefined -> B5; + true -> + begin + TrF6 = id(F6, TrUserData), + case is_empty_string(TrF6) of + true -> B5; + false -> e_type_string(TrF6, <>, TrUserData) + end + end + end, + B7 = begin + TrF7 = id(F7, TrUserData), + if TrF7 == [] -> B6; + true -> e_field_ping_ips(TrF7, B6, TrUserData) + end + end, + B8 = if F8 == undefined -> B7; + true -> + begin + TrF8 = id(F8, TrUserData), + if TrF8 =:= 0 -> B7; + true -> e_varint(TrF8, <>, TrUserData) + end + end + end, + B9 = if F9 == undefined -> B8; + true -> + begin + TrF9 = id(F9, TrUserData), + if TrF9 =:= 0 -> B8; + true -> e_varint(TrF9, <>, TrUserData) + end + end + end, + B10 = if F10 == undefined -> B9; + true -> + begin + TrF10 = id(F10, TrUserData), + if TrF10 =:= +0.0; TrF10 =:= 0 -> B9; + true -> e_type_float(TrF10, <>, TrUserData) + end + end + end, + B11 = begin + TrF11 = id(F11, TrUserData), + if TrF11 == [] -> B10; + true -> e_field_ping_disk(TrF11, B10, TrUserData) + end + end, + B12 = begin + TrF12 = id(F12, TrUserData), + if TrF12 == [] -> B11; + true -> e_field_ping_memory(TrF12, B11, TrUserData) + end + end, + begin + TrF13 = id(F13, TrUserData), + if TrF13 == [] -> B12; + true -> e_field_ping_interfaces(TrF13, B12, TrUserData) + end + end. + +encode_msg_service_inform(Msg, TrUserData) -> encode_msg_service_inform(Msg, <<>>, TrUserData). + + +encode_msg_service_inform(#service_inform{name = F1, props = F2, version = F3, version_copy = F4, status = F5, at = F6}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> e_type_string(TrF1, <>, TrUserData) + end + end + end, + B2 = if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> e_type_string(TrF2, <>, TrUserData) + end + end + end, + B3 = if F3 == undefined -> B2; + true -> + begin + TrF3 = id(F3, TrUserData), + case is_empty_string(TrF3) of + true -> B2; + false -> e_type_string(TrF3, <>, TrUserData) + end + end + end, + B4 = if F4 == undefined -> B3; + true -> + begin + TrF4 = id(F4, TrUserData), + case is_empty_string(TrF4) of + true -> B3; + false -> e_type_string(TrF4, <>, TrUserData) + end + end + end, + B5 = if F5 == undefined -> B4; + true -> + begin + TrF5 = id(F5, TrUserData), + if TrF5 =:= 0 -> B4; + true -> e_varint(TrF5, <>, TrUserData) + end + end + end, + if F6 == undefined -> B5; + true -> + begin + TrF6 = id(F6, TrUserData), + if TrF6 =:= 0 -> B5; + true -> e_varint(TrF6, <>, TrUserData) + end + end + end. + +encode_msg_feedback_step(Msg, TrUserData) -> encode_msg_feedback_step(Msg, <<>>, TrUserData). + + +encode_msg_feedback_step(#feedback_step{task_id = F1, code = F2}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> e_type_string(TrF1, <>, TrUserData) + end + end + end, + if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + if TrF2 =:= 0 -> B1; + true -> e_varint(TrF2, <>, TrUserData) + end + end + end. + +encode_msg_feedback_result(Msg, TrUserData) -> encode_msg_feedback_result(Msg, <<>>, TrUserData). + + +encode_msg_feedback_result(#feedback_result{task_id = F1, task_type = F2, time = F3, code = F4, reason = F5, error = F6}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> e_type_string(TrF1, <>, TrUserData) + end + end + end, + B2 = if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> e_type_string(TrF2, <>, TrUserData) + end + end + end, + B3 = if F3 == undefined -> B2; + true -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> e_varint(TrF3, <>, TrUserData) + end + end + end, + B4 = if F4 == undefined -> B3; + true -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> e_varint(TrF4, <>, TrUserData) + end + end + end, + B5 = if F5 == undefined -> B4; + true -> + begin + TrF5 = id(F5, TrUserData), + case is_empty_string(TrF5) of + true -> B4; + false -> e_type_string(TrF5, <>, TrUserData) + end + end + end, + if F6 == undefined -> B5; + true -> + begin + TrF6 = id(F6, TrUserData), + case is_empty_string(TrF6) of + true -> B5; + false -> e_type_string(TrF6, <>, TrUserData) + end + end + end. + +encode_msg_event(Msg, TrUserData) -> encode_msg_event(Msg, <<>>, TrUserData). + + +encode_msg_event(#event{event_type = F1, params = F2}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end + end, + if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end + end. + +encode_msg_ai_event(Msg, TrUserData) -> encode_msg_ai_event(Msg, <<>>, TrUserData). + + +encode_msg_ai_event(#ai_event{event_type = F1, params = F2}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end + end, + if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + case iolist_size(TrF2) of + 0 -> B1; + _ -> e_type_bytes(TrF2, <>, TrUserData) + end + end + end. + +encode_msg_directive(Msg, TrUserData) -> encode_msg_directive(Msg, <<>>, TrUserData). + + +encode_msg_directive(#directive{device_uuid = F1, version = F2, directive_type = F3, timeout = F4, directive = F5}, Bin, TrUserData) -> + B1 = if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + case is_empty_string(TrF1) of + true -> Bin; + false -> e_type_string(TrF1, <>, TrUserData) + end + end + end, + B2 = if F2 == undefined -> B1; + true -> + begin + TrF2 = id(F2, TrUserData), + case is_empty_string(TrF2) of + true -> B1; + false -> e_type_string(TrF2, <>, TrUserData) + end + end + end, + B3 = if F3 == undefined -> B2; + true -> + begin + TrF3 = id(F3, TrUserData), + if TrF3 =:= 0 -> B2; + true -> e_varint(TrF3, <>, TrUserData) + end + end + end, + B4 = if F4 == undefined -> B3; + true -> + begin + TrF4 = id(F4, TrUserData), + if TrF4 =:= 0 -> B3; + true -> e_varint(TrF4, <>, TrUserData) + end + end + end, + if F5 == undefined -> B4; + true -> + begin + TrF5 = id(F5, TrUserData), + case iolist_size(TrF5) of + 0 -> B4; + _ -> e_type_bytes(TrF5, <>, TrUserData) + end + end + end. + +e_mfield_data_tags(Msg, Bin, TrUserData) -> + SubBin = 'encode_msg_map'(Msg, <<>>, TrUserData), + Bin2 = e_varint(byte_size(SubBin), Bin), + <>. + +e_field_data_tags([Elem | Rest], Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_mfield_data_tags('tr_encode_data.tags[x]'(Elem, TrUserData), Bin2, TrUserData), + e_field_data_tags(Rest, Bin3, TrUserData); +e_field_data_tags([], Bin, _TrUserData) -> Bin. + +e_field_data_fields([Elem | Rest], Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_bytes(id(Elem, TrUserData), Bin2, TrUserData), + e_field_data_fields(Rest, Bin3, TrUserData); +e_field_data_fields([], Bin, _TrUserData) -> Bin. + +e_field_ping_ips([Elem | Rest], Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_string(id(Elem, TrUserData), Bin2, TrUserData), + e_field_ping_ips(Rest, Bin3, TrUserData); +e_field_ping_ips([], Bin, _TrUserData) -> Bin. + +e_field_ping_disk(Elems, Bin, TrUserData) when Elems =/= [] -> + SubBin = e_pfield_ping_disk(Elems, <<>>, TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +e_field_ping_disk([], Bin, _TrUserData) -> Bin. + +e_pfield_ping_disk([Value | Rest], Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, TrUserData), + e_pfield_ping_disk(Rest, Bin2, TrUserData); +e_pfield_ping_disk([], Bin, _TrUserData) -> Bin. + +e_field_ping_memory(Elems, Bin, TrUserData) when Elems =/= [] -> + SubBin = e_pfield_ping_memory(Elems, <<>>, TrUserData), + Bin2 = <>, + Bin3 = e_varint(byte_size(SubBin), Bin2), + <>; +e_field_ping_memory([], Bin, _TrUserData) -> Bin. + +e_pfield_ping_memory([Value | Rest], Bin, TrUserData) -> + Bin2 = e_type_int32(id(Value, TrUserData), Bin, TrUserData), + e_pfield_ping_memory(Rest, Bin2, TrUserData); +e_pfield_ping_memory([], Bin, _TrUserData) -> Bin. + +e_field_ping_interfaces([Elem | Rest], Bin, TrUserData) -> + Bin2 = <>, + Bin3 = e_type_bytes(id(Elem, TrUserData), Bin2, TrUserData), + e_field_ping_interfaces(Rest, Bin3, TrUserData); +e_field_ping_interfaces([], Bin, _TrUserData) -> Bin. + +'encode_msg_map'(#'map'{key = F1, value = F2}, Bin, TrUserData) -> + B1 = begin TrF1 = id(F1, TrUserData), e_type_string(TrF1, <>, TrUserData) end, + begin TrF2 = id(F2, TrUserData), e_type_string(TrF2, <>, TrUserData) end. + +-compile({nowarn_unused_function,e_type_sint/3}). +e_type_sint(Value, Bin, _TrUserData) when Value >= 0 -> e_varint(Value * 2, Bin); +e_type_sint(Value, Bin, _TrUserData) -> e_varint(Value * -2 - 1, Bin). + +-compile({nowarn_unused_function,e_type_int32/3}). +e_type_int32(Value, Bin, _TrUserData) when 0 =< Value, Value =< 127 -> <>; +e_type_int32(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_int64/3}). +e_type_int64(Value, Bin, _TrUserData) when 0 =< Value, Value =< 127 -> <>; +e_type_int64(Value, Bin, _TrUserData) -> + <> = <>, + e_varint(N, Bin). + +-compile({nowarn_unused_function,e_type_bool/3}). +e_type_bool(true, Bin, _TrUserData) -> <>; +e_type_bool(false, Bin, _TrUserData) -> <>; +e_type_bool(1, Bin, _TrUserData) -> <>; +e_type_bool(0, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_string/3}). +e_type_string(S, Bin, _TrUserData) -> + Utf8 = unicode:characters_to_binary(S), + Bin2 = e_varint(byte_size(Utf8), Bin), + <>. + +-compile({nowarn_unused_function,e_type_bytes/3}). +e_type_bytes(Bytes, Bin, _TrUserData) when is_binary(Bytes) -> + Bin2 = e_varint(byte_size(Bytes), Bin), + <>; +e_type_bytes(Bytes, Bin, _TrUserData) when is_list(Bytes) -> + BytesBin = iolist_to_binary(Bytes), + Bin2 = e_varint(byte_size(BytesBin), Bin), + <>. + +-compile({nowarn_unused_function,e_type_fixed32/3}). +e_type_fixed32(Value, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_sfixed32/3}). +e_type_sfixed32(Value, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_fixed64/3}). +e_type_fixed64(Value, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_sfixed64/3}). +e_type_sfixed64(Value, Bin, _TrUserData) -> <>. + +-compile({nowarn_unused_function,e_type_float/3}). +e_type_float(V, Bin, _) when is_number(V) -> <>; +e_type_float(infinity, Bin, _) -> <>; +e_type_float('-infinity', Bin, _) -> <>; +e_type_float(nan, Bin, _) -> <>. + +-compile({nowarn_unused_function,e_type_double/3}). +e_type_double(V, Bin, _) when is_number(V) -> <>; +e_type_double(infinity, Bin, _) -> <>; +e_type_double('-infinity', Bin, _) -> <>; +e_type_double(nan, Bin, _) -> <>. + +-compile({nowarn_unused_function,e_unknown_elems/2}). +e_unknown_elems([Elem | Rest], Bin) -> + BinR = case Elem of + {varint, FNum, N} -> + BinF = e_varint(FNum bsl 3, Bin), + e_varint(N, BinF); + {length_delimited, FNum, Data} -> + BinF = e_varint(FNum bsl 3 bor 2, Bin), + BinL = e_varint(byte_size(Data), BinF), + <>; + {group, FNum, GroupFields} -> + Bin1 = e_varint(FNum bsl 3 bor 3, Bin), + Bin2 = e_unknown_elems(GroupFields, Bin1), + e_varint(FNum bsl 3 bor 4, Bin2); + {fixed32, FNum, V} -> + BinF = e_varint(FNum bsl 3 bor 5, Bin), + <>; + {fixed64, FNum, V} -> + BinF = e_varint(FNum bsl 3 bor 1, Bin), + <> + end, + e_unknown_elems(Rest, BinR); +e_unknown_elems([], Bin) -> Bin. + +-compile({nowarn_unused_function,e_varint/3}). +e_varint(N, Bin, _TrUserData) -> e_varint(N, Bin). + +-compile({nowarn_unused_function,e_varint/2}). +e_varint(N, Bin) when N =< 127 -> <>; +e_varint(N, Bin) -> + Bin2 = <>, + e_varint(N bsr 7, Bin2). + +is_empty_string("") -> true; +is_empty_string(<<>>) -> true; +is_empty_string(L) when is_list(L) -> not string_has_chars(L); +is_empty_string(B) when is_binary(B) -> false. + +string_has_chars([C | _]) when is_integer(C) -> true; +string_has_chars([H | T]) -> + case string_has_chars(H) of + true -> true; + false -> string_has_chars(T) + end; +string_has_chars(B) when is_binary(B), byte_size(B) =/= 0 -> true; +string_has_chars(C) when is_integer(C) -> true; +string_has_chars(<<>>) -> false; +string_has_chars([]) -> false. + + +decode_msg(Bin, MsgName) when is_binary(Bin) -> decode_msg(Bin, MsgName, []). + +decode_msg(Bin, MsgName, Opts) when is_binary(Bin) -> + TrUserData = proplists:get_value(user_data, Opts), + decode_msg_1_catch(Bin, MsgName, TrUserData). + +-ifdef('OTP_RELEASE'). +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch + error:{gpb_error,_}=Reason:StackTrace -> + erlang:raise(error, Reason, StackTrace); + Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-else. +decode_msg_1_catch(Bin, MsgName, TrUserData) -> + try decode_msg_2_doit(MsgName, Bin, TrUserData) + catch + error:{gpb_error,_}=Reason -> + erlang:raise(error, Reason, + erlang:get_stacktrace()); + Class:Reason -> + StackTrace = erlang:get_stacktrace(), + error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}}) + end. +-endif. + +decode_msg_2_doit(auth_request, Bin, TrUserData) -> id(decode_msg_auth_request(Bin, TrUserData), TrUserData); +decode_msg_2_doit(auth_reply, Bin, TrUserData) -> id(decode_msg_auth_reply(Bin, TrUserData), TrUserData); +decode_msg_2_doit(session_request, Bin, TrUserData) -> id(decode_msg_session_request(Bin, TrUserData), TrUserData); +decode_msg_2_doit(session_reply, Bin, TrUserData) -> id(decode_msg_session_reply(Bin, TrUserData), TrUserData); +decode_msg_2_doit(data, Bin, TrUserData) -> id(decode_msg_data(Bin, TrUserData), TrUserData); +decode_msg_2_doit(ping, Bin, TrUserData) -> id(decode_msg_ping(Bin, TrUserData), TrUserData); +decode_msg_2_doit(service_inform, Bin, TrUserData) -> id(decode_msg_service_inform(Bin, TrUserData), TrUserData); +decode_msg_2_doit(feedback_step, Bin, TrUserData) -> id(decode_msg_feedback_step(Bin, TrUserData), TrUserData); +decode_msg_2_doit(feedback_result, Bin, TrUserData) -> id(decode_msg_feedback_result(Bin, TrUserData), TrUserData); +decode_msg_2_doit(event, Bin, TrUserData) -> id(decode_msg_event(Bin, TrUserData), TrUserData); +decode_msg_2_doit(ai_event, Bin, TrUserData) -> id(decode_msg_ai_event(Bin, TrUserData), TrUserData); +decode_msg_2_doit(directive, Bin, TrUserData) -> id(decode_msg_directive(Bin, TrUserData), TrUserData). + + + +decode_msg_auth_request(Bin, TrUserData) -> dfp_read_field_def_auth_request(Bin, 0, 0, 0, id(<<>>, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), TrUserData). + +dfp_read_field_def_auth_request(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_auth_request_uuid(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_auth_request(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_auth_request_username(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_auth_request(<<26, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_auth_request_password(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_auth_request(<<34, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_auth_request_salt(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_auth_request(<<42, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_auth_request_token(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_auth_request(<<48, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_auth_request_timestamp(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_auth_request(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, _) -> #auth_request{uuid = F@_1, username = F@_2, password = F@_3, salt = F@_4, token = F@_5, timestamp = F@_6}; +dfp_read_field_def_auth_request(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> dg_read_field_def_auth_request(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +dg_read_field_def_auth_request(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 32 - 7 -> dg_read_field_def_auth_request(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dg_read_field_def_auth_request(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> d_field_auth_request_uuid(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 18 -> d_field_auth_request_username(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 26 -> d_field_auth_request_password(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 34 -> d_field_auth_request_salt(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 42 -> d_field_auth_request_token(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 48 -> d_field_auth_request_timestamp(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_auth_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 1 -> skip_64_auth_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 2 -> skip_length_delimited_auth_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 3 -> skip_group_auth_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 5 -> skip_32_auth_request(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) + end + end; +dg_read_field_def_auth_request(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, _) -> #auth_request{uuid = F@_1, username = F@_2, password = F@_3, salt = F@_4, token = F@_5, timestamp = F@_6}. + +d_field_auth_request_uuid(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_auth_request_uuid(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_auth_request_uuid(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_auth_request(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +d_field_auth_request_username(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_auth_request_username(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_auth_request_username(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_auth_request(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, F@_5, F@_6, TrUserData). + +d_field_auth_request_password(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_auth_request_password(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_auth_request_password(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, F@_5, F@_6, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_auth_request(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, F@_5, F@_6, TrUserData). + +d_field_auth_request_salt(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_auth_request_salt(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_auth_request_salt(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, _, F@_5, F@_6, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_auth_request(RestF, 0, 0, F, F@_1, F@_2, F@_3, NewFValue, F@_5, F@_6, TrUserData). + +d_field_auth_request_token(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_auth_request_token(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_auth_request_token(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, _, F@_6, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_auth_request(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, NewFValue, F@_6, TrUserData). + +d_field_auth_request_timestamp(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_auth_request_timestamp(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_auth_request_timestamp(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, _, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_auth_request(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, NewFValue, TrUserData). + +skip_varint_auth_request(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> skip_varint_auth_request(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +skip_varint_auth_request(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> dfp_read_field_def_auth_request(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +skip_length_delimited_auth_request(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> skip_length_delimited_auth_request(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +skip_length_delimited_auth_request(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_auth_request(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +skip_group_auth_request(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_auth_request(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +skip_32_auth_request(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> dfp_read_field_def_auth_request(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +skip_64_auth_request(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> dfp_read_field_def_auth_request(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +decode_msg_auth_reply(Bin, TrUserData) -> dfp_read_field_def_auth_reply(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), TrUserData). + +dfp_read_field_def_auth_reply(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_auth_reply_code(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_auth_reply(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_auth_reply_message(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_auth_reply(<<>>, 0, 0, _, F@_1, F@_2, _) -> #auth_reply{code = F@_1, message = F@_2}; +dfp_read_field_def_auth_reply(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_auth_reply(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +dg_read_field_def_auth_reply(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_auth_reply(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +dg_read_field_def_auth_reply(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_auth_reply_code(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> d_field_auth_reply_message(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_auth_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> skip_64_auth_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> skip_length_delimited_auth_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> skip_group_auth_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> skip_32_auth_reply(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +dg_read_field_def_auth_reply(<<>>, 0, 0, _, F@_1, F@_2, _) -> #auth_reply{code = F@_1, message = F@_2}. + +d_field_auth_reply_code(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_auth_reply_code(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_auth_reply_code(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_auth_reply(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +d_field_auth_reply_message(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_auth_reply_message(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_auth_reply_message(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_auth_reply(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +skip_varint_auth_reply(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_auth_reply(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +skip_varint_auth_reply(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_auth_reply(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_length_delimited_auth_reply(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_auth_reply(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +skip_length_delimited_auth_reply(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_auth_reply(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +skip_group_auth_reply(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_auth_reply(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +skip_32_auth_reply(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_auth_reply(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_64_auth_reply(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_auth_reply(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +decode_msg_session_request(Bin, TrUserData) -> dfp_read_field_def_session_request(Bin, 0, 0, 0, TrUserData). + +dfp_read_field_def_session_request(<<>>, 0, 0, _, _) -> #session_request{}; +dfp_read_field_def_session_request(Other, Z1, Z2, F, TrUserData) -> dg_read_field_def_session_request(Other, Z1, Z2, F, TrUserData). + +dg_read_field_def_session_request(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 32 - 7 -> dg_read_field_def_session_request(Rest, N + 7, X bsl N + Acc, F, TrUserData); +dg_read_field_def_session_request(<<0:1, X:7, Rest/binary>>, N, Acc, _, TrUserData) -> + Key = X bsl N + Acc, + case Key band 7 of + 0 -> skip_varint_session_request(Rest, 0, 0, Key bsr 3, TrUserData); + 1 -> skip_64_session_request(Rest, 0, 0, Key bsr 3, TrUserData); + 2 -> skip_length_delimited_session_request(Rest, 0, 0, Key bsr 3, TrUserData); + 3 -> skip_group_session_request(Rest, 0, 0, Key bsr 3, TrUserData); + 5 -> skip_32_session_request(Rest, 0, 0, Key bsr 3, TrUserData) + end; +dg_read_field_def_session_request(<<>>, 0, 0, _, _) -> #session_request{}. + +skip_varint_session_request(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> skip_varint_session_request(Rest, Z1, Z2, F, TrUserData); +skip_varint_session_request(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, TrUserData) -> dfp_read_field_def_session_request(Rest, Z1, Z2, F, TrUserData). + +skip_length_delimited_session_request(<<1:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) when N < 57 -> skip_length_delimited_session_request(Rest, N + 7, X bsl N + Acc, F, TrUserData); +skip_length_delimited_session_request(<<0:1, X:7, Rest/binary>>, N, Acc, F, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_session_request(Rest2, 0, 0, F, TrUserData). + +skip_group_session_request(Bin, _, Z2, FNum, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_session_request(Rest, 0, Z2, FNum, TrUserData). + +skip_32_session_request(<<_:32, Rest/binary>>, Z1, Z2, F, TrUserData) -> dfp_read_field_def_session_request(Rest, Z1, Z2, F, TrUserData). + +skip_64_session_request(<<_:64, Rest/binary>>, Z1, Z2, F, TrUserData) -> dfp_read_field_def_session_request(Rest, Z1, Z2, F, TrUserData). + +decode_msg_session_reply(Bin, TrUserData) -> dfp_read_field_def_session_reply(Bin, 0, 0, 0, id(false, TrUserData), TrUserData). + +dfp_read_field_def_session_reply(<<8, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_session_reply_a(Rest, Z1, Z2, F, F@_1, TrUserData); +dfp_read_field_def_session_reply(<<>>, 0, 0, _, F@_1, _) -> #session_reply{a = F@_1}; +dfp_read_field_def_session_reply(Other, Z1, Z2, F, F@_1, TrUserData) -> dg_read_field_def_session_reply(Other, Z1, Z2, F, F@_1, TrUserData). + +dg_read_field_def_session_reply(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 32 - 7 -> dg_read_field_def_session_reply(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +dg_read_field_def_session_reply(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_session_reply_a(Rest, 0, 0, 0, F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_session_reply(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 1 -> skip_64_session_reply(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 2 -> skip_length_delimited_session_reply(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 3 -> skip_group_session_reply(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 5 -> skip_32_session_reply(Rest, 0, 0, Key bsr 3, F@_1, TrUserData) + end + end; +dg_read_field_def_session_reply(<<>>, 0, 0, _, F@_1, _) -> #session_reply{a = F@_1}. + +d_field_session_reply_a(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> d_field_session_reply_a(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +d_field_session_reply_a(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, TrUserData) -> + {NewFValue, RestF} = {id(X bsl N + Acc =/= 0, TrUserData), Rest}, + dfp_read_field_def_session_reply(RestF, 0, 0, F, NewFValue, TrUserData). + +skip_varint_session_reply(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> skip_varint_session_reply(Rest, Z1, Z2, F, F@_1, TrUserData); +skip_varint_session_reply(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_session_reply(Rest, Z1, Z2, F, F@_1, TrUserData). + +skip_length_delimited_session_reply(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> skip_length_delimited_session_reply(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +skip_length_delimited_session_reply(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_session_reply(Rest2, 0, 0, F, F@_1, TrUserData). + +skip_group_session_reply(Bin, _, Z2, FNum, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_session_reply(Rest, 0, Z2, FNum, F@_1, TrUserData). + +skip_32_session_reply(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_session_reply(Rest, Z1, Z2, F, F@_1, TrUserData). + +skip_64_session_reply(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_session_reply(Rest, Z1, Z2, F, F@_1, TrUserData). + +decode_msg_data(Bin, TrUserData) -> dfp_read_field_def_data(Bin, 0, 0, 0, id(<<>>, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), 'tr_decode_init_default_data.tags'([], TrUserData), id([], TrUserData), TrUserData). + +dfp_read_field_def_data(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_data_device_uuid(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +dfp_read_field_def_data(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_data_service_name(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +dfp_read_field_def_data(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_data_at(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +dfp_read_field_def_data(<<34, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_data_tags(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +dfp_read_field_def_data(<<42, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_data_fields(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +dfp_read_field_def_data(<<>>, 0, 0, _, F@_1, F@_2, F@_3, R1, R2, TrUserData) -> #data{device_uuid = F@_1, service_name = F@_2, at = F@_3, tags = 'tr_decode_repeated_finalize_data.tags'(R1, TrUserData), fields = lists_reverse(R2, TrUserData)}; +dfp_read_field_def_data(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dg_read_field_def_data(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). + +dg_read_field_def_data(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 32 - 7 -> dg_read_field_def_data(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +dg_read_field_def_data(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> d_field_data_device_uuid(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 18 -> d_field_data_service_name(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 24 -> d_field_data_at(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 34 -> d_field_data_tags(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 42 -> d_field_data_fields(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 1 -> skip_64_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 2 -> skip_length_delimited_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 3 -> skip_group_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 5 -> skip_32_data(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + end + end; +dg_read_field_def_data(<<>>, 0, 0, _, F@_1, F@_2, F@_3, R1, R2, TrUserData) -> #data{device_uuid = F@_1, service_name = F@_2, at = F@_3, tags = 'tr_decode_repeated_finalize_data.tags'(R1, TrUserData), fields = lists_reverse(R2, TrUserData)}. + +d_field_data_device_uuid(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_data_device_uuid(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +d_field_data_device_uuid(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_data(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, F@_5, TrUserData). + +d_field_data_service_name(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_data_service_name(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +d_field_data_service_name(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, F@_5, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_data(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, F@_5, TrUserData). + +d_field_data_at(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_data_at(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +d_field_data_at(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, F@_5, TrUserData) -> + {NewFValue, RestF} = {begin <> = <<(X bsl N + Acc):32/unsigned-native>>, id(Res, TrUserData) end, Rest}, + dfp_read_field_def_data(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, F@_5, TrUserData). + +d_field_data_tags(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_data_tags(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +d_field_data_tags(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, Prev, F@_5, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, {id('decode_msg_map'(Bs, TrUserData), TrUserData), Rest2} end, + dfp_read_field_def_data(RestF, 0, 0, F, F@_1, F@_2, F@_3, 'tr_decode_repeated_add_elem_data.tags'(NewFValue, Prev, TrUserData), F@_5, TrUserData). + +d_field_data_fields(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_data_fields(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +d_field_data_fields(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_data(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, cons(NewFValue, Prev, TrUserData), TrUserData). + +skip_varint_data(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> skip_varint_data(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +skip_varint_data(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dfp_read_field_def_data(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). + +skip_length_delimited_data(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> skip_length_delimited_data(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +skip_length_delimited_data(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_data(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). + +skip_group_data(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_data(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). + +skip_32_data(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dfp_read_field_def_data(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). + +skip_64_data(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dfp_read_field_def_data(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). + +decode_msg_ping(Bin, TrUserData) -> + dfp_read_field_def_ping(Bin, + 0, + 0, + 0, + id(<<>>, TrUserData), + id(0, TrUserData), + id(<<>>, TrUserData), + id(<<>>, TrUserData), + id(<<>>, TrUserData), + id(<<>>, TrUserData), + id([], TrUserData), + id(0, TrUserData), + id(0, TrUserData), + id(0.0, TrUserData), + id([], TrUserData), + id([], TrUserData), + id([], TrUserData), + TrUserData). + +dfp_read_field_def_ping(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + d_field_ping_adcode(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +dfp_read_field_def_ping(<<16, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + d_field_ping_boot_time(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +dfp_read_field_def_ping(<<26, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + d_field_ping_province(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +dfp_read_field_def_ping(<<34, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + d_field_ping_city(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +dfp_read_field_def_ping(<<42, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + d_field_ping_efka_version(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +dfp_read_field_def_ping(<<50, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + d_field_ping_kernel_arch(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +dfp_read_field_def_ping(<<58, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + d_field_ping_ips(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +dfp_read_field_def_ping(<<64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + d_field_ping_cpu_core(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +dfp_read_field_def_ping(<<72, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + d_field_ping_cpu_load(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +dfp_read_field_def_ping(<<85, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + d_field_ping_cpu_temperature(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +dfp_read_field_def_ping(<<90, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + d_pfield_ping_disk(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +dfp_read_field_def_ping(<<88, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + d_field_ping_disk(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +dfp_read_field_def_ping(<<98, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + d_pfield_ping_memory(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +dfp_read_field_def_ping(<<96, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + d_field_ping_memory(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +dfp_read_field_def_ping(<<106, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + d_field_ping_interfaces(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +dfp_read_field_def_ping(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, R1, F@_8, F@_9, F@_10, R2, R3, R4, TrUserData) -> + #ping{adcode = F@_1, boot_time = F@_2, province = F@_3, city = F@_4, efka_version = F@_5, kernel_arch = F@_6, ips = lists_reverse(R1, TrUserData), cpu_core = F@_8, cpu_load = F@_9, cpu_temperature = F@_10, disk = lists_reverse(R2, TrUserData), + memory = lists_reverse(R3, TrUserData), interfaces = lists_reverse(R4, TrUserData)}; +dfp_read_field_def_ping(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + dg_read_field_def_ping(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData). + +dg_read_field_def_ping(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 32 - 7 -> + dg_read_field_def_ping(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +dg_read_field_def_ping(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> d_field_ping_adcode(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 16 -> d_field_ping_boot_time(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 26 -> d_field_ping_province(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 34 -> d_field_ping_city(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 42 -> d_field_ping_efka_version(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 50 -> d_field_ping_kernel_arch(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 58 -> d_field_ping_ips(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 64 -> d_field_ping_cpu_core(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 72 -> d_field_ping_cpu_load(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 85 -> d_field_ping_cpu_temperature(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 90 -> d_pfield_ping_disk(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 88 -> d_field_ping_disk(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 98 -> d_pfield_ping_memory(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 96 -> d_field_ping_memory(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 106 -> d_field_ping_interfaces(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_ping(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 1 -> skip_64_ping(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 2 -> skip_length_delimited_ping(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 3 -> skip_group_ping(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); + 5 -> skip_32_ping(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) + end + end; +dg_read_field_def_ping(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, R1, F@_8, F@_9, F@_10, R2, R3, R4, TrUserData) -> + #ping{adcode = F@_1, boot_time = F@_2, province = F@_3, city = F@_4, efka_version = F@_5, kernel_arch = F@_6, ips = lists_reverse(R1, TrUserData), cpu_core = F@_8, cpu_load = F@_9, cpu_temperature = F@_10, disk = lists_reverse(R2, TrUserData), + memory = lists_reverse(R3, TrUserData), interfaces = lists_reverse(R4, TrUserData)}. + +d_field_ping_adcode(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> + d_field_ping_adcode(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +d_field_ping_adcode(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_ping(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData). + +d_field_ping_boot_time(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> + d_field_ping_boot_time(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +d_field_ping_boot_time(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_ping(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData). + +d_field_ping_province(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> + d_field_ping_province(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +d_field_ping_province(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_ping(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData). + +d_field_ping_city(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> + d_field_ping_city(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +d_field_ping_city(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, _, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_ping(RestF, 0, 0, F, F@_1, F@_2, F@_3, NewFValue, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData). + +d_field_ping_efka_version(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> + d_field_ping_efka_version(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +d_field_ping_efka_version(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, _, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_ping(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, NewFValue, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData). + +d_field_ping_kernel_arch(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> + d_field_ping_kernel_arch(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +d_field_ping_kernel_arch(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, _, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_ping(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, NewFValue, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData). + +d_field_ping_ips(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> + d_field_ping_ips(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +d_field_ping_ips(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, Prev, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_ping(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, cons(NewFValue, Prev, TrUserData), F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData). + +d_field_ping_cpu_core(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> + d_field_ping_cpu_core(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +d_field_ping_cpu_core(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, _, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_ping(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, NewFValue, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData). + +d_field_ping_cpu_load(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> + d_field_ping_cpu_load(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +d_field_ping_cpu_load(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, _, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_ping(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, NewFValue, F@_10, F@_11, F@_12, F@_13, TrUserData). + +d_field_ping_cpu_temperature(<<0:16, 128, 127, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, _, F@_11, F@_12, F@_13, TrUserData) -> + dfp_read_field_def_ping(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, id(infinity, TrUserData), F@_11, F@_12, F@_13, TrUserData); +d_field_ping_cpu_temperature(<<0:16, 128, 255, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, _, F@_11, F@_12, F@_13, TrUserData) -> + dfp_read_field_def_ping(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, id('-infinity', TrUserData), F@_11, F@_12, F@_13, TrUserData); +d_field_ping_cpu_temperature(<<_:16, 1:1, _:7, _:1, 127:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, _, F@_11, F@_12, F@_13, TrUserData) -> + dfp_read_field_def_ping(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, id(nan, TrUserData), F@_11, F@_12, F@_13, TrUserData); +d_field_ping_cpu_temperature(<>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, _, F@_11, F@_12, F@_13, TrUserData) -> + dfp_read_field_def_ping(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, id(Value, TrUserData), F@_11, F@_12, F@_13, TrUserData). + +d_field_ping_disk(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> + d_field_ping_disk(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +d_field_ping_disk(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, Prev, F@_12, F@_13, TrUserData) -> + {NewFValue, RestF} = {begin <> = <<(X bsl N + Acc):32/unsigned-native>>, id(Res, TrUserData) end, Rest}, + dfp_read_field_def_ping(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, cons(NewFValue, Prev, TrUserData), F@_12, F@_13, TrUserData). + +d_pfield_ping_disk(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> + d_pfield_ping_disk(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +d_pfield_ping_disk(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, E, F@_12, F@_13, TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = d_packed_field_ping_disk(PackedBytes, 0, 0, F, E, TrUserData), + dfp_read_field_def_ping(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, NewSeq, F@_12, F@_13, TrUserData). + +d_packed_field_ping_disk(<<1:1, X:7, Rest/binary>>, N, Acc, F, AccSeq, TrUserData) when N < 57 -> d_packed_field_ping_disk(Rest, N + 7, X bsl N + Acc, F, AccSeq, TrUserData); +d_packed_field_ping_disk(<<0:1, X:7, Rest/binary>>, N, Acc, F, AccSeq, TrUserData) -> + {NewFValue, RestF} = {begin <> = <<(X bsl N + Acc):32/unsigned-native>>, id(Res, TrUserData) end, Rest}, + d_packed_field_ping_disk(RestF, 0, 0, F, [NewFValue | AccSeq], TrUserData); +d_packed_field_ping_disk(<<>>, 0, 0, _, AccSeq, _) -> AccSeq. + +d_field_ping_memory(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> + d_field_ping_memory(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +d_field_ping_memory(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, Prev, F@_13, TrUserData) -> + {NewFValue, RestF} = {begin <> = <<(X bsl N + Acc):32/unsigned-native>>, id(Res, TrUserData) end, Rest}, + dfp_read_field_def_ping(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, cons(NewFValue, Prev, TrUserData), F@_13, TrUserData). + +d_pfield_ping_memory(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> + d_pfield_ping_memory(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +d_pfield_ping_memory(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, E, F@_13, TrUserData) -> + Len = X bsl N + Acc, + <> = Rest, + NewSeq = d_packed_field_ping_memory(PackedBytes, 0, 0, F, E, TrUserData), + dfp_read_field_def_ping(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, NewSeq, F@_13, TrUserData). + +d_packed_field_ping_memory(<<1:1, X:7, Rest/binary>>, N, Acc, F, AccSeq, TrUserData) when N < 57 -> d_packed_field_ping_memory(Rest, N + 7, X bsl N + Acc, F, AccSeq, TrUserData); +d_packed_field_ping_memory(<<0:1, X:7, Rest/binary>>, N, Acc, F, AccSeq, TrUserData) -> + {NewFValue, RestF} = {begin <> = <<(X bsl N + Acc):32/unsigned-native>>, id(Res, TrUserData) end, Rest}, + d_packed_field_ping_memory(RestF, 0, 0, F, [NewFValue | AccSeq], TrUserData); +d_packed_field_ping_memory(<<>>, 0, 0, _, AccSeq, _) -> AccSeq. + +d_field_ping_interfaces(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> + d_field_ping_interfaces(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +d_field_ping_interfaces(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, Prev, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_ping(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, cons(NewFValue, Prev, TrUserData), TrUserData). + +skip_varint_ping(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + skip_varint_ping(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +skip_varint_ping(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + dfp_read_field_def_ping(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData). + +skip_length_delimited_ping(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) when N < 57 -> + skip_length_delimited_ping(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData); +skip_length_delimited_ping(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_ping(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData). + +skip_group_ping(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_ping(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData). + +skip_32_ping(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + dfp_read_field_def_ping(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData). + +skip_64_ping(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData) -> + dfp_read_field_def_ping(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, F@_9, F@_10, F@_11, F@_12, F@_13, TrUserData). + +decode_msg_service_inform(Bin, TrUserData) -> dfp_read_field_def_service_inform(Bin, 0, 0, 0, id(<<>>, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), id(0, TrUserData), TrUserData). + +dfp_read_field_def_service_inform(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_service_inform_name(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_service_inform(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_service_inform_props(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_service_inform(<<26, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_service_inform_version(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_service_inform(<<34, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_service_inform_version_copy(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_service_inform(<<40, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_service_inform_status(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_service_inform(<<48, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_service_inform_at(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_service_inform(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, _) -> #service_inform{name = F@_1, props = F@_2, version = F@_3, version_copy = F@_4, status = F@_5, at = F@_6}; +dfp_read_field_def_service_inform(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> dg_read_field_def_service_inform(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +dg_read_field_def_service_inform(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 32 - 7 -> dg_read_field_def_service_inform(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dg_read_field_def_service_inform(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> d_field_service_inform_name(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 18 -> d_field_service_inform_props(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 26 -> d_field_service_inform_version(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 34 -> d_field_service_inform_version_copy(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 40 -> d_field_service_inform_status(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 48 -> d_field_service_inform_at(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_service_inform(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 1 -> skip_64_service_inform(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 2 -> skip_length_delimited_service_inform(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 3 -> skip_group_service_inform(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 5 -> skip_32_service_inform(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) + end + end; +dg_read_field_def_service_inform(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, _) -> #service_inform{name = F@_1, props = F@_2, version = F@_3, version_copy = F@_4, status = F@_5, at = F@_6}. + +d_field_service_inform_name(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_service_inform_name(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_service_inform_name(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_service_inform(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +d_field_service_inform_props(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_service_inform_props(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_service_inform_props(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_service_inform(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, F@_5, F@_6, TrUserData). + +d_field_service_inform_version(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_service_inform_version(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_service_inform_version(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, F@_5, F@_6, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_service_inform(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, F@_5, F@_6, TrUserData). + +d_field_service_inform_version_copy(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> + d_field_service_inform_version_copy(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_service_inform_version_copy(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, _, F@_5, F@_6, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_service_inform(RestF, 0, 0, F, F@_1, F@_2, F@_3, NewFValue, F@_5, F@_6, TrUserData). + +d_field_service_inform_status(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_service_inform_status(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_service_inform_status(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, _, F@_6, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_service_inform(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, NewFValue, F@_6, TrUserData). + +d_field_service_inform_at(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_service_inform_at(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_service_inform_at(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, _, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_service_inform(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, NewFValue, TrUserData). + +skip_varint_service_inform(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> skip_varint_service_inform(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +skip_varint_service_inform(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> dfp_read_field_def_service_inform(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +skip_length_delimited_service_inform(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> + skip_length_delimited_service_inform(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +skip_length_delimited_service_inform(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_service_inform(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +skip_group_service_inform(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_service_inform(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +skip_32_service_inform(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> dfp_read_field_def_service_inform(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +skip_64_service_inform(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> dfp_read_field_def_service_inform(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +decode_msg_feedback_step(Bin, TrUserData) -> dfp_read_field_def_feedback_step(Bin, 0, 0, 0, id(<<>>, TrUserData), id(0, TrUserData), TrUserData). + +dfp_read_field_def_feedback_step(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_feedback_step_task_id(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_feedback_step(<<16, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_feedback_step_code(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_feedback_step(<<>>, 0, 0, _, F@_1, F@_2, _) -> #feedback_step{task_id = F@_1, code = F@_2}; +dfp_read_field_def_feedback_step(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_feedback_step(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +dg_read_field_def_feedback_step(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_feedback_step(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +dg_read_field_def_feedback_step(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> d_field_feedback_step_task_id(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 16 -> d_field_feedback_step_code(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_feedback_step(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> skip_64_feedback_step(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> skip_length_delimited_feedback_step(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> skip_group_feedback_step(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> skip_32_feedback_step(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +dg_read_field_def_feedback_step(<<>>, 0, 0, _, F@_1, F@_2, _) -> #feedback_step{task_id = F@_1, code = F@_2}. + +d_field_feedback_step_task_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_feedback_step_task_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_feedback_step_task_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_feedback_step(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +d_field_feedback_step_code(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_feedback_step_code(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_feedback_step_code(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_feedback_step(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +skip_varint_feedback_step(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_feedback_step(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +skip_varint_feedback_step(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_feedback_step(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_length_delimited_feedback_step(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_feedback_step(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +skip_length_delimited_feedback_step(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_feedback_step(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +skip_group_feedback_step(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_feedback_step(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +skip_32_feedback_step(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_feedback_step(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_64_feedback_step(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_feedback_step(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +decode_msg_feedback_result(Bin, TrUserData) -> dfp_read_field_def_feedback_result(Bin, 0, 0, 0, id(<<>>, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), id(0, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData). + +dfp_read_field_def_feedback_result(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_feedback_result_task_id(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_feedback_result(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_feedback_result_task_type(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_feedback_result(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_feedback_result_time(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_feedback_result(<<32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_feedback_result_code(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_feedback_result(<<42, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_feedback_result_reason(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_feedback_result(<<50, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> d_field_feedback_result_error(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dfp_read_field_def_feedback_result(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, _) -> #feedback_result{task_id = F@_1, task_type = F@_2, time = F@_3, code = F@_4, reason = F@_5, error = F@_6}; +dfp_read_field_def_feedback_result(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> dg_read_field_def_feedback_result(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +dg_read_field_def_feedback_result(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 32 - 7 -> + dg_read_field_def_feedback_result(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +dg_read_field_def_feedback_result(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> d_field_feedback_result_task_id(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 18 -> d_field_feedback_result_task_type(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 24 -> d_field_feedback_result_time(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 32 -> d_field_feedback_result_code(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 42 -> d_field_feedback_result_reason(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 50 -> d_field_feedback_result_error(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_feedback_result(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 1 -> skip_64_feedback_result(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 2 -> skip_length_delimited_feedback_result(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 3 -> skip_group_feedback_result(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); + 5 -> skip_32_feedback_result(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) + end + end; +dg_read_field_def_feedback_result(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, _) -> #feedback_result{task_id = F@_1, task_type = F@_2, time = F@_3, code = F@_4, reason = F@_5, error = F@_6}. + +d_field_feedback_result_task_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_feedback_result_task_id(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_feedback_result_task_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_feedback_result(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +d_field_feedback_result_task_type(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_feedback_result_task_type(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_feedback_result_task_type(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_feedback_result(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, F@_5, F@_6, TrUserData). + +d_field_feedback_result_time(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_feedback_result_time(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_feedback_result_time(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, F@_5, F@_6, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_feedback_result(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, F@_5, F@_6, TrUserData). + +d_field_feedback_result_code(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_feedback_result_code(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_feedback_result_code(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, _, F@_5, F@_6, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_feedback_result(RestF, 0, 0, F, F@_1, F@_2, F@_3, NewFValue, F@_5, F@_6, TrUserData). + +d_field_feedback_result_reason(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_feedback_result_reason(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_feedback_result_reason(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, _, F@_6, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_feedback_result(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, NewFValue, F@_6, TrUserData). + +d_field_feedback_result_error(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> d_field_feedback_result_error(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +d_field_feedback_result_error(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_feedback_result(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, NewFValue, TrUserData). + +skip_varint_feedback_result(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> skip_varint_feedback_result(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +skip_varint_feedback_result(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> dfp_read_field_def_feedback_result(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +skip_length_delimited_feedback_result(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) when N < 57 -> + skip_length_delimited_feedback_result(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData); +skip_length_delimited_feedback_result(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_feedback_result(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +skip_group_feedback_result(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_feedback_result(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +skip_32_feedback_result(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> dfp_read_field_def_feedback_result(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +skip_64_feedback_result(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData) -> dfp_read_field_def_feedback_result(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, TrUserData). + +decode_msg_event(Bin, TrUserData) -> dfp_read_field_def_event(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), TrUserData). + +dfp_read_field_def_event(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_event_event_type(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_event(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_event_params(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_event(<<>>, 0, 0, _, F@_1, F@_2, _) -> #event{event_type = F@_1, params = F@_2}; +dfp_read_field_def_event(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_event(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +dg_read_field_def_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_event(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +dg_read_field_def_event(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_event_event_type(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> d_field_event_params(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> skip_64_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> skip_length_delimited_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> skip_group_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> skip_32_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +dg_read_field_def_event(<<>>, 0, 0, _, F@_1, F@_2, _) -> #event{event_type = F@_1, params = F@_2}. + +d_field_event_event_type(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_event_event_type(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_event_event_type(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_event(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +d_field_event_params(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_event_params(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_event_params(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_event(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +skip_varint_event(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +skip_varint_event(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_length_delimited_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_event(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +skip_length_delimited_event(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_event(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +skip_group_event(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_event(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +skip_32_event(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_64_event(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +decode_msg_ai_event(Bin, TrUserData) -> dfp_read_field_def_ai_event(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), TrUserData). + +dfp_read_field_def_ai_event(<<8, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_ai_event_event_type(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_ai_event(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> d_field_ai_event_params(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +dfp_read_field_def_ai_event(<<>>, 0, 0, _, F@_1, F@_2, _) -> #ai_event{event_type = F@_1, params = F@_2}; +dfp_read_field_def_ai_event(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dg_read_field_def_ai_event(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +dg_read_field_def_ai_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> dg_read_field_def_ai_event(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +dg_read_field_def_ai_event(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_ai_event_event_type(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> d_field_ai_event_params(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_ai_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> skip_64_ai_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> skip_length_delimited_ai_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> skip_group_ai_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> skip_32_ai_event(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +dg_read_field_def_ai_event(<<>>, 0, 0, _, F@_1, F@_2, _) -> #ai_event{event_type = F@_1, params = F@_2}. + +d_field_ai_event_event_type(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_ai_event_event_type(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_ai_event_event_type(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_ai_event(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +d_field_ai_event_params(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> d_field_ai_event_params(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +d_field_ai_event_params(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_ai_event(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +skip_varint_ai_event(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_varint_ai_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +skip_varint_ai_event(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_ai_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_length_delimited_ai_event(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> skip_length_delimited_ai_event(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +skip_length_delimited_ai_event(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_ai_event(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +skip_group_ai_event(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_ai_event(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +skip_32_ai_event(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_ai_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +skip_64_ai_event(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_ai_event(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +decode_msg_directive(Bin, TrUserData) -> dfp_read_field_def_directive(Bin, 0, 0, 0, id(<<>>, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), id(0, TrUserData), id(<<>>, TrUserData), TrUserData). + +dfp_read_field_def_directive(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_directive_device_uuid(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +dfp_read_field_def_directive(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_directive_version(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +dfp_read_field_def_directive(<<24, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_directive_directive_type(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +dfp_read_field_def_directive(<<32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_directive_timeout(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +dfp_read_field_def_directive(<<42, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> d_field_directive_directive(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +dfp_read_field_def_directive(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, _) -> #directive{device_uuid = F@_1, version = F@_2, directive_type = F@_3, timeout = F@_4, directive = F@_5}; +dfp_read_field_def_directive(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dg_read_field_def_directive(Other, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). + +dg_read_field_def_directive(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 32 - 7 -> dg_read_field_def_directive(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +dg_read_field_def_directive(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> d_field_directive_device_uuid(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 18 -> d_field_directive_version(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 24 -> d_field_directive_directive_type(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 32 -> d_field_directive_timeout(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 42 -> d_field_directive_directive(Rest, 0, 0, 0, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_directive(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 1 -> skip_64_directive(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 2 -> skip_length_delimited_directive(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 3 -> skip_group_directive(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); + 5 -> skip_32_directive(Rest, 0, 0, Key bsr 3, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) + end + end; +dg_read_field_def_directive(<<>>, 0, 0, _, F@_1, F@_2, F@_3, F@_4, F@_5, _) -> #directive{device_uuid = F@_1, version = F@_2, directive_type = F@_3, timeout = F@_4, directive = F@_5}. + +d_field_directive_device_uuid(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_directive_device_uuid(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +d_field_directive_device_uuid(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_directive(RestF, 0, 0, F, NewFValue, F@_2, F@_3, F@_4, F@_5, TrUserData). + +d_field_directive_version(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_directive_version(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +d_field_directive_version(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, F@_3, F@_4, F@_5, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_directive(RestF, 0, 0, F, F@_1, NewFValue, F@_3, F@_4, F@_5, TrUserData). + +d_field_directive_directive_type(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_directive_directive_type(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +d_field_directive_directive_type(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, _, F@_4, F@_5, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_directive(RestF, 0, 0, F, F@_1, F@_2, NewFValue, F@_4, F@_5, TrUserData). + +d_field_directive_timeout(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_directive_timeout(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +d_field_directive_timeout(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, _, F@_5, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_directive(RestF, 0, 0, F, F@_1, F@_2, F@_3, NewFValue, F@_5, TrUserData). + +d_field_directive_directive(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> d_field_directive_directive(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +d_field_directive_directive(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + dfp_read_field_def_directive(RestF, 0, 0, F, F@_1, F@_2, F@_3, F@_4, NewFValue, TrUserData). + +skip_varint_directive(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> skip_varint_directive(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +skip_varint_directive(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dfp_read_field_def_directive(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). + +skip_length_delimited_directive(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) when N < 57 -> skip_length_delimited_directive(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData); +skip_length_delimited_directive(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + dfp_read_field_def_directive(Rest2, 0, 0, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). + +skip_group_directive(Bin, _, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_directive(Rest, 0, Z2, FNum, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). + +skip_32_directive(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dfp_read_field_def_directive(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). + +skip_64_directive(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData) -> dfp_read_field_def_directive(Rest, Z1, Z2, F, F@_1, F@_2, F@_3, F@_4, F@_5, TrUserData). + +'decode_msg_map'(Bin, TrUserData) -> 'dfp_read_field_def_map'(Bin, 0, 0, 0, id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData). + +'dfp_read_field_def_map'(<<10, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_map_key'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_map'(<<18, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'd_field_map_value'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'dfp_read_field_def_map'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'map'{key = F@_1, value = F@_2}; +'dfp_read_field_def_map'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dg_read_field_def_map'(Other, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'dg_read_field_def_map'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 32 - 7 -> 'dg_read_field_def_map'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'dg_read_field_def_map'(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, F@_2, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 10 -> 'd_field_map_key'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + 18 -> 'd_field_map_value'(Rest, 0, 0, 0, F@_1, F@_2, TrUserData); + _ -> + case Key band 7 of + 0 -> 'skip_varint_map'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 1 -> 'skip_64_map'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 2 -> 'skip_length_delimited_map'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 3 -> 'skip_group_map'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData); + 5 -> 'skip_32_map'(Rest, 0, 0, Key bsr 3, F@_1, F@_2, TrUserData) + end + end; +'dg_read_field_def_map'(<<>>, 0, 0, _, F@_1, F@_2, _) -> #'map'{key = F@_1, value = F@_2}. + +'d_field_map_key'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_map_key'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_map_key'(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, F@_2, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + 'dfp_read_field_def_map'(RestF, 0, 0, F, NewFValue, F@_2, TrUserData). + +'d_field_map_value'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'd_field_map_value'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'d_field_map_value'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, _, TrUserData) -> + {NewFValue, RestF} = begin Len = X bsl N + Acc, <> = Rest, Bytes2 = binary:copy(Bytes), {id(Bytes2, TrUserData), Rest2} end, + 'dfp_read_field_def_map'(RestF, 0, 0, F, F@_1, NewFValue, TrUserData). + +'skip_varint_map'(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'skip_varint_map'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData); +'skip_varint_map'(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_map'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_length_delimited_map'(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) when N < 57 -> 'skip_length_delimited_map'(Rest, N + 7, X bsl N + Acc, F, F@_1, F@_2, TrUserData); +'skip_length_delimited_map'(<<0:1, X:7, Rest/binary>>, N, Acc, F, F@_1, F@_2, TrUserData) -> + Length = X bsl N + Acc, + <<_:Length/binary, Rest2/binary>> = Rest, + 'dfp_read_field_def_map'(Rest2, 0, 0, F, F@_1, F@_2, TrUserData). + +'skip_group_map'(Bin, _, Z2, FNum, F@_1, F@_2, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + 'dfp_read_field_def_map'(Rest, 0, Z2, FNum, F@_1, F@_2, TrUserData). + +'skip_32_map'(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_map'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +'skip_64_map'(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> 'dfp_read_field_def_map'(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). + +read_group(Bin, FieldNum) -> + {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum), + <> = Bin, + {Group, Rest}. + +%% Like skipping over fields, but record the total length, +%% Each field is <(FieldNum bsl 3) bor FieldType> ++ +%% Record the length because varints may be non-optimally encoded. +%% +%% Groups can be nested, but assume the same FieldNum cannot be nested +%% because group field numbers are shared with the rest of the fields +%% numbers. Thus we can search just for an group-end with the same +%% field number. +%% +%% (The only time the same group field number could occur would +%% be in a nested sub message, but then it would be inside a +%% length-delimited entry, which we skip-read by length.) +read_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum) + when N < (32-7) -> + read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum); +read_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, + FieldNum) -> + Key = X bsl N + Acc, + TagLen1 = TagLen + 1, + case {Key bsr 3, Key band 7} of + {FieldNum, 4} -> % 4 = group_end + {NumBytes, TagLen1}; + {_, 0} -> % 0 = varint + read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum); + {_, 1} -> % 1 = bits64 + <<_:64, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum); + {_, 2} -> % 2 = length_delimited + read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum); + {_, 3} -> % 3 = group_start + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 4} -> % 4 = group_end + read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum); + {_, 5} -> % 5 = bits32 + <<_:32, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum) + end. + +read_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_vi(Tl, N+7, NumBytes+1, FieldNum); +read_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) -> + read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum). + +read_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) + when N < (64-7) -> + read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum); +read_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) -> + Len = X bsl N + Acc, + NumBytes1 = NumBytes + 1, + <<_:Len/binary, Tl2/binary>> = Tl, + read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum). + +merge_msgs(Prev, New) when element(1, Prev) =:= element(1, New) -> merge_msgs(Prev, New, element(1, Prev), []). + +merge_msgs(Prev, New, MsgName) when is_atom(MsgName) -> merge_msgs(Prev, New, MsgName, []); +merge_msgs(Prev, New, Opts) when element(1, Prev) =:= element(1, New), is_list(Opts) -> merge_msgs(Prev, New, element(1, Prev), Opts). + +merge_msgs(Prev, New, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + auth_request -> merge_msg_auth_request(Prev, New, TrUserData); + auth_reply -> merge_msg_auth_reply(Prev, New, TrUserData); + session_request -> merge_msg_session_request(Prev, New, TrUserData); + session_reply -> merge_msg_session_reply(Prev, New, TrUserData); + data -> merge_msg_data(Prev, New, TrUserData); + ping -> merge_msg_ping(Prev, New, TrUserData); + service_inform -> merge_msg_service_inform(Prev, New, TrUserData); + feedback_step -> merge_msg_feedback_step(Prev, New, TrUserData); + feedback_result -> merge_msg_feedback_result(Prev, New, TrUserData); + event -> merge_msg_event(Prev, New, TrUserData); + ai_event -> merge_msg_ai_event(Prev, New, TrUserData); + directive -> merge_msg_directive(Prev, New, TrUserData) + end. + +-compile({nowarn_unused_function,merge_msg_auth_request/3}). +merge_msg_auth_request(#auth_request{uuid = PFuuid, username = PFusername, password = PFpassword, salt = PFsalt, token = PFtoken, timestamp = PFtimestamp}, + #auth_request{uuid = NFuuid, username = NFusername, password = NFpassword, salt = NFsalt, token = NFtoken, timestamp = NFtimestamp}, _) -> + #auth_request{uuid = + if NFuuid =:= undefined -> PFuuid; + true -> NFuuid + end, + username = + if NFusername =:= undefined -> PFusername; + true -> NFusername + end, + password = + if NFpassword =:= undefined -> PFpassword; + true -> NFpassword + end, + salt = + if NFsalt =:= undefined -> PFsalt; + true -> NFsalt + end, + token = + if NFtoken =:= undefined -> PFtoken; + true -> NFtoken + end, + timestamp = + if NFtimestamp =:= undefined -> PFtimestamp; + true -> NFtimestamp + end}. + +-compile({nowarn_unused_function,merge_msg_auth_reply/3}). +merge_msg_auth_reply(#auth_reply{code = PFcode, message = PFmessage}, #auth_reply{code = NFcode, message = NFmessage}, _) -> + #auth_reply{code = + if NFcode =:= undefined -> PFcode; + true -> NFcode + end, + message = + if NFmessage =:= undefined -> PFmessage; + true -> NFmessage + end}. + +-compile({nowarn_unused_function,merge_msg_session_request/3}). +merge_msg_session_request(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,merge_msg_session_reply/3}). +merge_msg_session_reply(#session_reply{a = PFa}, #session_reply{a = NFa}, _) -> + #session_reply{a = + if NFa =:= undefined -> PFa; + true -> NFa + end}. + +-compile({nowarn_unused_function,merge_msg_data/3}). +merge_msg_data(#data{device_uuid = PFdevice_uuid, service_name = PFservice_name, at = PFat, tags = PFtags, fields = PFfields}, #data{device_uuid = NFdevice_uuid, service_name = NFservice_name, at = NFat, tags = NFtags, fields = NFfields}, + TrUserData) -> + #data{device_uuid = + if NFdevice_uuid =:= undefined -> PFdevice_uuid; + true -> NFdevice_uuid + end, + service_name = + if NFservice_name =:= undefined -> PFservice_name; + true -> NFservice_name + end, + at = + if NFat =:= undefined -> PFat; + true -> NFat + end, + tags = + if PFtags /= undefined, NFtags /= undefined -> 'tr_merge_data.tags'(PFtags, NFtags, TrUserData); + PFtags == undefined -> NFtags; + NFtags == undefined -> PFtags + end, + fields = + if PFfields /= undefined, NFfields /= undefined -> 'erlang_++'(PFfields, NFfields, TrUserData); + PFfields == undefined -> NFfields; + NFfields == undefined -> PFfields + end}. + +-compile({nowarn_unused_function,merge_msg_ping/3}). +merge_msg_ping(#ping{adcode = PFadcode, boot_time = PFboot_time, province = PFprovince, city = PFcity, efka_version = PFefka_version, kernel_arch = PFkernel_arch, ips = PFips, cpu_core = PFcpu_core, cpu_load = PFcpu_load, + cpu_temperature = PFcpu_temperature, disk = PFdisk, memory = PFmemory, interfaces = PFinterfaces}, + #ping{adcode = NFadcode, boot_time = NFboot_time, province = NFprovince, city = NFcity, efka_version = NFefka_version, kernel_arch = NFkernel_arch, ips = NFips, cpu_core = NFcpu_core, cpu_load = NFcpu_load, cpu_temperature = NFcpu_temperature, + disk = NFdisk, memory = NFmemory, interfaces = NFinterfaces}, + TrUserData) -> + #ping{adcode = + if NFadcode =:= undefined -> PFadcode; + true -> NFadcode + end, + boot_time = + if NFboot_time =:= undefined -> PFboot_time; + true -> NFboot_time + end, + province = + if NFprovince =:= undefined -> PFprovince; + true -> NFprovince + end, + city = + if NFcity =:= undefined -> PFcity; + true -> NFcity + end, + efka_version = + if NFefka_version =:= undefined -> PFefka_version; + true -> NFefka_version + end, + kernel_arch = + if NFkernel_arch =:= undefined -> PFkernel_arch; + true -> NFkernel_arch + end, + ips = + if PFips /= undefined, NFips /= undefined -> 'erlang_++'(PFips, NFips, TrUserData); + PFips == undefined -> NFips; + NFips == undefined -> PFips + end, + cpu_core = + if NFcpu_core =:= undefined -> PFcpu_core; + true -> NFcpu_core + end, + cpu_load = + if NFcpu_load =:= undefined -> PFcpu_load; + true -> NFcpu_load + end, + cpu_temperature = + if NFcpu_temperature =:= undefined -> PFcpu_temperature; + true -> NFcpu_temperature + end, + disk = + if PFdisk /= undefined, NFdisk /= undefined -> 'erlang_++'(PFdisk, NFdisk, TrUserData); + PFdisk == undefined -> NFdisk; + NFdisk == undefined -> PFdisk + end, + memory = + if PFmemory /= undefined, NFmemory /= undefined -> 'erlang_++'(PFmemory, NFmemory, TrUserData); + PFmemory == undefined -> NFmemory; + NFmemory == undefined -> PFmemory + end, + interfaces = + if PFinterfaces /= undefined, NFinterfaces /= undefined -> 'erlang_++'(PFinterfaces, NFinterfaces, TrUserData); + PFinterfaces == undefined -> NFinterfaces; + NFinterfaces == undefined -> PFinterfaces + end}. + +-compile({nowarn_unused_function,merge_msg_service_inform/3}). +merge_msg_service_inform(#service_inform{name = PFname, props = PFprops, version = PFversion, version_copy = PFversion_copy, status = PFstatus, at = PFat}, + #service_inform{name = NFname, props = NFprops, version = NFversion, version_copy = NFversion_copy, status = NFstatus, at = NFat}, _) -> + #service_inform{name = + if NFname =:= undefined -> PFname; + true -> NFname + end, + props = + if NFprops =:= undefined -> PFprops; + true -> NFprops + end, + version = + if NFversion =:= undefined -> PFversion; + true -> NFversion + end, + version_copy = + if NFversion_copy =:= undefined -> PFversion_copy; + true -> NFversion_copy + end, + status = + if NFstatus =:= undefined -> PFstatus; + true -> NFstatus + end, + at = + if NFat =:= undefined -> PFat; + true -> NFat + end}. + +-compile({nowarn_unused_function,merge_msg_feedback_step/3}). +merge_msg_feedback_step(#feedback_step{task_id = PFtask_id, code = PFcode}, #feedback_step{task_id = NFtask_id, code = NFcode}, _) -> + #feedback_step{task_id = + if NFtask_id =:= undefined -> PFtask_id; + true -> NFtask_id + end, + code = + if NFcode =:= undefined -> PFcode; + true -> NFcode + end}. + +-compile({nowarn_unused_function,merge_msg_feedback_result/3}). +merge_msg_feedback_result(#feedback_result{task_id = PFtask_id, task_type = PFtask_type, time = PFtime, code = PFcode, reason = PFreason, error = PFerror}, + #feedback_result{task_id = NFtask_id, task_type = NFtask_type, time = NFtime, code = NFcode, reason = NFreason, error = NFerror}, _) -> + #feedback_result{task_id = + if NFtask_id =:= undefined -> PFtask_id; + true -> NFtask_id + end, + task_type = + if NFtask_type =:= undefined -> PFtask_type; + true -> NFtask_type + end, + time = + if NFtime =:= undefined -> PFtime; + true -> NFtime + end, + code = + if NFcode =:= undefined -> PFcode; + true -> NFcode + end, + reason = + if NFreason =:= undefined -> PFreason; + true -> NFreason + end, + error = + if NFerror =:= undefined -> PFerror; + true -> NFerror + end}. + +-compile({nowarn_unused_function,merge_msg_event/3}). +merge_msg_event(#event{event_type = PFevent_type, params = PFparams}, #event{event_type = NFevent_type, params = NFparams}, _) -> + #event{event_type = + if NFevent_type =:= undefined -> PFevent_type; + true -> NFevent_type + end, + params = + if NFparams =:= undefined -> PFparams; + true -> NFparams + end}. + +-compile({nowarn_unused_function,merge_msg_ai_event/3}). +merge_msg_ai_event(#ai_event{event_type = PFevent_type, params = PFparams}, #ai_event{event_type = NFevent_type, params = NFparams}, _) -> + #ai_event{event_type = + if NFevent_type =:= undefined -> PFevent_type; + true -> NFevent_type + end, + params = + if NFparams =:= undefined -> PFparams; + true -> NFparams + end}. + +-compile({nowarn_unused_function,merge_msg_directive/3}). +merge_msg_directive(#directive{device_uuid = PFdevice_uuid, version = PFversion, directive_type = PFdirective_type, timeout = PFtimeout, directive = PFdirective}, + #directive{device_uuid = NFdevice_uuid, version = NFversion, directive_type = NFdirective_type, timeout = NFtimeout, directive = NFdirective}, _) -> + #directive{device_uuid = + if NFdevice_uuid =:= undefined -> PFdevice_uuid; + true -> NFdevice_uuid + end, + version = + if NFversion =:= undefined -> PFversion; + true -> NFversion + end, + directive_type = + if NFdirective_type =:= undefined -> PFdirective_type; + true -> NFdirective_type + end, + timeout = + if NFtimeout =:= undefined -> PFtimeout; + true -> NFtimeout + end, + directive = + if NFdirective =:= undefined -> PFdirective; + true -> NFdirective + end}. + + +verify_msg(Msg) when tuple_size(Msg) >= 1 -> verify_msg(Msg, element(1, Msg), []); +verify_msg(X) -> mk_type_error(not_a_known_message, X, []). + +verify_msg(Msg, MsgName) when is_atom(MsgName) -> verify_msg(Msg, MsgName, []); +verify_msg(Msg, Opts) when tuple_size(Msg) >= 1 -> verify_msg(Msg, element(1, Msg), Opts); +verify_msg(X, _Opts) -> mk_type_error(not_a_known_message, X, []). + +verify_msg(Msg, MsgName, Opts) -> + TrUserData = proplists:get_value(user_data, Opts), + case MsgName of + auth_request -> v_msg_auth_request(Msg, [MsgName], TrUserData); + auth_reply -> v_msg_auth_reply(Msg, [MsgName], TrUserData); + session_request -> v_msg_session_request(Msg, [MsgName], TrUserData); + session_reply -> v_msg_session_reply(Msg, [MsgName], TrUserData); + data -> v_msg_data(Msg, [MsgName], TrUserData); + ping -> v_msg_ping(Msg, [MsgName], TrUserData); + service_inform -> v_msg_service_inform(Msg, [MsgName], TrUserData); + feedback_step -> v_msg_feedback_step(Msg, [MsgName], TrUserData); + feedback_result -> v_msg_feedback_result(Msg, [MsgName], TrUserData); + event -> v_msg_event(Msg, [MsgName], TrUserData); + ai_event -> v_msg_ai_event(Msg, [MsgName], TrUserData); + directive -> v_msg_directive(Msg, [MsgName], TrUserData); + _ -> mk_type_error(not_a_known_message, Msg, []) + end. + + +-compile({nowarn_unused_function,v_msg_auth_request/3}). +-dialyzer({nowarn_function,v_msg_auth_request/3}). +v_msg_auth_request(#auth_request{uuid = F1, username = F2, password = F3, salt = F4, token = F5, timestamp = F6}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_string(F1, [uuid | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_string(F2, [username | Path], TrUserData) + end, + if F3 == undefined -> ok; + true -> v_type_string(F3, [password | Path], TrUserData) + end, + if F4 == undefined -> ok; + true -> v_type_string(F4, [salt | Path], TrUserData) + end, + if F5 == undefined -> ok; + true -> v_type_string(F5, [token | Path], TrUserData) + end, + if F6 == undefined -> ok; + true -> v_type_uint32(F6, [timestamp | Path], TrUserData) + end, + ok; +v_msg_auth_request(X, Path, _TrUserData) -> mk_type_error({expected_msg, auth_request}, X, Path). + +-compile({nowarn_unused_function,v_msg_auth_reply/3}). +-dialyzer({nowarn_function,v_msg_auth_reply/3}). +v_msg_auth_reply(#auth_reply{code = F1, message = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [code | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_string(F2, [message | Path], TrUserData) + end, + ok; +v_msg_auth_reply(X, Path, _TrUserData) -> mk_type_error({expected_msg, auth_reply}, X, Path). + +-compile({nowarn_unused_function,v_msg_session_request/3}). +-dialyzer({nowarn_function,v_msg_session_request/3}). +v_msg_session_request(#session_request{}, _Path, _) -> ok; +v_msg_session_request(X, Path, _TrUserData) -> mk_type_error({expected_msg, session_request}, X, Path). + +-compile({nowarn_unused_function,v_msg_session_reply/3}). +-dialyzer({nowarn_function,v_msg_session_reply/3}). +v_msg_session_reply(#session_reply{a = F1}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_bool(F1, [a | Path], TrUserData) + end, + ok; +v_msg_session_reply(X, Path, _TrUserData) -> mk_type_error({expected_msg, session_reply}, X, Path). + +-compile({nowarn_unused_function,v_msg_data/3}). +-dialyzer({nowarn_function,v_msg_data/3}). +v_msg_data(#data{device_uuid = F1, service_name = F2, at = F3, tags = F4, fields = F5}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_string(F1, [device_uuid | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_string(F2, [service_name | Path], TrUserData) + end, + if F3 == undefined -> ok; + true -> v_type_int32(F3, [at | Path], TrUserData) + end, + 'v_map'(F4, [tags | Path], TrUserData), + if is_list(F5) -> + _ = [v_type_bytes(Elem, [fields | Path], TrUserData) || Elem <- F5], + ok; + true -> mk_type_error({invalid_list_of, bytes}, F5, [fields | Path]) + end, + ok; +v_msg_data(X, Path, _TrUserData) -> mk_type_error({expected_msg, data}, X, Path). + +-compile({nowarn_unused_function,v_msg_ping/3}). +-dialyzer({nowarn_function,v_msg_ping/3}). +v_msg_ping(#ping{adcode = F1, boot_time = F2, province = F3, city = F4, efka_version = F5, kernel_arch = F6, ips = F7, cpu_core = F8, cpu_load = F9, cpu_temperature = F10, disk = F11, memory = F12, interfaces = F13}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_string(F1, [adcode | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_uint32(F2, [boot_time | Path], TrUserData) + end, + if F3 == undefined -> ok; + true -> v_type_string(F3, [province | Path], TrUserData) + end, + if F4 == undefined -> ok; + true -> v_type_string(F4, [city | Path], TrUserData) + end, + if F5 == undefined -> ok; + true -> v_type_string(F5, [efka_version | Path], TrUserData) + end, + if F6 == undefined -> ok; + true -> v_type_string(F6, [kernel_arch | Path], TrUserData) + end, + if is_list(F7) -> + _ = [v_type_string(Elem, [ips | Path], TrUserData) || Elem <- F7], + ok; + true -> mk_type_error({invalid_list_of, string}, F7, [ips | Path]) + end, + if F8 == undefined -> ok; + true -> v_type_uint32(F8, [cpu_core | Path], TrUserData) + end, + if F9 == undefined -> ok; + true -> v_type_uint32(F9, [cpu_load | Path], TrUserData) + end, + if F10 == undefined -> ok; + true -> v_type_float(F10, [cpu_temperature | Path], TrUserData) + end, + if is_list(F11) -> + _ = [v_type_int32(Elem, [disk | Path], TrUserData) || Elem <- F11], + ok; + true -> mk_type_error({invalid_list_of, int32}, F11, [disk | Path]) + end, + if is_list(F12) -> + _ = [v_type_int32(Elem, [memory | Path], TrUserData) || Elem <- F12], + ok; + true -> mk_type_error({invalid_list_of, int32}, F12, [memory | Path]) + end, + if is_list(F13) -> + _ = [v_type_bytes(Elem, [interfaces | Path], TrUserData) || Elem <- F13], + ok; + true -> mk_type_error({invalid_list_of, bytes}, F13, [interfaces | Path]) + end, + ok; +v_msg_ping(X, Path, _TrUserData) -> mk_type_error({expected_msg, ping}, X, Path). + +-compile({nowarn_unused_function,v_msg_service_inform/3}). +-dialyzer({nowarn_function,v_msg_service_inform/3}). +v_msg_service_inform(#service_inform{name = F1, props = F2, version = F3, version_copy = F4, status = F5, at = F6}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_string(F1, [name | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_string(F2, [props | Path], TrUserData) + end, + if F3 == undefined -> ok; + true -> v_type_string(F3, [version | Path], TrUserData) + end, + if F4 == undefined -> ok; + true -> v_type_string(F4, [version_copy | Path], TrUserData) + end, + if F5 == undefined -> ok; + true -> v_type_uint32(F5, [status | Path], TrUserData) + end, + if F6 == undefined -> ok; + true -> v_type_uint32(F6, [at | Path], TrUserData) + end, + ok; +v_msg_service_inform(X, Path, _TrUserData) -> mk_type_error({expected_msg, service_inform}, X, Path). + +-compile({nowarn_unused_function,v_msg_feedback_step/3}). +-dialyzer({nowarn_function,v_msg_feedback_step/3}). +v_msg_feedback_step(#feedback_step{task_id = F1, code = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_string(F1, [task_id | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_uint32(F2, [code | Path], TrUserData) + end, + ok; +v_msg_feedback_step(X, Path, _TrUserData) -> mk_type_error({expected_msg, feedback_step}, X, Path). + +-compile({nowarn_unused_function,v_msg_feedback_result/3}). +-dialyzer({nowarn_function,v_msg_feedback_result/3}). +v_msg_feedback_result(#feedback_result{task_id = F1, task_type = F2, time = F3, code = F4, reason = F5, error = F6}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_string(F1, [task_id | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_string(F2, [task_type | Path], TrUserData) + end, + if F3 == undefined -> ok; + true -> v_type_uint32(F3, [time | Path], TrUserData) + end, + if F4 == undefined -> ok; + true -> v_type_uint32(F4, [code | Path], TrUserData) + end, + if F5 == undefined -> ok; + true -> v_type_string(F5, [reason | Path], TrUserData) + end, + if F6 == undefined -> ok; + true -> v_type_string(F6, [error | Path], TrUserData) + end, + ok; +v_msg_feedback_result(X, Path, _TrUserData) -> mk_type_error({expected_msg, feedback_result}, X, Path). + +-compile({nowarn_unused_function,v_msg_event/3}). +-dialyzer({nowarn_function,v_msg_event/3}). +v_msg_event(#event{event_type = F1, params = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [event_type | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_bytes(F2, [params | Path], TrUserData) + end, + ok; +v_msg_event(X, Path, _TrUserData) -> mk_type_error({expected_msg, event}, X, Path). + +-compile({nowarn_unused_function,v_msg_ai_event/3}). +-dialyzer({nowarn_function,v_msg_ai_event/3}). +v_msg_ai_event(#ai_event{event_type = F1, params = F2}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [event_type | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_bytes(F2, [params | Path], TrUserData) + end, + ok; +v_msg_ai_event(X, Path, _TrUserData) -> mk_type_error({expected_msg, ai_event}, X, Path). + +-compile({nowarn_unused_function,v_msg_directive/3}). +-dialyzer({nowarn_function,v_msg_directive/3}). +v_msg_directive(#directive{device_uuid = F1, version = F2, directive_type = F3, timeout = F4, directive = F5}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_string(F1, [device_uuid | Path], TrUserData) + end, + if F2 == undefined -> ok; + true -> v_type_string(F2, [version | Path], TrUserData) + end, + if F3 == undefined -> ok; + true -> v_type_uint32(F3, [directive_type | Path], TrUserData) + end, + if F4 == undefined -> ok; + true -> v_type_uint32(F4, [timeout | Path], TrUserData) + end, + if F5 == undefined -> ok; + true -> v_type_bytes(F5, [directive | Path], TrUserData) + end, + ok; +v_msg_directive(X, Path, _TrUserData) -> mk_type_error({expected_msg, directive}, X, Path). + +-compile({nowarn_unused_function,v_type_int32/3}). +-dialyzer({nowarn_function,v_type_int32/3}). +v_type_int32(N, _Path, _TrUserData) when is_integer(N), -2147483648 =< N, N =< 2147483647 -> ok; +v_type_int32(N, Path, _TrUserData) when is_integer(N) -> mk_type_error({value_out_of_range, int32, signed, 32}, N, Path); +v_type_int32(X, Path, _TrUserData) -> mk_type_error({bad_integer, int32, signed, 32}, X, Path). + +-compile({nowarn_unused_function,v_type_uint32/3}). +-dialyzer({nowarn_function,v_type_uint32/3}). +v_type_uint32(N, _Path, _TrUserData) when is_integer(N), 0 =< N, N =< 4294967295 -> ok; +v_type_uint32(N, Path, _TrUserData) when is_integer(N) -> mk_type_error({value_out_of_range, uint32, unsigned, 32}, N, Path); +v_type_uint32(X, Path, _TrUserData) -> mk_type_error({bad_integer, uint32, unsigned, 32}, X, Path). + +-compile({nowarn_unused_function,v_type_bool/3}). +-dialyzer({nowarn_function,v_type_bool/3}). +v_type_bool(false, _Path, _TrUserData) -> ok; +v_type_bool(true, _Path, _TrUserData) -> ok; +v_type_bool(0, _Path, _TrUserData) -> ok; +v_type_bool(1, _Path, _TrUserData) -> ok; +v_type_bool(X, Path, _TrUserData) -> mk_type_error(bad_boolean_value, X, Path). + +-compile({nowarn_unused_function,v_type_float/3}). +-dialyzer({nowarn_function,v_type_float/3}). +v_type_float(N, _Path, _TrUserData) when is_float(N) -> ok; +v_type_float(N, _Path, _TrUserData) when is_integer(N) -> ok; +v_type_float(infinity, _Path, _TrUserData) -> ok; +v_type_float('-infinity', _Path, _TrUserData) -> ok; +v_type_float(nan, _Path, _TrUserData) -> ok; +v_type_float(X, Path, _TrUserData) -> mk_type_error(bad_float_value, X, Path). + +-compile({nowarn_unused_function,v_type_string/3}). +-dialyzer({nowarn_function,v_type_string/3}). +v_type_string(S, Path, _TrUserData) when is_list(S); is_binary(S) -> + try unicode:characters_to_binary(S) of + B when is_binary(B) -> ok; + {error, _, _} -> mk_type_error(bad_unicode_string, S, Path) + catch + error:badarg -> mk_type_error(bad_unicode_string, S, Path) + end; +v_type_string(X, Path, _TrUserData) -> mk_type_error(bad_unicode_string, X, Path). + +-compile({nowarn_unused_function,v_type_bytes/3}). +-dialyzer({nowarn_function,v_type_bytes/3}). +v_type_bytes(B, _Path, _TrUserData) when is_binary(B) -> ok; +v_type_bytes(B, _Path, _TrUserData) when is_list(B) -> ok; +v_type_bytes(X, Path, _TrUserData) -> mk_type_error(bad_binary_value, X, Path). + +-compile({nowarn_unused_function,'v_map'/3}). +-dialyzer({nowarn_function,'v_map'/3}). +'v_map'(KVs, Path, TrUserData) when is_list(KVs) -> + [case X of + {Key, Value} -> + v_type_string(Key, [key | Path], TrUserData), + v_type_string(Value, [value | Path], TrUserData); + _ -> mk_type_error(invalid_key_value_tuple, X, Path) + end + || X <- KVs], + ok; +'v_map'(X, Path, _TrUserData) -> mk_type_error(invalid_list_of_key_value_tuples, X, Path). + +-compile({nowarn_unused_function,mk_type_error/3}). +-spec mk_type_error(_, _, list()) -> no_return(). +mk_type_error(Error, ValueSeen, Path) -> + Path2 = prettify_path(Path), + erlang:error({gpb_type_error, {Error, [{value, ValueSeen}, {path, Path2}]}}). + + +-compile({nowarn_unused_function,prettify_path/1}). +-dialyzer({nowarn_function,prettify_path/1}). +prettify_path([]) -> top_level; +prettify_path(PathR) -> lists:append(lists:join(".", lists:map(fun atom_to_list/1, lists:reverse(PathR)))). + + +-compile({nowarn_unused_function,id/2}). +-compile({inline,id/2}). +id(X, _TrUserData) -> X. + +-compile({nowarn_unused_function,v_ok/3}). +-compile({inline,v_ok/3}). +v_ok(_Value, _Path, _TrUserData) -> ok. + +-compile({nowarn_unused_function,m_overwrite/3}). +-compile({inline,m_overwrite/3}). +m_overwrite(_Prev, New, _TrUserData) -> New. + +-compile({nowarn_unused_function,cons/3}). +-compile({inline,cons/3}). +cons(Elem, Acc, _TrUserData) -> [Elem | Acc]. + +-compile({nowarn_unused_function,lists_reverse/2}). +-compile({inline,lists_reverse/2}). +'lists_reverse'(L, _TrUserData) -> lists:reverse(L). +-compile({nowarn_unused_function,'erlang_++'/3}). +-compile({inline,'erlang_++'/3}). +'erlang_++'(A, B, _TrUserData) -> A ++ B. +-compile({inline,'tr_decode_init_default_data.tags'/2}). +'tr_decode_init_default_data.tags'(_, _) -> mt_empty_map_r(). + +-compile({inline,'tr_merge_data.tags'/3}). +'tr_merge_data.tags'(X1, X2, _) -> mt_merge_maptuples_r(X1, X2). + +-compile({inline,'tr_decode_repeated_finalize_data.tags'/2}). +'tr_decode_repeated_finalize_data.tags'(L, _) -> mt_finalize_items_r(L). + +-compile({inline,'tr_decode_repeated_add_elem_data.tags'/3}). +'tr_decode_repeated_add_elem_data.tags'(Elem, L, _) -> mt_add_item_r(Elem, L). + +-compile({inline,'tr_encode_data.tags[x]'/2}). +'tr_encode_data.tags[x]'(X, _) -> mt_maptuple_to_pseudomsg_r(X, 'map'). + +-compile({inline,mt_maptuple_to_pseudomsg_r/2}). +mt_maptuple_to_pseudomsg_r({K, V}, RName) -> {RName, K, V}. + + +-compile({inline,mt_empty_map_r/0}). +mt_empty_map_r() -> []. + +-compile({inline,mt_add_item_r/2}). +mt_add_item_r({_RName, K, V}, Acc) -> [{K, V} | Acc]. + + +-compile({inline,mt_finalize_items_r/1}). +mt_finalize_items_r(Acc) -> mt_finalize_items_r_aux(lists:reverse(Acc), dict:new()). + +mt_finalize_items_r_aux([{K, V} | Tl], D) -> mt_finalize_items_r_aux(Tl, dict:store(K, V, D)); +mt_finalize_items_r_aux([], D) -> dict:to_list(D). + + +-compile({inline,mt_merge_maptuples_r/2}). +mt_merge_maptuples_r(L1, L2) -> dict:to_list(dict:merge(fun (_Key, _V1, V2) -> V2 end, dict:from_list(L1), dict:from_list(L2))). + + + + +get_msg_defs() -> + [{{msg, auth_request}, + [#field{name = uuid, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = username, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, + #field{name = password, fnum = 3, rnum = 4, type = string, occurrence = optional, opts = []}, + #field{name = salt, fnum = 4, rnum = 5, type = string, occurrence = optional, opts = []}, + #field{name = token, fnum = 5, rnum = 6, type = string, occurrence = optional, opts = []}, + #field{name = timestamp, fnum = 6, rnum = 7, type = uint32, occurrence = optional, opts = []}]}, + {{msg, auth_reply}, [#field{name = code, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, #field{name = message, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}]}, + {{msg, session_request}, []}, + {{msg, session_reply}, [#field{name = a, fnum = 1, rnum = 2, type = bool, occurrence = optional, opts = []}]}, + {{msg, data}, + [#field{name = device_uuid, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = service_name, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, + #field{name = at, fnum = 3, rnum = 4, type = int32, occurrence = optional, opts = []}, + #field{name = tags, fnum = 4, rnum = 5, type = {map, string, string}, occurrence = repeated, opts = []}, + #field{name = fields, fnum = 5, rnum = 6, type = bytes, occurrence = repeated, opts = []}]}, + {{msg, ping}, + [#field{name = adcode, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = boot_time, fnum = 2, rnum = 3, type = uint32, occurrence = optional, opts = []}, + #field{name = province, fnum = 3, rnum = 4, type = string, occurrence = optional, opts = []}, + #field{name = city, fnum = 4, rnum = 5, type = string, occurrence = optional, opts = []}, + #field{name = efka_version, fnum = 5, rnum = 6, type = string, occurrence = optional, opts = []}, + #field{name = kernel_arch, fnum = 6, rnum = 7, type = string, occurrence = optional, opts = []}, + #field{name = ips, fnum = 7, rnum = 8, type = string, occurrence = repeated, opts = []}, + #field{name = cpu_core, fnum = 8, rnum = 9, type = uint32, occurrence = optional, opts = []}, + #field{name = cpu_load, fnum = 9, rnum = 10, type = uint32, occurrence = optional, opts = []}, + #field{name = cpu_temperature, fnum = 10, rnum = 11, type = float, occurrence = optional, opts = []}, + #field{name = disk, fnum = 11, rnum = 12, type = int32, occurrence = repeated, opts = [packed]}, + #field{name = memory, fnum = 12, rnum = 13, type = int32, occurrence = repeated, opts = [packed]}, + #field{name = interfaces, fnum = 13, rnum = 14, type = bytes, occurrence = repeated, opts = []}]}, + {{msg, service_inform}, + [#field{name = name, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = props, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, + #field{name = version, fnum = 3, rnum = 4, type = string, occurrence = optional, opts = []}, + #field{name = version_copy, fnum = 4, rnum = 5, type = string, occurrence = optional, opts = []}, + #field{name = status, fnum = 5, rnum = 6, type = uint32, occurrence = optional, opts = []}, + #field{name = at, fnum = 6, rnum = 7, type = uint32, occurrence = optional, opts = []}]}, + {{msg, feedback_step}, [#field{name = task_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = code, fnum = 2, rnum = 3, type = uint32, occurrence = optional, opts = []}]}, + {{msg, feedback_result}, + [#field{name = task_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = task_type, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, + #field{name = time, fnum = 3, rnum = 4, type = uint32, occurrence = optional, opts = []}, + #field{name = code, fnum = 4, rnum = 5, type = uint32, occurrence = optional, opts = []}, + #field{name = reason, fnum = 5, rnum = 6, type = string, occurrence = optional, opts = []}, + #field{name = error, fnum = 6, rnum = 7, type = string, occurrence = optional, opts = []}]}, + {{msg, event}, [#field{name = event_type, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, #field{name = params, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]}, + {{msg, ai_event}, [#field{name = event_type, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, #field{name = params, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]}, + {{msg, directive}, + [#field{name = device_uuid, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = version, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, + #field{name = directive_type, fnum = 3, rnum = 4, type = uint32, occurrence = optional, opts = []}, + #field{name = timeout, fnum = 4, rnum = 5, type = uint32, occurrence = optional, opts = []}, + #field{name = directive, fnum = 5, rnum = 6, type = bytes, occurrence = optional, opts = []}]}]. + + +get_msg_names() -> [auth_request, auth_reply, session_request, session_reply, data, ping, service_inform, feedback_step, feedback_result, event, ai_event, directive]. + + +get_group_names() -> []. + + +get_msg_or_group_names() -> [auth_request, auth_reply, session_request, session_reply, data, ping, service_inform, feedback_step, feedback_result, event, ai_event, directive]. + + +get_enum_names() -> []. + + +fetch_msg_def(MsgName) -> + case find_msg_def(MsgName) of + Fs when is_list(Fs) -> Fs; + error -> erlang:error({no_such_msg, MsgName}) + end. + + +-spec fetch_enum_def(_) -> no_return(). +fetch_enum_def(EnumName) -> erlang:error({no_such_enum, EnumName}). + + +find_msg_def(auth_request) -> + [#field{name = uuid, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = username, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, + #field{name = password, fnum = 3, rnum = 4, type = string, occurrence = optional, opts = []}, + #field{name = salt, fnum = 4, rnum = 5, type = string, occurrence = optional, opts = []}, + #field{name = token, fnum = 5, rnum = 6, type = string, occurrence = optional, opts = []}, + #field{name = timestamp, fnum = 6, rnum = 7, type = uint32, occurrence = optional, opts = []}]; +find_msg_def(auth_reply) -> [#field{name = code, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, #field{name = message, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}]; +find_msg_def(session_request) -> []; +find_msg_def(session_reply) -> [#field{name = a, fnum = 1, rnum = 2, type = bool, occurrence = optional, opts = []}]; +find_msg_def(data) -> + [#field{name = device_uuid, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = service_name, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, + #field{name = at, fnum = 3, rnum = 4, type = int32, occurrence = optional, opts = []}, + #field{name = tags, fnum = 4, rnum = 5, type = {map, string, string}, occurrence = repeated, opts = []}, + #field{name = fields, fnum = 5, rnum = 6, type = bytes, occurrence = repeated, opts = []}]; +find_msg_def(ping) -> + [#field{name = adcode, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = boot_time, fnum = 2, rnum = 3, type = uint32, occurrence = optional, opts = []}, + #field{name = province, fnum = 3, rnum = 4, type = string, occurrence = optional, opts = []}, + #field{name = city, fnum = 4, rnum = 5, type = string, occurrence = optional, opts = []}, + #field{name = efka_version, fnum = 5, rnum = 6, type = string, occurrence = optional, opts = []}, + #field{name = kernel_arch, fnum = 6, rnum = 7, type = string, occurrence = optional, opts = []}, + #field{name = ips, fnum = 7, rnum = 8, type = string, occurrence = repeated, opts = []}, + #field{name = cpu_core, fnum = 8, rnum = 9, type = uint32, occurrence = optional, opts = []}, + #field{name = cpu_load, fnum = 9, rnum = 10, type = uint32, occurrence = optional, opts = []}, + #field{name = cpu_temperature, fnum = 10, rnum = 11, type = float, occurrence = optional, opts = []}, + #field{name = disk, fnum = 11, rnum = 12, type = int32, occurrence = repeated, opts = [packed]}, + #field{name = memory, fnum = 12, rnum = 13, type = int32, occurrence = repeated, opts = [packed]}, + #field{name = interfaces, fnum = 13, rnum = 14, type = bytes, occurrence = repeated, opts = []}]; +find_msg_def(service_inform) -> + [#field{name = name, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = props, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, + #field{name = version, fnum = 3, rnum = 4, type = string, occurrence = optional, opts = []}, + #field{name = version_copy, fnum = 4, rnum = 5, type = string, occurrence = optional, opts = []}, + #field{name = status, fnum = 5, rnum = 6, type = uint32, occurrence = optional, opts = []}, + #field{name = at, fnum = 6, rnum = 7, type = uint32, occurrence = optional, opts = []}]; +find_msg_def(feedback_step) -> [#field{name = task_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, #field{name = code, fnum = 2, rnum = 3, type = uint32, occurrence = optional, opts = []}]; +find_msg_def(feedback_result) -> + [#field{name = task_id, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = task_type, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, + #field{name = time, fnum = 3, rnum = 4, type = uint32, occurrence = optional, opts = []}, + #field{name = code, fnum = 4, rnum = 5, type = uint32, occurrence = optional, opts = []}, + #field{name = reason, fnum = 5, rnum = 6, type = string, occurrence = optional, opts = []}, + #field{name = error, fnum = 6, rnum = 7, type = string, occurrence = optional, opts = []}]; +find_msg_def(event) -> [#field{name = event_type, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, #field{name = params, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]; +find_msg_def(ai_event) -> [#field{name = event_type, fnum = 1, rnum = 2, type = uint32, occurrence = optional, opts = []}, #field{name = params, fnum = 2, rnum = 3, type = bytes, occurrence = optional, opts = []}]; +find_msg_def(directive) -> + [#field{name = device_uuid, fnum = 1, rnum = 2, type = string, occurrence = optional, opts = []}, + #field{name = version, fnum = 2, rnum = 3, type = string, occurrence = optional, opts = []}, + #field{name = directive_type, fnum = 3, rnum = 4, type = uint32, occurrence = optional, opts = []}, + #field{name = timeout, fnum = 4, rnum = 5, type = uint32, occurrence = optional, opts = []}, + #field{name = directive, fnum = 5, rnum = 6, type = bytes, occurrence = optional, opts = []}]; +find_msg_def(_) -> error. + + +find_enum_def(_) -> error. + + +-spec enum_symbol_by_value(_, _) -> no_return(). +enum_symbol_by_value(E, V) -> erlang:error({no_enum_defs, E, V}). + + +-spec enum_value_by_symbol(_, _) -> no_return(). +enum_value_by_symbol(E, V) -> erlang:error({no_enum_defs, E, V}). + + + +get_service_names() -> []. + + +get_service_def(_) -> error. + + +get_rpc_names(_) -> error. + + +find_rpc_def(_, _) -> error. + + + +-spec fetch_rpc_def(_, _) -> no_return(). +fetch_rpc_def(ServiceName, RpcName) -> erlang:error({no_such_rpc, ServiceName, RpcName}). + + +%% Convert a a fully qualified (ie with package name) service name +%% as a binary to a service name as an atom. +-spec fqbin_to_service_name(_) -> no_return(). +fqbin_to_service_name(X) -> error({gpb_error, {badservice, X}}). + + +%% Convert a service name as an atom to a fully qualified +%% (ie with package name) name as a binary. +-spec service_name_to_fqbin(_) -> no_return(). +service_name_to_fqbin(X) -> error({gpb_error, {badservice, X}}). + + +%% Convert a a fully qualified (ie with package name) service name +%% and an rpc name, both as binaries to a service name and an rpc +%% name, as atoms. +-spec fqbins_to_service_and_rpc_name(_, _) -> no_return(). +fqbins_to_service_and_rpc_name(S, R) -> error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +%% Convert a service name and an rpc name, both as atoms, +%% to a fully qualified (ie with package name) service name and +%% an rpc name as binaries. +-spec service_and_rpc_name_to_fqbins(_, _) -> no_return(). +service_and_rpc_name_to_fqbins(S, R) -> error({gpb_error, {badservice_or_rpc, {S, R}}}). + + +fqbin_to_msg_name(<<"AuthRequest">>) -> auth_request; +fqbin_to_msg_name(<<"AuthReply">>) -> auth_reply; +fqbin_to_msg_name(<<"SessionRequest">>) -> session_request; +fqbin_to_msg_name(<<"SessionReply">>) -> session_reply; +fqbin_to_msg_name(<<"Data">>) -> data; +fqbin_to_msg_name(<<"Ping">>) -> ping; +fqbin_to_msg_name(<<"ServiceInform">>) -> service_inform; +fqbin_to_msg_name(<<"FeedbackStep">>) -> feedback_step; +fqbin_to_msg_name(<<"FeedbackResult">>) -> feedback_result; +fqbin_to_msg_name(<<"Event">>) -> event; +fqbin_to_msg_name(<<"AIEvent">>) -> ai_event; +fqbin_to_msg_name(<<"Directive">>) -> directive; +fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}). + + +msg_name_to_fqbin(auth_request) -> <<"AuthRequest">>; +msg_name_to_fqbin(auth_reply) -> <<"AuthReply">>; +msg_name_to_fqbin(session_request) -> <<"SessionRequest">>; +msg_name_to_fqbin(session_reply) -> <<"SessionReply">>; +msg_name_to_fqbin(data) -> <<"Data">>; +msg_name_to_fqbin(ping) -> <<"Ping">>; +msg_name_to_fqbin(service_inform) -> <<"ServiceInform">>; +msg_name_to_fqbin(feedback_step) -> <<"FeedbackStep">>; +msg_name_to_fqbin(feedback_result) -> <<"FeedbackResult">>; +msg_name_to_fqbin(event) -> <<"Event">>; +msg_name_to_fqbin(ai_event) -> <<"AIEvent">>; +msg_name_to_fqbin(directive) -> <<"Directive">>; +msg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}). + + +-spec fqbin_to_enum_name(_) -> no_return(). +fqbin_to_enum_name(E) -> error({gpb_error, {badenum, E}}). + + +-spec enum_name_to_fqbin(_) -> no_return(). +enum_name_to_fqbin(E) -> error({gpb_error, {badenum, E}}). + + +get_package_name() -> undefined. + + +%% Whether or not the message names +%% are prepended with package name or not. +uses_packages() -> false. + + +source_basename() -> "message_pb.proto". + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned with extension, +%% see get_all_proto_names/0 for a version that returns +%% the basenames sans extension +get_all_source_basenames() -> ["message_pb.proto"]. + + +%% Retrieve all proto file names, also imported ones. +%% The order is top-down. The first element is always the main +%% source file. The files are returned sans .proto extension, +%% to make it easier to use them with the various get_xyz_containment +%% functions. +get_all_proto_names() -> ["message_pb"]. + + +get_msg_containment("message_pb") -> [ai_event, auth_reply, auth_request, data, directive, event, feedback_result, feedback_step, ping, service_inform, session_reply, session_request]; +get_msg_containment(P) -> error({gpb_error, {badproto, P}}). + + +get_pkg_containment("message_pb") -> undefined; +get_pkg_containment(P) -> error({gpb_error, {badproto, P}}). + + +get_service_containment("message_pb") -> []; +get_service_containment(P) -> error({gpb_error, {badproto, P}}). + + +get_rpc_containment("message_pb") -> []; +get_rpc_containment(P) -> error({gpb_error, {badproto, P}}). + + +get_enum_containment("message_pb") -> []; +get_enum_containment(P) -> error({gpb_error, {badproto, P}}). + + +get_proto_by_msg_name_as_fqbin(<<"FeedbackStep">>) -> "message_pb"; +get_proto_by_msg_name_as_fqbin(<<"Data">>) -> "message_pb"; +get_proto_by_msg_name_as_fqbin(<<"SessionRequest">>) -> "message_pb"; +get_proto_by_msg_name_as_fqbin(<<"FeedbackResult">>) -> "message_pb"; +get_proto_by_msg_name_as_fqbin(<<"Event">>) -> "message_pb"; +get_proto_by_msg_name_as_fqbin(<<"AuthRequest">>) -> "message_pb"; +get_proto_by_msg_name_as_fqbin(<<"AIEvent">>) -> "message_pb"; +get_proto_by_msg_name_as_fqbin(<<"Directive">>) -> "message_pb"; +get_proto_by_msg_name_as_fqbin(<<"Ping">>) -> "message_pb"; +get_proto_by_msg_name_as_fqbin(<<"SessionReply">>) -> "message_pb"; +get_proto_by_msg_name_as_fqbin(<<"AuthReply">>) -> "message_pb"; +get_proto_by_msg_name_as_fqbin(<<"ServiceInform">>) -> "message_pb"; +get_proto_by_msg_name_as_fqbin(E) -> error({gpb_error, {badmsg, E}}). + + +-spec get_proto_by_service_name_as_fqbin(_) -> no_return(). +get_proto_by_service_name_as_fqbin(E) -> error({gpb_error, {badservice, E}}). + + +-spec get_proto_by_enum_name_as_fqbin(_) -> no_return(). +get_proto_by_enum_name_as_fqbin(E) -> error({gpb_error, {badenum, E}}). + + +-spec get_protos_by_pkg_name_as_fqbin(_) -> no_return(). +get_protos_by_pkg_name_as_fqbin(E) -> error({gpb_error, {badpkg, E}}). + + + +gpb_version_as_string() -> + "4.21.1". + +gpb_version_as_list() -> + [4,21,1]. + +gpb_version_source() -> + "git". diff --git a/config/sys.config b/config/sys.config index c7cd980..6c907f1 100644 --- a/config/sys.config +++ b/config/sys.config @@ -5,7 +5,16 @@ {tls_server, [ {host, "localhost"}, {port, 443} + ]}, + + {auth, [ + {uuid, "uuid1234"}, + {username, "test"}, + {password, "password1234"}, + {salt, "salt2345"}, + {token, "token124"} ]} + ]}, %% 系统日志配置,系统日志为lager, 支持日志按日期自动分割 diff --git a/efkamove b/efkamove index bf04f7a..d89688c 100755 --- a/efkamove +++ b/efkamove @@ -10,5 +10,5 @@ sed -i '' 's/include(\"gpb.hrl\")/include_lib(\"gpb\/include\/gpb.hrl\")/g' mess #sed -i '' 's/sdlv_4_info/sdl_v4_info/g' sdlan_pb.erl #sed -i '' 's/sdlv_6_info/sdl_v6_info/g' sdlan_pb.erl -mv message_pb.hrl ./apps/efka/include -mv message_pb.erl ./apps/efka/src +mv message_pb.hrl ./apps/efka/include/ +mv message_pb.erl ./apps/efka/src/proto/