syntax = "proto3"; package caretta_sync.remote_node; import "caretta_sync.common.proto"; import "tripod_id.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/empty.proto"; service RemoteNode { rpc Info(RemoteNodeInfoRequest) returns (RemoteNodeInfoResponse); rpc List(stream RemoteNodeListRequest) returns (stream RemoteNodeListResponse); } message RemoteNodeIdentifier { oneof identifier { tripod_id.Double id = 1; caretta_sync.common.PublicKey public_key = 2; } } message RemoteNodeInfoRequest { RemoteNodeIdentifier remote_node = 1; } message RemoteNodeListRequest {} message RemoteNodeInfoResponse { RemoteNodeInfo remote_node_info = 1; } message RemoteNodeListResponse { RemoteNodeInfo remote_node_info = 1; } message RemoteNodeInfo { tripod_id.Double id = 1; bool authorized = 2; caretta_sync.common.PublicKey public_key = 3; string relay_url = 4; repeated RemoteNodeDirectAddrInfo addrs = 5; RemoteNodeConnectionType conn_type = 6; google.protobuf.Duration latency = 7; google.protobuf.Duration last_used = 8; } message RemoteNodeConnectionType { oneof conn_type { caretta_sync.common.SocketAddr direct = 1; caretta_sync.common.Url relay = 2; RemoteNodeConnectionTypeMixed mixed = 3; google.protobuf.Empty none = 4; } } message RemoteNodeConnectionTypeMixed { caretta_sync.common.SocketAddr socket_addr = 1; caretta_sync.common.Url relay_url = 2; } message RemoteNodeRelayUrlInfo { caretta_sync.common.Url relay_url = 1; google.protobuf.Duration last_alive = 2; google.protobuf.Duration latency = 3; } message RemoteNodeDirectAddrInfo { caretta_sync.common.SocketAddr addr = 1; google.protobuf.Duration latency = 2; RemoteNodeLastControl last_control = 3; google.protobuf.Duration last_payload = 4; google.protobuf.Duration last_alive = 5; repeated RemoteNodeSource sources = 6; } message RemoteNodeLastControl { google.protobuf.Duration duration = 1; RemoteNodeControlMsg control_msg = 2; } enum RemoteNodeControlMsg { PING = 0; PONG = 1; CALL_ME_MAYBE = 2; } message RemoteNodeSource { oneof source = { google.protobuf.Empty saved = 1; google.protobuf.Empty udp = 2; google.protobuf.Empty Relay = 3; google.protobuf.Empty App = 4; string discovery = 5; string named_app = 6 }; google.protobuf.Duration duration = 7; }