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