Index: ppapi/cpp/private/udp_socket_private.cc |
diff --git a/ppapi/cpp/private/udp_socket_private.cc b/ppapi/cpp/private/udp_socket_private.cc |
index 135e87e73d546b450e9187c0e5e8388a6b23664d..c100924fc231d8f29e680da89102237c2852f417 100644 |
--- a/ppapi/cpp/private/udp_socket_private.cc |
+++ b/ppapi/cpp/private/udp_socket_private.cc |
@@ -10,11 +10,16 @@ |
#include "ppapi/cpp/instance_handle.h" |
#include "ppapi/cpp/module.h" |
#include "ppapi/cpp/module_impl.h" |
+#include "ppapi/cpp/var.h" |
namespace pp { |
namespace { |
+template <> const char* interface_name<PPB_UDPSocket_Private_0_4>() { |
+ return PPB_UDPSOCKET_PRIVATE_INTERFACE_0_4; |
+} |
+ |
template <> const char* interface_name<PPB_UDPSocket_Private_0_3>() { |
return PPB_UDPSOCKET_PRIVATE_INTERFACE_0_3; |
} |
@@ -22,67 +27,111 @@ template <> const char* interface_name<PPB_UDPSocket_Private_0_3>() { |
} // namespace |
UDPSocketPrivate::UDPSocketPrivate(const InstanceHandle& instance) { |
- if (has_interface<PPB_UDPSocket_Private_0_3>()) { |
+ if (has_interface<PPB_UDPSocket_Private_0_4>()) { |
+ PassRefFromConstructor(get_interface<PPB_UDPSocket_Private_0_4>()->Create( |
+ instance.pp_instance())); |
+ } else if (has_interface<PPB_UDPSocket_Private_0_3>()) { |
PassRefFromConstructor(get_interface<PPB_UDPSocket_Private_0_3>()->Create( |
- instance.pp_instance())); |
+ instance.pp_instance())); |
} |
} |
// static |
bool UDPSocketPrivate::IsAvailable() { |
- return has_interface<PPB_UDPSocket_Private_0_3>(); |
+ return has_interface<PPB_UDPSocket_Private_0_4>() || |
+ has_interface<PPB_UDPSocket_Private_0_3>(); |
+} |
+ |
+int32_t UDPSocketPrivate::SetSocketFeature(PP_UDPSocketFeature_Private name, |
+ const Var& value) { |
+ if (has_interface<PPB_UDPSocket_Private_0_4>()) { |
+ return get_interface<PPB_UDPSocket_Private_0_4>()->SetSocketFeature( |
+ pp_resource(), name, value.pp_var()); |
+ } |
+ return PP_ERROR_NOINTERFACE; |
} |
int32_t UDPSocketPrivate::Bind(const PP_NetAddress_Private* addr, |
const CompletionCallback& callback) { |
- if (!has_interface<PPB_UDPSocket_Private_0_3>()) |
- return PP_ERROR_NOINTERFACE; |
- return get_interface<PPB_UDPSocket_Private_0_3>()->Bind( |
- pp_resource(), addr, callback.pp_completion_callback()); |
+ if (has_interface<PPB_UDPSocket_Private_0_4>()) { |
+ return get_interface<PPB_UDPSocket_Private_0_4>()->Bind( |
+ pp_resource(), addr, callback.pp_completion_callback()); |
+ } |
+ if (has_interface<PPB_UDPSocket_Private_0_3>()) { |
+ return get_interface<PPB_UDPSocket_Private_0_3>()->Bind( |
+ pp_resource(), addr, callback.pp_completion_callback()); |
+ } |
+ return callback.MayForce(PP_ERROR_NOINTERFACE); |
} |
bool UDPSocketPrivate::GetBoundAddress(PP_NetAddress_Private* addr) { |
- if (!has_interface<PPB_UDPSocket_Private_0_3>()) |
- return false; |
- |
- PP_Bool result = get_interface<PPB_UDPSocket_Private_0_3>()->GetBoundAddress( |
- pp_resource(), addr); |
- return PP_ToBool(result); |
+ if (has_interface<PPB_UDPSocket_Private_0_4>()) { |
+ PP_Bool result = |
+ get_interface<PPB_UDPSocket_Private_0_4>()->GetBoundAddress( |
+ pp_resource(), addr); |
+ return PP_ToBool(result); |
+ } |
+ if (has_interface<PPB_UDPSocket_Private_0_3>()) { |
+ PP_Bool result = |
+ get_interface<PPB_UDPSocket_Private_0_3>()->GetBoundAddress( |
+ pp_resource(), addr); |
+ return PP_ToBool(result); |
+ } |
+ return false; |
} |
int32_t UDPSocketPrivate::RecvFrom(char* buffer, |
int32_t num_bytes, |
const CompletionCallback& callback) { |
- if (!has_interface<PPB_UDPSocket_Private_0_3>()) |
- return PP_ERROR_NOINTERFACE; |
- return get_interface<PPB_UDPSocket_Private_0_3>()->RecvFrom( |
- pp_resource(), buffer, num_bytes, callback.pp_completion_callback()); |
+ if (has_interface<PPB_UDPSocket_Private_0_4>()) { |
+ return get_interface<PPB_UDPSocket_Private_0_4>()->RecvFrom( |
+ pp_resource(), buffer, num_bytes, callback.pp_completion_callback()); |
+ } |
+ if (has_interface<PPB_UDPSocket_Private_0_3>()) { |
+ return get_interface<PPB_UDPSocket_Private_0_3>()->RecvFrom( |
+ pp_resource(), buffer, num_bytes, callback.pp_completion_callback()); |
+ } |
+ return callback.MayForce(PP_ERROR_NOINTERFACE); |
} |
bool UDPSocketPrivate::GetRecvFromAddress(PP_NetAddress_Private* addr) { |
- if (!has_interface<PPB_UDPSocket_Private_0_3>()) |
- return false; |
- |
- PP_Bool result = |
- get_interface<PPB_UDPSocket_Private_0_3>()->GetRecvFromAddress( |
- pp_resource(), addr); |
- return PP_ToBool(result); |
+ if (has_interface<PPB_UDPSocket_Private_0_4>()) { |
+ PP_Bool result = |
+ get_interface<PPB_UDPSocket_Private_0_4>()->GetRecvFromAddress( |
+ pp_resource(), addr); |
+ return PP_ToBool(result); |
+ } |
+ if (has_interface<PPB_UDPSocket_Private_0_3>()) { |
+ PP_Bool result = |
+ get_interface<PPB_UDPSocket_Private_0_3>()->GetRecvFromAddress( |
+ pp_resource(), addr); |
+ return PP_ToBool(result); |
+ } |
+ return false; |
} |
int32_t UDPSocketPrivate::SendTo(const char* buffer, |
int32_t num_bytes, |
const PP_NetAddress_Private* addr, |
const CompletionCallback& callback) { |
- if (!has_interface<PPB_UDPSocket_Private_0_3>()) |
- return PP_ERROR_NOINTERFACE; |
- return get_interface<PPB_UDPSocket_Private_0_3>()->SendTo( |
- pp_resource(), buffer, num_bytes, addr, |
- callback.pp_completion_callback()); |
+ if (has_interface<PPB_UDPSocket_Private_0_4>()) { |
+ return get_interface<PPB_UDPSocket_Private_0_4>()->SendTo( |
+ pp_resource(), buffer, num_bytes, addr, |
+ callback.pp_completion_callback()); |
+ } |
+ if (has_interface<PPB_UDPSocket_Private_0_3>()) { |
+ return get_interface<PPB_UDPSocket_Private_0_3>()->SendTo( |
+ pp_resource(), buffer, num_bytes, addr, |
+ callback.pp_completion_callback()); |
+ } |
+ return callback.MayForce(PP_ERROR_NOINTERFACE); |
} |
void UDPSocketPrivate::Close() { |
- if (!has_interface<PPB_UDPSocket_Private_0_3>()) |
- return; |
- return get_interface<PPB_UDPSocket_Private_0_3>()->Close(pp_resource()); |
+ if (has_interface<PPB_UDPSocket_Private_0_4>()) |
+ return get_interface<PPB_UDPSocket_Private_0_4>()->Close(pp_resource()); |
+ if (has_interface<PPB_UDPSocket_Private_0_3>()) |
+ return get_interface<PPB_UDPSocket_Private_0_3>()->Close(pp_resource()); |
} |
+ |
} // namespace pp |