Home | History | Annotate | Download | only in private
      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 
      6 /**
      7  * This file defines the <code>PPB_TCPSocket_Private</code> interface.
      8  */
      9 
     10 label Chrome {
     11   M17 = 0.3,
     12   M20 = 0.4,
     13   M27 = 0.5
     14 };
     15 
     16 [assert_size(4)]
     17 enum PP_TCPSocketOption_Private {
     18   // Special value used for testing. Guaranteed to fail SetOption().
     19   PP_TCPSOCKETOPTION_PRIVATE_INVALID = 0,
     20 
     21   // Disable coalescing of small writes to make TCP segments, and instead
     22   // deliver data immediately. For SSL sockets, this option must be set before
     23   // SSLHandshake() is called. Value type is PP_VARTYPE_BOOL.
     24   PP_TCPSOCKETOPTION_PRIVATE_NO_DELAY = 1
     25 };
     26 
     27 /**
     28  * The <code>PPB_TCPSocket_Private</code> interface provides TCP socket
     29  * operations.
     30  */
     31 interface PPB_TCPSocket_Private {
     32   /**
     33    * Allocates a TCP socket resource.
     34    */
     35   PP_Resource Create([in] PP_Instance instance);
     36 
     37   /**
     38    * Determines if a given resource is TCP socket.
     39    */
     40   PP_Bool IsTCPSocket([in] PP_Resource resource);
     41 
     42   /**
     43    * Connects to a TCP port given as a host-port pair.
     44    * When a proxy server is used, |host| and |port| refer to the proxy server
     45    * instead of the destination server.
     46    */
     47   int32_t Connect([in] PP_Resource tcp_socket,
     48                   [in] str_t host,
     49                   [in] uint16_t port,
     50                   [in] PP_CompletionCallback callback);
     51 
     52   /**
     53    * Same as Connect(), but connecting to the address given by |addr|. A typical
     54    * use-case would be for reconnections.
     55    */
     56   int32_t ConnectWithNetAddress([in] PP_Resource tcp_socket,
     57                                 [in] PP_NetAddress_Private addr,
     58                                 [in] PP_CompletionCallback callback);
     59 
     60   /**
     61    * Gets the local address of the socket, if it has been connected.
     62    * Returns PP_TRUE on success.
     63    */
     64   PP_Bool GetLocalAddress([in] PP_Resource tcp_socket,
     65                           [out] PP_NetAddress_Private local_addr);
     66 
     67   /**
     68    * Gets the remote address of the socket, if it has been connected.
     69    * Returns PP_TRUE on success.
     70    */
     71   PP_Bool GetRemoteAddress([in] PP_Resource tcp_socket,
     72                            [out] PP_NetAddress_Private remote_addr);
     73 
     74   /**
     75    * Does SSL handshake and moves to sending and receiving encrypted data. The
     76    * socket must have been successfully connected. |server_name| will be
     77    * compared with the name(s) in the server's certificate during the SSL
     78    * handshake. |server_port| is only used to identify an SSL server in the SSL
     79    * session cache.
     80    * When a proxy server is used, |server_name| and |server_port| refer to the
     81    * destination server.
     82    * If the socket is not connected, or there are pending read/write requests,
     83    * SSLHandshake() will fail without starting a handshake. Otherwise, any
     84    * failure during the handshake process will cause the socket to be
     85    * disconnected.
     86    */
     87   int32_t SSLHandshake([in] PP_Resource tcp_socket,
     88                        [in] str_t server_name,
     89                        [in] uint16_t server_port,
     90                        [in] PP_CompletionCallback callback);
     91 
     92   /**
     93    * Returns the server's <code>PPB_X509Certificate_Private</code> for a socket
     94    * connection if an SSL connection has been established using
     95    * <code>SSLHandshake</code>. If no SSL connection has been established, a
     96    * null resource is returned.
     97    */
     98   [version=0.4]
     99   PP_Resource GetServerCertificate([in] PP_Resource tcp_socket);
    100 
    101   /**
    102    * NOTE: This function is not implemented and will return
    103    * <code>PP_FALSE</code>.
    104    * Adds a trusted/untrusted chain building certificate to be used for this
    105    * connection. The <code>certificate</code> must be a
    106    * <code>PPB_X509Certificate_Private<code>. <code>PP_TRUE</code> is returned
    107    * upon success.
    108    */
    109   [version=0.4]
    110   PP_Bool AddChainBuildingCertificate([in] PP_Resource tcp_socket,
    111                                       [in] PP_Resource certificate,
    112                                       [in] PP_Bool is_trusted);
    113 
    114   /**
    115    * Reads data from the socket. The size of |buffer| must be at least as large
    116    * as |bytes_to_read|. May perform a partial read. Returns the number of bytes
    117    * read or an error code. If the return value is 0, then it indicates that
    118    * end-of-file was reached.
    119    * This method won't return more than 1 megabyte, so if |bytes_to_read|
    120    * exceeds 1 megabyte, it will always perform a partial read.
    121    * Multiple outstanding read requests are not supported.
    122    */
    123   int32_t Read([in] PP_Resource tcp_socket,
    124                [out] str_t buffer,
    125                [in] int32_t bytes_to_read,
    126                [in] PP_CompletionCallback callback);
    127 
    128   /**
    129    * Writes data to the socket. May perform a partial write. Returns the number
    130    * of bytes written or an error code.
    131    * This method won't write more than 1 megabyte, so if |bytes_to_write|
    132    * exceeds 1 megabyte, it will always perform a partial write.
    133    * Multiple outstanding write requests are not supported.
    134    */
    135   int32_t Write([in] PP_Resource tcp_socket,
    136                 [in] str_t buffer,
    137                 [in] int32_t bytes_to_write,
    138                 [in] PP_CompletionCallback callback);
    139 
    140   /**
    141    * Cancels any IO that may be pending, and disconnects the socket. Any pending
    142    * callbacks will still run, reporting PP_Error_Aborted if pending IO was
    143    * interrupted. It is NOT valid to call Connect() again after a call to this
    144    * method. Note: If the socket is destroyed when it is still connected, then
    145    * it will be implicitly disconnected, so you are not required to call this
    146    * method.
    147    */
    148   void Disconnect([in] PP_Resource tcp_socket);
    149 
    150   /**
    151    * Sets an option on |tcp_socket|.  Supported |name| and |value| parameters
    152    * are as described for PP_TCPSocketOption_Private.  |callback| will be
    153    * invoked with PP_OK if setting the option succeeds, or an error code
    154    * otherwise. The socket must be connection before SetOption is called.
    155    */
    156   [version=0.5]
    157   int32_t SetOption([in] PP_Resource tcp_socket,
    158                     [in] PP_TCPSocketOption_Private name,
    159                     [in] PP_Var value,
    160                     [in] PP_CompletionCallback callback);
    161 
    162 };
    163