summaryrefslogtreecommitdiffstats
path: root/dom/presentation/interfaces/nsIPresentationControlService.idl
blob: d4b967b003619d498fa18c43deed2d81877548d1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsISupports.idl"

interface nsIPresentationControlChannel;

%{C++
#define PRESENTATION_CONTROL_SERVICE_CONTACT_ID \
  "@mozilla.org/presentation/control-service;1"
%}

/*
 * The device information required for establishing control channel.
 */
[scriptable, uuid(296fd171-e4d0-4de0-99ff-ad8ed52ddef3)]
interface nsITCPDeviceInfo: nsISupports
{
  readonly attribute AUTF8String id;
  readonly attribute AUTF8String address;
  readonly attribute uint16_t port;
  // SHA-256 fingerprint of server certificate. Empty string represents
  // server doesn't support TLS or not available.
  readonly attribute AUTF8String certFingerprint;
};

[scriptable, uuid(09bddfaf-fcc2-4dc9-b33e-a509a1c2fb6d)]
interface nsIPresentationControlServerListener: nsISupports
{
  /**
   * Callback while the server is ready or restarted.
   * @param   aPort
   *          The port of the server socket.
   * @param   aCertFingerprint
   *          The SHA-256 fingerprint of TLS server certificate.
   *          Empty string represents server started without encryption.
   */
  void onServerReady(in uint16_t aPort, in AUTF8String aCertFingerprint);

  /**
   * Callback while the server is stopped or fails to start.
   * @param   aResult
   *          The error cause of server stopped or the reason of
   *          start failure.
   *          NS_OK means the server is stopped by close.
   */
  void onServerStopped(in nsresult aResult);

  /**
   * Callback while the remote host is requesting to start a presentation session.
   * @param aDeviceInfo The device information related to the remote host.
   * @param aUrl The URL requested to open by remote device.
   * @param aPresentationId The Id for representing this session.
   * @param aControlChannel The control channel for this session.
   */
  void onSessionRequest(in nsITCPDeviceInfo aDeviceInfo,
                        in DOMString aUrl,
                        in DOMString aPresentationId,
                        in nsIPresentationControlChannel aControlChannel);

  /**
   * Callback while the remote host is requesting to terminate a presentation session.
   * @param aDeviceInfo The device information related to the remote host.
   * @param aPresentationId The Id for representing this session.
   * @param aControlChannel The control channel for this session.
   * @param aIsFromReceiver true if termination is initiated by receiver.
   */
  void onTerminateRequest(in nsITCPDeviceInfo aDeviceInfo,
                          in DOMString aPresentationId,
                          in nsIPresentationControlChannel aControlChannel,
                          in boolean aIsFromReceiver);

  /**
   * Callback while the remote host is requesting to reconnect a presentation session.
   * @param aDeviceInfo The device information related to the remote host.
   * @param aUrl The URL requested to open by remote device.
   * @param aPresentationId The Id for representing this session.
   * @param aControlChannel The control channel for this session.
   */
  void onReconnectRequest(in nsITCPDeviceInfo aDeviceInfo,
                          in DOMString url,
                          in DOMString aPresentationId,
                          in nsIPresentationControlChannel aControlChannel);
};

/**
 * Presentation control service which can be used for both presentation
 * control client and server.
 */
[scriptable, uuid(55d6b605-2389-4aae-a8fe-60d4440540ea)]
interface nsIPresentationControlService: nsISupports
{
  /**
   * This method initializes server socket. Caller should set listener and
   * monitor onServerReady event to get the correct server info.
   * @param   aEncrypted
   *          True for using TLS control channel.
   * @param   aPort
   *          The port of the server socket.  Pass 0 or opt-out to indicate no
   *          preference, and a port will be selected automatically.
   * @throws  NS_ERROR_FAILURE if the server socket has been inited or the
   *          server socket can not be inited.
   */
  void startServer(in boolean aEncrypted, [optional] in uint16_t aPort);

  /**
   * Request connection to designated remote presentation control receiver.
   * @param   aDeviceInfo
   *          The remtoe device info for establish connection.
   * @returns The control channel for this session.
   * @throws  NS_ERROR_FAILURE if the Id hasn't been inited.
   */
  nsIPresentationControlChannel connect(in nsITCPDeviceInfo aDeviceInfo);

  /**
   * Check the compatibility to remote presentation control server.
   * @param  aVersion
   *         The version of remote server.
   */
  boolean isCompatibleServer(in uint32_t aVersion);

  /**
   * Close server socket and call |listener.onClose(NS_OK)|
   */
  void close();

  /**
   * Get the listen port of the TCP socket, valid after the server is ready.
   * 0 indicates the server socket is not ready or is closed.
   */
  readonly attribute uint16_t port;

  /**
   * The protocol version implemented by this server.
   */
  readonly attribute uint32_t version;

  /**
   * The id of the TCP presentation server. |requestSession| won't
   * work until the |id| is set.
   */
  attribute AUTF8String id;

  /**
   * The fingerprint of the TLS server certificate.
   * Empty string indicates the server is not ready or not encrypted.
   */
  attribute AUTF8String certFingerprint;

  /**
   * The listener for handling events of this presentation control server.
   * Listener must be provided before invoke |startServer| and |close|.
   */
  attribute nsIPresentationControlServerListener listener;
};