Tor
0.4.7.0-alpha-dev
|
Functions to use and manipulate the tor_addr_t structure. More...
#include "orconfig.h"
#include "lib/net/address.h"
#include "lib/net/socket.h"
#include "lib/cc/ctassert.h"
#include "lib/container/smartlist.h"
#include "lib/ctime/di_ops.h"
#include "lib/log/log.h"
#include "lib/log/escape.h"
#include "lib/malloc/malloc.h"
#include "lib/net/inaddr.h"
#include "lib/string/compat_ctype.h"
#include "lib/string/compat_string.h"
#include "lib/string/parse_int.h"
#include "lib/string/printf.h"
#include "lib/string/util_string.h"
#include "ext/siphash.h"
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Go to the source code of this file.
Macros | |
#define | ADDRESS_PRIVATE |
#define | MAX_ADDRESS_LENGTH (TOR_ADDR_BUF_LEN+2+(1+INET_NTOA_BUF_LEN)+12+1) |
#define | TRISTATE(a, b) (((a)<(b))?-1: (((a)==(b))?0:1)) |
Functions | |
CTASSERT (AF_UNSPEC==0) | |
socklen_t | tor_addr_to_sockaddr (const tor_addr_t *a, uint16_t port, struct sockaddr *sa_out, socklen_t len) |
static void | tor_addr_make_af_unix (tor_addr_t *a) |
int | tor_addr_from_sockaddr (tor_addr_t *a, const struct sockaddr *sa, uint16_t *port_out) |
char * | tor_sockaddr_to_str (const struct sockaddr *sa) |
void | tor_addr_make_unspec (tor_addr_t *a) |
void | tor_addr_make_null (tor_addr_t *a, sa_family_t family) |
int | tor_addr_is_internal_ (const tor_addr_t *addr, int for_listening, const char *filename, int lineno) |
const char * | tor_addr_to_str (char *dest, const tor_addr_t *addr, size_t len, int decorate) |
int | tor_addr_parse_PTR_name (tor_addr_t *result, const char *address, int family, int accept_regular) |
int | tor_addr_to_PTR_name (char *out, size_t outlen, const tor_addr_t *addr) |
int | tor_addr_parse_mask_ports (const char *s, unsigned flags, tor_addr_t *addr_out, maskbits_t *maskbits_out, uint16_t *port_min_out, uint16_t *port_max_out) |
int | tor_addr_is_v4 (const tor_addr_t *addr) |
int | tor_addr_is_v6 (const tor_addr_t *addr) |
int | tor_addr_is_null (const tor_addr_t *addr) |
int | tor_addr_is_loopback (const tor_addr_t *addr) |
int | tor_addr_is_valid (const tor_addr_t *addr, int for_listening) |
int | tor_addr_is_valid_ipv4n (uint32_t v4n_addr, int for_listening) |
int | tor_port_is_valid (uint16_t port, int for_listening) |
void | tor_addr_from_ipv4n (tor_addr_t *dest, uint32_t v4addr) |
void | tor_addr_from_ipv6_bytes (tor_addr_t *dest, const uint8_t *ipv6_bytes) |
void | tor_addr_from_in6 (tor_addr_t *dest, const struct in6_addr *in6) |
void | tor_addr_copy_ipv6_bytes (uint8_t *dest, const tor_addr_t *src) |
void | tor_addr_copy (tor_addr_t *dest, const tor_addr_t *src) |
void | tor_addr_copy_tight (tor_addr_t *dest, const tor_addr_t *src) |
int | tor_addr_compare (const tor_addr_t *addr1, const tor_addr_t *addr2, tor_addr_comparison_t how) |
int | tor_addr_compare_masked (const tor_addr_t *addr1, const tor_addr_t *addr2, maskbits_t mbits, tor_addr_comparison_t how) |
uint64_t | tor_addr_hash (const tor_addr_t *addr) |
uint64_t | tor_addr_keyed_hash (const struct sipkey *key, const tor_addr_t *addr) |
char * | tor_addr_to_str_dup (const tor_addr_t *addr) |
const char * | fmt_addr_impl (const tor_addr_t *addr, int decorate) |
const char * | fmt_addrport (const tor_addr_t *addr, uint16_t port) |
const char * | fmt_addr32 (uint32_t addr) |
const char * | fmt_addr32_port (uint32_t addr, uint16_t port) |
const char * | fmt_af_family (sa_family_t family) |
const char * | fmt_addr_family (const tor_addr_t *addr) |
static int | tor_addr_parse_impl (tor_addr_t *addr, const char *src, bool allow_ipv6_without_brackets) |
int | tor_addr_parse (tor_addr_t *addr, const char *src) |
smartlist_t * | get_interface_addresses_raw (int severity, sa_family_t family) |
int | tor_addr_is_multicast (const tor_addr_t *a) |
int | get_interface_address6_via_udp_socket_hack (int severity, sa_family_t family, tor_addr_t *addr) |
int | get_interface_address6 (int severity, sa_family_t family, tor_addr_t *addr) |
void | interface_address6_list_free_ (smartlist_t *addrs) |
smartlist_t * | get_interface_address6_list (int severity, sa_family_t family, int include_internal) |
int | tor_addr_port_parse (int severity, const char *addrport, tor_addr_t *address_out, uint16_t *port_out, int default_port) |
int | tor_addr_port_split (int severity, const char *addrport, char **address_out, uint16_t *port_out) |
int | addr_mask_get_bits (uint32_t mask) |
int | parse_port_range (const char *port, uint16_t *port_min_out, uint16_t *port_max_out) |
char * | tor_dup_ip (uint32_t addr) |
int | get_interface_address (int severity, uint32_t *addr) |
int | tor_addr_hostname_is_local (const char *name) |
tor_addr_port_t * | tor_addr_port_new (const tor_addr_t *addr, uint16_t port) |
int | tor_addr_port_eq (const tor_addr_port_t *a, const tor_addr_port_t *b) |
void | tor_addr_port_copy (tor_addr_port_t *dest, const tor_addr_port_t *source) |
int | string_is_valid_ipv4_address (const char *string) |
int | string_is_valid_ipv6_address (const char *string) |
int | string_is_valid_dest (const char *string) |
int | string_is_valid_nonrfc_hostname (const char *string) |
Variables | |
static const uint32_t | unspec_hash_input [] = { 0x4e4df09f, 0x92985342 } |
Functions to use and manipulate the tor_addr_t structure.
This module doesn't have any support for the libc resolver: that is all in resolve.c.
Definition in file address.c.
int addr_mask_get_bits | ( | uint32_t | mask | ) |
const char* fmt_addr32 | ( | uint32_t | addr | ) |
Like fmt_addr(), but takes addr as a host-order IPv4 addresses. Also not thread-safe, also clobbers its return buffer on repeated calls. Clean internal buffer and return empty string on failure.
Definition at line 1210 of file address.c.
Referenced by fmt_addr32_port().
const char* fmt_addr32_port | ( | uint32_t | addr, |
uint16_t | port | ||
) |
Like fmt_addrport(), but takes addr as a host-order IPv4 addresses. Also not thread-safe, also clobbers its return buffer on repeated calls.
const char* fmt_addr_family | ( | const tor_addr_t * | addr | ) |
const char* fmt_addr_impl | ( | const tor_addr_t * | addr, |
int | decorate | ||
) |
Return a string representing the address addr. This string is statically allocated, and must not be freed. Each call to fmt_addr_impl invalidates the last result of the function. This function is not thread-safe. If decorate is set, add brackets to IPv6 addresses.
It's better to use the wrapper macros of this function: fmt_addr() and fmt_and_decorate_addr().
const char* fmt_addrport | ( | const tor_addr_t * | addr, |
uint16_t | port | ||
) |
Return a string representing the pair addr and port. This calls fmt_and_decorate_addr internally, so IPv6 addresses will have brackets, and the caveats of fmt_addr_impl apply.
Definition at line 1199 of file address.c.
Referenced by bridge_resolve_conflicts().
const char* fmt_af_family | ( | sa_family_t | family | ) |
Return a string representing family.
This string is a string constant, and must not be freed. This function is thread-safe.
Definition at line 1246 of file address.c.
Referenced by fmt_addr_family(), and router_do_orport_reachability_checks().
int get_interface_address | ( | int | severity, |
uint32_t * | addr | ||
) |
Set *addr to a host-order IPv4 address (if any) of an interface that connects to the Internet. Prefer public IP addresses to internal IP addresses. This address should only be used in checking whether our address has changed, as it may be an internal IPv4 address. Return 0 on success, -1 on failure. Prefer get_interface_address_list6 for a list of all IPv4 and IPv6 addresses on all interfaces which connect to the Internet.
int get_interface_address6 | ( | int | severity, |
sa_family_t | family, | ||
tor_addr_t * | addr | ||
) |
Set *addr to an arbitrary IP address (if any) of an interface that connects to the Internet. Prefer public IP addresses to internal IP addresses. This address should only be used in checking whether our address has changed, as it may be an internal IP address. Return 0 on success, -1 on failure. Prefer get_interface_address6_list for a list of all addresses on all interfaces which connect to the Internet.
Definition at line 1723 of file address.c.
Referenced by get_interface_address().
smartlist_t* get_interface_address6_list | ( | int | severity, |
sa_family_t | family, | ||
int | include_internal | ||
) |
Return a smartlist of the IP addresses of type family from all interfaces on the server. Excludes loopback and multicast addresses. Only includes internal addresses if include_internal is true. (Note that a relay behind NAT may use an internal address to connect to the Internet.) An empty smartlist means that there are no addresses of the selected type matching these criteria. Returns NULL on failure. Use interface_address6_list_free to free the returned list.
Definition at line 1777 of file address.c.
Referenced by get_interface_address6(), and get_interface_address_list().
int get_interface_address6_via_udp_socket_hack | ( | int | severity, |
sa_family_t | family, | ||
tor_addr_t * | addr | ||
) |
smartlist_t* get_interface_addresses_raw | ( | int | severity, |
sa_family_t | family | ||
) |
Try to ask our network interfaces what addresses they are bound to. Return a new smartlist of tor_addr_t on success, and NULL on failure. (An empty smartlist indicates that we successfully learned that we have no addresses.) Log failure messages at severity. Only return the interface addresses of requested family and ignore the addresses of other address families.
Definition at line 1602 of file address.c.
Referenced by get_interface_address6_list().
void interface_address6_list_free_ | ( | smartlist_t * | addrs | ) |
int parse_port_range | ( | const char * | port, |
uint16_t * | port_min_out, | ||
uint16_t * | port_max_out | ||
) |
Parse a string s in the format of (*|port(-maxport)?)?, setting the various *out pointers as appropriate. Return 0 on success, -1 on failure.
Definition at line 1994 of file address.c.
Referenced by router_parse_addr_policy_private().
int string_is_valid_dest | ( | const char * | string | ) |
int string_is_valid_ipv4_address | ( | const char * | string | ) |
Return true if string represents a valid IPv4 address in 'a.b.c.d' form.
Definition at line 2133 of file address.c.
Referenced by string_is_valid_nonrfc_hostname().
int string_is_valid_ipv6_address | ( | const char * | string | ) |
int string_is_valid_nonrfc_hostname | ( | const char * | string | ) |
int tor_addr_compare | ( | const tor_addr_t * | addr1, |
const tor_addr_t * | addr2, | ||
tor_addr_comparison_t | how | ||
) |
Given two addresses addr1 and addr2, return 0 if the two addresses are equivalent under the mask mbits, less than 0 if addr1 precedes addr2, and greater than 0 otherwise.
Different address families (IPv4 vs IPv6) are always considered unequal if how is CMP_EXACT; otherwise, IPv6-mapped IPv4 addresses are considered equivalent to their IPv4 equivalents.
As a special case, all pointer-wise distinct AF_UNIX addresses are always considered unequal since tor_addr_t currently does not contain the information required to make the comparison.
Definition at line 984 of file address.c.
Referenced by compare_orports_(), compare_routerinfo_addrs_by_family(), geoip_add_entry(), get_configured_bridge_by_addr_port_digest(), get_configured_bridge_by_exact_addr_port_digest(), get_configured_bridge_by_orports_digest(), rewrite_node_address_for_bridge(), and routerstatus_has_visibly_changed().
int tor_addr_compare_masked | ( | const tor_addr_t * | addr1, |
const tor_addr_t * | addr2, | ||
maskbits_t | mbits, | ||
tor_addr_comparison_t | how | ||
) |
As tor_addr_compare(), but only looks at the first mask bits of the address.
Reduce over-specific masks (>128 for ipv6, >32 for ipv4) to 128 or 32.
The mask is interpreted relative to addr1, so that if a is ::ffff:1.2.3.4, and b is 3.4.5.6, tor_addr_compare_masked(a,b,100,CMP_SEMANTIC) is the same as -tor_addr_compare_masked(b,a,4,CMP_SEMANTIC).
We guarantee that the ordering from tor_addr_compare_masked is a total order on addresses, but not that it is any particular order, or that it will be the same from one version to the next.
Helper: Evaluates to -1 if a is less than b, 0 if a equals b, or 1 if a is greater than b. May evaluate a and b more than once.
Definition at line 1005 of file address.c.
Referenced by addr_policy_covers(), addr_policy_intersects(), get_random_virtual_addr(), router_addrs_in_same_network(), and tor_addr_compare().
void tor_addr_copy | ( | tor_addr_t * | dest, |
const tor_addr_t * | src | ||
) |
Copy a tor_addr_t from src to dest.
Definition at line 933 of file address.c.
Referenced by connection_or_connect(), extend_info_add_orport(), find_single_ipv6_orport(), get_interface_address6(), get_proxy_addrport(), node_get_addr(), reachable_addr_choose_base(), resolved_addr_get_last(), resolved_addr_get_suggested(), and router_get_orport().
void tor_addr_copy_ipv6_bytes | ( | uint8_t * | dest, |
const tor_addr_t * | src | ||
) |
void tor_addr_copy_tight | ( | tor_addr_t * | dest, |
const tor_addr_t * | src | ||
) |
Copy a tor_addr_t from src to dest, taking extra care to copy only the well-defined portions. Used for computing hashes of addresses.
Definition at line 947 of file address.c.
Referenced by policy_hash().
void tor_addr_from_in6 | ( | tor_addr_t * | dest, |
const struct in6_addr * | in6 | ||
) |
Set dest equal to the IPv6 address in the in6_addr in6.
Definition at line 911 of file address.c.
Referenced by tor_addr_from_sockaddr(), and tor_addr_parse_PTR_name().
void tor_addr_from_ipv4n | ( | tor_addr_t * | dest, |
uint32_t | v4addr | ||
) |
Set dest to equal the IPv4 address in v4addr (given in network order).
Definition at line 889 of file address.c.
Referenced by get_random_virtual_addr(), and tor_addr_from_sockaddr().
void tor_addr_from_ipv6_bytes | ( | tor_addr_t * | dest, |
const uint8_t * | ipv6_bytes | ||
) |
Set dest to equal the IPv6 address in the 16 bytes at ipv6_bytes.
Definition at line 900 of file address.c.
Referenced by connected_cell_parse(), get_random_virtual_addr(), and tor_addr_from_in6().
int tor_addr_from_sockaddr | ( | tor_addr_t * | a, |
const struct sockaddr * | sa, | ||
uint16_t * | port_out | ||
) |
Set the tor_addr_t in a to contain the socket address contained in sa. IF port_out is non-NULL and sa contains a port, set *port_out to that port. Return 0 on success and -1 on failure.
Definition at line 165 of file address.c.
Referenced by tor_addr_from_getsockname().
uint64_t tor_addr_hash | ( | const tor_addr_t * | addr | ) |
int tor_addr_hostname_is_local | ( | const char * | name | ) |
int tor_addr_is_internal_ | ( | const tor_addr_t * | addr, |
int | for_listening, | ||
const char * | filename, | ||
int | lineno | ||
) |
Return true iff ip is an IP reserved to localhost or local networks.
If ip is in RFC1918 or RFC4193 or RFC4291, we will return true. (fec0::/10, deprecated by RFC3879, is also treated as internal for now and will return true.)
If ip is 0.0.0.0 or 100.64.0.0/10 (RFC6598), we will act as:
int tor_addr_is_loopback | ( | const tor_addr_t * | addr | ) |
Return true iff addr is a loopback address
Definition at line 805 of file address.c.
Referenced by get_interface_address6_list(), and warn_nonlocal_controller_ports().
int tor_addr_is_multicast | ( | const tor_addr_t * | a | ) |
Return true iff a is a multicast address.
Definition at line 1624 of file address.c.
Referenced by get_interface_address6_list().
int tor_addr_is_null | ( | const tor_addr_t * | addr | ) |
Determine whether an address addr is null, either all zeroes or belonging to family AF_UNSPEC.
Definition at line 780 of file address.c.
Referenced by add_trusted_dir_to_nodelist_addr_set(), compare_tor_addr_to_addr_policy(), compare_tor_addr_to_short_policy(), conn_get_outbound_address(), connection_ap_expire_beginning(), connection_ap_handshake_attach_circuit(), dirserv_router_has_valid_address(), extend_info_is_a_configured_bridge(), format_node_description(), get_first_listener_addrport_string(), node_add_to_address_set(), node_describe(), policies_copy_addr_to_smartlist(), policies_copy_outbound_addresses_to_smartlist(), pt_get_extra_info_descriptor_string(), reachable_addr_allows(), relay_find_addr_to_publish(), retry_listener_ports(), router_addrs_in_same_network(), router_compare_to_my_exit_policy(), and routerset_contains_extendinfo().
int tor_addr_is_v4 | ( | const tor_addr_t * | addr | ) |
Determine whether an address is IPv4, either native or IPv4-mapped IPv6. Note that this is about representation only, as any decent stack will reject IPv4-mapped addresses received on the wire (and won't use them on the wire either).
Definition at line 750 of file address.c.
Referenced by get_first_listener_addrport_string(), and tor_addr_is_internal_().
int tor_addr_is_v6 | ( | const tor_addr_t * | addr | ) |
uint64_t tor_addr_keyed_hash | ( | const struct sipkey * | key, |
const tor_addr_t * | addr | ||
) |
As tor_addr_hash, but use a particular siphash key.
Definition at line 1142 of file address.c.
Referenced by bloomfilt_addr_hash().
|
static |
Set address a to zero. This address belongs to the AF_UNIX family.
Definition at line 154 of file address.c.
Referenced by tor_addr_from_sockaddr().
void tor_addr_make_null | ( | tor_addr_t * | a, |
sa_family_t | family | ||
) |
Set address a to the null address in address family family. The null address for AF_INET is 0.0.0.0. The null address for AF_INET6 is [::]. AF_UNSPEC is all null.
Definition at line 235 of file address.c.
Referenced by connection_ap_can_use_exit(), connection_ap_get_begincell_flags(), hs_get_extend_info_from_lspecs(), reachable_addr_choose_base(), reachable_addr_choose_from_dir_server(), reachable_addr_choose_from_node(), reachable_addr_choose_from_rs(), resolved_addr_reset_last(), and routerconf_find_ipv6_or_ap().
void tor_addr_make_unspec | ( | tor_addr_t * | a | ) |
Set address a to the unspecified address. This address belongs to no family.
Definition at line 225 of file address.c.
Referenced by circuit_send_intermediate_onion_skin(), connected_cell_parse(), relay_find_addr_to_publish(), and tor_addr_from_sockaddr().
int tor_addr_parse | ( | tor_addr_t * | addr, |
const char * | src | ||
) |
Convert the string in src to a tor_addr_t addr. The string may be an IPv4 address, an IPv6 address, or an IPv6 address surrounded by square brackets.
Returns an address family on success, or -1 if an invalid address string is provided.
Definition at line 1349 of file address.c.
Referenced by address_is_in_virtual_range(), address_is_invalid_destination(), addressmap_rewrite_reverse(), adjust_exit_policy_from_exitpolicy_failure(), client_dns_set_addressmap(), connection_ap_can_use_exit(), connection_ap_fail_onehop(), getinfo_helper_geoip(), http_set_address_origin(), tor_addr_lookup(), tor_addr_parse_PTR_name(), tor_addr_port_lookup(), and tor_addr_port_split().
|
static |
Convert the string in src to a tor_addr_t addr. The string may be an IPv4 address, or an IPv6 address surrounded by square brackets.
If allow_ipv6_without_brackets is true, also allow IPv6 addresses without brackets.
Always rejects IPv4 addresses with brackets.
Returns an address family on success, or -1 if an invalid address string is provided.
Definition at line 1295 of file address.c.
Referenced by tor_addr_parse(), and tor_addr_port_parse().
int tor_addr_parse_mask_ports | ( | const char * | s, |
unsigned | flags, | ||
tor_addr_t * | addr_out, | ||
maskbits_t * | maskbits_out, | ||
uint16_t * | port_min_out, | ||
uint16_t * | port_max_out | ||
) |
Parse a string s containing an IPv4/IPv6 address, and possibly a mask and port or port range. Store the parsed address in addr_out, a mask (if any) in mask_out, and port(s) (if any) in port_min_out and port_max_out.
The syntax is: Address OptMask OptPortRange Address ::= IPv4Address / "[" IPv6Address "]" / "*" OptMask ::= "/" Integer / OptPortRange ::= ":*" / ":" Integer / ":" Integer "-" Integer /
Return an address family on success, or -1 if an invalid address string is provided.
If 'flags & TAPMP_EXTENDED_STAR' is false, then the wildcard address '*' yield an IPv4 wildcard.
If 'flags & TAPMP_EXTENDED_STAR' is true, then the wildcard address '*' yields an AF_UNSPEC wildcard address, which expands to corresponding wildcard IPv4 and IPv6 rules, and the following change is made in the grammar above: Address ::= IPv4Address / "[" IPv6Address "]" / "*" / "*4" / "*6" with the new "*4" and "*6" productions creating a wildcard to match IPv4 or IPv6 addresses.
If 'flags & TAPMP_EXTENDED_STAR' and 'flags & TAPMP_STAR_IPV4_ONLY' are both true, then the wildcard address '*' yields an IPv4 wildcard.
If 'flags & TAPMP_EXTENDED_STAR' and 'flags & TAPMP_STAR_IPV6_ONLY' are both true, then the wildcard address '*' yields an IPv6 wildcard.
TAPMP_STAR_IPV4_ONLY and TAPMP_STAR_IPV6_ONLY are mutually exclusive.
Longest possible length for an address, mask, and port-range combination. Includes IP, [], /mask, :, ports
Definition at line 543 of file address.c.
Referenced by find_single_ipv6_orport(), and policy_expand_private().
int tor_addr_parse_PTR_name | ( | tor_addr_t * | result, |
const char * | address, | ||
int | family, | ||
int | accept_regular | ||
) |
Parse an .in-addr.arpa or .ip6.arpa address from address. Return 0 if this is not an .in-addr.arpa address or an .ip6.arpa address. Return -1 if this is an ill-formed .in-addr.arpa address or an .ip6.arpa address. Also return -1 if family is not AF_UNSPEC, and the parsed address family does not match family. On success, return 1, and store the result, if any, into result, if provided.
If accept_regular is set and the address is in neither recognized reverse lookup hostname format, try parsing the address as a regular IPv4 or IPv6 address too. This mode will accept IPv6 addresses with or without square brackets.
void tor_addr_port_copy | ( | tor_addr_port_t * | dest, |
const tor_addr_port_t * | source | ||
) |
Copy a tor_addr_port_t from source to dest.
int tor_addr_port_eq | ( | const tor_addr_port_t * | a, |
const tor_addr_port_t * | b | ||
) |
tor_addr_port_t* tor_addr_port_new | ( | const tor_addr_t * | addr, |
uint16_t | port | ||
) |
Return a newly allocated tor_addr_port_t with addr and port filled in.
Definition at line 2100 of file address.c.
Referenced by connection_haproxy_proxy_connect().
int tor_addr_port_parse | ( | int | severity, |
const char * | addrport, | ||
tor_addr_t * | address_out, | ||
uint16_t * | port_out, | ||
int | default_port | ||
) |
Given an address of the form "ip:port", try to divide it into its ip and port portions, setting *address_out to a newly allocated string holding the address portion and *port_out to the port.
Don't do DNS lookups and don't allow domain names in the "ip" field.
If default_port is less than 0, don't accept addrport of the form "ip" or "ip:0". Otherwise, accept those forms, and set *port_out to default_port.
This function accepts:
Return 0 on success, -1 on failure.
Definition at line 1857 of file address.c.
Referenced by tor_addr_port_lookup().
int tor_addr_port_split | ( | int | severity, |
const char * | addrport, | ||
char ** | address_out, | ||
uint16_t * | port_out | ||
) |
Given an address of the form "host[:port]", try to divide it into its host and port portions.
Like tor_addr_port_parse(), this function accepts:
Sets *address_out to a newly allocated string holding the address portion, and *port_out to the port (or 0 if no port is given).
Return 0 on success, -1 on failure.
Definition at line 1916 of file address.c.
Referenced by tor_addr_port_parse().
int tor_addr_to_PTR_name | ( | char * | out, |
size_t | outlen, | ||
const tor_addr_t * | addr | ||
) |
socklen_t tor_addr_to_sockaddr | ( | const tor_addr_t * | a, |
uint16_t | port, | ||
struct sockaddr * | sa_out, | ||
socklen_t | len | ||
) |
Convert the tor_addr_t in a, with port in port, into a sockaddr object in *sa_out of object size len. If not enough room is available in sa_out, or on error, return 0. On success, return the length of the sockaddr.
Interface note: ordinarily, we return -1 for error. We can't do that here, since socklen_t is unsigned on some platforms.
const char* tor_addr_to_str | ( | char * | dest, |
const tor_addr_t * | addr, | ||
size_t | len, | ||
int | decorate | ||
) |
Convert a tor_addr_t addr into a string, and store it in dest of size len. Returns a pointer to dest on success, or NULL on failure. If decorate, surround IPv6 addresses with brackets.
Definition at line 328 of file address.c.
Referenced by client_dns_set_addressmap(), fmt_addr_impl(), get_pt_proxy_uri(), node_get_address_string(), remap_event_helper(), and tor_addr_to_str_dup().
char* tor_addr_to_str_dup | ( | const tor_addr_t * | addr | ) |
Return a newly allocated string with a representation of addr.
Definition at line 1164 of file address.c.
Referenced by reachability_warnings_callback().
char* tor_dup_ip | ( | uint32_t | addr | ) |
Given a host-order addr, call tor_inet_ntop() on it and return a strdup of the resulting address. Return NULL if tor_inet_ntop() fails.
char* tor_sockaddr_to_str | ( | const struct sockaddr * | sa | ) |
|
static |
Input for siphash, to produce some output for an unspec value.
Definition at line 1119 of file address.c.
Referenced by tor_addr_hash(), and tor_addr_keyed_hash().