• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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 #include "ppapi/c/pp_completion_callback.h"
6 #include "ppapi/c/pp_errors.h"
7 #include "ppapi/c/private/ppb_udp_socket_private.h"
8 #include "ppapi/shared_impl/tracked_callback.h"
9 #include "ppapi/thunk/enter.h"
10 #include "ppapi/thunk/ppb_udp_socket_private_api.h"
11 #include "ppapi/thunk/resource_creation_api.h"
12 #include "ppapi/thunk/thunk.h"
13 
14 namespace ppapi {
15 namespace thunk {
16 
17 namespace {
18 
19 typedef EnterResource<PPB_UDPSocket_Private_API> EnterUDP;
20 
Create(PP_Instance instance)21 PP_Resource Create(PP_Instance instance) {
22   EnterResourceCreation enter(instance);
23   if (enter.failed())
24     return 0;
25   return enter.functions()->CreateUDPSocketPrivate(instance);
26 }
27 
IsUDPSocket(PP_Resource resource)28 PP_Bool IsUDPSocket(PP_Resource resource) {
29   EnterUDP enter(resource, false);
30   return PP_FromBool(enter.succeeded());
31 }
32 
SetSocketFeature(PP_Resource udp_socket,PP_UDPSocketFeature_Private name,PP_Var value)33 int32_t SetSocketFeature(PP_Resource udp_socket,
34                          PP_UDPSocketFeature_Private name,
35                          PP_Var value) {
36   EnterUDP enter(udp_socket, true);
37   if (enter.failed())
38     return PP_ERROR_BADRESOURCE;
39   return enter.object()->SetSocketFeature(name, value);
40 }
41 
Bind(PP_Resource udp_socket,const PP_NetAddress_Private * addr,PP_CompletionCallback callback)42 int32_t Bind(PP_Resource udp_socket,
43              const PP_NetAddress_Private *addr,
44              PP_CompletionCallback callback) {
45   EnterUDP enter(udp_socket, callback, true);
46   if (enter.failed())
47     return enter.retval();
48   return enter.SetResult(enter.object()->Bind(addr, enter.callback()));
49 }
50 
GetBoundAddress(PP_Resource udp_socket,PP_NetAddress_Private * addr)51 PP_Bool GetBoundAddress(PP_Resource udp_socket,
52                         PP_NetAddress_Private* addr) {
53   EnterUDP enter(udp_socket, true);
54   if (enter.failed())
55     return PP_FALSE;
56   return enter.object()->GetBoundAddress(addr);
57 }
58 
RecvFrom(PP_Resource udp_socket,char * buffer,int32_t num_bytes,PP_CompletionCallback callback)59 int32_t RecvFrom(PP_Resource udp_socket,
60                  char* buffer,
61                  int32_t num_bytes,
62                  PP_CompletionCallback callback) {
63 #ifdef NDEBUG
64   EnterUDP enter(udp_socket, callback, false);
65 #else
66   EnterUDP enter(udp_socket, callback, true);
67 #endif
68   if (enter.failed())
69     return enter.retval();
70   return enter.SetResult(enter.object()->RecvFrom(buffer, num_bytes,
71                                                   enter.callback()));
72 }
73 
GetRecvFromAddress(PP_Resource udp_socket,PP_NetAddress_Private * addr)74 PP_Bool GetRecvFromAddress(PP_Resource udp_socket,
75                            PP_NetAddress_Private* addr) {
76   EnterUDP enter(udp_socket, true);
77   if (enter.failed())
78     return PP_FALSE;
79   return enter.object()->GetRecvFromAddress(addr);
80 }
81 
SendTo(PP_Resource udp_socket,const char * buffer,int32_t num_bytes,const PP_NetAddress_Private * addr,PP_CompletionCallback callback)82 int32_t SendTo(PP_Resource udp_socket,
83                const char* buffer,
84                int32_t num_bytes,
85                const PP_NetAddress_Private* addr,
86                PP_CompletionCallback callback) {
87   EnterUDP enter(udp_socket, callback, true);
88   if (enter.failed())
89     return enter.retval();
90   return enter.SetResult(enter.object()->SendTo(buffer, num_bytes, addr,
91                                                 enter.callback()));
92 }
93 
Close(PP_Resource udp_socket)94 void Close(PP_Resource udp_socket) {
95   EnterUDP enter(udp_socket, true);
96   if (enter.succeeded())
97     enter.object()->Close();
98 }
99 
100 const PPB_UDPSocket_Private_0_2 g_ppb_udp_socket_thunk_0_2 = {
101   &Create,
102   &IsUDPSocket,
103   &Bind,
104   &RecvFrom,
105   &GetRecvFromAddress,
106   &SendTo,
107   &Close
108 };
109 
110 const PPB_UDPSocket_Private_0_3 g_ppb_udp_socket_thunk_0_3 = {
111   &Create,
112   &IsUDPSocket,
113   &Bind,
114   &GetBoundAddress,
115   &RecvFrom,
116   &GetRecvFromAddress,
117   &SendTo,
118   &Close
119 };
120 
121 const PPB_UDPSocket_Private_0_4 g_ppb_udp_socket_thunk_0_4 = {
122   &Create,
123   &IsUDPSocket,
124   &SetSocketFeature,
125   &Bind,
126   &GetBoundAddress,
127   &RecvFrom,
128   &GetRecvFromAddress,
129   &SendTo,
130   &Close
131 };
132 
133 }  // namespace
134 
GetPPB_UDPSocket_Private_0_2_Thunk()135 const PPB_UDPSocket_Private_0_2* GetPPB_UDPSocket_Private_0_2_Thunk() {
136   return &g_ppb_udp_socket_thunk_0_2;
137 }
138 
GetPPB_UDPSocket_Private_0_3_Thunk()139 const PPB_UDPSocket_Private_0_3* GetPPB_UDPSocket_Private_0_3_Thunk() {
140   return &g_ppb_udp_socket_thunk_0_3;
141 }
142 
GetPPB_UDPSocket_Private_0_4_Thunk()143 const PPB_UDPSocket_Private_0_4* GetPPB_UDPSocket_Private_0_4_Thunk() {
144   return &g_ppb_udp_socket_thunk_0_4;
145 }
146 
147 }  // namespace thunk
148 }  // namespace ppapi
149