| // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include <vector> |
| |
| #include "ppapi/c/extensions/dev/ppb_ext_socket_dev.h" |
| #include "ppapi/shared_impl/tracked_callback.h" |
| #include "ppapi/thunk/enter.h" |
| #include "ppapi/thunk/extensions_common_api.h" |
| #include "ppapi/thunk/thunk.h" |
| |
| namespace ppapi { |
| namespace thunk { |
| |
| namespace { |
| |
| int32_t Create(PP_Instance instance, |
| PP_Ext_Socket_SocketType_Dev type, |
| PP_Ext_Socket_CreateOptions_Dev options, |
| PP_Ext_Socket_CreateInfo_Dev* create_info, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(type); |
| input_args.push_back(options); |
| output_args.push_back(create_info); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.create", input_args, output_args, enter.callback())); |
| } |
| |
| void Destroy(PP_Instance instance, PP_Var socket_id) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance); |
| if (enter.failed()) |
| return; |
| |
| std::vector<PP_Var> args; |
| args.push_back(socket_id); |
| enter.functions()->PostBrowser("socket.destroy", args); |
| } |
| |
| int32_t Connect(PP_Instance instance, |
| PP_Var socket_id, |
| PP_Var hostname, |
| PP_Var port, |
| PP_Var* result, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(socket_id); |
| input_args.push_back(hostname); |
| input_args.push_back(port); |
| output_args.push_back(result); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.connect", input_args, output_args, enter.callback())); |
| } |
| |
| int32_t Bind(PP_Instance instance, |
| PP_Var socket_id, |
| PP_Var address, |
| PP_Var port, |
| PP_Var* result, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(socket_id); |
| input_args.push_back(address); |
| input_args.push_back(port); |
| output_args.push_back(result); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.bind", input_args, output_args, enter.callback())); |
| } |
| |
| void Disconnect(PP_Instance instance, PP_Var socket_id) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance); |
| if (enter.failed()) |
| return; |
| |
| std::vector<PP_Var> args; |
| args.push_back(socket_id); |
| enter.functions()->PostBrowser("socket.disconnect", args); |
| } |
| |
| int32_t Read(PP_Instance instance, |
| PP_Var socket_id, |
| PP_Var buffer_size, |
| PP_Ext_Socket_ReadInfo_Dev* read_info, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(socket_id); |
| input_args.push_back(buffer_size); |
| output_args.push_back(read_info); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.read", input_args, output_args, enter.callback())); |
| } |
| |
| int32_t Write(PP_Instance instance, |
| PP_Var socket_id, |
| PP_Var data, |
| PP_Ext_Socket_WriteInfo_Dev* write_info, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(socket_id); |
| input_args.push_back(data); |
| output_args.push_back(write_info); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.write", input_args, output_args, enter.callback())); |
| } |
| |
| int32_t RecvFrom(PP_Instance instance, |
| PP_Var socket_id, |
| PP_Var buffer_size, |
| PP_Ext_Socket_RecvFromInfo_Dev* recv_from_info, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(socket_id); |
| input_args.push_back(buffer_size); |
| output_args.push_back(recv_from_info); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.recvFrom", input_args, output_args, enter.callback())); |
| } |
| |
| int32_t SendTo(PP_Instance instance, |
| PP_Var socket_id, |
| PP_Var data, |
| PP_Var address, |
| PP_Var port, |
| PP_Ext_Socket_WriteInfo_Dev* write_info, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(socket_id); |
| input_args.push_back(data); |
| input_args.push_back(address); |
| input_args.push_back(port); |
| output_args.push_back(write_info); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.sendTo", input_args, output_args, enter.callback())); |
| } |
| |
| int32_t Listen(PP_Instance instance, |
| PP_Var socket_id, |
| PP_Var address, |
| PP_Var port, |
| PP_Var backlog, |
| PP_Var* result, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(socket_id); |
| input_args.push_back(address); |
| input_args.push_back(port); |
| input_args.push_back(backlog); |
| output_args.push_back(result); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.listen", input_args, output_args, enter.callback())); |
| } |
| |
| int32_t Accept(PP_Instance instance, |
| PP_Var socket_id, |
| PP_Ext_Socket_AcceptInfo_Dev* accept_info, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(socket_id); |
| output_args.push_back(accept_info); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.accept", input_args, output_args, enter.callback())); |
| } |
| |
| int32_t SetKeepAlive(PP_Instance instance, |
| PP_Var socket_id, |
| PP_Var enable, |
| PP_Var delay, |
| PP_Var* result, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(socket_id); |
| input_args.push_back(enable); |
| input_args.push_back(delay); |
| output_args.push_back(result); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.setKeepAlive", input_args, output_args, enter.callback())); |
| } |
| |
| int32_t SetNoDelay(PP_Instance instance, |
| PP_Var socket_id, |
| PP_Var no_delay, |
| PP_Var* result, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(socket_id); |
| input_args.push_back(no_delay); |
| output_args.push_back(result); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.setNoDelay", input_args, output_args, enter.callback())); |
| } |
| |
| int32_t GetInfo(PP_Instance instance, |
| PP_Var socket_id, |
| PP_Ext_Socket_SocketInfo_Dev* result, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(socket_id); |
| output_args.push_back(result); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.getInfo", input_args, output_args, enter.callback())); |
| } |
| |
| int32_t GetNetworkList(PP_Instance instance, |
| PP_Ext_Socket_NetworkInterface_Dev_Array* result, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| output_args.push_back(result); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.getNetworkList", input_args, output_args, enter.callback())); |
| } |
| |
| int32_t JoinGroup(PP_Instance instance, |
| PP_Var socket_id, |
| PP_Var address, |
| PP_Var* result, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(socket_id); |
| input_args.push_back(address); |
| output_args.push_back(result); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.joinGroup", input_args, output_args, enter.callback())); |
| } |
| |
| int32_t LeaveGroup(PP_Instance instance, |
| PP_Var socket_id, |
| PP_Var address, |
| PP_Var* result, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(socket_id); |
| input_args.push_back(address); |
| output_args.push_back(result); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.leaveGroup", input_args, output_args, enter.callback())); |
| } |
| |
| int32_t SetMulticastTimeToLive(PP_Instance instance, |
| PP_Var socket_id, |
| PP_Var ttl, |
| PP_Var* result, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(socket_id); |
| input_args.push_back(ttl); |
| output_args.push_back(result); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.setMulticastTimeToLive", input_args, output_args, |
| enter.callback())); |
| } |
| |
| int32_t SetMulticastLoopbackMode(PP_Instance instance, |
| PP_Var socket_id, |
| PP_Var enabled, |
| PP_Var* result, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(socket_id); |
| input_args.push_back(enabled); |
| output_args.push_back(result); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.setMulticastLoopbackMode", input_args, output_args, |
| enter.callback())); |
| } |
| |
| int32_t GetJoinedGroups(PP_Instance instance, |
| PP_Var socket_id, |
| PP_Var* groups, |
| PP_CompletionCallback callback) { |
| EnterInstanceAPI<ExtensionsCommon_API> enter(instance, callback); |
| if (enter.failed()) |
| return enter.retval(); |
| |
| std::vector<PP_Var> input_args; |
| std::vector<PP_Var*> output_args; |
| input_args.push_back(socket_id); |
| output_args.push_back(groups); |
| return enter.SetResult(enter.functions()->CallBrowser( |
| "socket.getJoinedGroups", input_args, output_args, enter.callback())); |
| } |
| |
| const PPB_Ext_Socket_Dev_0_1 g_ppb_ext_socket_dev_0_1_thunk = { |
| &Create, |
| &Destroy, |
| &Connect, |
| &Bind, |
| &Disconnect, |
| &Read, |
| &Write, |
| &RecvFrom, |
| &SendTo, |
| &Listen, |
| &Accept, |
| &SetKeepAlive, |
| &SetNoDelay, |
| &GetInfo, |
| &GetNetworkList |
| }; |
| |
| const PPB_Ext_Socket_Dev_0_2 g_ppb_ext_socket_dev_0_2_thunk = { |
| &Create, |
| &Destroy, |
| &Connect, |
| &Bind, |
| &Disconnect, |
| &Read, |
| &Write, |
| &RecvFrom, |
| &SendTo, |
| &Listen, |
| &Accept, |
| &SetKeepAlive, |
| &SetNoDelay, |
| &GetInfo, |
| &GetNetworkList, |
| &JoinGroup, |
| &LeaveGroup, |
| &SetMulticastTimeToLive, |
| &SetMulticastLoopbackMode, |
| &GetJoinedGroups |
| }; |
| } // namespace |
| |
| const PPB_Ext_Socket_Dev_0_1* GetPPB_Ext_Socket_Dev_0_1_Thunk() { |
| return &g_ppb_ext_socket_dev_0_1_thunk; |
| } |
| |
| const PPB_Ext_Socket_Dev_0_2* GetPPB_Ext_Socket_Dev_0_2_Thunk() { |
| return &g_ppb_ext_socket_dev_0_2_thunk; |
| } |
| |
| } // namespace thunk |
| } // namespace ppapi |