| // Copyright (C) 2018 The Android Open Source Project |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| syntax = "proto2"; |
| |
| package android.emulation.control; |
| |
| option java_package = "com.android.emulator.control"; |
| |
| // Used to communicate the socket state between a waterfall service running |
| // inside the emulator (guest) and a domain socket running on the host |
| // (emulator) |
| // |
| // The host does not have the abiliy to open direct connections, but can accept |
| // incoming connections. |
| // |
| // The protocol is as follows: |
| // |
| // - The first message on a channel from guest -> host is always a |
| // "SocketControl" message. |
| // - A channel that is identified with fd=0 is called the control channel. |
| // Only SocketControl messages are exchanged on this channel. |
| // |
| // For channel 0: |
| // - If the hosts sends an open message: |
| // - The guest should respond with a new connection, With the first |
| // message |
| // an identity message with the requested fd |
| // - If the hosts sends a close message: |
| // - The guest can close the connection with the given fd, no new |
| // messages will be send on the |
| // channel. (Be aware of out of order delivery, there still might be |
| // some leftover bytes) |
| // - If the guests sends a close message: |
| // - The host can close the connection with the given fd, no new |
| // messages will be send on the |
| // channel. (Be aware of out of order delivery, there still might be |
| // some leftover bytes) |
| // |
| // For a new connection the host usually will read the socket control message, |
| // and pass on the remaining bytes to whomever wants to consume them. |
| message SocketControl { |
| enum Sort { |
| identity = 0; // Indicates the identify of the channel on which this |
| // message is sent. |
| open = 1; // Request the client to open up a connection with the |
| // requested id. |
| close = 2; // Indicate that the channel with the given fd is to be |
| // closed. More specifically No new data will be placed on |
| // the wire after the sending of this message. |
| } |
| |
| required Sort sort = 1; // 1 Byte |
| required fixed32 fd = 2; // 4 Bytes |
| } |