// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Use the <code>chrome.sockets.tcpServer</code> API to create server // applications using TCP connections. This API supersedes the TCP functionality // previously found in the <code>chrome.socket</code> API. namespace sockets.tcpServer { // The socket properties specified in the <code>create</code> or // <code>update</code> function. Each property is optional. If a property // value is not specified, a default value is used when calling // <code>create</code>, or the existing value if preserved when calling // <code>update</code>. dictionary SocketProperties { // Flag indicating if the socket remains open when the event page of the // application is unloaded (see // <a href="http://developer.chrome.com/apps/app_lifecycle.html">Manage App // Lifecycle</a>). The default value is "false." When the application is // loaded, any sockets previously opened with persistent=true can be fetched // with <code>getSockets</code>. boolean? persistent; // An application-defined string associated with the socket. DOMString? name; }; // Result of <code>create</code> call. dictionary CreateInfo { // The ID of the newly created server socket. Note that socket IDs created // from this API are not compatible with socket IDs created from other APIs, // such as the deprecated <code>$(ref:socket)</code> API. long socketId; }; // Callback from the <code>create</code> method. // |createInfo| : The result of the socket creation. callback CreateCallback = void (CreateInfo createInfo); // Callback from the <code>listen</code> method. // |result| : The result code returned from the underlying network call. // A negative value indicates an error. callback ListenCallback = void (long result); // Callback from the <code>disconnect</code> method. callback DisconnectCallback = void (); // Callback from the <code>close</code> method. callback CloseCallback = void (); // Callback from the <code>update</code> method. callback UpdateCallback = void (); // Callback from the <code>setPaused</code> method. callback SetPausedCallback = void (); // Result of the <code>getInfo</code> method. dictionary SocketInfo { // The socket identifier. long socketId; // Flag indicating if the socket remains open when the event page of the // application is unloaded (see <code>SocketProperties.persistent</code>). // The default value is "false". boolean persistent; // Application-defined string associated with the socket. DOMString? name; // Flag indicating whether connection requests on a listening socket are // dispatched through the <code>onAccept</code> event or queued up in the // listen queue backlog. // See <code>setPaused</code>. The default value is "false". boolean paused; // If the socket is listening, contains its local IPv4/6 address. DOMString? localAddress; // If the socket is listening, contains its local port. long? localPort; }; // Callback from the <code>getInfo</code> method. // |socketInfo| : Object containing the socket information. callback GetInfoCallback = void (SocketInfo socketInfo); // Callback from the <code>getSockets</code> method. // |socketInfos| : Array of object containing socket information. callback GetSocketsCallback = void (SocketInfo[] socketInfos); // Data from an <code>onAccept</code> event. dictionary AcceptInfo { // The server socket identifier. long socketId; // The client socket identifier, i.e. the socket identifier of the newly // established connection. This socket identifier should be used only with // functions from the <code>chrome.sockets.tcp</code> namespace. Note the // client socket is initially paused and must be explictly un-paused by the // application to start receiving data. long clientSocketId; }; // Data from an <code>onAcceptError</code> event. dictionary AcceptErrorInfo { // The server socket identifier. long socketId; // The result code returned from the underlying network call. long resultCode; }; interface Functions { // Creates a TCP server socket. // |properties| : The socket properties (optional). // |callback| : Called when the socket has been created. static void create(optional SocketProperties properties, CreateCallback callback); // Updates the socket properties. // |socketId| : The socket identifier. // |properties| : The properties to update. // |callback| : Called when the properties are updated. static void update(long socketId, SocketProperties properties, optional UpdateCallback callback); // Enables or disables a listening socket from accepting new connections. // When paused, a listening socket accepts new connections until its backlog // (see <code>listen</code> function) is full then refuses additional // connection requests. <code>onAccept</code> events are raised only when // the socket is un-paused. static void setPaused(long socketId, boolean paused, optional SetPausedCallback callback); // Listens for connections on the specified port and address. // If the port/address is in use, the callback indicates a failure. // |socketId| : The socket identifier. // |address| : The address of the local machine. // |port| : The port of the local machine. // |backlog| : Length of the socket's listen queue. The default value // depends on the Operating System (SOMAXCONN), which ensures a reasonable // queue length for most applications. // |callback| : Called when listen operation completes. static void listen(long socketId, DOMString address, long port, optional long backlog, ListenCallback callback); // Disconnects the listening socket, i.e. stops accepting new connections // and releases the address/port the socket is bound to. The socket // identifier remains valid, e.g. it can be used with <code>listen</code> to // accept connections on a new port and address. // |socketId| : The socket identifier. // |callback| : Called when the disconnect attempt is complete. static void disconnect(long socketId, optional DisconnectCallback callback); // Disconnects and destroys the socket. Each socket created should be // closed after use. The socket id is no longer valid as soon at the // function is called. However, the socket is guaranteed to be closed only // when the callback is invoked. // |socketId| : The socket identifier. // |callback| : Called when the <code>close</code> operation completes. static void close(long socketId, optional CloseCallback callback); // Retrieves the state of the given socket. // |socketId| : The socket identifier. // |callback| : Called when the socket state is available. static void getInfo(long socketId, GetInfoCallback callback); // Retrieves the list of currently opened sockets owned by the application. // |callback| : Called when the list of sockets is available. static void getSockets(GetSocketsCallback callback); }; interface Events { // Event raised when a connection has been made to the server socket. // |info| : The event data. static void onAccept(AcceptInfo info); // Event raised when a network error occured while the runtime was waiting // for new connections on the socket address and port. Once this event is // raised, the socket is set to <code>paused</code> and no more // <code>onAccept</code> events are raised for this socket until the socket // is resumed. // |info| : The event data. static void onAcceptError(AcceptErrorInfo info); }; };