syntax = "proto3"; option java_multiple_files = true; option java_package = 'com.wireguard.android.backend.gen'; option java_outer_classname = "LibwgProto"; option java_generic_services = true; option go_package = 'golang.zx2c4.com/wireguard/android/gen'; package api; service Libwg { rpc StopGrpc(StopGrpcRequest) returns (StopGrpcResponse); rpc Version(VersionRequest) returns (VersionResponse); rpc StartHttpProxy(StartHttpProxyRequest) returns (StartHttpProxyResponse); rpc StopHttpProxy(StopHttpProxyRequest) returns (StopHttpProxyResponse); rpc Reverse(stream ReverseRequest) returns (stream ReverseResponse); rpc IpcSet(IpcSetRequest) returns (IpcSetResponse); } message TunnelHandle { int32 handle = 1; } message Error { enum Code { NO_ERROR = 0; UNSPECIFIED = 1; INVALID_PROTOCOL_BUFFER = 2; INVALID_RESPONSE = 3; } Code code = 1; string message = 2; } message InetAddress { bytes address = 1; } message InetSocketAddress { InetAddress address = 1; uint32 port = 2; } message StopGrpcRequest { } message StopGrpcResponse { } message VersionRequest { } message VersionResponse { string version = 1; } message StartHttpProxyRequest { string pacFileUrl = 1; } message StartHttpProxyResponse { uint32 listen_port = 1; Error error = 2; } message StopHttpProxyRequest { } message StopHttpProxyResponse { Error error = 1; } message ReverseRequest { oneof response { GetConnectionOwnerUidResponse uid = 1; } } message ReverseResponse { oneof request { GetConnectionOwnerUidRequest uid = 1; } } message GetConnectionOwnerUidRequest { // ConnectivityManager.getConnectionOwnerUid(int protocol, // InetSocketAddress local, InetSocketAddress remote) int32 protocol = 1; InetSocketAddress local = 2; InetSocketAddress remote = 3; } message GetConnectionOwnerUidResponse { int32 uid = 1; string package = 2; // context.getPackageManager().getNameForUid() } message IpcSetRequest { TunnelHandle tunnel = 1; string config = 2; } message IpcSetResponse { Error error = 1; }