syntax = "proto3"; // 基础公共类型定义 message SDLV4Info { uint32 port = 1; bytes v4 = 2; uint32 nat_type = 3; } message SDLV6Info { uint32 port = 1; bytes v6 = 2; } // 所有需要建立请求和响应对应关系的,都是通过udp包头部4字节的packetId来对应 // 客户端层面通过token或者账号密码登录, 服务器端不管这个, // 只是验证凭证是否合法 (access_token) // 这里修改成了扁平的结构, 否则有些字段不好找放的位置 message SDLRegisterSuper { uint32 version = 1; string client_id = 2; uint32 network_id = 3; bytes mac = 4; uint32 ip = 5; uint32 mask_len = 6; string hostname = 7; string pub_key = 8; string access_token = 9; } // 这里修改成了udp的方式,后续需要验证: session_token message SDLRegisterSuperAck { bytes aes_key = 1; bytes session_token = 2; } // 注册失败时候的消息体 message SDLRegisterSuperNak { uint32 error_code = 1; string error_message = 2; } // 网络地址查询 message SDLQueryInfo { uint32 network_id = 1; bytes dst_mac = 2; bytes session_token = 3; } message SDLPeerInfo { uint32 network_id = 1; bytes dst_mac = 2; SDLV4Info v4_info = 3; optional SDLV6Info v6_info = 4; } // 事件定义, 下面的事件是服务器主动推送的,不需要响应 message SDLNatChangedEvent { uint32 network_id = 1; bytes mac = 2; uint32 ip = 3; } // 被清理掉的Endpoints message SDLDropMacsEvent { uint32 network_id = 1; repeated bytes mac = 2; } message SDLSendRegisterEvent { uint32 network_id = 1; bytes dst_mac = 2; uint32 nat_ip = 3; uint32 nat_port = 4; uint32 nat_type = 5; optional SDLV6Info v6_info = 6; } message SDLNetworkShutdownEvent { uint32 network_id = 1; string message = 2; } // UDP通讯消息 message SDLStunRequest { string client_id = 1; uint32 network_id = 2; bytes mac = 3; uint32 ip = 4; uint32 nat_type = 5; optional SDLV6Info v6_info = 6; bytes session_token = 7; } message SDLData { uint32 network_id = 1; bytes src_mac = 2; bytes dst_mac = 3; bool is_p2p = 4; uint32 ttl = 5; bytes data = 6; bytes session_token = 7; } // 这个是客户端之间的相互打洞的数据 message SDLRegister { uint32 network_id = 1; bytes src_mac = 2; bytes dst_mac = 3; } message SDLRegisterAck { uint32 network_id = 1; bytes src_mac = 2; bytes dst_mac = 3; } // 网络类型探测 message SDLStunProbe { uint32 cookie = 1; uint32 attr = 2; } message SDLStunProbeReply { uint32 cookie = 1; uint32 port = 2; uint32 ip = 3; } // ARP查询相关 message SDLArpRequest { uint32 network_id = 1; uint32 target_ip = 2; bytes session_token = 3; } message SDLArpResponse { uint32 network_id = 1; uint32 target_ip = 2; bytes target_mac = 3; }