Pepper: Implement PPB_NetAddress_Private Describe() for IPv4 on Windows.

BUG=103955,103969
TEST=ui_tests: {OutOfProcessPPAPITests,PPAPITests}.NetAddressPrivate
TBR=dmichael@chromium.org

Review URL: http://codereview.chromium.org/8537026

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@109783 0039d316-1c4b-4281-b951-d872f2087c98
parent d2f9114c
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
#include <string> #include <string>
#include "base/basictypes.h" #include "base/basictypes.h"
#include "base/logging.h"
#include "base/stringprintf.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "net/base/net_util.h" #include "net/base/net_util.h"
#include "net/base/sys_addrinfo.h" #include "net/base/sys_addrinfo.h"
...@@ -92,12 +94,39 @@ PP_Var Describe(PP_Module module, ...@@ -92,12 +94,39 @@ PP_Var Describe(PP_Module module,
if (!NetAddressPrivateImpl::ValidateNetAddress(*addr)) if (!NetAddressPrivateImpl::ValidateNetAddress(*addr))
return PP_MakeUndefined(); return PP_MakeUndefined();
#if defined(OS_WIN)
// On Windows, |NetAddressToString()| doesn't work in the sandbox.
// TODO(viettrungluu): Consider switching to this everywhere once it's fully
// implemented.
switch (GetFamily(*addr)) {
case AF_INET: {
const sockaddr_in* a = reinterpret_cast<const sockaddr_in*>(addr->data);
unsigned ip = ntohl(a->sin_addr.s_addr);
unsigned port = ntohs(a->sin_port);
std::string description = base::StringPrintf(
"%u.%u.%u.%u",
(ip >> 24) & 0xff, (ip >> 16) & 0xff, (ip >> 8) & 0xff, ip & 0xff);
if (include_port)
description.append(base::StringPrintf(":%u", port));
return StringVar::StringToPPVar(module, description);
}
case AF_INET6:
// TODO(viettrungluu): crbug.com/103969
NOTIMPLEMENTED();
break;
default:
NOTREACHED();
break;
}
return PP_MakeUndefined();
#else
const sockaddr* a = reinterpret_cast<const sockaddr*>(addr->data); const sockaddr* a = reinterpret_cast<const sockaddr*>(addr->data);
socklen_t l = addr->size; socklen_t l = addr->size;
std::string description = std::string description =
include_port ? net::NetAddressToStringWithPort(a, l) : include_port ? net::NetAddressToStringWithPort(a, l) :
net::NetAddressToString(a, l); net::NetAddressToString(a, l);
return StringVar::StringToPPVar(module, description); return StringVar::StringToPPVar(module, description);
#endif
} }
PP_Bool ReplacePort(const struct PP_NetAddress_Private* src_addr, PP_Bool ReplacePort(const struct PP_NetAddress_Private* src_addr,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment