OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef PPAPI_CPP_DEV_UDP_SOCKET_DEV_H_ | 5 #ifndef PPAPI_CPP_DEV_UDP_SOCKET_DEV_H_ |
6 #define PPAPI_CPP_DEV_UDP_SOCKET_DEV_H_ | 6 #define PPAPI_CPP_DEV_UDP_SOCKET_DEV_H_ |
7 | 7 |
8 #include "ppapi/c/dev/ppb_udp_socket_dev.h" | 8 #include "ppapi/c/dev/ppb_udp_socket_dev.h" |
9 #include "ppapi/cpp/dev/net_address_dev.h" | 9 #include "ppapi/cpp/dev/net_address_dev.h" |
10 #include "ppapi/cpp/pass_ref.h" | 10 #include "ppapi/cpp/pass_ref.h" |
11 #include "ppapi/cpp/resource.h" | 11 #include "ppapi/cpp/resource.h" |
12 | 12 |
13 namespace pp { | 13 namespace pp { |
14 | 14 |
15 class CompletionCallback; | 15 class CompletionCallback; |
16 class InstanceHandle; | 16 class InstanceHandle; |
17 class Var; | 17 class Var; |
18 | 18 |
19 template <typename T> class CompletionCallbackWithOutput; | 19 template <typename T> class CompletionCallbackWithOutput; |
20 | 20 |
| 21 /// The <code>UDPSocket_Dev</code> class provides UDP socket operations. |
| 22 /// |
| 23 /// Permissions: Apps permission <code>socket</code> with subrule |
| 24 /// <code>udp-bind</code> is required for <code>Bind()</code>; subrule |
| 25 /// <code>udp-send-to</code> is required for <code>SendTo()</code>. |
| 26 /// For more details about network communication permissions, please see: |
| 27 /// http://developer.chrome.com/apps/app_network.html |
21 class UDPSocket_Dev: public Resource { | 28 class UDPSocket_Dev: public Resource { |
22 public: | 29 public: |
| 30 /// Default constructor for creating an is_null() <code>UDPSocket_Dev</code> |
| 31 /// object. |
23 UDPSocket_Dev(); | 32 UDPSocket_Dev(); |
24 | 33 |
| 34 /// A contructor used to create a <code>UDPSocket_Dev</code> object. |
| 35 /// |
| 36 /// @param[in] instance The instance with which this resource will be |
| 37 /// associated. |
25 explicit UDPSocket_Dev(const InstanceHandle& instance); | 38 explicit UDPSocket_Dev(const InstanceHandle& instance); |
26 | 39 |
| 40 /// A constructor used when you have received a <code>PP_Resource</code> as a |
| 41 /// return value that has already been added 1 ref for you. |
| 42 /// |
| 43 /// @param[in] resource A <code>PPB_UDPSocket_Dev</code> resource. |
27 UDPSocket_Dev(PassRef, PP_Resource resource); | 44 UDPSocket_Dev(PassRef, PP_Resource resource); |
28 | 45 |
| 46 /// The copy constructor for <code>UDPSocket_Dev</code>. |
| 47 /// |
| 48 /// @param[in] other A reference to another <code>UDPSocket_Dev</code>. |
29 UDPSocket_Dev(const UDPSocket_Dev& other); | 49 UDPSocket_Dev(const UDPSocket_Dev& other); |
30 | 50 |
| 51 /// The destructor. |
31 virtual ~UDPSocket_Dev(); | 52 virtual ~UDPSocket_Dev(); |
32 | 53 |
| 54 /// The assign operator for <code>UDPSocket_Dev</code>. |
| 55 /// |
| 56 /// @param[in] other A reference to another <code>UDPSocket_Dev</code>. |
| 57 /// |
| 58 /// @return A reference to this <code>UDPSocket_Dev</code> object. |
33 UDPSocket_Dev& operator=(const UDPSocket_Dev& other); | 59 UDPSocket_Dev& operator=(const UDPSocket_Dev& other); |
34 | 60 |
35 // Returns true if the required interface is available. | 61 /// Static function for determining whether the browser supports the required |
| 62 /// <code>PPB_UDPSocket_Dev</code> interface. |
| 63 /// |
| 64 /// @return true if the interface is available, false otherwise. |
36 static bool IsAvailable(); | 65 static bool IsAvailable(); |
37 | 66 |
| 67 /// Binds to the given address. |
| 68 /// |
| 69 /// @param[in] addr A <code>NetAddress_Dev</code> object. |
| 70 /// @param[in] callback A <code>CompletionCallback</code> to be called upon |
| 71 /// completion. |
| 72 /// |
| 73 /// @return An int32_t containing an error code from <code>pp_errors.h</code>. |
| 74 /// <code>PP_ERROR_NOACCESS</code> will be returned if the caller doesn't have |
| 75 /// required permissions. <code>PP_ERROR_ADDRESS_IN_USE</code> will be |
| 76 /// returned if the address is already in use. |
38 int32_t Bind(const NetAddress_Dev& addr, | 77 int32_t Bind(const NetAddress_Dev& addr, |
39 const CompletionCallback& callback); | 78 const CompletionCallback& callback); |
| 79 |
| 80 /// Get the address that the socket has bound to. It can only be called after |
| 81 /// a successful <code>Bind()</code> call. |
| 82 /// |
| 83 /// @return A <code>NetAddress_Dev</code> object. The object will be null |
| 84 /// (i.e., is_null() returns true) on failure. |
40 NetAddress_Dev GetBoundAddress(); | 85 NetAddress_Dev GetBoundAddress(); |
| 86 |
| 87 /// Receives data from the socket and stores the source address. It can only |
| 88 /// be called after a successful <code>Bind()</code> call. |
| 89 /// |
| 90 /// <strong>Caveat:</strong> You should be careful about the lifetime of |
| 91 /// <code>buffer</code>. Typically you will use a |
| 92 /// <code>CompletionCallbackFactory</code> to scope callbacks to the lifetime |
| 93 /// of your class. When your class goes out of scope, the callback factory |
| 94 /// will not actually cancel the operation, but will rather just skip issuing |
| 95 /// the callback on your class. This means that if the underlying |
| 96 /// <code>PPB_UDPSocket_Dev</code> resource outlives your class, the browser |
| 97 /// will still try to write into your buffer when the operation completes. |
| 98 /// The buffer must be kept valid until then to avoid memory corruption. |
| 99 /// If you want to release the buffer while the <code>RecvFrom()</code> call |
| 100 /// is still pending, you should call <code>Close()</code> to ensure that the |
| 101 /// buffer won't be accessed in the future. |
| 102 /// |
| 103 /// @param[out] buffer The buffer to store the received data on success. It |
| 104 /// must be at least <code>num_bytes</code> big. |
| 105 /// @param[in] num_bytes The number of bytes to read. |
| 106 /// @param[in] callback A <code>CompletionCallbackWithOutput</code> to be |
| 107 /// called upon completion. |
| 108 /// |
| 109 /// @return A non-negative number on success to indicate how many bytes have |
| 110 /// been received; otherwise, an error code from <code>pp_errors.h</code>. |
41 int32_t RecvFrom( | 111 int32_t RecvFrom( |
42 char* buffer, | 112 char* buffer, |
43 int32_t num_bytes, | 113 int32_t num_bytes, |
44 const CompletionCallbackWithOutput<NetAddress_Dev>& callback); | 114 const CompletionCallbackWithOutput<NetAddress_Dev>& callback); |
| 115 |
| 116 /// Sends data to a specific destination. It can only be called after a |
| 117 /// successful <code>Bind()</code> call. |
| 118 /// |
| 119 /// @param[in] buffer The buffer containing the data to send. |
| 120 /// @param[in] num_bytes The number of bytes to send. |
| 121 /// @param[in] addr A <code>NetAddress_Dev</code> object holding the |
| 122 /// target address. |
| 123 /// @param[in] callback A <code>CompletionCallback</code> to be called upon |
| 124 /// completion. |
| 125 /// |
| 126 /// @return A non-negative number on success to indicate how many bytes have |
| 127 /// been sent; otherwise, an error code from <code>pp_errors.h</code>. |
| 128 /// <code>PP_ERROR_NOACCESS</code> will be returned if the caller doesn't have |
| 129 /// required permissions. |
45 int32_t SendTo(const char* buffer, | 130 int32_t SendTo(const char* buffer, |
46 int32_t num_bytes, | 131 int32_t num_bytes, |
47 const NetAddress_Dev& addr, | 132 const NetAddress_Dev& addr, |
48 const CompletionCallback& callback); | 133 const CompletionCallback& callback); |
| 134 |
| 135 /// Cancels all pending reads and writes, and closes the socket. Any pending |
| 136 /// callbacks will still run, reporting <code>PP_ERROR_ABORTED</code> if |
| 137 /// pending IO was interrupted. After a call to this method, any output |
| 138 /// paramters passed into previous <code>RecvFrom()</code> calls won't be |
| 139 /// accessed. It is not valid to call <code>Bind()</code> again. |
| 140 /// |
| 141 /// The socket is implicitly closed if it is destroyed, so you are not |
| 142 /// required to call this method. |
49 void Close(); | 143 void Close(); |
| 144 |
| 145 /// Sets a socket option on the UDP socket. |
| 146 /// Please see the <code>PP_UDPSocket_Option_Dev</code> description for option |
| 147 /// names, value types and allowed values. |
| 148 /// |
| 149 /// @param[in] name The option type to set. |
| 150 /// @param[in] value The option value to set. |
| 151 /// @param[in] callback A <code>CompletionCallback</code> to be called upon |
| 152 /// completion. |
| 153 /// |
| 154 /// @return An int32_t containing an error code from <code>pp_errors.h</code>. |
50 int32_t SetOption(PP_UDPSocket_Option_Dev name, | 155 int32_t SetOption(PP_UDPSocket_Option_Dev name, |
51 const Var& value, | 156 const Var& value, |
52 const CompletionCallback& callback); | 157 const CompletionCallback& callback); |
53 }; | 158 }; |
54 | 159 |
55 } // namespace pp | 160 } // namespace pp |
56 | 161 |
57 #endif // PPAPI_CPP_DEV_UDP_SOCKET_DEV_H_ | 162 #endif // PPAPI_CPP_DEV_UDP_SOCKET_DEV_H_ |
OLD | NEW |