diff options
Diffstat (limited to 'ppapi/cpp/udp_socket.cc')
-rw-r--r-- | ppapi/cpp/udp_socket.cc | 55 |
1 files changed, 53 insertions, 2 deletions
diff --git a/ppapi/cpp/udp_socket.cc b/ppapi/cpp/udp_socket.cc index 2f8c505..19d2894 100644 --- a/ppapi/cpp/udp_socket.cc +++ b/ppapi/cpp/udp_socket.cc @@ -22,13 +22,20 @@ template <> const char* interface_name<PPB_UDPSocket_1_1>() { return PPB_UDPSOCKET_INTERFACE_1_1; } +template <> const char* interface_name<PPB_UDPSocket_1_2>() { + return PPB_UDPSOCKET_INTERFACE_1_2; +} + } // namespace UDPSocket::UDPSocket() { } UDPSocket::UDPSocket(const InstanceHandle& instance) { - if (has_interface<PPB_UDPSocket_1_1>()) { + if (has_interface<PPB_UDPSocket_1_2>()) { + PassRefFromConstructor(get_interface<PPB_UDPSocket_1_2>()->Create( + instance.pp_instance())); + } else if (has_interface<PPB_UDPSocket_1_1>()) { PassRefFromConstructor(get_interface<PPB_UDPSocket_1_1>()->Create( instance.pp_instance())); } else if (has_interface<PPB_UDPSocket_1_0>()) { @@ -54,12 +61,17 @@ UDPSocket& UDPSocket::operator=(const UDPSocket& other) { // static bool UDPSocket::IsAvailable() { - return has_interface<PPB_UDPSocket_1_1>() || + return has_interface<PPB_UDPSocket_1_2>() || + has_interface<PPB_UDPSocket_1_1>() || has_interface<PPB_UDPSocket_1_0>(); } int32_t UDPSocket::Bind(const NetAddress& addr, const CompletionCallback& callback) { + if (has_interface<PPB_UDPSocket_1_2>()) { + return get_interface<PPB_UDPSocket_1_2>()->Bind( + pp_resource(), addr.pp_resource(), callback.pp_completion_callback()); + } if (has_interface<PPB_UDPSocket_1_1>()) { return get_interface<PPB_UDPSocket_1_1>()->Bind( pp_resource(), addr.pp_resource(), callback.pp_completion_callback()); @@ -72,6 +84,11 @@ int32_t UDPSocket::Bind(const NetAddress& addr, } NetAddress UDPSocket::GetBoundAddress() { + if (has_interface<PPB_UDPSocket_1_2>()) { + return NetAddress( + PASS_REF, + get_interface<PPB_UDPSocket_1_2>()->GetBoundAddress(pp_resource())); + } if (has_interface<PPB_UDPSocket_1_1>()) { return NetAddress( PASS_REF, @@ -89,6 +106,11 @@ int32_t UDPSocket::RecvFrom( char* buffer, int32_t num_bytes, const CompletionCallbackWithOutput<NetAddress>& callback) { + if (has_interface<PPB_UDPSocket_1_2>()) { + return get_interface<PPB_UDPSocket_1_2>()->RecvFrom( + pp_resource(), buffer, num_bytes, callback.output(), + callback.pp_completion_callback()); + } if (has_interface<PPB_UDPSocket_1_1>()) { return get_interface<PPB_UDPSocket_1_1>()->RecvFrom( pp_resource(), buffer, num_bytes, callback.output(), @@ -106,6 +128,11 @@ int32_t UDPSocket::SendTo(const char* buffer, int32_t num_bytes, const NetAddress& addr, const CompletionCallback& callback) { + if (has_interface<PPB_UDPSocket_1_2>()) { + return get_interface<PPB_UDPSocket_1_2>()->SendTo( + pp_resource(), buffer, num_bytes, addr.pp_resource(), + callback.pp_completion_callback()); + } if (has_interface<PPB_UDPSocket_1_1>()) { return get_interface<PPB_UDPSocket_1_1>()->SendTo( pp_resource(), buffer, num_bytes, addr.pp_resource(), @@ -120,6 +147,8 @@ int32_t UDPSocket::SendTo(const char* buffer, } void UDPSocket::Close() { + if (has_interface<PPB_UDPSocket_1_2>()) + return get_interface<PPB_UDPSocket_1_2>()->Close(pp_resource()); if (has_interface<PPB_UDPSocket_1_1>()) return get_interface<PPB_UDPSocket_1_1>()->Close(pp_resource()); if (has_interface<PPB_UDPSocket_1_0>()) @@ -129,6 +158,10 @@ void UDPSocket::Close() { int32_t UDPSocket::SetOption(PP_UDPSocket_Option name, const Var& value, const CompletionCallback& callback) { + if (has_interface<PPB_UDPSocket_1_2>()) { + return get_interface<PPB_UDPSocket_1_2>()->SetOption( + pp_resource(), name, value.pp_var(), callback.pp_completion_callback()); + } if (has_interface<PPB_UDPSocket_1_1>()) { return get_interface<PPB_UDPSocket_1_1>()->SetOption( pp_resource(), name, value.pp_var(), callback.pp_completion_callback()); @@ -140,4 +173,22 @@ int32_t UDPSocket::SetOption(PP_UDPSocket_Option name, return callback.MayForce(PP_ERROR_NOINTERFACE); } +int32_t UDPSocket::JoinGroup(const NetAddress& group, + const CompletionCallback callback) { + if (has_interface<PPB_UDPSocket_1_2>()) { + return get_interface<PPB_UDPSocket_1_2>()->JoinGroup( + pp_resource(), group.pp_resource(), callback.pp_completion_callback()); + } + return callback.MayForce(PP_ERROR_NOINTERFACE); +} + +int32_t UDPSocket::LeaveGroup(const NetAddress& group, + const CompletionCallback callback) { + if (has_interface<PPB_UDPSocket_1_2>()) { + return get_interface<PPB_UDPSocket_1_2>()->LeaveGroup( + pp_resource(), group.pp_resource(), callback.pp_completion_callback()); + } + return callback.MayForce(PP_ERROR_NOINTERFACE); +} + } // namespace pp |