xref: /aosp_15_r20/prebuilts/android-emulator/linux-x86_64/lib/waterfall.proto (revision d870e0501505f2fc9999364ffe386a6b6151adc1)
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