// 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. // Note that if you add/remove methods in this file you must update // the metrics sql as well by running ./android/scripts/gen-grpc-sql.py // // Please group deleted methods in a block including the date (MM/DD/YY) // it was removed. This enables us to easily keep metrics around after removal // // List of deleted methods // rpc iWasDeleted (03/12/12) // ... syntax = "proto3"; option java_multiple_files = true; option java_package = "com.android.emulator.control"; option objc_class_prefix = "AEC"; package android.emulation.control; import "google/protobuf/empty.proto"; // An RTC service lets you interact with the emulator through WebRTC // Note that this is currently an experimental feature, and that the // service definition might change without notice. Use at your own risk! // // The following endpoints are needed to establish the webrtc protocol // Due to limitiations in Javascript we cannot make use of bidirectional // endpoints See this [blog](https://grpc.io/blog/state-of-grpc-web) for // details. service Rtc { // This function will generate a new identifier that the client // should use for further interaction. It will initiate the // JSEP protocol on the server side. rpc requestRtcStream(google.protobuf.Empty) returns (RtcId) {} // Sends the given JsepMsg to the server. The RtcId in the // message should point to an active stream negotiation in // progress, otherwise the message will be ignored. rpc sendJsepMessage(JsepMsg) returns (google.protobuf.Empty) {} // Reads an available jsep messages for the given client id, // blocking until one becomes available. Do not use the polling version // above if you opt for this one. // // The ice candidates for example will trickle in on this callback, // as will the SDP negotation. rpc receiveJsepMessages(RtcId) returns (stream JsepMsg) {} // [DEPRECATED] This is only here as the go grpc webproxy used // by fuchsia does not support server side streaming. This method // will be removed in the future and should not be relied upon. // // Reads an available jsep messages for the given client id, // blocking until one becomes available. Do not use the polling version // above if you opt for this one. // // The ice candidates for example will trickle in on this callback, // as will the SDP negotation. rpc receiveJsepMessage(RtcId) returns (JsepMsg) {} } message RtcId { // The unique identifier of this connection. You will have to use the // same identifier when sending/receiving messages. The server will // generate a guid when receiving the start message. string guid = 1; } message JsepMsg { // The unique identifier of this connection. You will have to use the // same identifier when sending/receiving messages. The server will // generate a guid when receiving the start message. RtcId id = 1; // The JSON payload. This usually can be directly handled by the // Javascript library. // // The dictionary can contain the following properties // // - bye: // You can hang up now. No new message expected for you. // The server has stopped the RTC stream. // // - start: // An RTCConfiguration dictionary providing options to // configure the new connection. This can include the // turn configuration the serve is using. This dictionary can be // passed in directly to the // [RTCPeerConnection](https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection) // object. // // - candidate: // The WebRTC API's RTCIceCandidateInit dictionary, which // contains the information needed to fundamentally describe an // RTCIceCandidate. See // [RTCIceCandidate](https://developer.mozilla.org/en-US/docs/Web/API/RTCIceCandidate) // and [Session // Lifetime](https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Session_lifetime) // for more details. // // - sdp: // RTCSessionDescriptionInit dictionary containing the values // to that can be assigned to a // [RTCSessionDescription](https://developer.mozilla.org/en-US/docs/Web/API/RTCSessionDescription) string message = 2; }