1 // Copyright (c) 2013 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.
5 #ifndef PPAPI_CPP_EXTENSIONS_DEV_SOCKET_DEV_H_
6 #define PPAPI_CPP_EXTENSIONS_DEV_SOCKET_DEV_H_
11 #include "ppapi/c/extensions/dev/ppb_ext_socket_dev.h"
12 #include "ppapi/cpp/extensions/dict_field.h"
13 #include "ppapi/cpp/extensions/ext_output_traits.h"
14 #include "ppapi/cpp/instance_handle.h"
15 #include "ppapi/cpp/var.h"
16 #include "ppapi/cpp/var_array_buffer.h"
17 #include "ppapi/cpp/var_dictionary.h"
23 class ExtCompletionCallbackWithOutput;
30 // Data types ------------------------------------------------------------------
31 class SocketType_Dev {
40 SocketType_Dev(ValueType in_value);
43 bool Populate(const PP_Var& var_value);
45 Var CreateVar() const;
49 static const char* const kTcp;
50 static const char* const kUdp;
53 typedef VarDictionary CreateOptions_Dev;
55 class CreateInfo_Dev {
60 bool Populate(const PP_Ext_Socket_CreateInfo_Dev& value);
62 Var CreateVar() const;
64 static const char* const kSocketId;
66 DictField<int32_t> socket_id;
69 class AcceptInfo_Dev {
74 bool Populate(const PP_Ext_Socket_AcceptInfo_Dev& value);
76 Var CreateVar() const;
78 static const char* const kResultCode;
79 static const char* const kSocketId;
81 DictField<int32_t> result_code;
82 OptionalDictField<int32_t> socket_id;
90 bool Populate(const PP_Ext_Socket_ReadInfo_Dev& value);
92 Var CreateVar() const;
94 static const char* const kResultCode;
95 static const char* const kData;
97 DictField<int32_t> result_code;
98 DictField<VarArrayBuffer> data;
101 class WriteInfo_Dev {
106 bool Populate(const PP_Ext_Socket_WriteInfo_Dev& value);
108 Var CreateVar() const;
110 static const char* const kBytesWritten;
112 DictField<int32_t> bytes_written;
115 class RecvFromInfo_Dev {
120 bool Populate(const PP_Ext_Socket_RecvFromInfo_Dev& value);
122 Var CreateVar() const;
124 static const char* const kResultCode;
125 static const char* const kData;
126 static const char* const kAddress;
127 static const char* const kPort;
129 DictField<int32_t> result_code;
130 DictField<VarArrayBuffer> data;
131 DictField<std::string> address;
132 DictField<int32_t> port;
135 class SocketInfo_Dev {
140 bool Populate(const PP_Ext_Socket_SocketInfo_Dev& value);
142 Var CreateVar() const;
144 static const char* const kSocketType;
145 static const char* const kConnected;
146 static const char* const kPeerAddress;
147 static const char* const kPeerPort;
148 static const char* const kLocalAddress;
149 static const char* const kLocalPort;
151 DictField<SocketType_Dev> socket_type;
152 DictField<bool> connected;
153 OptionalDictField<std::string> peer_address;
154 OptionalDictField<int32_t> peer_port;
155 OptionalDictField<std::string> local_address;
156 OptionalDictField<int32_t> local_port;
159 class NetworkInterface_Dev {
161 NetworkInterface_Dev();
162 ~NetworkInterface_Dev();
164 bool Populate(const PP_Ext_Socket_NetworkInterface_Dev& value);
166 Var CreateVar() const;
168 static const char* const kName;
169 static const char* const kAddress;
171 DictField<std::string> name;
172 DictField<std::string> address;
175 // Functions -------------------------------------------------------------------
178 explicit Socket_Dev(const InstanceHandle& instance);
181 typedef ExtCompletionCallbackWithOutput<CreateInfo_Dev> CreateCallback;
182 int32_t Create(const SocketType_Dev& type,
183 const Optional<CreateOptions_Dev>& options,
184 const CreateCallback& callback);
186 void Destroy(int32_t socket_id);
188 typedef ExtCompletionCallbackWithOutput<int32_t> ConnectCallback;
189 int32_t Connect(int32_t socket_id,
190 const std::string& hostname,
192 const ConnectCallback& callback);
194 typedef ExtCompletionCallbackWithOutput<int32_t> BindCallback;
195 int32_t Bind(int32_t socket_id,
196 const std::string& address,
198 const BindCallback& callback);
200 void Disconnect(int32_t socket_id);
202 typedef ExtCompletionCallbackWithOutput<ReadInfo_Dev> ReadCallback;
203 int32_t Read(int32_t socket_id,
204 const Optional<int32_t>& buffer_size,
205 const ReadCallback& callback);
207 typedef ExtCompletionCallbackWithOutput<WriteInfo_Dev> WriteCallback;
208 int32_t Write(int32_t socket_id,
209 const VarArrayBuffer& data,
210 const WriteCallback& callback);
212 typedef ExtCompletionCallbackWithOutput<RecvFromInfo_Dev> RecvFromCallback;
213 int32_t RecvFrom(int32_t socket_id,
214 const Optional<int32_t>& buffer_size,
215 const RecvFromCallback& callback);
217 typedef ExtCompletionCallbackWithOutput<WriteInfo_Dev> SendToCallback;
218 int32_t SendTo(int32_t socket_id,
219 const VarArrayBuffer& data,
220 const std::string& address,
222 const SendToCallback& callback);
224 typedef ExtCompletionCallbackWithOutput<int32_t> ListenCallback;
225 int32_t Listen(int32_t socket_id,
226 const std::string& address,
228 const Optional<int32_t>& backlog,
229 const ListenCallback& callback);
231 typedef ExtCompletionCallbackWithOutput<AcceptInfo_Dev> AcceptCallback;
232 int32_t Accept(int32_t socket_id, const AcceptCallback& callback);
234 typedef ExtCompletionCallbackWithOutput<bool> SetKeepAliveCallback;
235 int32_t SetKeepAlive(int32_t socket_id,
237 const Optional<int32_t>& delay,
238 const SetKeepAliveCallback& callback);
240 typedef ExtCompletionCallbackWithOutput<bool> SetNoDelayCallback;
241 int32_t SetNoDelay(int32_t socket_id,
243 const SetNoDelayCallback& callback);
245 typedef ExtCompletionCallbackWithOutput<SocketInfo_Dev> GetInfoCallback;
246 int32_t GetInfo(int32_t socket_id,
247 const GetInfoCallback& callback);
249 typedef ExtCompletionCallbackWithOutput<std::vector<NetworkInterface_Dev> >
250 GetNetworkListCallback;
251 int32_t GetNetworkList(const GetNetworkListCallback& callback);
253 typedef ExtCompletionCallbackWithOutput<int32_t> JoinGroupCallback;
254 int32_t JoinGroup(int32_t socket_id,
255 const std::string& address,
256 const JoinGroupCallback& callback);
258 typedef ExtCompletionCallbackWithOutput<int32_t> LeaveGroupCallback;
259 int32_t LeaveGroup(int32_t socket_id,
260 const std::string& address,
261 const LeaveGroupCallback& callback);
263 typedef ExtCompletionCallbackWithOutput<int32_t>
264 SetMulticastTimeToLiveCallback;
265 int32_t SetMulticastTimeToLive(
268 const SetMulticastTimeToLiveCallback& callback);
270 typedef ExtCompletionCallbackWithOutput<int32_t>
271 SetMulticastLoopbackModeCallback;
272 int32_t SetMulticastLoopbackMode(
275 const SetMulticastLoopbackModeCallback& callback);
277 typedef ExtCompletionCallbackWithOutput<std::vector<std::string> >
278 GetJoinedGroupsCallback;
279 int32_t GetJoinedGroups(int32_t socket_id,
280 const GetJoinedGroupsCallback& callback);
283 InstanceHandle instance_;
286 } // namespace socket
290 #endif // PPAPI_CPP_EXTENSIONS_DEV_SOCKET_DEV_H_