Index: ppapi/cpp/udp_socket.cc |
diff --git a/ppapi/cpp/udp_socket.cc b/ppapi/cpp/udp_socket.cc |
index 2f8c505df5899db8a43d4d055cc1c8f791a6fa7d..19d2894775cec42fbbc1cb54e53d5358ddfd00e0 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 |