diff options
author | bbudge@chromium.org <bbudge@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-13 18:12:02 +0000 |
---|---|---|
committer | bbudge@chromium.org <bbudge@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-13 18:12:02 +0000 |
commit | 9984ca0682185909a315ed1d2d51007b04d05126 (patch) | |
tree | 3a0d0b59e5eb7a6e7c1236014dad0f16e02dbfbf /ppapi | |
parent | f4148f30946db3e5d316e3dd411eebca3bf5649c (diff) | |
download | chromium_src-9984ca0682185909a315ed1d2d51007b04d05126.zip chromium_src-9984ca0682185909a315ed1d2d51007b04d05126.tar.gz chromium_src-9984ca0682185909a315ed1d2d51007b04d05126.tar.bz2 |
Remove PPAPI dependency on 'net'.
This is needed to complete the port of the PPAPI proxy plugin-side to NaCl.
This replaces usages in ppapi of types in 'net' with simpler base types (eg. instead of IPEndPoint, use a std::vector<unsigned char> address and an int port). Also, this removes some static methods in net_address_private_impl.* that are hardly used, and removes the ppapi::NetAddressList typedef, using std::vector<PP_NetAddress_Private> instead.
BUG=116317
TEST=existing, no new functionality
Review URL: https://chromiumcodereview.appspot.com/10909154
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@156585 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi')
-rw-r--r-- | ppapi/ppapi_internal.gyp | 1 | ||||
-rw-r--r-- | ppapi/proxy/ppapi_messages.h | 2 | ||||
-rw-r--r-- | ppapi/proxy/ppb_host_resolver_private_proxy.cc | 2 | ||||
-rw-r--r-- | ppapi/proxy/ppb_host_resolver_private_proxy.h | 11 | ||||
-rw-r--r-- | ppapi/shared_impl/private/net_address_private_impl.cc | 131 | ||||
-rw-r--r-- | ppapi/shared_impl/private/net_address_private_impl.h | 20 | ||||
-rw-r--r-- | ppapi/shared_impl/private/ppb_host_resolver_shared.cc | 21 | ||||
-rw-r--r-- | ppapi/shared_impl/private/ppb_host_resolver_shared.h | 20 |
8 files changed, 100 insertions, 108 deletions
diff --git a/ppapi/ppapi_internal.gyp b/ppapi/ppapi_internal.gyp index 2049620..6b27526 100644 --- a/ppapi/ppapi_internal.gyp +++ b/ppapi/ppapi_internal.gyp @@ -51,7 +51,6 @@ '../gpu/gpu.gyp:command_buffer_client', '../gpu/gpu.gyp:gles2_implementation', '../media/media.gyp:shared_memory_support', - '../net/net.gyp:net', '../skia/skia.gyp:skia', '../third_party/icu/icu.gyp:icuuc', # TODO(ananta) : The WebKit dependency needs to move to a new target for NACL. diff --git a/ppapi/proxy/ppapi_messages.h b/ppapi/proxy/ppapi_messages.h index 8528a2d..cfdc984 100644 --- a/ppapi/proxy/ppapi_messages.h +++ b/ppapi/proxy/ppapi_messages.h @@ -706,7 +706,7 @@ IPC_MESSAGE_ROUTED5(PpapiMsg_PPBHostResolver_ResolveACK, uint32 /* host_resolver_id */, bool /* succeeded */, std::string /* canonical_name */, - ppapi::NetAddressList /* net_address_list */) + std::vector<PP_NetAddress_Private> /* net_address_list */) #if !defined(OS_NACL) && !defined(NACL_WIN64) // PPP_Instance_Private. diff --git a/ppapi/proxy/ppb_host_resolver_private_proxy.cc b/ppapi/proxy/ppb_host_resolver_private_proxy.cc index 984ef9e..da73c09 100644 --- a/ppapi/proxy/ppb_host_resolver_private_proxy.cc +++ b/ppapi/proxy/ppb_host_resolver_private_proxy.cc @@ -107,7 +107,7 @@ void PPB_HostResolver_Private_Proxy::OnMsgResolveACK( uint32 host_resolver_id, bool succeeded, const std::string& canonical_name, - const ppapi::NetAddressList& net_address_list) { + const std::vector<PP_NetAddress_Private>& net_address_list) { if (!g_id_to_host_resolver) { NOTREACHED(); return; diff --git a/ppapi/proxy/ppb_host_resolver_private_proxy.h b/ppapi/proxy/ppb_host_resolver_private_proxy.h index 4282d3d..7e9b719 100644 --- a/ppapi/proxy/ppb_host_resolver_private_proxy.h +++ b/ppapi/proxy/ppb_host_resolver_private_proxy.h @@ -28,11 +28,12 @@ class PPB_HostResolver_Private_Proxy : public InterfaceProxy { private: // Browser->plugin message handlers. - void OnMsgResolveACK(uint32 plugin_dispatcher_id, - uint32 host_resolver_id, - bool succeeded, - const std::string& canonical_name, - const ppapi::NetAddressList& net_address_list); + void OnMsgResolveACK( + uint32 plugin_dispatcher_id, + uint32 host_resolver_id, + bool succeeded, + const std::string& canonical_name, + const std::vector<PP_NetAddress_Private>& net_address_list); DISALLOW_COPY_AND_ASSIGN(PPB_HostResolver_Private_Proxy); }; diff --git a/ppapi/shared_impl/private/net_address_private_impl.cc b/ppapi/shared_impl/private/net_address_private_impl.cc index 2d181ec..b3fb3f6 100644 --- a/ppapi/shared_impl/private/net_address_private_impl.cc +++ b/ppapi/shared_impl/private/net_address_private_impl.cc @@ -4,6 +4,14 @@ #include "ppapi/shared_impl/private/net_address_private_impl.h" +#if defined(OS_WIN) +#include <windows.h> +#include <ws2tcpip.h> +#elif defined(OS_POSIX) +#include <sys/socket.h> +#include <sys/types.h> +#endif + #include <string.h> #include <string> @@ -13,9 +21,6 @@ #include "base/stringprintf.h" #include "base/sys_byteorder.h" #include "build/build_config.h" -#include "net/base/address_list.h" -#include "net/base/ip_endpoint.h" -#include "net/base/net_util.h" #include "ppapi/c/pp_var.h" #include "ppapi/c/private/ppb_net_address_private.h" #include "ppapi/shared_impl/var.h" @@ -33,7 +38,7 @@ typedef ADDRESS_FAMILY sa_family_t; #define s6_addr16 u.Word #define ntohs(x) _byteswap_ushort(x) #define htons(x) _byteswap_ushort(x) -#endif // OS_WIN +#endif // defined(OS_WIN) // The 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 @@ -44,6 +49,65 @@ namespace ppapi { namespace { +static const size_t kIPv4AddressSize = 4; +static const size_t kIPv6AddressSize = 16; + +bool IPEndPointToSockaddr(const std::vector<unsigned char>& address, + int port, + sockaddr* sa) { + DCHECK(sa); + switch (address.size()) { + case kIPv4AddressSize: { + struct sockaddr_in* addr = reinterpret_cast<struct sockaddr_in*>(sa); + memset(addr, 0, sizeof(struct sockaddr_in)); + addr->sin_family = AF_INET; + addr->sin_port = base::HostToNet16(port); + memcpy(&addr->sin_addr, &address[0], static_cast<int>(address.size())); + break; + } + case kIPv6AddressSize: { + struct sockaddr_in6* addr6 = + reinterpret_cast<struct sockaddr_in6*>(sa); + memset(addr6, 0, sizeof(struct sockaddr_in6)); + addr6->sin6_family = AF_INET6; + addr6->sin6_port = base::HostToNet16(port); + memcpy(&addr6->sin6_addr, &address[0], static_cast<int>(address.size())); + break; + } + default: + return false; + } + return true; +} + +bool SockaddrToIPEndPoint(const sockaddr& sa, + std::vector<unsigned char>* address, + int* port) { + DCHECK(address); + DCHECK(port); + switch (sa.sa_family) { + case AF_INET: { + const struct sockaddr_in* addr = + reinterpret_cast<const struct sockaddr_in*>(&sa); + *port = base::NetToHost16(addr->sin_port); + const char* bytes = reinterpret_cast<const char*>(&addr->sin_addr); + address->assign(&bytes[0], &bytes[kIPv4AddressSize]); + break; + } + case AF_INET6: { + const struct sockaddr_in6* addr = + reinterpret_cast<const struct sockaddr_in6*>(&sa); + *port = base::NetToHost16(addr->sin6_port); + const char* bytes = reinterpret_cast<const char*>(&addr->sin6_addr); + address->assign(&bytes[0], &bytes[kIPv6AddressSize]); + break; + } + default: + return false; + } + return true; +} + // This assert fails on OpenBSD for an unknown reason at the moment. #if !defined(OS_OPENBSD) // Make sure the storage in |PP_NetAddress_Private| is big enough. (Do it here @@ -177,7 +241,6 @@ PP_Bool AreEqual(const PP_NetAddress_Private* addr1, } } -#if defined(OS_WIN) || defined(OS_MACOSX) std::string ConvertIPv4AddressToString(const sockaddr_in* a, bool include_port) { unsigned ip = base::NetToHost32(a->sin_addr.s_addr); @@ -265,7 +328,6 @@ std::string ConvertIPv6AddressToString(const sockaddr_in6* a, return description; } -#endif // OS_WIN || OS_MACOSX PP_Var Describe(PP_Module /*module*/, const struct PP_NetAddress_Private* addr, @@ -273,12 +335,10 @@ PP_Var Describe(PP_Module /*module*/, if (!NetAddressPrivateImpl::ValidateNetAddress(*addr)) return PP_MakeUndefined(); -#if defined(OS_WIN) || defined(OS_MACOSX) // On Windows, |NetAddressToString()| doesn't work in the sandbox. On Mac, // the output isn't consistent with RFC 5952, at least on Mac OS 10.6: // |getnameinfo()| collapses length-one runs of zeros (and also doesn't // display the scope). - // TODO(viettrungluu): Consider switching to this on Linux. switch (GetFamilyInternal(addr)) { case AF_INET: { const sockaddr_in* a = reinterpret_cast<const sockaddr_in*>(addr->data); @@ -295,14 +355,6 @@ PP_Var Describe(PP_Module /*module*/, break; } return PP_MakeUndefined(); -#else - 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(description); -#endif } PP_Bool ReplacePort(const struct PP_NetAddress_Private* src_addr, @@ -469,49 +521,26 @@ bool NetAddressPrivateImpl::SockaddrToNetAddress( // static bool NetAddressPrivateImpl::IPEndPointToNetAddress( - const net::IPEndPoint& ip, + const std::vector<unsigned char>& address, + int port, PP_NetAddress_Private* net_addr) { - net::SockaddrStorage storage; - - return ip.ToSockAddr(storage.addr, &storage.addr_len) && - SockaddrToNetAddress(storage.addr, storage.addr_len, net_addr); -} - -// static -bool NetAddressPrivateImpl::AddressListToNetAddress( - const net::AddressList& address_list, - PP_NetAddress_Private* net_addr) { - return !address_list.empty() && IPEndPointToNetAddress(address_list.front(), - net_addr); + sockaddr_storage storage; + sockaddr* sa = reinterpret_cast<sockaddr*>(&storage); + if (!IPEndPointToSockaddr(address, port, sa)) + return false; + return SockaddrToNetAddress(sa, sizeof(storage), net_addr); } // static bool NetAddressPrivateImpl::NetAddressToIPEndPoint( const PP_NetAddress_Private& net_addr, - net::IPEndPoint* ip_end_point) { - if (!ip_end_point || !ValidateNetAddress(net_addr)) + std::vector<unsigned char>* address, + int* port) { + if (!address || !port || !ValidateNetAddress(net_addr)) return false; - if (!ip_end_point->FromSockAddr( - reinterpret_cast<const sockaddr*>(net_addr.data), net_addr.size)) { - return false; - } - - return true; -} - -// static -bool NetAddressPrivateImpl::NetAddressToAddressList( - const PP_NetAddress_Private& net_addr, net::AddressList* address_list) { - if (!address_list) - return false; - - net::IPEndPoint ip_end_point; - if (!NetAddressToIPEndPoint(net_addr, &ip_end_point)) - return false; - - *address_list = net::AddressList(ip_end_point); - return true; + return SockaddrToIPEndPoint( + reinterpret_cast<const sockaddr&>(*net_addr.data), address, port); } } // namespace ppapi diff --git a/ppapi/shared_impl/private/net_address_private_impl.h b/ppapi/shared_impl/private/net_address_private_impl.h index 8212f10..db5d308 100644 --- a/ppapi/shared_impl/private/net_address_private_impl.h +++ b/ppapi/shared_impl/private/net_address_private_impl.h @@ -5,6 +5,8 @@ #ifndef PPAPI_SHARED_IMPL_PRIVATE_NET_ADDRESS_PRIVATE_IMPL_H_ #define PPAPI_SHARED_IMPL_PRIVATE_NET_ADDRESS_PRIVATE_IMPL_H_ +#include <vector> + #include "base/basictypes.h" #include "ppapi/c/pp_stdint.h" #include "ppapi/shared_impl/ppapi_shared_export.h" @@ -12,11 +14,6 @@ struct PP_NetAddress_Private; struct sockaddr; -namespace net { -class AddressList; -class IPEndPoint; -} - namespace ppapi { class PPAPI_SHARED_EXPORT NetAddressPrivateImpl { @@ -27,18 +24,13 @@ class PPAPI_SHARED_EXPORT NetAddressPrivateImpl { uint32_t sa_length, PP_NetAddress_Private* net_addr); - static bool IPEndPointToNetAddress(const net::IPEndPoint& ip, + static bool IPEndPointToNetAddress(const std::vector<unsigned char>& address, + int port, PP_NetAddress_Private* net_addr); - // Converts the first address to a PP_NetAddress_Private. - static bool AddressListToNetAddress(const net::AddressList& address_list, - PP_NetAddress_Private* net_addr); - static bool NetAddressToIPEndPoint(const PP_NetAddress_Private& net_addr, - net::IPEndPoint* ip_end_point); - - static bool NetAddressToAddressList(const PP_NetAddress_Private& net_addr, - net::AddressList* address_list); + std::vector<unsigned char>* address, + int* port); static const PP_NetAddress_Private kInvalidNetAddress; diff --git a/ppapi/shared_impl/private/ppb_host_resolver_shared.cc b/ppapi/shared_impl/private/ppb_host_resolver_shared.cc index 13a258f..543b1c0 100644 --- a/ppapi/shared_impl/private/ppb_host_resolver_shared.cc +++ b/ppapi/shared_impl/private/ppb_host_resolver_shared.cc @@ -8,9 +8,6 @@ #include <cstring> #include "base/memory/scoped_ptr.h" -#if !defined(OS_NACL) -#include "net/base/address_list.h" -#endif #include "ppapi/c/pp_errors.h" #include "ppapi/shared_impl/private/net_address_private_impl.h" #include "ppapi/shared_impl/var.h" @@ -18,22 +15,6 @@ namespace ppapi { -#if !defined(OS_NACL) && !defined(NACL_WIN64) -NetAddressList* CreateNetAddressListFromAddressList( - const net::AddressList& list) { - scoped_ptr<NetAddressList> net_address_list(new NetAddressList()); - PP_NetAddress_Private address; - - for (size_t i = 0; i < list.size(); ++i) { - if (!NetAddressPrivateImpl::IPEndPointToNetAddress(list[i], &address)) - return NULL; - net_address_list->push_back(address); - } - - return net_address_list.release(); -} -#endif // !defined(OS_NACL) && !defined(NACL_WIN64) - PPB_HostResolver_Shared::PPB_HostResolver_Shared(PP_Instance instance) : Resource(OBJECT_IS_IMPL, instance), host_resolver_id_(GenerateHostResolverID()) { @@ -94,7 +75,7 @@ bool PPB_HostResolver_Shared::GetNetAddress(uint32 index, void PPB_HostResolver_Shared::OnResolveCompleted( bool succeeded, const std::string& canonical_name, - const NetAddressList& net_address_list) { + const std::vector<PP_NetAddress_Private>& net_address_list) { if (succeeded) { canonical_name_ = canonical_name; net_address_list_ = net_address_list; diff --git a/ppapi/shared_impl/private/ppb_host_resolver_shared.h b/ppapi/shared_impl/private/ppb_host_resolver_shared.h index 33adaf9..7372dc5 100644 --- a/ppapi/shared_impl/private/ppb_host_resolver_shared.h +++ b/ppapi/shared_impl/private/ppb_host_resolver_shared.h @@ -14,10 +14,6 @@ #include "ppapi/shared_impl/tracked_callback.h" #include "ppapi/thunk/ppb_host_resolver_private_api.h" -namespace net { -class AddressList; -} - namespace ppapi { struct HostPortPair { @@ -25,13 +21,6 @@ struct HostPortPair { uint16_t port; }; -typedef std::vector<PP_NetAddress_Private> NetAddressList; - -#if !defined(OS_NACL) && !defined(NACL_WIN64) -PPAPI_SHARED_EXPORT NetAddressList* - CreateNetAddressListFromAddressList(const net::AddressList& list); -#endif - class PPAPI_SHARED_EXPORT PPB_HostResolver_Shared : public thunk::PPB_HostResolver_Private_API, public Resource { @@ -58,9 +47,10 @@ class PPAPI_SHARED_EXPORT PPB_HostResolver_Shared virtual bool GetNetAddress(uint32_t index, PP_NetAddress_Private* address) OVERRIDE; - void OnResolveCompleted(bool succeeded, - const std::string& canonical_name, - const NetAddressList& net_address_list); + void OnResolveCompleted( + bool succeeded, + const std::string& canonical_name, + const std::vector<PP_NetAddress_Private>& net_address_list); // Send functions that need to be implemented differently for the // proxied and non-proxied derived classes. @@ -76,7 +66,7 @@ class PPAPI_SHARED_EXPORT PPB_HostResolver_Shared scoped_refptr<TrackedCallback> resolve_callback_; std::string canonical_name_; - NetAddressList net_address_list_; + std::vector<PP_NetAddress_Private> net_address_list_; DISALLOW_COPY_AND_ASSIGN(PPB_HostResolver_Shared); }; |