host_resolver_private.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/private/host_resolver_private.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_bool.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_errors.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/completion_callback.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/instance_handle.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/module.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/module_impl.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/pass_ref.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace pp {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> const char* interface_name<PPB_HostResolver_Private_0_1>() {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PPB_HOSTRESOLVER_PRIVATE_INTERFACE_0_1;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HostResolverPrivate::HostResolverPrivate(const InstanceHandle& instance) {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (has_interface<PPB_HostResolver_Private_0_1>()) {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PassRefFromConstructor(
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        get_interface<PPB_HostResolver_Private_0_1>()->Create(
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        instance.pp_instance()));
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool HostResolverPrivate::IsAvailable() {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return has_interface<PPB_HostResolver_Private_0_1>();
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int32_t HostResolverPrivate::Resolve(const std::string& host,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     uint16_t port,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const PP_HostResolver_Private_Hint& hint,
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     const CompletionCallback& callback) {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_HostResolver_Private_0_1>())
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return callback.MayForce(PP_ERROR_NOINTERFACE);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_HostResolver_Private_0_1>()->Resolve(
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pp_resource(),
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      host.c_str(),
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      port,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &hint,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      callback.pp_completion_callback());
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)Var HostResolverPrivate::GetCanonicalName() {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_HostResolver_Private_0_1>())
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return Var(Var::Null());
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Var pp_canonical_name =
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      get_interface<PPB_HostResolver_Private_0_1>()->GetCanonicalName(
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          pp_resource());
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return Var(PASS_REF, pp_canonical_name);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32_t HostResolverPrivate::GetSize() {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_HostResolver_Private_0_1>())
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return 0;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return get_interface<PPB_HostResolver_Private_0_1>()->GetSize(pp_resource());
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool HostResolverPrivate::GetNetAddress(uint32_t index,
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                        PP_NetAddress_Private* address) {
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!has_interface<PPB_HostResolver_Private_0_1>())
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Bool result = get_interface<PPB_HostResolver_Private_0_1>()->GetNetAddress(
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pp_resource(), index, address);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return PP_ToBool(result);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace pp
78