1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/cpp/host_resolver.h" 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/c/pp_errors.h" 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/cpp/completion_callback.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/cpp/instance_handle.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/cpp/module_impl.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace pp { 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace { 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochtemplate <> const char* interface_name<PPB_HostResolver_1_0>() { 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return PPB_HOSTRESOLVER_INTERFACE_1_0; 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochHostResolver::HostResolver() { 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochHostResolver::HostResolver(const InstanceHandle& instance) { 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (has_interface<PPB_HostResolver_1_0>()) { 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PassRefFromConstructor(get_interface<PPB_HostResolver_1_0>()->Create( 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch instance.pp_instance())); 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochHostResolver::HostResolver(PassRef, PP_Resource resource) 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch : Resource(PASS_REF, resource) { 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochHostResolver::HostResolver(const HostResolver& other) : Resource(other) { 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochHostResolver::~HostResolver() { 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochHostResolver& HostResolver::operator=(const HostResolver& other) { 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Resource::operator=(other); 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return *this; 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// static 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool HostResolver::IsAvailable() { 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return has_interface<PPB_HostResolver_1_0>(); 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochint32_t HostResolver::Resolve(const char* host, 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch uint16_t port, 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const PP_HostResolver_Hint& hint, 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const CompletionCallback& callback) { 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (has_interface<PPB_HostResolver_1_0>()) { 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return get_interface<PPB_HostResolver_1_0>()->Resolve( 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch pp_resource(), host, port, &hint, callback.pp_completion_callback()); 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return callback.MayForce(PP_ERROR_NOINTERFACE); 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochVar HostResolver::GetCanonicalName() const { 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (has_interface<PPB_HostResolver_1_0>()) { 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return Var(PASS_REF, 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch get_interface<PPB_HostResolver_1_0>()->GetCanonicalName( 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch pp_resource())); 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return Var(); 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochuint32_t HostResolver::GetNetAddressCount() const { 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (has_interface<PPB_HostResolver_1_0>()) { 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return get_interface<PPB_HostResolver_1_0>()->GetNetAddressCount( 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch pp_resource()); 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return 0; 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochNetAddress HostResolver::GetNetAddress(uint32_t index) const { 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (has_interface<PPB_HostResolver_1_0>()) { 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return NetAddress(PASS_REF, 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch get_interface<PPB_HostResolver_1_0>()->GetNetAddress( 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch pp_resource(), index)); 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return NetAddress(); 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace pp 94