Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Unified Diff: native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_host_resolver_interface.cc

Issue 99933002: [NaCl SDK] nacl_io: implement getaddrinfo() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_host_resolver_interface.cc
diff --git a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_host_resolver_interface.cc b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_host_resolver_interface.cc
index ef7f7baff3413ca33f8d27bcb5ea950b1b74c924..762f87ae43eac476d4303a118ac5ad40fb55c8b0 100644
--- a/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_host_resolver_interface.cc
+++ b/native_client_sdk/src/tests/nacl_io_test/fake_ppapi/fake_host_resolver_interface.cc
@@ -15,12 +15,11 @@ namespace {
class FakeHostResolverResource : public FakeResource {
public:
- FakeHostResolverResource() : resolved(false), name(NULL) {}
+ FakeHostResolverResource() : resolved(false) {}
static const char* classname() { return "FakeHostResolverResource"; }
bool resolved;
- in_addr_t address;
- const char* name;
+ PP_HostResolver_Hint hints;
};
int32_t RunCompletionCallback(PP_CompletionCallback* callback, int32_t result) {
@@ -40,7 +39,7 @@ PP_Resource FakeHostResolverInterface::Create(PP_Instance instance) {
if (instance != ppapi_->GetInstance())
return PP_ERROR_BADRESOURCE;
- FakeHostResolverResource* resolver_resource = new FakeHostResolverResource;
+ FakeHostResolverResource* resolver_resource = new FakeHostResolverResource();
return CREATE_RESOURCE(ppapi_->resource_manager(),
FakeHostResolverResource,
@@ -50,15 +49,14 @@ PP_Resource FakeHostResolverInterface::Create(PP_Instance instance) {
int32_t FakeHostResolverInterface::Resolve(PP_Resource resource,
const char* hostname,
uint16_t,
- const PP_HostResolver_Hint*,
+ const PP_HostResolver_Hint* hints,
PP_CompletionCallback callback) {
FakeHostResolverResource* resolver =
ppapi_->resource_manager()->Get<FakeHostResolverResource>(resource);
resolver->resolved = false;
- if (!strcmp(hostname, FAKE_HOSTNAME)) {
+ resolver->hints = *hints;
+ if (!fake_hostname.empty() && fake_hostname == hostname) {
resolver->resolved = true;
- resolver->name = FAKE_HOSTNAME;
- resolver->address = htonl(FAKE_IP);
return RunCompletionCallback(&callback, PP_OK);
}
return RunCompletionCallback(&callback, PP_ERROR_NAME_NOT_RESOLVED);
@@ -69,7 +67,8 @@ PP_Var FakeHostResolverInterface::GetCanonicalName(PP_Resource resource) {
ppapi_->resource_manager()->Get<FakeHostResolverResource>(resource);
if (!res->resolved)
return PP_Var();
- return ppapi_->GetVarInterface()->VarFromUtf8(res->name, strlen(res->name));
+ return ppapi_->GetVarInterface()->VarFromUtf8(fake_hostname.data(),
+ fake_hostname.length());
}
uint32_t FakeHostResolverInterface::GetNetAddressCount(PP_Resource resolver) {
@@ -77,7 +76,17 @@ uint32_t FakeHostResolverInterface::GetNetAddressCount(PP_Resource resolver) {
ppapi_->resource_manager()->Get<FakeHostResolverResource>(resolver);
if (!res->resolved)
return 0;
- return 1;
+
+ uint32_t rtn = 0;
+ if (res->hints.family == PP_NETADDRESS_FAMILY_IPV6 ||
+ res->hints.family == PP_NETADDRESS_FAMILY_UNSPECIFIED)
+ rtn += fake_addresses_v6.size();
+
+ if (res->hints.family == PP_NETADDRESS_FAMILY_IPV4 ||
+ res->hints.family == PP_NETADDRESS_FAMILY_UNSPECIFIED)
+ rtn += fake_addresses_v4.size();
+
+ return rtn;
}
PP_Resource FakeHostResolverInterface::GetNetAddress(PP_Resource resource,
@@ -87,12 +96,41 @@ PP_Resource FakeHostResolverInterface::GetNetAddress(PP_Resource resource,
if (!res->resolved)
return 0;
- if (index != 0)
+ bool include_v4 = false;
+ int max_index = 0;
+ switch (res->hints.family) {
+ case PP_NETADDRESS_FAMILY_IPV4:
+ max_index = fake_addresses_v4.size();
+ include_v4 = true;
+ break;
+ case PP_NETADDRESS_FAMILY_IPV6:
+ max_index = fake_addresses_v6.size();
+ break;
+ case PP_NETADDRESS_FAMILY_UNSPECIFIED:
+ include_v4 = true;
+ max_index = fake_addresses_v4.size() + fake_addresses_v6.size();
+ break;
+ default:
+ return 0;
+ }
+
+ if (index >= max_index)
return 0;
- // Create a new NetAddress resource and return it.
- PP_NetAddress_IPv4 addr;
- memcpy(addr.addr, &res->address, sizeof(res->address));
nacl_io::NetAddressInterface* iface = ppapi_->GetNetAddressInterface();
- return iface->CreateFromIPv4Address(ppapi_->GetInstance(), &addr);
+
+ // Create a new NetAddress resource and return it.
+ if (include_v4 && index < fake_addresses_v4.size()) {
+ PP_NetAddress_IPv4 addr;
+ sockaddr_in& addr4 = fake_addresses_v4[index];
+ memcpy(addr.addr, &addr4.sin_addr, sizeof(addr4.sin_addr));
+ return iface->CreateFromIPv4Address(ppapi_->GetInstance(), &addr);
+ } else {
+ if (include_v4)
+ index -= fake_addresses_v4.size();
+ PP_NetAddress_IPv6 addr;
+ sockaddr_in6& addr6 = fake_addresses_v6[index];
+ memcpy(addr.addr, &addr6.sin6_addr, sizeof(addr6.sin6_addr));
+ return iface->CreateFromIPv6Address(ppapi_->GetInstance(), &addr);
+ }
}

Powered by Google App Engine
This is Rietveld 408576698