[email protected] | 0edbfc8 | 2013-06-14 06:15:39 | [diff] [blame] | 1 | // Copyright 2013 The Chromium Authors. All rights reserved. |
2 | // Use of this source code is governed by a BSD-style license that can be | ||||
3 | // found in the LICENSE file. | ||||
4 | |||||
5 | #include "ppapi/proxy/host_resolver_resource.h" | ||||
6 | |||||
7 | #include "base/logging.h" | ||||
8 | #include "ppapi/c/private/ppb_host_resolver_private.h" | ||||
9 | #include "ppapi/proxy/net_address_resource.h" | ||||
10 | #include "ppapi/shared_impl/tracked_callback.h" | ||||
11 | |||||
12 | namespace ppapi { | ||||
13 | namespace proxy { | ||||
14 | |||||
15 | namespace { | ||||
16 | |||||
17 | PP_HostResolver_Private_Hint ConvertToHostResolverPrivateHint( | ||||
[email protected] | c54f81b | 2013-06-24 06:05:39 | [diff] [blame] | 18 | const PP_HostResolver_Hint& hint) { |
[email protected] | 0edbfc8 | 2013-06-14 06:15:39 | [diff] [blame] | 19 | PP_HostResolver_Private_Hint private_hint; |
20 | switch (hint.family) { | ||||
21 | case PP_NETADDRESS_FAMILY_UNSPECIFIED: | ||||
[email protected] | ddecdae | 2013-06-24 23:17:46 | [diff] [blame] | 22 | private_hint.family = PP_NETADDRESSFAMILY_PRIVATE_UNSPECIFIED; |
[email protected] | 0edbfc8 | 2013-06-14 06:15:39 | [diff] [blame] | 23 | break; |
24 | case PP_NETADDRESS_FAMILY_IPV4: | ||||
[email protected] | ddecdae | 2013-06-24 23:17:46 | [diff] [blame] | 25 | private_hint.family = PP_NETADDRESSFAMILY_PRIVATE_IPV4; |
[email protected] | 0edbfc8 | 2013-06-14 06:15:39 | [diff] [blame] | 26 | break; |
27 | case PP_NETADDRESS_FAMILY_IPV6: | ||||
[email protected] | ddecdae | 2013-06-24 23:17:46 | [diff] [blame] | 28 | private_hint.family = PP_NETADDRESSFAMILY_PRIVATE_IPV6; |
[email protected] | 0edbfc8 | 2013-06-14 06:15:39 | [diff] [blame] | 29 | break; |
30 | default: | ||||
31 | NOTREACHED(); | ||||
[email protected] | ddecdae | 2013-06-24 23:17:46 | [diff] [blame] | 32 | private_hint.family = PP_NETADDRESSFAMILY_PRIVATE_UNSPECIFIED; |
[email protected] | 0edbfc8 | 2013-06-14 06:15:39 | [diff] [blame] | 33 | } |
34 | |||||
35 | private_hint.flags = 0; | ||||
[email protected] | c54f81b | 2013-06-24 06:05:39 | [diff] [blame] | 36 | if (hint.flags & PP_HOSTRESOLVER_FLAG_CANONNAME) |
[email protected] | ddecdae | 2013-06-24 23:17:46 | [diff] [blame] | 37 | private_hint.flags |= PP_HOST_RESOLVER_PRIVATE_FLAGS_CANONNAME; |
[email protected] | 0edbfc8 | 2013-06-14 06:15:39 | [diff] [blame] | 38 | |
39 | return private_hint; | ||||
40 | } | ||||
41 | |||||
42 | } // namespace | ||||
43 | |||||
44 | HostResolverResource::HostResolverResource(Connection connection, | ||||
45 | PP_Instance instance) | ||||
[email protected] | f31e55c | 2013-06-20 08:44:37 | [diff] [blame] | 46 | : HostResolverResourceBase(connection, instance, false) { |
[email protected] | 0edbfc8 | 2013-06-14 06:15:39 | [diff] [blame] | 47 | } |
48 | |||||
49 | HostResolverResource::~HostResolverResource() { | ||||
50 | } | ||||
51 | |||||
52 | thunk::PPB_HostResolver_API* HostResolverResource::AsPPB_HostResolver_API() { | ||||
53 | return this; | ||||
54 | } | ||||
55 | |||||
56 | int32_t HostResolverResource::Resolve(const char* host, | ||||
57 | uint16_t port, | ||||
[email protected] | c54f81b | 2013-06-24 06:05:39 | [diff] [blame] | 58 | const PP_HostResolver_Hint* hint, |
[email protected] | 0edbfc8 | 2013-06-14 06:15:39 | [diff] [blame] | 59 | scoped_refptr<TrackedCallback> callback) { |
60 | if (!hint) | ||||
61 | return PP_ERROR_BADARGUMENT; | ||||
62 | |||||
63 | PP_HostResolver_Private_Hint private_hint = | ||||
64 | ConvertToHostResolverPrivateHint(*hint); | ||||
65 | return ResolveImpl(host, port, &private_hint, callback); | ||||
66 | } | ||||
67 | |||||
68 | PP_Var HostResolverResource::GetCanonicalName() { | ||||
69 | return GetCanonicalNameImpl(); | ||||
70 | } | ||||
71 | |||||
72 | uint32_t HostResolverResource::GetNetAddressCount() { | ||||
73 | return GetSizeImpl(); | ||||
74 | } | ||||
75 | |||||
76 | PP_Resource HostResolverResource::GetNetAddress(uint32_t index) { | ||||
77 | scoped_refptr<NetAddressResource> addr_resource = GetNetAddressImpl(index); | ||||
78 | if (!addr_resource.get()) | ||||
79 | return 0; | ||||
80 | |||||
81 | return addr_resource->GetReference(); | ||||
82 | } | ||||
83 | |||||
84 | } // namespace proxy | ||||
85 | } // namespace ppapi |