Index: ppapi/shared_impl/private/flash_net_address_impl.cc |
diff --git a/ppapi/shared_impl/private/flash_net_address_impl.cc b/ppapi/shared_impl/private/flash_net_address_impl.cc |
deleted file mode 100644 |
index 0fd0d0fb9e4b6db9b6924d9610d81f384168f699..0000000000000000000000000000000000000000 |
--- a/ppapi/shared_impl/private/flash_net_address_impl.cc |
+++ /dev/null |
@@ -1,175 +0,0 @@ |
-// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "ppapi/shared_impl/private/flash_net_address_impl.h" |
- |
-#include <string.h> |
- |
-#include <string> |
- |
-#include "base/basictypes.h" |
-#include "build/build_config.h" |
-#include "net/base/net_util.h" |
-#include "net/base/sys_addrinfo.h" |
-#include "net/base/sys_byteorder.h" |
-#include "ppapi/c/pp_var.h" |
-#include "ppapi/c/private/ppb_flash_net_address.h" |
-#include "ppapi/shared_impl/var.h" |
-#include "ppapi/thunk/thunk.h" |
- |
-// The Flash net address interface doesn't have a normal C -> C++ thunk since it |
-// doesn't actually have any proxy wrapping or associated objects; it's just a |
-// call into base. So we implement the entire interface here, using the thunk |
-// namespace so it magically gets hooked up in the proper places. |
- |
-namespace ppapi { |
- |
-namespace { |
- |
-#if defined(OS_WIN) |
-// The type of |sockaddr::sa_family|. |
-typedef ADDRESS_FAMILY sa_family_t; |
-#endif |
- |
-inline sa_family_t GetFamily(const PP_Flash_NetAddress& addr) { |
- return reinterpret_cast<const sockaddr*>(addr.data)->sa_family; |
-} |
- |
-PP_Bool AreHostsEqual(const PP_Flash_NetAddress* addr1, |
- const PP_Flash_NetAddress* addr2) { |
- if (!FlashNetAddressImpl::ValidateNetAddress(*addr1) || |
- !FlashNetAddressImpl::ValidateNetAddress(*addr2)) |
- return PP_FALSE; |
- |
- if (GetFamily(*addr1) != GetFamily(*addr2)) |
- return PP_FALSE; |
- |
- if (GetFamily(*addr1) == AF_INET) { |
- const sockaddr_in* a1 = reinterpret_cast<const sockaddr_in*>(addr1->data); |
- const sockaddr_in* a2 = reinterpret_cast<const sockaddr_in*>(addr2->data); |
- return PP_FromBool(a1->sin_addr.s_addr == a2->sin_addr.s_addr); |
- } |
- |
- if (GetFamily(*addr1) == AF_INET6) { |
- const sockaddr_in6* a1 = reinterpret_cast<const sockaddr_in6*>(addr1->data); |
- const sockaddr_in6* a2 = reinterpret_cast<const sockaddr_in6*>(addr2->data); |
- return PP_FromBool(a1->sin6_flowinfo == a2->sin6_flowinfo && |
- memcmp(&a1->sin6_addr, &a2->sin6_addr, |
- sizeof(a1->sin6_addr)) == 0 && |
- a1->sin6_scope_id == a2->sin6_scope_id); |
- } |
- |
- return PP_FALSE; |
-} |
- |
-PP_Bool AreEqual(const PP_Flash_NetAddress* addr1, |
- const PP_Flash_NetAddress* addr2) { |
- // |AreHostsEqual()| will also validate the addresses and return false if |
- // either is invalid. |
- if (!AreHostsEqual(addr1, addr2)) |
- return PP_FALSE; |
- |
- // Note: Here, we know that |addr1| and |addr2| have the same family. |
- if (GetFamily(*addr1) == AF_INET) { |
- const sockaddr_in* a1 = reinterpret_cast<const sockaddr_in*>(addr1->data); |
- const sockaddr_in* a2 = reinterpret_cast<const sockaddr_in*>(addr2->data); |
- return PP_FromBool(a1->sin_port == a2->sin_port); |
- } |
- |
- if (GetFamily(*addr1) == AF_INET6) { |
- const sockaddr_in6* a1 = reinterpret_cast<const sockaddr_in6*>(addr1->data); |
- const sockaddr_in6* a2 = reinterpret_cast<const sockaddr_in6*>(addr2->data); |
- return PP_FromBool(a1->sin6_port == a2->sin6_port); |
- } |
- |
- return PP_FALSE; |
-} |
- |
-PP_Var Describe(PP_Module module, |
- const struct PP_Flash_NetAddress* addr, |
- PP_Bool include_port) { |
- if (!FlashNetAddressImpl::ValidateNetAddress(*addr)) |
- return PP_MakeUndefined(); |
- |
- const sockaddr* a = reinterpret_cast<const sockaddr*>(addr->data); |
- socklen_t l = addr->size; |
- std::string description = |
- include_port ? net::NetAddressToStringWithPort(a, l) : |
- net::NetAddressToString(a, l); |
- return StringVar::StringToPPVar(module, description); |
-} |
- |
-PP_Bool ReplacePort(const struct PP_Flash_NetAddress* src_addr, |
- uint16_t port, |
- struct PP_Flash_NetAddress* dest_addr) { |
- if (!FlashNetAddressImpl::ValidateNetAddress(*src_addr)) |
- return PP_FALSE; |
- |
- if (GetFamily(*src_addr) == AF_INET) { |
- memmove(dest_addr, src_addr, sizeof(*src_addr)); |
- reinterpret_cast<sockaddr_in*>(dest_addr->data)->sin_port = htons(port); |
- return PP_TRUE; |
- } |
- |
- if (GetFamily(*src_addr) == AF_INET6) { |
- memmove(dest_addr, src_addr, sizeof(*src_addr)); |
- reinterpret_cast<sockaddr_in6*>(dest_addr->data)->sin6_port = htons(port); |
- return PP_TRUE; |
- } |
- |
- return PP_FALSE; |
-} |
- |
-void GetAnyAddress(PP_Bool is_ipv6, struct PP_Flash_NetAddress* addr) { |
- memset(addr->data, 0, arraysize(addr->data) * sizeof(addr->data[0])); |
- if (is_ipv6) { |
- sockaddr_in6* a = reinterpret_cast<sockaddr_in6*>(addr->data); |
- addr->size = sizeof(*a); |
- a->sin6_family = AF_INET6; |
- a->sin6_addr = in6addr_any; |
- } else { |
- sockaddr_in* a = reinterpret_cast<sockaddr_in*>(addr->data); |
- addr->size = sizeof(*a); |
- a->sin_family = AF_INET; |
- a->sin_addr.s_addr = INADDR_ANY; |
- } |
-} |
- |
-const PPB_Flash_NetAddress flash_net_address_interface = { |
- &AreEqual, |
- &AreHostsEqual, |
- &Describe, |
- &ReplacePort, |
- &GetAnyAddress |
-}; |
- |
-} // namespace |
- |
-namespace thunk { |
- |
-PPAPI_THUNK_EXPORT const PPB_Flash_NetAddress* GetPPB_Flash_NetAddress_Thunk() { |
- return &flash_net_address_interface; |
-} |
- |
-} // namespace thunk |
- |
-// static |
-bool FlashNetAddressImpl::ValidateNetAddress(const PP_Flash_NetAddress& addr) { |
- if (addr.size < sizeof(reinterpret_cast<sockaddr*>(0)->sa_family)) |
- return false; |
- |
- // TODO(viettrungluu): more careful validation? |
- // Just do a size check for AF_INET. |
- if (GetFamily(addr) == AF_INET && addr.size >= sizeof(sockaddr_in)) |
- return true; |
- |
- // Ditto for AF_INET6. |
- if (GetFamily(addr) == AF_INET6 && addr.size >= sizeof(sockaddr_in6)) |
- return true; |
- |
- // Reject everything else. |
- return false; |
-} |
- |
-} // namespace ppapi |