- add sources.
[platform/framework/web/crosswalk.git] / src / ppapi / thunk / ppb_tcp_socket_thunk.cc
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
17 namespace ppapi {
18 namespace thunk {
19
20 namespace {
21
22 PP_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
30 PP_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
38 PP_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
44 int32_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
54 int32_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
64 PP_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
72 PP_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
80 int32_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
93 int32_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
106 int32_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
116 int32_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
127 void 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
135 int32_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
148 const 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
160 const 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
177 const PPB_TCPSocket_1_0* GetPPB_TCPSocket_1_0_Thunk() {
178   return &g_ppb_tcpsocket_thunk_1_0;
179 }
180
181 const 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