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#ifndef PPAPI_CPP_NET_ADDRESS_H_ 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#define PPAPI_CPP_NET_ADDRESS_H_ 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/c/ppb_net_address.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/cpp/pass_ref.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/cpp/resource.h" 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "ppapi/cpp/var.h" 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace pp { 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass InstanceHandle; 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/// The <code>NetAddress</code> class represents a network address. 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass NetAddress : public Resource { 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// Default constructor for creating an is_null() <code>NetAddress</code> 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// object. 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NetAddress(); 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// A constructor used when you have received a <code>PP_Resource</code> as a 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// return value that has had 1 ref added for you. 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// @param[in] resource A <code>PPB_NetAddress</code> resource. 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NetAddress(PassRef, PP_Resource resource); 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// A constructor used to create a <code>NetAddress</code> object with the 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// specified IPv4 address. 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// @param[in] instance The instance with which this resource will be 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// associated. 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// @param[in] ipv4_addr An IPv4 address. 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NetAddress(const InstanceHandle& instance, 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const PP_NetAddress_IPv4& ipv4_addr); 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// A constructor used to create a <code>NetAddress</code> object with the 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// specified IPv6 address. 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// @param[in] instance The instance with which this resource will be 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// associated. 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// @param[in] ipv6_addr An IPv6 address. 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NetAddress(const InstanceHandle& instance, 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const PP_NetAddress_IPv6& ipv6_addr); 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// The copy constructor for <code>NetAddress</code>. 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// @param[in] other A reference to another <code>NetAddress</code>. 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NetAddress(const NetAddress& other); 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// The destructor. 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual ~NetAddress(); 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// The assignment operator for <code>NetAddress</code>. 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// @param[in] other A reference to another <code>NetAddress</code>. 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// @return A reference to this <code>NetAddress</code> object. 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch NetAddress& operator=(const NetAddress& other); 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// Static function for determining whether the browser supports the 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// <code>PPB_NetAddress</code> interface. 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// @return true if the interface is available, false otherwise. 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static bool IsAvailable(); 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// Gets the address family. 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// @return The address family on success; 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// <code>PP_NETADDRESS_FAMILY_UNSPECIFIED</code> on failure. 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch PP_NetAddress_Family GetFamily() const; 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// Returns a human-readable description of the network address. The 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// description is in the form of host [ ":" port ] and conforms to 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// http://tools.ietf.org/html/rfc3986#section-3.2 for IPv4 and IPv6 addresses 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// (e.g., "192.168.0.1", "192.168.0.1:99", or "[::1]:80"). 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// 80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// @param[in] include_port Whether to include the port number in the 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// description. 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// @return A string <code>Var</code> on success; an undefined 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// <code>Var</code> on failure. 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Var DescribeAsString(bool include_port) const; 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// Fills a <code>PP_NetAddress_IPv4</code> structure if the network address 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// is of <code>PP_NETADDRESS_FAMILY_IPV4</code> address family. 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// Note that passing a network address of 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// <code>PP_NETADDRESS_FAMILY_IPV6</code> address family will fail even if 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// the address is an IPv4-mapped IPv6 address. 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// @param[out] ipv4_addr A <code>PP_NetAddress_IPv4</code> structure to store 94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// the result. 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// @return A boolean value indicating whether the operation succeeded. 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool DescribeAsIPv4Address(PP_NetAddress_IPv4* ipv4_addr) const; 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// Fills a <code>PP_NetAddress_IPv6</code> structure if the network address 100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// is of <code>PP_NETADDRESS_FAMILY_IPV6</code> address family. 101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// Note that passing a network address of 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// <code>PP_NETADDRESS_FAMILY_IPV4</code> address family will fail - this 103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// method doesn't map it to an IPv6 address. 104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// @param[out] ipv6_addr A <code>PP_NetAddress_IPv6</code> structure to store 106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// the result. 107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// 108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /// @return A boolean value indicating whether the operation succeeded. 109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool DescribeAsIPv6Address(PP_NetAddress_IPv6* ipv6_addr) const; 110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace pp 113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 114eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#endif // PPAPI_CPP_NET_ADDRESS_H_ 115