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