diff --git a/apps/sdlan/include/sdlan.hrl b/apps/sdlan/include/sdlan.hrl index 89e43b1..c42021d 100644 --- a/apps/sdlan/include/sdlan.hrl +++ b/apps/sdlan/include/sdlan.hrl @@ -16,7 +16,6 @@ -define(PACKET_EMPTY, 16#00). -define(PACKET_REGISTER_SUPER, 16#01). -define(PACKET_REGISTER_SUPER_ACK, 16#02). --define(PACKET_REGISTER_SUPER_ACKNOWLEDGE, 16#03). -define(PACKET_REGISTER_SUPER_NAK, 16#04). -define(PACKET_UNREGISTER, 16#05). @@ -24,10 +23,6 @@ -define(PACKET_QUERY_INFO, 16#06). -define(PACKET_PEER_INFO, 16#07). -%% 心跳机制 --define(PACKET_PING, 16#08). --define(PACKET_PONG, 16#09). - %% 推送的事件信息, 不需要返回值 -define(PACKET_EVENT, 16#10). @@ -41,17 +36,6 @@ %% 网络关闭 -define(PACKET_EVENT_NETWORK_SHUTDOWN, 16#FF). -%% 推送命令信息, 需要等待返回值 --define(PACKET_COMMAND, 16#11). --define(PACKET_COMMAND_ACK, 16#12). - -%% 网络发生变化 --define(PACKET_COMMAND_CHANGE_NETWORK, 16#01). --define(PACKET_COMMAND_UPGRADE, 16#02). - -%% 网络流量统计 --define(PACKET_FLOW_TRACER, 16#15). - -define(PACKET_REGISTER, 16#20). -define(PACKET_REGISTER_ACK, 16#21). diff --git a/apps/sdlan/include/sdlan_pb.hrl b/apps/sdlan/include/sdlan_pb.hrl index 92b4af8..84d7f80 100644 --- a/apps/sdlan/include/sdlan_pb.hrl +++ b/apps/sdlan/include/sdlan_pb.hrl @@ -25,6 +25,13 @@ }). -endif. +-ifndef('SDL_EMPTY_PB_H'). +-define('SDL_EMPTY_PB_H', true). +-record(sdl_empty, + {pkt_id = 0 :: non_neg_integer() | undefined % = 1, optional, 32 bits + }). +-endif. + -ifndef('SDL_REGISTER_SUPER_PB_H'). -define('SDL_REGISTER_SUPER_PB_H', true). -record(sdl_register_super, diff --git a/apps/sdlan/src/sdlan_pb.erl b/apps/sdlan/src/sdlan_pb.erl index a5ca60c..00dca84 100644 --- a/apps/sdlan/src/sdlan_pb.erl +++ b/apps/sdlan/src/sdlan_pb.erl @@ -59,6 +59,8 @@ -type sdl_v6_info() :: #sdl_v6_info{}. +-type sdl_empty() :: #sdl_empty{}. + -type sdl_register_super() :: #sdl_register_super{}. -type sdl_register_super_ack() :: #sdl_register_super_ack{}. @@ -97,9 +99,9 @@ -type sdl_arp_response() :: #sdl_arp_response{}. --export_type(['sdl_v4_info'/0, 'sdl_v6_info'/0, 'sdl_register_super'/0, 'sdl_register_super_ack'/0, 'sdl_register_super_nak'/0, 'sdl_query_info'/0, 'sdl_peer_info'/0, 'sdl_empty_peer_info'/0, 'sdl_nat_changed_event'/0, 'sdl_drop_macs_event'/0, 'sdl_refresh_auth_event'/0, 'sdl_send_register_event'/0, 'sdl_network_shutdown_event'/0, 'sdl_stun_request'/0, 'sdl_data'/0, 'sdl_register'/0, 'sdl_register_ack'/0, 'sdl_stun_probe'/0, 'sdl_stun_probe_reply'/0, 'sdl_arp_request'/0, 'sdl_arp_response'/0]). --type '$msg_name'() :: sdl_v4_info | sdl_v6_info | sdl_register_super | sdl_register_super_ack | sdl_register_super_nak | sdl_query_info | sdl_peer_info | sdl_empty_peer_info | sdl_nat_changed_event | sdl_drop_macs_event | sdl_refresh_auth_event | sdl_send_register_event | sdl_network_shutdown_event | sdl_stun_request | sdl_data | sdl_register | sdl_register_ack | sdl_stun_probe | sdl_stun_probe_reply | sdl_arp_request | sdl_arp_response. --type '$msg'() :: sdl_v4_info() | sdl_v6_info() | sdl_register_super() | sdl_register_super_ack() | sdl_register_super_nak() | sdl_query_info() | sdl_peer_info() | sdl_empty_peer_info() | sdl_nat_changed_event() | sdl_drop_macs_event() | sdl_refresh_auth_event() | sdl_send_register_event() | sdl_network_shutdown_event() | sdl_stun_request() | sdl_data() | sdl_register() | sdl_register_ack() | sdl_stun_probe() | sdl_stun_probe_reply() | sdl_arp_request() | sdl_arp_response(). +-export_type(['sdl_v4_info'/0, 'sdl_v6_info'/0, 'sdl_empty'/0, 'sdl_register_super'/0, 'sdl_register_super_ack'/0, 'sdl_register_super_nak'/0, 'sdl_query_info'/0, 'sdl_peer_info'/0, 'sdl_empty_peer_info'/0, 'sdl_nat_changed_event'/0, 'sdl_drop_macs_event'/0, 'sdl_refresh_auth_event'/0, 'sdl_send_register_event'/0, 'sdl_network_shutdown_event'/0, 'sdl_stun_request'/0, 'sdl_data'/0, 'sdl_register'/0, 'sdl_register_ack'/0, 'sdl_stun_probe'/0, 'sdl_stun_probe_reply'/0, 'sdl_arp_request'/0, 'sdl_arp_response'/0]). +-type '$msg_name'() :: sdl_v4_info | sdl_v6_info | sdl_empty | sdl_register_super | sdl_register_super_ack | sdl_register_super_nak | sdl_query_info | sdl_peer_info | sdl_empty_peer_info | sdl_nat_changed_event | sdl_drop_macs_event | sdl_refresh_auth_event | sdl_send_register_event | sdl_network_shutdown_event | sdl_stun_request | sdl_data | sdl_register | sdl_register_ack | sdl_stun_probe | sdl_stun_probe_reply | sdl_arp_request | sdl_arp_response. +-type '$msg'() :: sdl_v4_info() | sdl_v6_info() | sdl_empty() | sdl_register_super() | sdl_register_super_ack() | sdl_register_super_nak() | sdl_query_info() | sdl_peer_info() | sdl_empty_peer_info() | sdl_nat_changed_event() | sdl_drop_macs_event() | sdl_refresh_auth_event() | sdl_send_register_event() | sdl_network_shutdown_event() | sdl_stun_request() | sdl_data() | sdl_register() | sdl_register_ack() | sdl_stun_probe() | sdl_stun_probe_reply() | sdl_arp_request() | sdl_arp_response(). -export_type(['$msg_name'/0, '$msg'/0]). -if(?OTP_RELEASE >= 24). @@ -128,6 +130,7 @@ encode_msg(Msg, MsgName, Opts) -> case MsgName of sdl_v4_info -> encode_msg_sdl_v4_info(id(Msg, TrUserData), TrUserData); sdl_v6_info -> encode_msg_sdl_v6_info(id(Msg, TrUserData), TrUserData); + sdl_empty -> encode_msg_sdl_empty(id(Msg, TrUserData), TrUserData); sdl_register_super -> encode_msg_sdl_register_super(id(Msg, TrUserData), TrUserData); sdl_register_super_ack -> encode_msg_sdl_register_super_ack(id(Msg, TrUserData), TrUserData); sdl_register_super_nak -> encode_msg_sdl_register_super_nak(id(Msg, TrUserData), TrUserData); @@ -207,6 +210,20 @@ encode_msg_sdl_v6_info(#sdl_v6_info{port = F1, v6 = F2}, Bin, TrUserData) -> end end. +encode_msg_sdl_empty(Msg, TrUserData) -> encode_msg_sdl_empty(Msg, <<>>, TrUserData). + + +encode_msg_sdl_empty(#sdl_empty{pkt_id = F1}, Bin, TrUserData) -> + if F1 == undefined -> Bin; + true -> + begin + TrF1 = id(F1, TrUserData), + if TrF1 =:= 0 -> Bin; + true -> e_varint(TrF1, <>, TrUserData) + end + end + end. + encode_msg_sdl_register_super(Msg, TrUserData) -> encode_msg_sdl_register_super(Msg, <<>>, TrUserData). @@ -1160,6 +1177,7 @@ decode_msg_1_catch(Bin, MsgName, TrUserData) -> decode_msg_2_doit(sdl_v4_info, Bin, TrUserData) -> id(decode_msg_sdl_v4_info(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_v6_info, Bin, TrUserData) -> id(decode_msg_sdl_v6_info(Bin, TrUserData), TrUserData); +decode_msg_2_doit(sdl_empty, Bin, TrUserData) -> id(decode_msg_sdl_empty(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_register_super, Bin, TrUserData) -> id(decode_msg_sdl_register_super(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_register_super_ack, Bin, TrUserData) -> id(decode_msg_sdl_register_super_ack(Bin, TrUserData), TrUserData); decode_msg_2_doit(sdl_register_super_nak, Bin, TrUserData) -> id(decode_msg_sdl_register_super_nak(Bin, TrUserData), TrUserData); @@ -1291,6 +1309,50 @@ skip_32_sdl_v6_info(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> skip_64_sdl_v6_info(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, F@_2, TrUserData) -> dfp_read_field_def_sdl_v6_info(Rest, Z1, Z2, F, F@_1, F@_2, TrUserData). +decode_msg_sdl_empty(Bin, TrUserData) -> dfp_read_field_def_sdl_empty(Bin, 0, 0, 0, id(0, TrUserData), TrUserData). + +dfp_read_field_def_sdl_empty(<<8, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> d_field_sdl_empty_pkt_id(Rest, Z1, Z2, F, F@_1, TrUserData); +dfp_read_field_def_sdl_empty(<<>>, 0, 0, _, F@_1, _) -> #sdl_empty{pkt_id = F@_1}; +dfp_read_field_def_sdl_empty(Other, Z1, Z2, F, F@_1, TrUserData) -> dg_read_field_def_sdl_empty(Other, Z1, Z2, F, F@_1, TrUserData). + +dg_read_field_def_sdl_empty(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 32 - 7 -> dg_read_field_def_sdl_empty(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +dg_read_field_def_sdl_empty(<<0:1, X:7, Rest/binary>>, N, Acc, _, F@_1, TrUserData) -> + Key = X bsl N + Acc, + case Key of + 8 -> d_field_sdl_empty_pkt_id(Rest, 0, 0, 0, F@_1, TrUserData); + _ -> + case Key band 7 of + 0 -> skip_varint_sdl_empty(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 1 -> skip_64_sdl_empty(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 2 -> skip_length_delimited_sdl_empty(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 3 -> skip_group_sdl_empty(Rest, 0, 0, Key bsr 3, F@_1, TrUserData); + 5 -> skip_32_sdl_empty(Rest, 0, 0, Key bsr 3, F@_1, TrUserData) + end + end; +dg_read_field_def_sdl_empty(<<>>, 0, 0, _, F@_1, _) -> #sdl_empty{pkt_id = F@_1}. + +d_field_sdl_empty_pkt_id(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> d_field_sdl_empty_pkt_id(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +d_field_sdl_empty_pkt_id(<<0:1, X:7, Rest/binary>>, N, Acc, F, _, TrUserData) -> + {NewFValue, RestF} = {id((X bsl N + Acc) band 4294967295, TrUserData), Rest}, + dfp_read_field_def_sdl_empty(RestF, 0, 0, F, NewFValue, TrUserData). + +skip_varint_sdl_empty(<<1:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> skip_varint_sdl_empty(Rest, Z1, Z2, F, F@_1, TrUserData); +skip_varint_sdl_empty(<<0:1, _:7, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_sdl_empty(Rest, Z1, Z2, F, F@_1, TrUserData). + +skip_length_delimited_sdl_empty(<<1:1, X:7, Rest/binary>>, N, Acc, F, F@_1, TrUserData) when N < 57 -> skip_length_delimited_sdl_empty(Rest, N + 7, X bsl N + Acc, F, F@_1, TrUserData); +skip_length_delimited_sdl_empty(<<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_sdl_empty(Rest2, 0, 0, F, F@_1, TrUserData). + +skip_group_sdl_empty(Bin, _, Z2, FNum, F@_1, TrUserData) -> + {_, Rest} = read_group(Bin, FNum), + dfp_read_field_def_sdl_empty(Rest, 0, Z2, FNum, F@_1, TrUserData). + +skip_32_sdl_empty(<<_:32, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_sdl_empty(Rest, Z1, Z2, F, F@_1, TrUserData). + +skip_64_sdl_empty(<<_:64, Rest/binary>>, Z1, Z2, F, F@_1, TrUserData) -> dfp_read_field_def_sdl_empty(Rest, Z1, Z2, F, F@_1, TrUserData). + decode_msg_sdl_register_super(Bin, TrUserData) -> dfp_read_field_def_sdl_register_super(Bin, 0, 0, 0, id(0, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), id(<<>>, TrUserData), id(0, TrUserData), id(0, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), id(<<>>, TrUserData), TrUserData). @@ -2693,6 +2755,7 @@ merge_msgs(Prev, New, MsgName, Opts) -> case MsgName of sdl_v4_info -> merge_msg_sdl_v4_info(Prev, New, TrUserData); sdl_v6_info -> merge_msg_sdl_v6_info(Prev, New, TrUserData); + sdl_empty -> merge_msg_sdl_empty(Prev, New, TrUserData); sdl_register_super -> merge_msg_sdl_register_super(Prev, New, TrUserData); sdl_register_super_ack -> merge_msg_sdl_register_super_ack(Prev, New, TrUserData); sdl_register_super_nak -> merge_msg_sdl_register_super_nak(Prev, New, TrUserData); @@ -2740,6 +2803,13 @@ merge_msg_sdl_v6_info(#sdl_v6_info{port = PFport, v6 = PFv6}, #sdl_v6_info{port true -> NFv6 end}. +-compile({nowarn_unused_function,merge_msg_sdl_empty/3}). +merge_msg_sdl_empty(#sdl_empty{pkt_id = PFpkt_id}, #sdl_empty{pkt_id = NFpkt_id}, _) -> + #sdl_empty{pkt_id = + if NFpkt_id =:= undefined -> PFpkt_id; + true -> NFpkt_id + end}. + -compile({nowarn_unused_function,merge_msg_sdl_register_super/3}). merge_msg_sdl_register_super(#sdl_register_super{pkt_id = PFpkt_id, client_id = PFclient_id, network_id = PFnetwork_id, mac = PFmac, ip = PFip, mask_len = PFmask_len, hostname = PFhostname, pub_key = PFpub_key, access_token = PFaccess_token}, #sdl_register_super{pkt_id = NFpkt_id, client_id = NFclient_id, network_id = NFnetwork_id, mac = NFmac, ip = NFip, mask_len = NFmask_len, hostname = NFhostname, pub_key = NFpub_key, access_token = NFaccess_token}, _) -> @@ -3125,6 +3195,7 @@ verify_msg(Msg, MsgName, Opts) -> case MsgName of sdl_v4_info -> v_msg_sdl_v4_info(Msg, [MsgName], TrUserData); sdl_v6_info -> v_msg_sdl_v6_info(Msg, [MsgName], TrUserData); + sdl_empty -> v_msg_sdl_empty(Msg, [MsgName], TrUserData); sdl_register_super -> v_msg_sdl_register_super(Msg, [MsgName], TrUserData); sdl_register_super_ack -> v_msg_sdl_register_super_ack(Msg, [MsgName], TrUserData); sdl_register_super_nak -> v_msg_sdl_register_super_nak(Msg, [MsgName], TrUserData); @@ -3183,6 +3254,15 @@ v_msg_sdl_v6_info(#sdl_v6_info{port = F1, v6 = F2}, Path, TrUserData) -> ok; v_msg_sdl_v6_info(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_v6_info}, X, Path). +-compile({nowarn_unused_function,v_msg_sdl_empty/3}). +-dialyzer({nowarn_function,v_msg_sdl_empty/3}). +v_msg_sdl_empty(#sdl_empty{pkt_id = F1}, Path, TrUserData) -> + if F1 == undefined -> ok; + true -> v_type_uint32(F1, [pkt_id | Path], TrUserData) + end, + ok; +v_msg_sdl_empty(X, Path, _TrUserData) -> mk_type_error({expected_msg, sdl_empty}, X, Path). + -compile({nowarn_unused_function,v_msg_sdl_register_super/3}). -dialyzer({nowarn_function,v_msg_sdl_register_super/3}). v_msg_sdl_register_super(#sdl_register_super{pkt_id = F1, client_id = F2, network_id = F3, mac = F4, ip = F5, mask_len = F6, hostname = F7, pub_key = F8, access_token = F9}, Path, TrUserData) -> @@ -3601,6 +3681,7 @@ get_msg_defs() -> #field{name = v4, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}, #field{name = nat_type, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}]}, {{msg, sdl_v6_info}, [#field{name = port, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = v6, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}]}, + {{msg, sdl_empty}, [#field{name = pkt_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}]}, {{msg, sdl_register_super}, [#field{name = pkt_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = client_id, fnum = 2, rnum = 3, type = string, occurrence = defaulty, opts = []}, @@ -3696,6 +3777,7 @@ get_msg_defs() -> get_msg_names() -> [sdl_v4_info, sdl_v6_info, + sdl_empty, sdl_register_super, sdl_register_super_ack, sdl_register_super_nak, @@ -3723,6 +3805,7 @@ get_group_names() -> []. get_msg_or_group_names() -> [sdl_v4_info, sdl_v6_info, + sdl_empty, sdl_register_super, sdl_register_super_ack, sdl_register_super_nak, @@ -3763,6 +3846,7 @@ find_msg_def(sdl_v4_info) -> #field{name = v4, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}, #field{name = nat_type, fnum = 3, rnum = 4, type = uint32, occurrence = defaulty, opts = []}]; find_msg_def(sdl_v6_info) -> [#field{name = port, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = v6, fnum = 2, rnum = 3, type = bytes, occurrence = defaulty, opts = []}]; +find_msg_def(sdl_empty) -> [#field{name = pkt_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}]; find_msg_def(sdl_register_super) -> [#field{name = pkt_id, fnum = 1, rnum = 2, type = uint32, occurrence = defaulty, opts = []}, #field{name = client_id, fnum = 2, rnum = 3, type = string, occurrence = defaulty, opts = []}, @@ -3913,6 +3997,7 @@ service_and_rpc_name_to_fqbins(S, R) -> error({gpb_error, {badservice_or_rpc, {S fqbin_to_msg_name(<<"SDLV4Info">>) -> sdl_v4_info; fqbin_to_msg_name(<<"SDLV6Info">>) -> sdl_v6_info; +fqbin_to_msg_name(<<"SDLEmpty">>) -> sdl_empty; fqbin_to_msg_name(<<"SDLRegisterSuper">>) -> sdl_register_super; fqbin_to_msg_name(<<"SDLRegisterSuperAck">>) -> sdl_register_super_ack; fqbin_to_msg_name(<<"SDLRegisterSuperNak">>) -> sdl_register_super_nak; @@ -3937,6 +4022,7 @@ fqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}). msg_name_to_fqbin(sdl_v4_info) -> <<"SDLV4Info">>; msg_name_to_fqbin(sdl_v6_info) -> <<"SDLV6Info">>; +msg_name_to_fqbin(sdl_empty) -> <<"SDLEmpty">>; msg_name_to_fqbin(sdl_register_super) -> <<"SDLRegisterSuper">>; msg_name_to_fqbin(sdl_register_super_ack) -> <<"SDLRegisterSuperAck">>; msg_name_to_fqbin(sdl_register_super_nak) -> <<"SDLRegisterSuperNak">>; @@ -3999,6 +4085,7 @@ get_msg_containment("sdlan_pb") -> sdl_arp_response, sdl_data, sdl_drop_macs_event, + sdl_empty, sdl_empty_peer_info, sdl_nat_changed_event, sdl_network_shutdown_event, @@ -4048,6 +4135,7 @@ get_proto_by_msg_name_as_fqbin(<<"SDLArpRequest">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLStunProbe">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLArpResponse">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLStunProbeReply">>) -> "sdlan_pb"; +get_proto_by_msg_name_as_fqbin(<<"SDLEmpty">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLRegisterSuperNak">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLRegisterSuperAck">>) -> "sdlan_pb"; get_proto_by_msg_name_as_fqbin(<<"SDLRegisterAck">>) -> "sdlan_pb"; diff --git a/message.proto b/message.proto index fe921ea..ce3ed7a 100644 --- a/message.proto +++ b/message.proto @@ -1,5 +1,10 @@ syntax = "proto3"; +// 注意 +// 1. network_id, ip地址等分配的逻辑已经迁移到后端https服务 +// 2. 端的强制升级逻辑也迁移到了https服务 +// 3. 假设一个udp包的最大有效负载为1400字节;因此虚拟网卡启动的时候mtu需要控制一下,因为每个包里面都有自己的元数据信息, 端上的mtu值先统一为:1250 + // 基础公共类型定义 message SDLV4Info { @@ -13,27 +18,34 @@ message SDLV6Info { bytes v6 = 2; } -// 所有需要建立请求和响应对应关系的,都是通过udp包头部4字节的packetId来对应 +message SDLEmpty { + uint32 pkt_id = 1; +} -// 客户端层面通过token或者账号密码登录, 服务器端不管这个, -// 只是验证凭证是否合法 (access_token) // 这里修改成了扁平的结构, 否则有些字段不好找放的位置 message SDLRegisterSuper { + // 所有需要建立请求和响应对应关系的,都是通过4字节的pktId来对应 uint32 pkt_id = 1; string client_id = 2; + // 网络地址信息已经有https请求分配了 + // 注册的时候需要带上(network_id, mac, ip, mask_len, hostname) uint32 network_id = 3; bytes mac = 4; uint32 ip = 5; uint32 mask_len = 6; string hostname = 7; + string pub_key = 8; + // 客户端使用http协议请求后端,通过token或者账号密码登录时, 统一返回一个access_token; + // RegisterSuper的时候,验证凭证是否合法 (access_token) string access_token = 9; } -// 这里修改成了udp的方式,后续需要验证: session_token message SDLRegisterSuperAck { uint32 pkt_id = 1; bytes aes_key = 2; + // 验证通过后,返回session_token; 后续通讯的合法行需哟啊通过session_token来保证 + // 在SDLQueryInfo,SDLStunRequest, SDLData, SDLArpRequest等需要服务器端介入的地方都增加了session_token的验证(端和端之间的SDLData不需要校验) bytes session_token = 3; } @@ -76,12 +88,14 @@ message SDLNatChangedEvent { } // 被清理掉的Endpoints +// 协议改成udp后,服务端只能通过定时器来集中清理掉线的端(通过心跳机制SDLStunRequest) message SDLDropMacsEvent { uint32 network_id = 1; repeated bytes macs = 2; } // 通知端上必须重新校验 +// 服务器端认为端已经掉线了,但是这个时候还在向服务端发送消息;服务端要求端上重新校验(SDLRegisterSuper) message SDLRefreshAuthEvent { uint32 network_id = 1; } @@ -119,6 +133,8 @@ message SDLData { uint32 ttl = 5; bytes data = 6; bytes session_token = 7; + // 端通过https登录的时候,服务端会分配该端对应的权限标识 + // 后续的请求过程中需要带上这个值,对端通过这个值要判断对数据包是否放行 uint32 identity_id = 8; } @@ -141,18 +157,20 @@ message SDLRegisterAck { message SDLStunProbe { uint32 cookie = 1; uint32 attr = 2; + // 增加step是为了方便端上判断,收到的请求和响应之间的映射关系;服务器端原样返回 uint32 step = 3; } message SDLStunProbeReply { uint32 cookie = 1; + // 增加step是为了方便端上判断,收到的请求和响应之间的映射关系;服务器端原样返回 uint32 step = 2; uint32 port = 3; uint32 ip = 4; } // ARP查询相关 - +// 真实的arp请求是通过广播的形式获取到的,但是针对于macos这种tun的实现;是能够分析出arp请求包的;对于当前网络来说,服务端是知道mac对应的ip地址的,因此没有必要广播;直接通过服务器端返回 message SDLArpRequest { uint32 network_id = 1; uint32 target_ip = 2;