// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto3";

option optimize_for = LITE_RUNTIME;

// Note that the package name is used to build the service URL when talking to
// the FTL server.
package google.internal.communications.instantmessaging.v1;

import "ftl.proto";

service PeerToPeer {
  rpc GetICEServer(remoting.ftl.GetICEServerRequest)
      returns (remoting.ftl.GetICEServerResponse) {}
}

service Registration {
  rpc SignInGaia(remoting.ftl.SignInGaiaRequest)
      returns (remoting.ftl.SignInGaiaResponse) {}
}

service Messaging {
  rpc PullMessages(remoting.ftl.PullMessagesRequest)
      returns (remoting.ftl.PullMessagesResponse) {}
  rpc AckMessages(remoting.ftl.AckMessagesRequest)
      returns (remoting.ftl.AckMessagesResponse) {}
  rpc ReceiveMessages(remoting.ftl.ReceiveMessagesRequest)
      returns (stream remoting.ftl.ReceiveMessagesResponse) {}
  rpc SendMessage(remoting.ftl.InboxSendRequest)
      returns (remoting.ftl.InboxSendResponse) {}
}
