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/net_address.h" 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/c/pp_bool.h" 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/cpp/instance_handle.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/cpp/module_impl.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace pp { 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace { 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochtemplate <> const char* interface_name<PPB_NetAddress_1_0>() { 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return PPB_NETADDRESS_INTERFACE_1_0; 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochNetAddress::NetAddress() { 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochNetAddress::NetAddress(PassRef, PP_Resource resource) 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch : Resource(PASS_REF, resource) { 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochNetAddress::NetAddress(const InstanceHandle& instance, 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const PP_NetAddress_IPv4& ipv4_addr) { 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (has_interface<PPB_NetAddress_1_0>()) { 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PassRefFromConstructor( 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch get_interface<PPB_NetAddress_1_0>()->CreateFromIPv4Address( 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch instance.pp_instance(), &ipv4_addr)); 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochNetAddress::NetAddress(const InstanceHandle& instance, 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const PP_NetAddress_IPv6& ipv6_addr) { 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (has_interface<PPB_NetAddress_1_0>()) { 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PassRefFromConstructor( 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch get_interface<PPB_NetAddress_1_0>()->CreateFromIPv6Address( 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch instance.pp_instance(), &ipv6_addr)); 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochNetAddress::NetAddress(const NetAddress& other) : Resource(other) { 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochNetAddress::~NetAddress() { 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochNetAddress& NetAddress::operator=(const NetAddress& other) { 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Resource::operator=(other); 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return *this; 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// static 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool NetAddress::IsAvailable() { 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return has_interface<PPB_NetAddress_1_0>(); 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochPP_NetAddress_Family NetAddress::GetFamily() const { 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (has_interface<PPB_NetAddress_1_0>()) 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return get_interface<PPB_NetAddress_1_0>()->GetFamily(pp_resource()); 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return PP_NETADDRESS_FAMILY_UNSPECIFIED; 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochVar NetAddress::DescribeAsString(bool include_port) const { 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (has_interface<PPB_NetAddress_1_0>()) { 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return Var(PASS_REF, 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch get_interface<PPB_NetAddress_1_0>()->DescribeAsString( 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch pp_resource(), PP_FromBool(include_port))); 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return Var(); 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool NetAddress::DescribeAsIPv4Address(PP_NetAddress_IPv4* ipv4_addr) const { 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (has_interface<PPB_NetAddress_1_0>()) { 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return PP_ToBool( 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch get_interface<PPB_NetAddress_1_0>()->DescribeAsIPv4Address( 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch pp_resource(), ipv4_addr)); 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return false; 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool NetAddress::DescribeAsIPv6Address(PP_NetAddress_IPv6* ipv6_addr) const { 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (has_interface<PPB_NetAddress_1_0>()) { 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return PP_ToBool( 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch get_interface<PPB_NetAddress_1_0>()->DescribeAsIPv6Address( 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch pp_resource(), ipv6_addr)); 94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return false; 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace pp 100