leonitousconforti/tinyburg

View on GitHub
packages/architect/protobuf/rtc_service.proto

Summary

Maintainability
Test Coverage
// 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;
}