CAddress

A CService with information about it as peer

Synopsis

Declared in <protocol.h>

class CAddress
    : public CService

Base Classes

NameDescription
CServiceA combination of a network address (CNetAddr) and a (TCP) port

Types

NameDescription
SerParams Serialization parameters pairing a network encoding with a target format.

Enums

NameDescription
BIP155Network BIP155 network ids recognized by this software.
Encoding Wire encoding used when (un)serializing an address.
Format Selects the serialization format used for an address.

Member Functions

NameDescription
CAddress [constructor]Constructors
GetAddrBytes Get the raw address bytes.
GetIn6Addr Fill an in6_addr with this address's IPv6 value.
GetInAddr Fill an in_addr with this address's IPv4 value.
GetKey Get a unique key identifying this service (address and port).
GetLinkedIPv4 For IPv4, mapped IPv4, SIIT translated IPv4, Teredo, 6to4 tunneled addresses, return the relevant IPv4 address as a uint32.
GetNetClass Get the network class used for grouping this address.
GetNetwork Get the network this address belongs to.
GetPort Get the TCP port in host byte order.
GetReachabilityFrom Calculate how reachable this address is from a given peer address.
GetSAFamily Get the address family
GetSockAddr Fill a sockaddr structure with this service's address and port.
HasCJDNSPrefix Whether the raw address begins with the CJDNS prefix byte.
HasLinkedIPv4 Whether this address has a linked IPv4 address (see GetLinkedIPv4()).
IsAddrV1Compatible Check if the current object can be serialized in pre-ADDRv2/BIP155 format.
IsBindAny Whether this address is the INADDR_ANY / "bind any" wildcard address.
IsCJDNS Whether this is a CJDNS address.
IsHeNet Whether this is an IPv6 Hurricane Electric address (2001:0470::/36).
IsI2P Whether this is an I2P address.
IsIPv4 Whether this is an IPv4 address (::FFFF:0:0/96, 0.0.0.0/0).
IsIPv6 Whether this is a native IPv6 address (not mapped IPv4, not Tor).
IsInternal Whether this is an internal (NET_INTERNAL) address.
IsLocal Whether this is a local (loopback) address.
IsPrivacyNet Whether this object is a privacy network. TODO: consider adding IsCJDNS() here when more peers adopt CJDNS, see: https://github.com/bitcoin/bitcoin/pull/27411#issuecomment-1497176155
IsRFC1918 Whether this is an IPv4 private-network address (10/8, 192.168/16, 172.16/12).
IsRFC2544 Whether this is an IPv4 inter-network benchmarking address (198.18.0.0/15).
IsRFC3849 Whether this is an IPv6 documentation address (2001:0DB8::/32).
IsRFC3927 Whether this is an IPv4 link-local autoconfig address (169.254.0.0/16).
IsRFC3964 Whether this is an IPv6 6to4 tunnelling address (2002::/16).
IsRFC4193 Whether this is an IPv6 unique-local address (FC00::/7).
IsRFC4380 Whether this is an IPv6 Teredo tunnelling address (2001::/32).
IsRFC4843 Whether this is an IPv6 ORCHID (deprecated) address (2001:10::/28).
IsRFC4862 Whether this is an IPv6 link-local autoconfig address (FE80::/64).
IsRFC5737 Whether this is an IPv4 documentation address (192.0.2/24, 198.51.100/24, 203.0.113/24).
IsRFC6052 Whether this is an IPv6 well-known prefix for IPv4-embedded addresses (64:FF9B::/96).
IsRFC6145 Whether this is an IPv6 IPv4-translated address (::FFFF:0:0:0/96).
IsRFC6598 Whether this is an IPv4 ISP-level NAT (shared) address (100.64.0.0/10).
IsRFC7343 Whether this is an IPv6 ORCHIDv2 address (2001:20::/28).
IsRelayable Whether this address should be relayed to other peers even if we can't reach it ourselves.
IsRoutable Whether this address is publicly routable.
IsTor Whether this is a Tor onion address.
IsValid Whether this address is valid.
SetIP Copy the address value from another CNetAddr.
SetInternal Set this address to an internal address derived from a string or FQDN.
SetLegacyIPv6 Set from a legacy IPv6 address. Legacy IPv6 address may be a normal IPv6 address, or another address (e.g. IPv4) disguised as IPv6. This encoding is used in the legacy addr encoding.
SetSockAddr Set CService from a network sockaddr.
SetSpecial Parse a Tor or I2P address and set this object to it.
ToStringAddr Get the address as a human-readable string, without a port.
ToStringAddrPort Get a human-readable representation of the address and port.

Static Member Functions

NameDescription
Ser Ser overloads
Unser Unser overloads

Data Members

NameDescription
nServices Serialized as uint64_t in V1, and as CompactSize in V2.
nTime Always included in serialization. The behavior is unspecified if the value is not representable as uint32_t.

Static Data Members

NameDescription
V1 Serialization parameters for the legacy ADDRv1 encoding.
V1_DISK Serialization parameters for the V1 disk format.
V1_NETWORK Serialization parameters for the V1 network format.
V2 Serialization parameters for the BIP155 ADDRv2 encoding.
V2_DISK Serialization parameters for the V2 disk format.
V2_NETWORK Serialization parameters for the V2 network format.

Protected Data Members

NameDescription
m_addr Raw representation of the network address. In network byte order (big endian) for IPv4 and IPv6.
m_net Network to which this address belongs.
m_scope_id Scope id if scoped/link-local IPV6 address. See https://tools.ietf.org/html/rfc4007
port TCP port number, in host byte order.

Friends

NameDescription
operator==Returns whether two addresses have equal time, service flags, and endpoint.

Non-Member Functions

NameDescription
AddLocalRecord a local address that we may advertise, scored by nScore.
AddLocalRecord a local address (with port) that we may advertise, scored by nScore.
ConnectDirectlyCreate a socket and try to connect to the specified service, using the provided timeout.
ConnectDirectlyCreate a socket and try to connect to the specified service.
IsLocalReturn whether the given address is one of our known local addresses.
IsProxyCheck whether an address is one of the configured proxies.
MaybeFlipIPv6toCJDNSIf an IPv6 address belongs to the address range used by the CJDNS network and the CJDNS network is reachable (-cjdnsreachable config is set), then change the type from NET_IPV6 to NET_CJDNS.
NATPMPRequestPortMapTry to open a port using RFC 6886 NAT-PMP. IPv4 only.
ReadAnchorsRead the anchor IP address database (anchors.dat)
RemoveLocalForget a previously recorded local address.
SeenLocalMark a local address as having been seen, returning whether it was already known.
operator<Order two services.
operator<Order two addresses.
operator==Compare two services for equality.
operator==Compare two addresses for equality.