Index: ppapi/shared_impl/private/net_address_private_impl.cc |
diff --git a/ppapi/shared_impl/private/net_address_private_impl.cc b/ppapi/shared_impl/private/net_address_private_impl.cc |
index b3fb3f6d973294e51852d10803f544bedd0ca137..3b08977276e38c484236cb01b73238f945637e1a 100644 |
--- a/ppapi/shared_impl/private/net_address_private_impl.cc |
+++ b/ppapi/shared_impl/private/net_address_private_impl.cc |
@@ -332,29 +332,11 @@ std::string ConvertIPv6AddressToString(const sockaddr_in6* a, |
PP_Var Describe(PP_Module /*module*/, |
const struct PP_NetAddress_Private* addr, |
PP_Bool include_port) { |
- if (!NetAddressPrivateImpl::ValidateNetAddress(*addr)) |
+ std::string str = |
+ NetAddressPrivateImpl::DescribeNetAddress(*addr, !!include_port); |
+ if (str.empty()) |
return PP_MakeUndefined(); |
- |
- // 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). |
- switch (GetFamilyInternal(addr)) { |
- case AF_INET: { |
- const sockaddr_in* a = reinterpret_cast<const sockaddr_in*>(addr->data); |
- return StringVar::StringToPPVar( |
- ConvertIPv4AddressToString(a, !!include_port)); |
- } |
- case AF_INET6: { |
- const sockaddr_in6* a = reinterpret_cast<const sockaddr_in6*>(addr->data); |
- return StringVar::StringToPPVar( |
- ConvertIPv6AddressToString(a, !!include_port)); |
- } |
- default: |
- NOTREACHED(); |
- break; |
- } |
- return PP_MakeUndefined(); |
+ return StringVar::StringToPPVar(str); |
} |
PP_Bool ReplacePort(const struct PP_NetAddress_Private* src_addr, |
@@ -543,4 +525,31 @@ bool NetAddressPrivateImpl::NetAddressToIPEndPoint( |
reinterpret_cast<const sockaddr&>(*net_addr.data), address, port); |
} |
+// static |
+std::string NetAddressPrivateImpl::DescribeNetAddress( |
+ const PP_NetAddress_Private& addr, |
+ bool include_port) { |
+ if (!NetAddressPrivateImpl::ValidateNetAddress(addr)) |
+ return std::string(); |
+ |
+ // 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). |
+ switch (GetFamilyInternal(&addr)) { |
+ case AF_INET: { |
+ const sockaddr_in* a = reinterpret_cast<const sockaddr_in*>(&addr.data); |
+ return ConvertIPv4AddressToString(a, include_port); |
+ } |
+ case AF_INET6: { |
+ const sockaddr_in6* a = reinterpret_cast<const sockaddr_in6*>(&addr.data); |
+ return ConvertIPv6AddressToString(a, include_port); |
+ } |
+ default: |
+ NOTREACHED(); |
+ break; |
+ } |
+ return std::string(); |
+} |
+ |
} // namespace ppapi |