- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / api / socket.idl
1 // Copyright (c) 2012 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.socket</code> API to send and receive data over the
6 // network using TCP and UDP connections.
7 namespace socket {
8   enum SocketType {
9     tcp,
10     udp
11   };
12
13   // The socket options.
14   dictionary CreateOptions {
15   };
16
17   dictionary CreateInfo {
18     // The id of the newly created socket.
19     long socketId;
20   };
21
22   callback CreateCallback = void (CreateInfo createInfo);
23
24   callback ConnectCallback = void (long result);
25
26   callback BindCallback = void (long result);
27
28   callback ListenCallback = void (long result);
29
30   dictionary AcceptInfo {
31     long resultCode;
32     // The id of the accepted socket.
33     long? socketId;
34   };
35
36   callback AcceptCallback = void (AcceptInfo acceptInfo);
37
38   dictionary ReadInfo {
39     // The resultCode returned from the underlying read() call.
40     long resultCode;
41
42     ArrayBuffer data;
43   };
44
45   callback ReadCallback = void (ReadInfo readInfo);
46
47   dictionary WriteInfo {
48     // The number of bytes sent, or a negative error code.
49     long bytesWritten;
50   };
51
52   callback WriteCallback = void (WriteInfo writeInfo);
53
54   dictionary RecvFromInfo {
55     // The resultCode returned from the underlying recvfrom() call.
56     long resultCode;
57
58     ArrayBuffer data;
59
60     // The address of the remote machine.
61     DOMString address;
62
63     long port;
64   };
65
66   dictionary SocketInfo {
67     // The type of the passed socket. This will be <code>tcp</code> or
68     // <code>udp</code>.
69     SocketType socketType;
70
71     // Whether or not the underlying socket is connected.
72     //
73     // For <code>tcp</code> sockets, this will remain true even if the remote
74     // peer has disconnected. Reading or writing to the socket may then result
75     // in an error, hinting that this socket should be disconnected via
76     // <code>disconnect()</code>.
77     //
78     // For <code>udp</code> sockets, this just represents whether a default
79     // remote address has been specified for reading and writing packets.
80     boolean connected;
81
82     // If the underlying socket is connected, contains the IPv4/6 address of
83     // the peer.
84     DOMString? peerAddress;
85
86     // If the underlying socket is connected, contains the port of the
87     // connected peer.
88     long? peerPort;
89
90     // If the underlying socket is bound or connected, contains its local
91     // IPv4/6 address.
92     DOMString? localAddress;
93
94     // If the underlying socket is bound or connected, contains its local port.
95     long? localPort;
96   };
97
98   dictionary NetworkInterface {
99     // The underlying name of the adapter. On *nix, this will typically be
100     // "eth0", "lo", etc.
101     DOMString name;
102
103     // The available IPv4/6 address.
104     DOMString address;
105   };
106
107   callback RecvFromCallback = void (RecvFromInfo recvFromInfo);
108
109   callback SendToCallback = void (WriteInfo writeInfo);
110
111   callback SetKeepAliveCallback = void (boolean result);
112
113   callback SetNoDelayCallback = void (boolean result);
114
115   callback GetInfoCallback = void (SocketInfo result);
116
117   callback GetNetworkCallback = void (NetworkInterface[] result);
118
119   callback JoinGroupCallback = void (long result);
120
121   callback LeaveGroupCallback = void (long result);
122
123   callback SetMulticastTimeToLiveCallback = void (long result);
124
125   callback SetMulticastLoopbackModeCallback = void (long result);
126
127   callback GetJoinedGroupsCallback = void (DOMString[] groups);
128
129   interface Functions {
130     // Creates a socket of the specified type that will connect to the specified
131     // remote machine.
132     // |type| : The type of socket to create. Must be <code>tcp</code> or
133     // <code>udp</code>.
134     // |options| : The socket options.
135     // |callback| : Called when the socket has been created.
136     static void create(SocketType type,
137                        optional CreateOptions options,
138                        CreateCallback callback);
139
140     // Destroys the socket. Each socket created should be destroyed after use.
141     // |socketId| : The socketId.
142     static void destroy(long socketId);
143
144     // Connects the socket to the remote machine (for a <code>tcp</code>
145     // socket). For a <code>udp</code> socket, this sets the default address
146     // which packets are sent to and read from for <code>read()</code>
147     // and <code>write()</code> calls.
148     // |socketId| : The socketId.
149     // |hostname| : The hostname or IP address of the remote machine.
150     // |port| : The port of the remote machine.
151     // |callback| : Called when the connection attempt is complete.
152     static void connect(long socketId,
153                         DOMString hostname,
154                         long port,
155                         ConnectCallback callback);
156
157     // Binds the local address for socket. Currently, it does not support
158     // TCP socket.
159     // |socketId| : The socketId.
160     // |address| : The address of the local machine.
161     // |port| : The port of the local machine.
162     // |callback| : Called when the bind attempt is complete.
163     static void bind(long socketId,
164                      DOMString address,
165                      long port,
166                      BindCallback callback);
167
168     // Disconnects the socket. For UDP sockets, <code>disconnect</code> is a
169     // non-operation but is safe to call.
170     // |socketId| : The socketId.
171     static void disconnect(long socketId);
172
173     // Reads data from the given connected socket.
174     // |socketId| : The socketId.
175     // |bufferSize| : The read buffer size.
176     // |callback| : Delivers data that was available to be read without
177     // blocking.
178     static void read(long socketId,
179                      optional long bufferSize,
180                      ReadCallback callback);
181
182     // Writes data on the given connected socket.
183     // |socketId| : The socketId.
184     // |data| : The data to write.
185     // |callback| : Called when the write operation completes without blocking
186     // or an error occurs.
187     static void write(long socketId,
188                       ArrayBuffer data,
189                       WriteCallback callback);
190
191     // Receives data from the given UDP socket.
192     // |socketId| : The socketId.
193     // |bufferSize| : The receive buffer size.
194     // |callback| : Returns result of the recvFrom operation.
195     static void recvFrom(long socketId,
196                          optional long bufferSize,
197                          RecvFromCallback callback);
198
199     // Sends data on the given UDP socket to the given address and port.
200     // |socketId| : The socketId.
201     // |data| : The data to write.
202     // |address| : The address of the remote machine.
203     // |port| : The port of the remote machine.
204     // |callback| : Called when the send operation completes without blocking
205     // or an error occurs.
206     static void sendTo(long socketId,
207                        ArrayBuffer data,
208                        DOMString address,
209                        long port,
210                        SendToCallback callback);
211
212     // This method applies to TCP sockets only.
213     // Listens for connections on the specified port and address. This
214     // effectively makes this a server socket, and client socket
215     // functions (connect, read, write) can no longer be used on this socket.
216     // |socketId| : The socketId.
217     // |address| : The address of the local machine.
218     // |port| : The port of the local machine.
219     // |backlog| : Length of the socket's listen queue.
220     // |callback| : Called when listen operation completes.
221     static void listen(long socketId,
222                        DOMString address,
223                        long port,
224                        optional long backlog,
225                        ListenCallback callback);
226
227     // This method applies to TCP sockets only.
228     // Registers a callback function to be called when a connection is
229     // accepted on this listening server socket. Listen must be called first.
230     // If there is already an active accept callback, this callback will be
231     // invoked immediately with an error as the resultCode.
232     // |socketId| : The socketId.
233     // |callback| : The callback is invoked when a new socket is accepted.
234     static void accept(long socketId,
235                        AcceptCallback callback);
236
237     // Enables or disables the keep-alive functionality for a TCP connection.
238     // |socketId| : The socketId.
239     // |enable| : If true, enable keep-alive functionality.
240     // |delay| : Set the delay seconds between the last data packet received
241     // and the first keepalive probe. Default is 0.
242     // |callback| : Called when the setKeepAlive attempt is complete.
243     static void setKeepAlive(long socketId,
244                              boolean enable,
245                              optional long delay,
246                              SetKeepAliveCallback callback);
247
248     // Sets or clears <code>TCP_NODELAY</code> for a TCP connection. Nagle's
249     // algorithm will be disabled when <code>TCP_NODELAY</code> is set.
250     // |socketId| : The socketId.
251     // |noDelay| : If true, disables Nagle's algorithm.
252     // |callback| : Called when the setNoDelay attempt is complete.
253     static void setNoDelay(long socketId,
254                            boolean noDelay,
255                            SetNoDelayCallback callback);
256
257     // Retrieves the state of the given socket.
258     // |socketId| : The socketId.
259     // |callback| : Called when the state is available.
260     static void getInfo(long socketId,
261                         GetInfoCallback callback);
262
263     // Retrieves information about local adapters on this system.
264     // |callback| : Called when local adapter information is available.
265     static void getNetworkList(GetNetworkCallback callback);
266
267     // Join the multicast group and start to receive packets from that group.
268     // The socket must be of UDP type and must be bound to a local port
269     // before calling this method.
270     // |socketId| : The socketId.
271     // |address| : The group address to join. Domain names are not supported.
272     // |callback| : Called when the join group operation is done with an
273     // integer parameter indicating the platform-independent error code.
274     static void joinGroup(long socketId,
275                           DOMString address,
276                           JoinGroupCallback callback);
277
278     // Leave the multicast group previously joined using <code>joinGroup</code>.
279     // It's not necessary to leave the multicast group before destroying the
280     // socket or exiting. This is automatically called by the OS.
281     //
282     // Leaving the group will prevent the router from sending multicast
283     // datagrams to the local host, presuming no other process on the host is
284     // still joined to the group.
285     //
286     // |socketId| : The socketId.
287     // |address| : The group address to leave. Domain names are not supported.
288     // |callback| : Called when the leave group operation is done with an
289     // integer parameter indicating the platform-independent error code.
290     static void leaveGroup(long socketId, DOMString address,
291                            LeaveGroupCallback callback);
292
293     // Set the time-to-live of multicast packets sent to the multicast group.
294     //
295     // Calling this method does not require multicast permissions.
296     //
297     // |socketId| : The socketId.
298     // |ttl| : The time-to-live value.
299     // |callback| : Called when the configuration operation is done.
300     static void setMulticastTimeToLive(
301         long socketId,
302         long ttl,
303         SetMulticastTimeToLiveCallback callback);
304
305     // Set whether multicast packets sent from the host to the multicast
306     // group will be looped back to the host.
307     //
308     // Note: the behavior of <code>setMulticastLoopbackMode</code> is slightly
309     // different between Windows and Unix-like systems. The inconsistency
310     // happens only when there is more than one application on the same host
311     // joined to the same multicast group while having different settings on
312     // multicast loopback mode. On Windows, the applications with loopback off
313     // will not RECEIVE the loopback packets; while on Unix-like systems, the
314     // applications with loopback off will not SEND the loopback packets to
315     // other applications on the same host. See MSDN: http://goo.gl/6vqbj
316     //
317     // Calling this method does not require multicast permissions.
318     //
319     // |socketId| : The socketId.
320     // |enabled| : Indicate whether to enable loopback mode.
321     // |callback| : Called when the configuration operation is done.
322     static void setMulticastLoopbackMode(
323         long socketId,
324         boolean enabled,
325         SetMulticastLoopbackModeCallback callback);
326
327     // Get the multicast group addresses the socket is currently joined to.
328     // |socketId| : The socketId.
329     // |callback| : Called with an array of strings of the result.
330     static void getJoinedGroups(long socketId,
331                                 GetJoinedGroupsCallback callback);
332   };
333
334 };