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 3// found in the LICENSE file. 4 5// From ppb_tcp_socket.idl modified Sun Sep 15 16:14:21 2013. 6 7#include "ppapi/c/pp_completion_callback.h" 8#include "ppapi/c/pp_errors.h" 9#include "ppapi/c/ppb_tcp_socket.h" 10#include "ppapi/shared_impl/tracked_callback.h" 11#include "ppapi/thunk/enter.h" 12#include "ppapi/thunk/ppb_instance_api.h" 13#include "ppapi/thunk/ppb_tcp_socket_api.h" 14#include "ppapi/thunk/resource_creation_api.h" 15#include "ppapi/thunk/thunk.h" 16 17namespace ppapi { 18namespace thunk { 19 20namespace { 21 22PP_Resource Create_1_0(PP_Instance instance) { 23 VLOG(4) << "PPB_TCPSocket::Create_1_0()"; 24 EnterResourceCreation enter(instance); 25 if (enter.failed()) 26 return 0; 27 return enter.functions()->CreateTCPSocket1_0(instance); 28} 29 30PP_Resource Create(PP_Instance instance) { 31 VLOG(4) << "PPB_TCPSocket::Create()"; 32 EnterResourceCreation enter(instance); 33 if (enter.failed()) 34 return 0; 35 return enter.functions()->CreateTCPSocket(instance); 36} 37 38PP_Bool IsTCPSocket(PP_Resource resource) { 39 VLOG(4) << "PPB_TCPSocket::IsTCPSocket()"; 40 EnterResource<PPB_TCPSocket_API> enter(resource, false); 41 return PP_FromBool(enter.succeeded()); 42} 43 44int32_t Bind(PP_Resource tcp_socket, 45 PP_Resource addr, 46 struct PP_CompletionCallback callback) { 47 VLOG(4) << "PPB_TCPSocket::Bind()"; 48 EnterResource<PPB_TCPSocket_API> enter(tcp_socket, callback, true); 49 if (enter.failed()) 50 return enter.retval(); 51 return enter.SetResult(enter.object()->Bind(addr, enter.callback())); 52} 53 54int32_t Connect(PP_Resource tcp_socket, 55 PP_Resource addr, 56 struct PP_CompletionCallback callback) { 57 VLOG(4) << "PPB_TCPSocket::Connect()"; 58 EnterResource<PPB_TCPSocket_API> enter(tcp_socket, callback, true); 59 if (enter.failed()) 60 return enter.retval(); 61 return enter.SetResult(enter.object()->Connect(addr, enter.callback())); 62} 63 64PP_Resource GetLocalAddress(PP_Resource tcp_socket) { 65 VLOG(4) << "PPB_TCPSocket::GetLocalAddress()"; 66 EnterResource<PPB_TCPSocket_API> enter(tcp_socket, true); 67 if (enter.failed()) 68 return 0; 69 return enter.object()->GetLocalAddress(); 70} 71 72PP_Resource GetRemoteAddress(PP_Resource tcp_socket) { 73 VLOG(4) << "PPB_TCPSocket::GetRemoteAddress()"; 74 EnterResource<PPB_TCPSocket_API> enter(tcp_socket, true); 75 if (enter.failed()) 76 return 0; 77 return enter.object()->GetRemoteAddress(); 78} 79 80int32_t Read(PP_Resource tcp_socket, 81 char* buffer, 82 int32_t bytes_to_read, 83 struct PP_CompletionCallback callback) { 84 VLOG(4) << "PPB_TCPSocket::Read()"; 85 EnterResource<PPB_TCPSocket_API> enter(tcp_socket, callback, true); 86 if (enter.failed()) 87 return enter.retval(); 88 return enter.SetResult(enter.object()->Read(buffer, 89 bytes_to_read, 90 enter.callback())); 91} 92 93int32_t Write(PP_Resource tcp_socket, 94 const char* buffer, 95 int32_t bytes_to_write, 96 struct PP_CompletionCallback callback) { 97 VLOG(4) << "PPB_TCPSocket::Write()"; 98 EnterResource<PPB_TCPSocket_API> enter(tcp_socket, callback, true); 99 if (enter.failed()) 100 return enter.retval(); 101 return enter.SetResult(enter.object()->Write(buffer, 102 bytes_to_write, 103 enter.callback())); 104} 105 106int32_t Listen(PP_Resource tcp_socket, 107 int32_t backlog, 108 struct PP_CompletionCallback callback) { 109 VLOG(4) << "PPB_TCPSocket::Listen()"; 110 EnterResource<PPB_TCPSocket_API> enter(tcp_socket, callback, true); 111 if (enter.failed()) 112 return enter.retval(); 113 return enter.SetResult(enter.object()->Listen(backlog, enter.callback())); 114} 115 116int32_t Accept(PP_Resource tcp_socket, 117 PP_Resource* accepted_tcp_socket, 118 struct PP_CompletionCallback callback) { 119 VLOG(4) << "PPB_TCPSocket::Accept()"; 120 EnterResource<PPB_TCPSocket_API> enter(tcp_socket, callback, true); 121 if (enter.failed()) 122 return enter.retval(); 123 return enter.SetResult(enter.object()->Accept(accepted_tcp_socket, 124 enter.callback())); 125} 126 127void Close(PP_Resource tcp_socket) { 128 VLOG(4) << "PPB_TCPSocket::Close()"; 129 EnterResource<PPB_TCPSocket_API> enter(tcp_socket, true); 130 if (enter.failed()) 131 return; 132 enter.object()->Close(); 133} 134 135int32_t SetOption(PP_Resource tcp_socket, 136 PP_TCPSocket_Option name, 137 struct PP_Var value, 138 struct PP_CompletionCallback callback) { 139 VLOG(4) << "PPB_TCPSocket::SetOption()"; 140 EnterResource<PPB_TCPSocket_API> enter(tcp_socket, callback, true); 141 if (enter.failed()) 142 return enter.retval(); 143 return enter.SetResult(enter.object()->SetOption(name, 144 value, 145 enter.callback())); 146} 147 148const PPB_TCPSocket_1_0 g_ppb_tcpsocket_thunk_1_0 = { 149 &Create_1_0, 150 &IsTCPSocket, 151 &Connect, 152 &GetLocalAddress, 153 &GetRemoteAddress, 154 &Read, 155 &Write, 156 &Close, 157 &SetOption 158}; 159 160const PPB_TCPSocket_1_1 g_ppb_tcpsocket_thunk_1_1 = { 161 &Create, 162 &IsTCPSocket, 163 &Bind, 164 &Connect, 165 &GetLocalAddress, 166 &GetRemoteAddress, 167 &Read, 168 &Write, 169 &Listen, 170 &Accept, 171 &Close, 172 &SetOption 173}; 174 175} // namespace 176 177const PPB_TCPSocket_1_0* GetPPB_TCPSocket_1_0_Thunk() { 178 return &g_ppb_tcpsocket_thunk_1_0; 179} 180 181const PPB_TCPSocket_1_1* GetPPB_TCPSocket_1_1_Thunk() { 182 return &g_ppb_tcpsocket_thunk_1_1; 183} 184 185} // namespace thunk 186} // namespace ppapi 187