Home | History | Annotate | Download | only in cpp
      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 #include "ppapi/cpp/udp_socket.h"
      6 
      7 #include "ppapi/c/pp_errors.h"
      8 #include "ppapi/cpp/completion_callback.h"
      9 #include "ppapi/cpp/instance_handle.h"
     10 #include "ppapi/cpp/module_impl.h"
     11 #include "ppapi/cpp/var.h"
     12 
     13 namespace pp {
     14 
     15 namespace {
     16 
     17 template <> const char* interface_name<PPB_UDPSocket_1_0>() {
     18   return PPB_UDPSOCKET_INTERFACE_1_0;
     19 }
     20 
     21 }  // namespace
     22 
     23 UDPSocket::UDPSocket() {
     24 }
     25 
     26 UDPSocket::UDPSocket(const InstanceHandle& instance) {
     27   if (has_interface<PPB_UDPSocket_1_0>()) {
     28     PassRefFromConstructor(get_interface<PPB_UDPSocket_1_0>()->Create(
     29         instance.pp_instance()));
     30   }
     31 }
     32 
     33 UDPSocket::UDPSocket(PassRef, PP_Resource resource)
     34     : Resource(PASS_REF, resource) {
     35 }
     36 
     37 UDPSocket::UDPSocket(const UDPSocket& other) : Resource(other) {
     38 }
     39 
     40 UDPSocket::~UDPSocket() {
     41 }
     42 
     43 UDPSocket& UDPSocket::operator=(const UDPSocket& other) {
     44   Resource::operator=(other);
     45   return *this;
     46 }
     47 
     48 // static
     49 bool UDPSocket::IsAvailable() {
     50   return has_interface<PPB_UDPSocket_1_0>();
     51 }
     52 
     53 int32_t UDPSocket::Bind(const NetAddress& addr,
     54                         const CompletionCallback& callback) {
     55   if (has_interface<PPB_UDPSocket_1_0>()) {
     56     return get_interface<PPB_UDPSocket_1_0>()->Bind(
     57         pp_resource(), addr.pp_resource(), callback.pp_completion_callback());
     58   }
     59   return callback.MayForce(PP_ERROR_NOINTERFACE);
     60 }
     61 
     62 NetAddress UDPSocket::GetBoundAddress() {
     63   if (has_interface<PPB_UDPSocket_1_0>()) {
     64     return NetAddress(
     65         PASS_REF,
     66         get_interface<PPB_UDPSocket_1_0>()->GetBoundAddress(pp_resource()));
     67   }
     68   return NetAddress();
     69 }
     70 
     71 int32_t UDPSocket::RecvFrom(
     72     char* buffer,
     73     int32_t num_bytes,
     74     const CompletionCallbackWithOutput<NetAddress>& callback) {
     75   if (has_interface<PPB_UDPSocket_1_0>()) {
     76     return get_interface<PPB_UDPSocket_1_0>()->RecvFrom(
     77         pp_resource(), buffer, num_bytes, callback.output(),
     78         callback.pp_completion_callback());
     79   }
     80   return callback.MayForce(PP_ERROR_NOINTERFACE);
     81 }
     82 
     83 int32_t UDPSocket::SendTo(const char* buffer,
     84                           int32_t num_bytes,
     85                           const NetAddress& addr,
     86                           const CompletionCallback& callback) {
     87   if (has_interface<PPB_UDPSocket_1_0>()) {
     88     return get_interface<PPB_UDPSocket_1_0>()->SendTo(
     89         pp_resource(), buffer, num_bytes, addr.pp_resource(),
     90         callback.pp_completion_callback());
     91   }
     92   return callback.MayForce(PP_ERROR_NOINTERFACE);
     93 }
     94 
     95 void UDPSocket::Close() {
     96   if (has_interface<PPB_UDPSocket_1_0>())
     97     return get_interface<PPB_UDPSocket_1_0>()->Close(pp_resource());
     98 }
     99 
    100 int32_t UDPSocket::SetOption(PP_UDPSocket_Option name,
    101                              const Var& value,
    102                              const CompletionCallback& callback) {
    103   if (has_interface<PPB_UDPSocket_1_0>()) {
    104     return get_interface<PPB_UDPSocket_1_0>()->SetOption(
    105         pp_resource(), name, value.pp_var(), callback.pp_completion_callback());
    106   }
    107   return callback.MayForce(PP_ERROR_NOINTERFACE);
    108 }
    109 
    110 }  // namespace pp
    111