1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef PPAPI_CPP_NET_ADDRESS_H_
6 #define PPAPI_CPP_NET_ADDRESS_H_
8 #include "ppapi/c/ppb_net_address.h"
9 #include "ppapi/cpp/pass_ref.h"
10 #include "ppapi/cpp/resource.h"
11 #include "ppapi/cpp/var.h"
17 /// The <code>NetAddress</code> class represents a network address.
18 class NetAddress
: public Resource
{
20 /// Default constructor for creating an is_null() <code>NetAddress</code>
24 /// A constructor used when you have received a <code>PP_Resource</code> as a
25 /// return value that has had 1 ref added for you.
27 /// @param[in] resource A <code>PPB_NetAddress</code> resource.
28 NetAddress(PassRef
, PP_Resource resource
);
30 /// A constructor used to create a <code>NetAddress</code> object with the
31 /// specified IPv4 address.
33 /// @param[in] instance The instance with which this resource will be
35 /// @param[in] ipv4_addr An IPv4 address.
36 NetAddress(const InstanceHandle
& instance
,
37 const PP_NetAddress_IPv4
& ipv4_addr
);
39 /// A constructor used to create a <code>NetAddress</code> object with the
40 /// specified IPv6 address.
42 /// @param[in] instance The instance with which this resource will be
44 /// @param[in] ipv6_addr An IPv6 address.
45 NetAddress(const InstanceHandle
& instance
,
46 const PP_NetAddress_IPv6
& ipv6_addr
);
48 /// The copy constructor for <code>NetAddress</code>.
50 /// @param[in] other A reference to another <code>NetAddress</code>.
51 NetAddress(const NetAddress
& other
);
54 virtual ~NetAddress();
56 /// The assignment operator for <code>NetAddress</code>.
58 /// @param[in] other A reference to another <code>NetAddress</code>.
60 /// @return A reference to this <code>NetAddress</code> object.
61 NetAddress
& operator=(const NetAddress
& other
);
63 /// Static function for determining whether the browser supports the
64 /// <code>PPB_NetAddress</code> interface.
66 /// @return true if the interface is available, false otherwise.
67 static bool IsAvailable();
69 /// Gets the address family.
71 /// @return The address family on success;
72 /// <code>PP_NETADDRESS_FAMILY_UNSPECIFIED</code> on failure.
73 PP_NetAddress_Family
GetFamily() const;
75 /// Returns a human-readable description of the network address. The
76 /// description is in the form of host [ ":" port ] and conforms to
77 /// http://tools.ietf.org/html/rfc3986#section-3.2 for IPv4 and IPv6 addresses
78 /// (e.g., "192.168.0.1", "192.168.0.1:99", or "[::1]:80").
80 /// @param[in] include_port Whether to include the port number in the
83 /// @return A string <code>Var</code> on success; an undefined
84 /// <code>Var</code> on failure.
85 Var
DescribeAsString(bool include_port
) const;
87 /// Fills a <code>PP_NetAddress_IPv4</code> structure if the network address
88 /// is of <code>PP_NETADDRESS_FAMILY_IPV4</code> address family.
89 /// Note that passing a network address of
90 /// <code>PP_NETADDRESS_FAMILY_IPV6</code> address family will fail even if
91 /// the address is an IPv4-mapped IPv6 address.
93 /// @param[out] ipv4_addr A <code>PP_NetAddress_IPv4</code> structure to store
96 /// @return A boolean value indicating whether the operation succeeded.
97 bool DescribeAsIPv4Address(PP_NetAddress_IPv4
* ipv4_addr
) const;
99 /// Fills a <code>PP_NetAddress_IPv6</code> structure if the network address
100 /// is of <code>PP_NETADDRESS_FAMILY_IPV6</code> address family.
101 /// Note that passing a network address of
102 /// <code>PP_NETADDRESS_FAMILY_IPV4</code> address family will fail - this
103 /// method doesn't map it to an IPv6 address.
105 /// @param[out] ipv6_addr A <code>PP_NetAddress_IPv6</code> structure to store
108 /// @return A boolean value indicating whether the operation succeeded.
109 bool DescribeAsIPv6Address(PP_NetAddress_IPv6
* ipv6_addr
) const;
114 #endif // PPAPI_CPP_NET_ADDRESS_H_