• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Use the <code>chrome.sockets.tcp</code> API to send and receive data over the
6// network using TCP connections. This API supersedes the TCP functionality
7// previously found in the <code>chrome.socket</code> API.
8namespace sockets.tcp {
9  // The socket properties specified in the <code>create</code> or
10  // <code>update</code> function. Each property is optional. If a property
11  // value is not specified, a default value is used when calling
12  // <code>create</code>, or the existing value if preserved when calling
13  // <code>update</code>.
14  dictionary SocketProperties {
15    // Flag indicating if the socket is left open when the event page of
16    // the application is unloaded (see
17    // <a href="http://developer.chrome.com/apps/app_lifecycle.html">Manage App
18    // Lifecycle</a>). The default value is "false." When the application is
19    // loaded, any sockets previously opened with persistent=true can be fetched
20    // with <code>getSockets</code>.
21    boolean? persistent;
22
23    // An application-defined string associated with the socket.
24    DOMString? name;
25
26    // The size of the buffer used to receive data. The default value is 4096.
27    long? bufferSize;
28  };
29
30  // Result of <code>create</code> call.
31  dictionary CreateInfo {
32    // The ID of the newly created socket. Note that socket IDs created from
33    // this API are not compatible with socket IDs created from other APIs, such
34    // as the deprecated <code>$(ref:socket)</code> API.
35    long socketId;
36  };
37
38  // Callback from the <code>create</code> method.
39  // |createInfo| : The result of the socket creation.
40  callback CreateCallback = void (CreateInfo createInfo);
41
42  // Callback from the <code>connect</code> method.
43  // |result| : The result code returned from the underlying network call.
44  // A negative value indicates an error.
45  callback ConnectCallback = void (long result);
46
47  // Callback from the <code>disconnect</code> method.
48  callback DisconnectCallback = void ();
49
50  // Result of the <code>send</code> method.
51  dictionary SendInfo {
52    // The result code returned from the underlying network call.
53    // A negative value indicates an error.
54    long resultCode;
55
56    // The number of bytes sent (if result == 0)
57    long? bytesSent;
58  };
59
60  // Callback from the <code>send</code> method.
61  // |sendInfo| : Result of the <code>send</code> method.
62  callback SendCallback = void (SendInfo sendInfo);
63
64  // Callback from the <code>close</code> method.
65  callback CloseCallback = void ();
66
67  // Callback from the <code>update</code> method.
68  callback UpdateCallback = void ();
69
70  // Callback from the <code>setPaused</code> method.
71  callback SetPausedCallback = void ();
72
73  // Callback from the <code>setKeepAliveCallback</code> method.
74  // |result| : The result code returned from the underlying network call.
75  // A negative value indicates an error.
76  callback SetKeepAliveCallback = void (long result);
77
78  // Callback from the <code>setNodeDelay</code> method.
79  // |result| : The result code returned from the underlying network call.
80  // A negative value indicates an error.
81  callback SetNoDelayCallback = void (long result);
82
83  // Result of the <code>getInfo</code> method.
84  dictionary SocketInfo {
85    // The socket identifier.
86    long socketId;
87
88    // Flag indicating whether the socket is left open when the application is
89    // suspended (see <code>SocketProperties.persistent</code>).
90    boolean persistent;
91
92    // Application-defined string associated with the socket.
93    DOMString? name;
94
95    // The size of the buffer used to receive data. If no buffer size has been
96    // specified explictly, the value is not provided.
97    long? bufferSize;
98
99    // Flag indicating whether a connected socket blocks its peer from sending
100    // more data (see <code>setPaused</code>).
101    boolean paused;
102
103    // Flag indicating whether the socket is connected to a remote peer.
104    boolean connected;
105
106    // If the underlying socket is connected, contains its local IPv4/6 address.
107    DOMString? localAddress;
108
109    // If the underlying socket is connected, contains its local port.
110    long? localPort;
111
112    // If the underlying socket is connected, contains the peer/ IPv4/6 address.
113    DOMString? peerAddress;
114
115    // If the underlying socket is connected, contains the peer port.
116    long? peerPort;
117  };
118
119  // Callback from the <code>getInfo</code> method.
120  // |socketInfo| : Object containing the socket information.
121  callback GetInfoCallback = void (SocketInfo socketInfo);
122
123  // Callback from the <code>getSockets</code> method.
124  // |socketInfos| : Array of object containing socket information.
125  callback GetSocketsCallback = void (SocketInfo[] socketInfos);
126
127  // Data from an <code>onReceive</code> event.
128  dictionary ReceiveInfo {
129    // The socket identifier.
130    long socketId;
131
132    // The data received, with a maxium size of <code>bufferSize</code>.
133    ArrayBuffer data;
134  };
135
136  // Data from an <code>onReceiveError</code> event.
137  dictionary ReceiveErrorInfo {
138    // The socket identifier.
139    long socketId;
140
141     // The result code returned from the underlying network call.
142    long resultCode;
143  };
144
145  interface Functions {
146    // Creates a TCP socket.
147    // |properties| : The socket properties (optional).
148    // |callback| : Called when the socket has been created.
149    static void create(optional SocketProperties properties,
150                       CreateCallback callback);
151
152    // Updates the socket properties.
153    // |socketId| : The socket identifier.
154    // |properties| : The properties to update.
155    // |callback| : Called when the properties are updated.
156    static void update(long socketId,
157                       SocketProperties properties,
158                       optional UpdateCallback callback);
159
160    // Enables or disables the application from receiving messages from its
161    // peer. The default value is "false". Pausing a socket is typically used
162    // by an application to throttle data sent by its peer. When a socket is
163    // paused, no <code>onReceive</code> event is raised. When a socket is
164    // connected and un-paused, <code>onReceive</code> events are raised again
165    // when messages are received.
166    static void setPaused(long socketId,
167                          boolean paused,
168                          optional SetPausedCallback callback);
169
170    // Enables or disables the keep-alive functionality for a TCP connection.
171    // |socketId| : The socket identifier.
172    // |enable| : If true, enable keep-alive functionality.
173    // |delay| : Set the delay seconds between the last data packet received
174    // and the first keepalive probe. Default is 0.
175    // |callback| : Called when the setKeepAlive attempt is complete.
176    static void setKeepAlive(long socketId,
177                             boolean enable,
178                             optional long delay,
179                             SetKeepAliveCallback callback);
180
181    // Sets or clears <code>TCP_NODELAY</code> for a TCP connection. Nagle's
182    // algorithm will be disabled when <code>TCP_NODELAY</code> is set.
183    // |socketId| : The socket identifier.
184    // |noDelay| : If true, disables Nagle's algorithm.
185    // |callback| : Called when the setNoDelay attempt is complete.
186    static void setNoDelay(long socketId,
187                           boolean noDelay,
188                           SetNoDelayCallback callback);
189
190    // Connects the socket to a remote machine. When the <code>connect</code>
191    // operation completes successfully, <code>onReceive</code> events are
192    // raised when data is received from the peer. If a network error occurs
193    // while the runtime is receiving packets, a <code>onReceiveError</code>
194    // event is raised, at which point no more <code>onReceive</code> event will
195    // be raised for this socket until the <code>resume</code> method is called.
196    // |socketId| : The socket identifier.
197    // |peerAddress| : The address of the remote machine. DNS name, IPv4 and
198    //  IPv6 formats are supported.
199    // |peerPort| : The port of the remote machine.
200    // |callback| : Called when the connect attempt is complete.
201    static void connect(long socketId,
202                        DOMString peerAddress,
203                        long peerPort,
204                        ConnectCallback callback);
205
206    // Disconnects the socket.
207    // |socketId| : The socket identifier.
208    // |callback| : Called when the disconnect attempt is complete.
209    static void disconnect(long socketId,
210                           optional DisconnectCallback callback);
211
212    // Sends data on the given TCP socket.
213    // |socketId| : The socket identifier.
214    // |data| : The data to send.
215    // |callback| : Called when the <code>send</code> operation completes.
216    static void send(long socketId,
217                     ArrayBuffer data,
218                     SendCallback callback);
219
220    // Closes the socket and releases the address/port the socket is bound to.
221    // Each socket created should be closed after use. The socket id is no
222    // no longer valid as soon at the function is called. However, the socket is
223    // guaranteed to be closed only when the callback is invoked.
224    // |socketId| : The socket identifier.
225    // |callback| : Called when the <code>close</code> operation completes.
226    static void close(long socketId,
227                      optional CloseCallback callback);
228
229    // Retrieves the state of the given socket.
230    // |socketId| : The socket identifier.
231    // |callback| : Called when the socket state is available.
232    static void getInfo(long socketId,
233                        GetInfoCallback callback);
234
235    // Retrieves the list of currently opened sockets owned by the application.
236    // |callback| : Called when the list of sockets is available.
237    static void getSockets(GetSocketsCallback callback);
238  };
239
240  interface Events {
241    // Event raised when data has been received for a given socket.
242    // |info| : The event data.
243    static void onReceive(ReceiveInfo info);
244
245    // Event raised when a network error occured while the runtime was waiting
246    // for data on the socket address and port. Once this event is raised, the
247    // socket is set to <code>paused</code> and no more <code>onReceive</code>
248    // events are raised for this socket.
249    // |info| : The event data.
250    static void onReceiveError(ReceiveErrorInfo info);
251  };
252};
253