// Copyright 2015 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.

module extensions.mojom;

struct WiFiDisplayMediaPacket {
  array<uint8> data;
};

// WiFiDisplaySessionService class provides access to the network for
// the render-hosted Wi-Fi Display session.
interface WiFiDisplaySessionService {
  SetClient(WiFiDisplaySessionServiceClient client);

  // Requires connection to a sink using the given authentication information.
  // Note: 'auth_method' values must correspond to 'enum AuthenticationMethod'
  // from display_source.idl
  Connect(int32 sink_id, int32 auth_method, string auth_data);

  // Drops the established connection to the connected sink.
  Disconnect();

  // Sends a controlling mesage to the connected sink.
  SendMessage(string message);
};

interface WiFiDisplaySessionServiceClient {
  // Notification of a successfull connection to a sink.
  OnConnected(string local_ip_address, string sink_ip_address);

  // Notification of a handled connection request.
  OnConnectRequestHandled(bool success, string error_message);

  // Notification of a session termination.
  OnTerminated();

  // Notification of a handled termination request.
  OnDisconnectRequestHandled(bool success, string error_message);

  // Notification of an error occurred during the session.
  // Note: 'type' values must correspond to 'enum ErrorType'
  // from display_source.idl
  OnError(int32 type, string description);

  // Invoked to transmit a controlling message from
  // the connected sink.
  OnMessage(string data);
};

// This interface is used to send media stream to the
// connected sink.
interface WiFiDisplayMediaService {
  // Sets the destination point for sending media stream.
  SetDesinationPoint(string ip_address, int32 port) => (bool success);

  // Sends media packet to the destination point.
  SendMediaPacket(WiFiDisplayMediaPacket packet);
};
