1*d870e050SAndroid Build Coastguard Worker// Copyright 2018 Google LLC 2*d870e050SAndroid Build Coastguard Worker// 3*d870e050SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*d870e050SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*d870e050SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*d870e050SAndroid Build Coastguard Worker// 7*d870e050SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*d870e050SAndroid Build Coastguard Worker// 9*d870e050SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*d870e050SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*d870e050SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*d870e050SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*d870e050SAndroid Build Coastguard Worker// limitations under the License. 14*d870e050SAndroid Build Coastguard Worker 15*d870e050SAndroid Build Coastguard Workersyntax = "proto3"; 16*d870e050SAndroid Build Coastguard Worker 17*d870e050SAndroid Build Coastguard Workerpackage waterfall; 18*d870e050SAndroid Build Coastguard Worker 19*d870e050SAndroid Build Coastguard Workeroption java_package = "com.google.waterfall"; 20*d870e050SAndroid Build Coastguard Workeroption java_outer_classname = "WaterfallProto"; 21*d870e050SAndroid Build Coastguard Worker 22*d870e050SAndroid Build Coastguard Workerimport "google/protobuf/empty.proto"; 23*d870e050SAndroid Build Coastguard Worker 24*d870e050SAndroid Build Coastguard Workermessage Message { 25*d870e050SAndroid Build Coastguard Worker bytes payload = 1; 26*d870e050SAndroid Build Coastguard Worker} 27*d870e050SAndroid Build Coastguard Worker 28*d870e050SAndroid Build Coastguard Worker// Keep this as lean as possible. We only care about the payload during most 29*d870e050SAndroid Build Coastguard Worker// of the duration of the session. All other fields are only useful during 30*d870e050SAndroid Build Coastguard Worker// the beginning/end of the transfer 31*d870e050SAndroid Build Coastguard Workermessage Transfer { 32*d870e050SAndroid Build Coastguard Worker // Remote path to for push/pull. Remote path lives in the server fs. 33*d870e050SAndroid Build Coastguard Worker // There is no need to send local path, since client has this info. 34*d870e050SAndroid Build Coastguard Worker string path = 1; 35*d870e050SAndroid Build Coastguard Worker 36*d870e050SAndroid Build Coastguard Worker // A stream of bytes. Encoded as a tarball. 37*d870e050SAndroid Build Coastguard Worker bytes payload = 2; 38*d870e050SAndroid Build Coastguard Worker 39*d870e050SAndroid Build Coastguard Worker // status fields. 40*d870e050SAndroid Build Coastguard Worker bool success = 3; 41*d870e050SAndroid Build Coastguard Worker bytes err = 4; 42*d870e050SAndroid Build Coastguard Worker} 43*d870e050SAndroid Build Coastguard Worker 44*d870e050SAndroid Build Coastguard Workermessage Cmd { 45*d870e050SAndroid Build Coastguard Worker // Path to the binary to execute. 46*d870e050SAndroid Build Coastguard Worker // Path should be absolute. Otherwise behavior is not specified. 47*d870e050SAndroid Build Coastguard Worker // use /system/bin/sh -c to run in a shell. 48*d870e050SAndroid Build Coastguard Worker // Interactive shell is not supported. 49*d870e050SAndroid Build Coastguard Worker string path = 1; 50*d870e050SAndroid Build Coastguard Worker 51*d870e050SAndroid Build Coastguard Worker // Args to pass to the command 52*d870e050SAndroid Build Coastguard Worker repeated string args = 2; 53*d870e050SAndroid Build Coastguard Worker 54*d870e050SAndroid Build Coastguard Worker // Directory to execute the command 55*d870e050SAndroid Build Coastguard Worker string dir = 3; 56*d870e050SAndroid Build Coastguard Worker 57*d870e050SAndroid Build Coastguard Worker // Whether to pipe stdin to the command 58*d870e050SAndroid Build Coastguard Worker bool pipeIn = 4; 59*d870e050SAndroid Build Coastguard Worker 60*d870e050SAndroid Build Coastguard Worker // Environment to use 61*d870e050SAndroid Build Coastguard Worker map<string, string> env = 5; 62*d870e050SAndroid Build Coastguard Worker 63*d870e050SAndroid Build Coastguard Worker} 64*d870e050SAndroid Build Coastguard Worker 65*d870e050SAndroid Build Coastguard Workermessage CmdProgress { 66*d870e050SAndroid Build Coastguard Worker 67*d870e050SAndroid Build Coastguard Worker // Command to execute. Only valid for the initial message of the stream. 68*d870e050SAndroid Build Coastguard Worker Cmd cmd = 5; 69*d870e050SAndroid Build Coastguard Worker 70*d870e050SAndroid Build Coastguard Worker // the exit code of the command. 71*d870e050SAndroid Build Coastguard Worker // Only populated when the gRPC stream is done. 72*d870e050SAndroid Build Coastguard Worker // I.e. the last message before the EOF. 73*d870e050SAndroid Build Coastguard Worker uint32 exit_code = 1; 74*d870e050SAndroid Build Coastguard Worker 75*d870e050SAndroid Build Coastguard Worker bytes stdout = 2; 76*d870e050SAndroid Build Coastguard Worker bytes stderr = 3; 77*d870e050SAndroid Build Coastguard Worker bytes stdin = 4; 78*d870e050SAndroid Build Coastguard Worker} 79*d870e050SAndroid Build Coastguard Worker 80*d870e050SAndroid Build Coastguard Workermessage ForwardMessage { 81*d870e050SAndroid Build Coastguard Worker enum Kind { 82*d870e050SAndroid Build Coastguard Worker UNSET = 0; 83*d870e050SAndroid Build Coastguard Worker TCP = 1; 84*d870e050SAndroid Build Coastguard Worker UDP = 2; 85*d870e050SAndroid Build Coastguard Worker UNIX = 3; 86*d870e050SAndroid Build Coastguard Worker } 87*d870e050SAndroid Build Coastguard Worker 88*d870e050SAndroid Build Coastguard Worker enum Op { 89*d870e050SAndroid Build Coastguard Worker OPEN = 0; 90*d870e050SAndroid Build Coastguard Worker FWD = 1; 91*d870e050SAndroid Build Coastguard Worker CLOSE = 2; 92*d870e050SAndroid Build Coastguard Worker } 93*d870e050SAndroid Build Coastguard Worker 94*d870e050SAndroid Build Coastguard Worker // Kind of connection to start (tcp|udp|unix) 95*d870e050SAndroid Build Coastguard Worker Kind kind = 1; 96*d870e050SAndroid Build Coastguard Worker Op op = 2; 97*d870e050SAndroid Build Coastguard Worker 98*d870e050SAndroid Build Coastguard Worker // Address to open and redirect payload to. 99*d870e050SAndroid Build Coastguard Worker string addr = 3; 100*d870e050SAndroid Build Coastguard Worker // Data to be pushed to connection established on addr. 101*d870e050SAndroid Build Coastguard Worker bytes payload = 4; 102*d870e050SAndroid Build Coastguard Worker // Whether or not to rebind the port. 103*d870e050SAndroid Build Coastguard Worker bool rebind = 5; 104*d870e050SAndroid Build Coastguard Worker} 105*d870e050SAndroid Build Coastguard Worker 106*d870e050SAndroid Build Coastguard Workermessage VersionMessage { 107*d870e050SAndroid Build Coastguard Worker string version = 1; 108*d870e050SAndroid Build Coastguard Worker} 109*d870e050SAndroid Build Coastguard Worker 110*d870e050SAndroid Build Coastguard Workerservice Waterfall { 111*d870e050SAndroid Build Coastguard Worker // Echo exists solely for test purposes. 112*d870e050SAndroid Build Coastguard Worker rpc Echo(stream Message) returns (stream Message); 113*d870e050SAndroid Build Coastguard Worker 114*d870e050SAndroid Build Coastguard Worker // Push file/dir from host to device. 115*d870e050SAndroid Build Coastguard Worker rpc Push(stream Transfer) returns (Transfer); 116*d870e050SAndroid Build Coastguard Worker 117*d870e050SAndroid Build Coastguard Worker // Pull file/dir from device to host. 118*d870e050SAndroid Build Coastguard Worker rpc Pull(Transfer) returns (stream Transfer); 119*d870e050SAndroid Build Coastguard Worker 120*d870e050SAndroid Build Coastguard Worker // Exec executes cmd in the device and forward stdout and stderr to client 121*d870e050SAndroid Build Coastguard Worker // Exec expects a single initial CmdProgress message if stdin is not 122*d870e050SAndroid Build Coastguard Worker // being redirected. Otherwise Exec will read std from the stream. 123*d870e050SAndroid Build Coastguard Worker rpc Exec(stream CmdProgress) returns (stream CmdProgress); 124*d870e050SAndroid Build Coastguard Worker 125*d870e050SAndroid Build Coastguard Worker // Forward forwards the stream payload to the requested socket 126*d870e050SAndroid Build Coastguard Worker rpc Forward(stream ForwardMessage) returns (stream ForwardMessage); 127*d870e050SAndroid Build Coastguard Worker 128*d870e050SAndroid Build Coastguard Worker // Version gets the version of the server. 129*d870e050SAndroid Build Coastguard Worker rpc Version(google.protobuf.Empty) returns (VersionMessage); 130*d870e050SAndroid Build Coastguard Worker} 131*d870e050SAndroid Build Coastguard Worker 132*d870e050SAndroid Build Coastguard Workermessage ForwardSession { 133*d870e050SAndroid Build Coastguard Worker string src = 1; 134*d870e050SAndroid Build Coastguard Worker string dst = 2; 135*d870e050SAndroid Build Coastguard Worker} 136*d870e050SAndroid Build Coastguard Worker 137*d870e050SAndroid Build Coastguard Workermessage PortForwardRequest { 138*d870e050SAndroid Build Coastguard Worker bool rebind = 3; 139*d870e050SAndroid Build Coastguard Worker ForwardSession session = 4; 140*d870e050SAndroid Build Coastguard Worker} 141*d870e050SAndroid Build Coastguard Worker 142*d870e050SAndroid Build Coastguard Workermessage ForwardedSessions { 143*d870e050SAndroid Build Coastguard Worker repeated ForwardSession sessions = 1; 144*d870e050SAndroid Build Coastguard Worker} 145*d870e050SAndroid Build Coastguard Worker 146*d870e050SAndroid Build Coastguard Worker// PortForwarder service runs a port forwarding session via waterfall. 147*d870e050SAndroid Build Coastguard Worker// It allows start and stop forwarding connections when the waterfall client 148*d870e050SAndroid Build Coastguard Worker// is unable to mantains any state (e.g. the waterfall adb binary). 149*d870e050SAndroid Build Coastguard Workerservice PortForwarder { 150*d870e050SAndroid Build Coastguard Worker rpc ForwardPort(PortForwardRequest) returns (google.protobuf.Empty); 151*d870e050SAndroid Build Coastguard Worker rpc Stop(PortForwardRequest) returns (google.protobuf.Empty); 152*d870e050SAndroid Build Coastguard Worker rpc StopAll(google.protobuf.Empty) returns (google.protobuf.Empty); 153*d870e050SAndroid Build Coastguard Worker rpc List(google.protobuf.Empty) returns (ForwardedSessions); 154*d870e050SAndroid Build Coastguard Worker} 155