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_UDPSocket_Private</code> interface.
8 */
9
10label Chrome {
11  M17 = 0.2,
12  M19 = 0.3,
13  M23 = 0.4
14};
15
16[assert_size(4)]
17enum PP_UDPSocketFeature_Private {
18  // Allow the socket to share the local address to which socket will
19  // be bound with other processes. Value's type should be
20  // PP_VARTYPE_BOOL.
21  PP_UDPSOCKETFEATURE_PRIVATE_ADDRESS_REUSE = 0,
22
23  // Allow sending and receiving packets sent to and from broadcast
24  // addresses. Value's type should be PP_VARTYPE_BOOL.
25  PP_UDPSOCKETFEATURE_PRIVATE_BROADCAST = 1,
26
27  // Special value for counting the number of available
28  // features. Should not be passed to SetSocketFeature().
29  PP_UDPSOCKETFEATURE_PRIVATE_COUNT = 2
30};
31
32interface PPB_UDPSocket_Private {
33  /**
34   * Creates a UDP socket resource.
35   */
36  PP_Resource Create([in] PP_Instance instance_id);
37
38  /**
39   * Determines if a given resource is a UDP socket.
40   */
41  PP_Bool IsUDPSocket([in] PP_Resource resource_id);
42
43  /**
44   * Sets a socket feature to |udp_socket|. Should be called before
45   * Bind(). Possible values for |name|, |value| and |value|'s type
46   * are described in PP_UDPSocketFeature_Private description. If no
47   * error occurs, returns PP_OK. Otherwise, returns
48   * PP_ERROR_BADRESOURCE (if bad |udp_socket| provided),
49   * PP_ERROR_BADARGUMENT (if bad name/value/value's type provided)
50   * or PP_ERROR_FAILED in the case of internal errors.
51   */
52  [version=0.4]
53  int32_t SetSocketFeature([in] PP_Resource udp_socket,
54                           [in] PP_UDPSocketFeature_Private name,
55                           [in] PP_Var value);
56
57  /* Creates a socket and binds to the address given by |addr|. */
58  int32_t Bind([in] PP_Resource udp_socket,
59               [in] PP_NetAddress_Private addr,
60               [in] PP_CompletionCallback callback);
61
62  /* Returns the address that the socket has bound to.  A successful
63   * call to Bind must be called first. Returns PP_FALSE if Bind
64   * fails, or if Close has been called.
65   */
66  [version=0.3]
67  PP_Bool GetBoundAddress([in] PP_Resource udp_socket,
68                          [out] PP_NetAddress_Private addr);
69
70  /* Performs a non-blocking recvfrom call on socket.
71   * Bind must be called first. |callback| is invoked when recvfrom
72   * reads data.  You must call GetRecvFromAddress to recover the
73   * address the data was retrieved from.
74   */
75  int32_t RecvFrom([in] PP_Resource udp_socket,
76                   [out] str_t buffer,
77                   [in] int32_t num_bytes,
78                   [in] PP_CompletionCallback callback);
79
80  /* Upon successful completion of RecvFrom, the address that the data
81   * was received from is stored in |addr|.
82   */
83  PP_Bool GetRecvFromAddress([in] PP_Resource udp_socket,
84                             [out] PP_NetAddress_Private addr);
85
86  /* Performs a non-blocking sendto call on the socket created and
87   * bound(has already called Bind).  The callback |callback| is
88   * invoked when sendto completes.
89   */
90  int32_t SendTo([in] PP_Resource udp_socket,
91                 [in] str_t buffer,
92                 [in] int32_t num_bytes,
93                 [in] PP_NetAddress_Private addr,
94                 [in] PP_CompletionCallback callback);
95
96  /* Cancels all pending reads and writes, and closes the socket. */
97  void Close([in] PP_Resource udp_socket);
98};
99