Home | History | Annotate | Download | only in thunk
      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_udp_socket.idl modified Tue Aug 20 08:13:36 2013.
      6 
      7 #include "ppapi/c/pp_completion_callback.h"
      8 #include "ppapi/c/pp_errors.h"
      9 #include "ppapi/c/ppb_udp_socket.h"
     10 #include "ppapi/shared_impl/tracked_callback.h"
     11 #include "ppapi/thunk/enter.h"
     12 #include "ppapi/thunk/ppapi_thunk_export.h"
     13 #include "ppapi/thunk/ppb_udp_socket_api.h"
     14 
     15 namespace ppapi {
     16 namespace thunk {
     17 
     18 namespace {
     19 
     20 PP_Resource Create(PP_Instance instance) {
     21   VLOG(4) << "PPB_UDPSocket::Create()";
     22   EnterResourceCreation enter(instance);
     23   if (enter.failed())
     24     return 0;
     25   return enter.functions()->CreateUDPSocket(instance);
     26 }
     27 
     28 PP_Bool IsUDPSocket(PP_Resource resource) {
     29   VLOG(4) << "PPB_UDPSocket::IsUDPSocket()";
     30   EnterResource<PPB_UDPSocket_API> enter(resource, false);
     31   return PP_FromBool(enter.succeeded());
     32 }
     33 
     34 int32_t Bind(PP_Resource udp_socket,
     35              PP_Resource addr,
     36              struct PP_CompletionCallback callback) {
     37   VLOG(4) << "PPB_UDPSocket::Bind()";
     38   EnterResource<PPB_UDPSocket_API> enter(udp_socket, callback, true);
     39   if (enter.failed())
     40     return enter.retval();
     41   return enter.SetResult(enter.object()->Bind(addr, enter.callback()));
     42 }
     43 
     44 PP_Resource GetBoundAddress(PP_Resource udp_socket) {
     45   VLOG(4) << "PPB_UDPSocket::GetBoundAddress()";
     46   EnterResource<PPB_UDPSocket_API> enter(udp_socket, true);
     47   if (enter.failed())
     48     return 0;
     49   return enter.object()->GetBoundAddress();
     50 }
     51 
     52 int32_t RecvFrom(PP_Resource udp_socket,
     53                  char* buffer,
     54                  int32_t num_bytes,
     55                  PP_Resource* addr,
     56                  struct PP_CompletionCallback callback) {
     57   VLOG(4) << "PPB_UDPSocket::RecvFrom()";
     58   EnterResource<PPB_UDPSocket_API> enter(udp_socket, callback, true);
     59   if (enter.failed())
     60     return enter.retval();
     61   return enter.SetResult(enter.object()->RecvFrom(buffer,
     62                                                   num_bytes,
     63                                                   addr,
     64                                                   enter.callback()));
     65 }
     66 
     67 int32_t SendTo(PP_Resource udp_socket,
     68                const char* buffer,
     69                int32_t num_bytes,
     70                PP_Resource addr,
     71                struct PP_CompletionCallback callback) {
     72   VLOG(4) << "PPB_UDPSocket::SendTo()";
     73   EnterResource<PPB_UDPSocket_API> enter(udp_socket, callback, true);
     74   if (enter.failed())
     75     return enter.retval();
     76   return enter.SetResult(enter.object()->SendTo(buffer,
     77                                                 num_bytes,
     78                                                 addr,
     79                                                 enter.callback()));
     80 }
     81 
     82 void Close(PP_Resource udp_socket) {
     83   VLOG(4) << "PPB_UDPSocket::Close()";
     84   EnterResource<PPB_UDPSocket_API> enter(udp_socket, true);
     85   if (enter.failed())
     86     return;
     87   enter.object()->Close();
     88 }
     89 
     90 int32_t SetOption(PP_Resource udp_socket,
     91                   PP_UDPSocket_Option name,
     92                   struct PP_Var value,
     93                   struct PP_CompletionCallback callback) {
     94   VLOG(4) << "PPB_UDPSocket::SetOption()";
     95   EnterResource<PPB_UDPSocket_API> enter(udp_socket, callback, true);
     96   if (enter.failed())
     97     return enter.retval();
     98   return enter.SetResult(enter.object()->SetOption(name,
     99                                                    value,
    100                                                    enter.callback()));
    101 }
    102 
    103 const PPB_UDPSocket_1_0 g_ppb_udpsocket_thunk_1_0 = {
    104   &Create,
    105   &IsUDPSocket,
    106   &Bind,
    107   &GetBoundAddress,
    108   &RecvFrom,
    109   &SendTo,
    110   &Close,
    111   &SetOption
    112 };
    113 
    114 }  // namespace
    115 
    116 PPAPI_THUNK_EXPORT const PPB_UDPSocket_1_0* GetPPB_UDPSocket_1_0_Thunk() {
    117   return &g_ppb_udpsocket_thunk_1_0;
    118 }
    119 
    120 }  // namespace thunk
    121 }  // namespace ppapi
    122