// Copyright (c) 2012 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.

// Interface of a host that receives commands from a Chromoting client.
//
// This interface handles control messages defined in control.proto.

#ifndef REMOTING_PROTOCOL_HOST_STUB_H_
#define REMOTING_PROTOCOL_HOST_STUB_H_

#include "base/macros.h"

namespace remoting {
namespace protocol {

class AudioControl;
class Capabilities;
class ClientResolution;
class ExtensionMessage;
class PairingRequest;
class PeerConnectionParameters;
class SelectDesktopDisplayRequest;
class VideoControl;

class HostStub {
 public:
  HostStub() {}

  // Notification of the client dimensions and pixel density.
  // This may be used to resize the host display to match the client area.
  virtual void NotifyClientResolution(const ClientResolution& resolution) = 0;

  // Configures video update properties. Currently only pausing & resuming the
  // video channel is supported.
  virtual void ControlVideo(const VideoControl& video_control) = 0;

  // Configures audio properties. Currently only pausing & resuming the audio
  // channel is supported.
  virtual void ControlAudio(const AudioControl& audio_control) = 0;

  // Configures peer connection. This will have no effect if the host doesn't
  // support the parameters or the parameters are invalid.
  virtual void ControlPeerConnection(
      const PeerConnectionParameters& parameters) = 0;

  // Passes the set of capabilities supported by the client to the host.
  virtual void SetCapabilities(const Capabilities& capabilities) = 0;

  // Requests pairing between the host and client for PIN-less authentication.
  virtual void RequestPairing(const PairingRequest& pairing_request) = 0;

  // Deliver an extension message from the client to the host.
  virtual void DeliverClientMessage(const ExtensionMessage& message) = 0;

  // Select the specified host display.
  virtual void SelectDesktopDisplay(
      const SelectDesktopDisplayRequest& select_display) = 0;

 protected:
  virtual ~HostStub() {}

 private:
  DISALLOW_COPY_AND_ASSIGN(HostStub);
};

}  // namespace protocol
}  // namespace remoting

#endif  // REMOTING_PROTOCOL_HOST_STUB_H_
