// 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);
};