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. 7namespace 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 // The prefix length 107 long prefixLength; 108 }; 109 110 callback RecvFromCallback = void (RecvFromInfo recvFromInfo); 111 112 callback SendToCallback = void (WriteInfo writeInfo); 113 114 callback SetKeepAliveCallback = void (boolean result); 115 116 callback SetNoDelayCallback = void (boolean result); 117 118 callback GetInfoCallback = void (SocketInfo result); 119 120 callback GetNetworkCallback = void (NetworkInterface[] result); 121 122 callback JoinGroupCallback = void (long result); 123 124 callback LeaveGroupCallback = void (long result); 125 126 callback SetMulticastTimeToLiveCallback = void (long result); 127 128 callback SetMulticastLoopbackModeCallback = void (long result); 129 130 callback GetJoinedGroupsCallback = void (DOMString[] groups); 131 132 interface Functions { 133 // Creates a socket of the specified type that will connect to the specified 134 // remote machine. 135 // |type| : The type of socket to create. Must be <code>tcp</code> or 136 // <code>udp</code>. 137 // |options| : The socket options. 138 // |callback| : Called when the socket has been created. 139 static void create(SocketType type, 140 optional CreateOptions options, 141 CreateCallback callback); 142 143 // Destroys the socket. Each socket created should be destroyed after use. 144 // |socketId| : The socketId. 145 static void destroy(long socketId); 146 147 // Connects the socket to the remote machine (for a <code>tcp</code> 148 // socket). For a <code>udp</code> socket, this sets the default address 149 // which packets are sent to and read from for <code>read()</code> 150 // and <code>write()</code> calls. 151 // |socketId| : The socketId. 152 // |hostname| : The hostname or IP address of the remote machine. 153 // |port| : The port of the remote machine. 154 // |callback| : Called when the connection attempt is complete. 155 static void connect(long socketId, 156 DOMString hostname, 157 long port, 158 ConnectCallback callback); 159 160 // Binds the local address for socket. Currently, it does not support 161 // TCP socket. 162 // |socketId| : The socketId. 163 // |address| : The address of the local machine. 164 // |port| : The port of the local machine. 165 // |callback| : Called when the bind attempt is complete. 166 static void bind(long socketId, 167 DOMString address, 168 long port, 169 BindCallback callback); 170 171 // Disconnects the socket. For UDP sockets, <code>disconnect</code> is a 172 // non-operation but is safe to call. 173 // |socketId| : The socketId. 174 static void disconnect(long socketId); 175 176 // Reads data from the given connected socket. 177 // |socketId| : The socketId. 178 // |bufferSize| : The read buffer size. 179 // |callback| : Delivers data that was available to be read without 180 // blocking. 181 static void read(long socketId, 182 optional long bufferSize, 183 ReadCallback callback); 184 185 // Writes data on the given connected socket. 186 // |socketId| : The socketId. 187 // |data| : The data to write. 188 // |callback| : Called when the write operation completes without blocking 189 // or an error occurs. 190 static void write(long socketId, 191 ArrayBuffer data, 192 WriteCallback callback); 193 194 // Receives data from the given UDP socket. 195 // |socketId| : The socketId. 196 // |bufferSize| : The receive buffer size. 197 // |callback| : Returns result of the recvFrom operation. 198 static void recvFrom(long socketId, 199 optional long bufferSize, 200 RecvFromCallback callback); 201 202 // Sends data on the given UDP socket to the given address and port. 203 // |socketId| : The socketId. 204 // |data| : The data to write. 205 // |address| : The address of the remote machine. 206 // |port| : The port of the remote machine. 207 // |callback| : Called when the send operation completes without blocking 208 // or an error occurs. 209 static void sendTo(long socketId, 210 ArrayBuffer data, 211 DOMString address, 212 long port, 213 SendToCallback callback); 214 215 // This method applies to TCP sockets only. 216 // Listens for connections on the specified port and address. This 217 // effectively makes this a server socket, and client socket 218 // functions (connect, read, write) can no longer be used on this socket. 219 // |socketId| : The socketId. 220 // |address| : The address of the local machine. 221 // |port| : The port of the local machine. 222 // |backlog| : Length of the socket's listen queue. 223 // |callback| : Called when listen operation completes. 224 static void listen(long socketId, 225 DOMString address, 226 long port, 227 optional long backlog, 228 ListenCallback callback); 229 230 // This method applies to TCP sockets only. 231 // Registers a callback function to be called when a connection is 232 // accepted on this listening server socket. Listen must be called first. 233 // If there is already an active accept callback, this callback will be 234 // invoked immediately with an error as the resultCode. 235 // |socketId| : The socketId. 236 // |callback| : The callback is invoked when a new socket is accepted. 237 static void accept(long socketId, 238 AcceptCallback callback); 239 240 // Enables or disables the keep-alive functionality for a TCP connection. 241 // |socketId| : The socketId. 242 // |enable| : If true, enable keep-alive functionality. 243 // |delay| : Set the delay seconds between the last data packet received 244 // and the first keepalive probe. Default is 0. 245 // |callback| : Called when the setKeepAlive attempt is complete. 246 static void setKeepAlive(long socketId, 247 boolean enable, 248 optional long delay, 249 SetKeepAliveCallback callback); 250 251 // Sets or clears <code>TCP_NODELAY</code> for a TCP connection. Nagle's 252 // algorithm will be disabled when <code>TCP_NODELAY</code> is set. 253 // |socketId| : The socketId. 254 // |noDelay| : If true, disables Nagle's algorithm. 255 // |callback| : Called when the setNoDelay attempt is complete. 256 static void setNoDelay(long socketId, 257 boolean noDelay, 258 SetNoDelayCallback callback); 259 260 // Retrieves the state of the given socket. 261 // |socketId| : The socketId. 262 // |callback| : Called when the state is available. 263 static void getInfo(long socketId, 264 GetInfoCallback callback); 265 266 // Retrieves information about local adapters on this system. 267 // |callback| : Called when local adapter information is available. 268 static void getNetworkList(GetNetworkCallback callback); 269 270 // Join the multicast group and start to receive packets from that group. 271 // The socket must be of UDP type and must be bound to a local port 272 // before calling this method. 273 // |socketId| : The socketId. 274 // |address| : The group address to join. Domain names are not supported. 275 // |callback| : Called when the join group operation is done with an 276 // integer parameter indicating the platform-independent error code. 277 static void joinGroup(long socketId, 278 DOMString address, 279 JoinGroupCallback callback); 280 281 // Leave the multicast group previously joined using <code>joinGroup</code>. 282 // It's not necessary to leave the multicast group before destroying the 283 // socket or exiting. This is automatically called by the OS. 284 // 285 // Leaving the group will prevent the router from sending multicast 286 // datagrams to the local host, presuming no other process on the host is 287 // still joined to the group. 288 // 289 // |socketId| : The socketId. 290 // |address| : The group address to leave. Domain names are not supported. 291 // |callback| : Called when the leave group operation is done with an 292 // integer parameter indicating the platform-independent error code. 293 static void leaveGroup(long socketId, DOMString address, 294 LeaveGroupCallback callback); 295 296 // Set the time-to-live of multicast packets sent to the multicast group. 297 // 298 // Calling this method does not require multicast permissions. 299 // 300 // |socketId| : The socketId. 301 // |ttl| : The time-to-live value. 302 // |callback| : Called when the configuration operation is done. 303 static void setMulticastTimeToLive( 304 long socketId, 305 long ttl, 306 SetMulticastTimeToLiveCallback callback); 307 308 // Set whether multicast packets sent from the host to the multicast 309 // group will be looped back to the host. 310 // 311 // Note: the behavior of <code>setMulticastLoopbackMode</code> is slightly 312 // different between Windows and Unix-like systems. The inconsistency 313 // happens only when there is more than one application on the same host 314 // joined to the same multicast group while having different settings on 315 // multicast loopback mode. On Windows, the applications with loopback off 316 // will not RECEIVE the loopback packets; while on Unix-like systems, the 317 // applications with loopback off will not SEND the loopback packets to 318 // other applications on the same host. See MSDN: http://goo.gl/6vqbj 319 // 320 // Calling this method does not require multicast permissions. 321 // 322 // |socketId| : The socketId. 323 // |enabled| : Indicate whether to enable loopback mode. 324 // |callback| : Called when the configuration operation is done. 325 static void setMulticastLoopbackMode( 326 long socketId, 327 boolean enabled, 328 SetMulticastLoopbackModeCallback callback); 329 330 // Get the multicast group addresses the socket is currently joined to. 331 // |socketId| : The socketId. 332 // |callback| : Called with an array of strings of the result. 333 static void getJoinedGroups(long socketId, 334 GetJoinedGroupsCallback callback); 335 }; 336 337}; 338