root/ppapi/cpp/private/net_address_private.cc

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. IsAvailable
  2. AreEqual
  3. AreHostsEqual
  4. Describe
  5. ReplacePort
  6. GetAnyAddress
  7. GetFamily
  8. GetPort
  9. GetAddress
  10. GetScopeID
  11. CreateFromIPv4Address
  12. CreateFromIPv6Address

// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ppapi/cpp/private/net_address_private.h"

#include "ppapi/c/pp_bool.h"
#include "ppapi/cpp/module.h"
#include "ppapi/cpp/module_impl.h"
#include "ppapi/cpp/var.h"

namespace pp {

namespace {

template <> const char* interface_name<PPB_NetAddress_Private_1_1>() {
  return PPB_NETADDRESS_PRIVATE_INTERFACE_1_1;
}

template <> const char* interface_name<PPB_NetAddress_Private_1_0>() {
  return PPB_NETADDRESS_PRIVATE_INTERFACE_1_0;
}

template <> const char* interface_name<PPB_NetAddress_Private_0_1>() {
  return PPB_NETADDRESS_PRIVATE_INTERFACE_0_1;
}

}  // namespace

// static
bool NetAddressPrivate::IsAvailable() {
  return has_interface<PPB_NetAddress_Private_1_1>() ||
      has_interface<PPB_NetAddress_Private_1_0>() ||
      has_interface<PPB_NetAddress_Private_0_1>();
}

// static
bool NetAddressPrivate::AreEqual(const PP_NetAddress_Private& addr1,
                                 const PP_NetAddress_Private& addr2) {
  if (has_interface<PPB_NetAddress_Private_1_1>()) {
    return !!get_interface<PPB_NetAddress_Private_1_1>()->AreEqual(&addr1,
                                                                   &addr2);
  }
  if (has_interface<PPB_NetAddress_Private_1_0>()) {
    return !!get_interface<PPB_NetAddress_Private_1_0>()->AreEqual(&addr1,
                                                                   &addr2);
  }
  if (has_interface<PPB_NetAddress_Private_0_1>()) {
    return !!get_interface<PPB_NetAddress_Private_0_1>()->AreEqual(&addr1,
                                                                   &addr2);
  }
  return false;
}

// static
bool NetAddressPrivate::AreHostsEqual(const PP_NetAddress_Private& addr1,
                                      const PP_NetAddress_Private& addr2) {
  if (has_interface<PPB_NetAddress_Private_1_1>()) {
    return !!get_interface<PPB_NetAddress_Private_1_1>()->AreHostsEqual(&addr1,
                                                                        &addr2);
  }
  if (has_interface<PPB_NetAddress_Private_1_0>()) {
    return !!get_interface<PPB_NetAddress_Private_1_0>()->AreHostsEqual(&addr1,
                                                                        &addr2);
  }
  if (has_interface<PPB_NetAddress_Private_0_1>()) {
    return !!get_interface<PPB_NetAddress_Private_0_1>()->AreHostsEqual(&addr1,
                                                                        &addr2);
  }
  return false;
}

// static
std::string NetAddressPrivate::Describe(const PP_NetAddress_Private& addr,
                                        bool include_port) {
  Module* module = Module::Get();
  if (!module)
    return std::string();

  PP_Var result_pp_var = PP_MakeUndefined();
  if (has_interface<PPB_NetAddress_Private_1_1>()) {
    result_pp_var = get_interface<PPB_NetAddress_Private_1_1>()->Describe(
        module->pp_module(),
        &addr,
        PP_FromBool(include_port));
  } else if (has_interface<PPB_NetAddress_Private_1_0>()) {
    result_pp_var = get_interface<PPB_NetAddress_Private_1_0>()->Describe(
        module->pp_module(),
        &addr,
        PP_FromBool(include_port));
  } else if (has_interface<PPB_NetAddress_Private_0_1>()) {
    result_pp_var = get_interface<PPB_NetAddress_Private_0_1>()->Describe(
        module->pp_module(),
        &addr,
        PP_FromBool(include_port));
  }

  Var result(PASS_REF, result_pp_var);
  return result.is_string() ? result.AsString() : std::string();
}

// static
bool NetAddressPrivate::ReplacePort(const PP_NetAddress_Private& addr_in,
                                    uint16_t port,
                                    PP_NetAddress_Private* addr_out) {
  if (has_interface<PPB_NetAddress_Private_1_1>()) {
    return !!get_interface<PPB_NetAddress_Private_1_1>()->ReplacePort(&addr_in,
                                                                      port,
                                                                      addr_out);
  }
  if (has_interface<PPB_NetAddress_Private_1_0>()) {
    return !!get_interface<PPB_NetAddress_Private_1_0>()->ReplacePort(&addr_in,
                                                                      port,
                                                                      addr_out);
  }
  if (has_interface<PPB_NetAddress_Private_0_1>()) {
    return !!get_interface<PPB_NetAddress_Private_0_1>()->ReplacePort(&addr_in,
                                                                      port,
                                                                      addr_out);
  }
  return false;
}

// static
bool NetAddressPrivate::GetAnyAddress(bool is_ipv6,
                                      PP_NetAddress_Private* addr) {
  if (has_interface<PPB_NetAddress_Private_1_1>()) {
    get_interface<PPB_NetAddress_Private_1_1>()->GetAnyAddress(
        PP_FromBool(is_ipv6),
        addr);
    return true;
  } else if (has_interface<PPB_NetAddress_Private_1_0>()) {
    get_interface<PPB_NetAddress_Private_1_0>()->GetAnyAddress(
        PP_FromBool(is_ipv6),
        addr);
    return true;
  } else if (has_interface<PPB_NetAddress_Private_0_1>()) {
    get_interface<PPB_NetAddress_Private_0_1>()->GetAnyAddress(
        PP_FromBool(is_ipv6),
        addr);
    return true;
  }
  return false;
}

// static
PP_NetAddressFamily_Private NetAddressPrivate::GetFamily(
    const PP_NetAddress_Private& addr) {
  if (has_interface<PPB_NetAddress_Private_1_1>())
    return get_interface<PPB_NetAddress_Private_1_1>()->GetFamily(&addr);
  if (has_interface<PPB_NetAddress_Private_1_0>())
    return get_interface<PPB_NetAddress_Private_1_0>()->GetFamily(&addr);
  return PP_NETADDRESSFAMILY_PRIVATE_UNSPECIFIED;
}

// static
uint16_t NetAddressPrivate::GetPort(const PP_NetAddress_Private& addr) {
  if (has_interface<PPB_NetAddress_Private_1_1>())
    return get_interface<PPB_NetAddress_Private_1_1>()->GetPort(&addr);
  if (has_interface<PPB_NetAddress_Private_1_0>())
    return get_interface<PPB_NetAddress_Private_1_0>()->GetPort(&addr);
  return 0;
}

// static
bool NetAddressPrivate::GetAddress(const PP_NetAddress_Private& addr,
                                   void* address,
                                   uint16_t address_size) {
  if (has_interface<PPB_NetAddress_Private_1_1>()) {
    return PP_ToBool(get_interface<PPB_NetAddress_Private_1_1>()->GetAddress(
        &addr,
        address,
        address_size));
  }
  if (has_interface<PPB_NetAddress_Private_1_0>()) {
    return PP_ToBool(get_interface<PPB_NetAddress_Private_1_0>()->GetAddress(
        &addr,
        address,
        address_size));
  }
  return false;
}

// static
uint32_t NetAddressPrivate::GetScopeID(const PP_NetAddress_Private& addr) {
  if (has_interface<PPB_NetAddress_Private_1_1>())
    return get_interface<PPB_NetAddress_Private_1_1>()->GetScopeID(&addr);
  return 0;
}

// static
bool NetAddressPrivate::CreateFromIPv4Address(
    const uint8_t ip[4],
    uint16_t port,
    struct PP_NetAddress_Private* addr_out) {
  if (has_interface<PPB_NetAddress_Private_1_1>()) {
    get_interface<PPB_NetAddress_Private_1_1>()->CreateFromIPv4Address(
        ip, port, addr_out);
    return true;
  }
  return false;
}

// static
bool NetAddressPrivate::CreateFromIPv6Address(
    const uint8_t ip[16],
    uint32_t scope_id,
    uint16_t port,
    struct PP_NetAddress_Private* addr_out) {
  if (has_interface<PPB_NetAddress_Private_1_1>()) {
    get_interface<PPB_NetAddress_Private_1_1>()->CreateFromIPv6Address(
        ip, scope_id, port, addr_out);
    return true;
  }
  return false;
}

}  // namespace pp

/* [<][>][^][v][top][bottom][index][help] */