Main Page | Modules | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

host_addr.c File Reference


Detailed Description

Host address functions.

Author:
Christian Biere
Date:
2005

#include "common.h"
#include "atoms.h"
#include "host_addr.h"
#include "misc.h"
#include "endian.h"
#include "walloc.h"
#include "override.h"

Functions

int host_addr_family (const host_addr_t ha)
gboolean is_private_addr (const host_addr_t addr)
 Checks for RFC1918 private addresses but also IPv6 link-local and site-local addresses.
gboolean ipv4_addr_is_routable (guint32 ip)
gboolean host_addr_is_6to4 (const host_addr_t ha)
guint32 host_addr_6to4_ipv4 (const host_addr_t ha)
gboolean host_addr_6to4_to_ipv4 (const host_addr_t from, host_addr_t *to)
gboolean host_addr_is_loopback (const host_addr_t addr)
 Checks whether the given address is 127.0.0.1 or ::1.
gboolean host_addr_is_routable (const host_addr_t addr)
 Check whether host can be reached from the Internet.
gboolean host_addr_can_convert (const host_addr_t from, enum net_type to_net)
gboolean host_addr_convert (const host_addr_t from, host_addr_t *to, enum net_type to_net)
 Tries to convert the host address "from" to the network type "to_net" and stores the converted address in "*to".
size_t host_addr_to_string_buf (const host_addr_t ha, gchar *dst, size_t size)
 Prints the host address ``ha'' to ``dst''.
const gchar * host_addr_to_string (const host_addr_t ha)
 Prints the host address ``ha'' to a static buffer.
size_t host_addr_port_to_string_buf (const host_addr_t ha, guint16 port, gchar *dst, size_t size)
 Prints the host address ``ha'' followed by ``port'' to ``dst''.
const gchar * host_addr_port_to_string (const host_addr_t ha, guint16 port)
 Prints the host address ``ha'' followed by ``port'' to a static buffer.
const gchar * host_addr_port_to_string2 (const host_addr_t ha, guint16 port)
const gchar * host_port_to_string (const gchar *hostname, host_addr_t addr, guint16 port)
gboolean string_to_host_addr (const char *s, const gchar **endptr, host_addr_t *addr_ptr)
 Parses IPv4 and IPv6 addresses.
gboolean string_to_host_or_addr (const char *s, const gchar **endptr, host_addr_t *ha)
 Parses the NUL-terminated string ``s'' for a host address or a hostname.
gboolean string_to_host_addr_port (const gchar *str, const gchar **endptr, host_addr_t *addr_ptr, guint16 *port_ptr)
void gethostbyname_error (const gchar *host)
socklen_t socket_addr_set (socket_addr_t *sa_ptr, const host_addr_t addr, guint16 port)
 Initializes sa_ptr from a host address and a port number.
socklen_t socket_addr_init (socket_addr_t *sa_ptr, enum net_type net)
const gchar * host_addr_to_name (host_addr_t addr)
 Resolves an IP address to a hostname per DNS.
GSList * resolve_hostname (const gchar *host, enum net_type net)
GSList * name_to_host_addr (const gchar *host, enum net_type net)
 Resolves a hostname to IP addresses per DNS.
void host_addr_free_list (GSList **sl_ptr)
 Frees a singly-linked list of host_addr_t elements.
host_addr_t name_to_single_host_addr (const gchar *host, enum net_type net)
 Resolves a hostname to an IP address per DNS.
guint host_addr_hash_func (gconstpointer key)
gboolean host_addr_eq_func (gconstpointer p, gconstpointer q)
void wfree_host_addr (gpointer key, gpointer unused_data)
GSList * host_addr_get_interface_addrs (const enum net_type net)
void host_addr_free_interface_addrs (GSList **sl_ptr)
 Frees a list along with its item returned by host_addr_get_interface_addrs() and nullifies the given pointer.
packed_host_addr host_addr_pack (const host_addr_t addr)
host_addr_t packed_host_addr_unpack (const struct packed_host_addr paddr)
guint packed_host_addr_size (const struct packed_host_addr paddr)
packed_host host_pack (const host_addr_t addr, guint16 port)
gboolean packed_host_unpack (const struct packed_host phost, host_addr_t *addr_ptr, guint16 *port_ptr)
guint packed_host_size_ptr (const struct packed_host *phost)
 Significant size of a packed host (serialization size), given by address.
guint packed_host_size (const struct packed_host phost)
 Significant size of a packed host (serialization size).
guint packed_host_hash_func (gconstpointer key)
 Hash a packed host buffer (variable-sized).
gboolean packed_host_eq_func (gconstpointer p, gconstpointer q)
 Compare two packed host buffers (variable-sized).
gpointer walloc_packed_host (const host_addr_t addr, guint16 port)
 Allocate a packed_host key.
void wfree_packed_host (gpointer key, gpointer unused_data)
 Release packed_host key.


Function Documentation

void gethostbyname_error const gchar *  host  ) 
 

guint32 host_addr_6to4_ipv4 const host_addr_t  ha  )  [inline, static]
 

gboolean host_addr_6to4_to_ipv4 const host_addr_t  from,
host_addr_t to
 

gboolean host_addr_can_convert const host_addr_t  from,
enum net_type  to_net
 

gboolean host_addr_convert const host_addr_t  from,
host_addr_t to,
enum net_type  to_net
 

Tries to convert the host address "from" to the network type "to_net" and stores the converted address in "*to".

If conversion is not possible, FALSE is returned and "*to" is set to zero_host_addr.

Parameters:
from The address to convert.
to Will hold the converted address.
to_net The network type to convert the address to.
Returns:
TRUE if the address could be converted, FALSE otherwise.

gboolean host_addr_eq_func gconstpointer  p,
gconstpointer  q
 

int host_addr_family const host_addr_t  ha  ) 
 

Parameters:
ha An initialized host address.
Returns:
The proper AF_* value or -1 if not available.

void host_addr_free_interface_addrs GSList **  sl_ptr  ) 
 

Frees a list along with its item returned by host_addr_get_interface_addrs() and nullifies the given pointer.

void host_addr_free_list GSList **  sl_ptr  ) 
 

Frees a singly-linked list of host_addr_t elements.

GSList* host_addr_get_interface_addrs const enum net_type  net  ) 
 

Returns:
A list of all IPv4 and IPv6 addresses assigned to interfaces of the machine.

guint host_addr_hash_func gconstpointer  key  ) 
 

gboolean host_addr_is_6to4 const host_addr_t  ha  )  [inline, static]
 

gboolean host_addr_is_loopback const host_addr_t  addr  ) 
 

Checks whether the given address is 127.0.0.1 or ::1.

gboolean host_addr_is_routable const host_addr_t  addr  ) 
 

Check whether host can be reached from the Internet.

We rule out IPs of private networks, plus some other invalid combinations.

struct packed_host_addr host_addr_pack const host_addr_t  addr  ) 
 

const gchar* host_addr_port_to_string const host_addr_t  ha,
guint16  port
 

Prints the host address ``ha'' followed by ``port'' to a static buffer.

Parameters:
ha the host address.
port the port number.
Returns:
a pointer to a static buffer holding a NUL-terminated string representing the given host address and port.

const gchar* host_addr_port_to_string2 const host_addr_t  ha,
guint16  port
 

size_t host_addr_port_to_string_buf const host_addr_t  ha,
guint16  port,
gchar *  dst,
size_t  size
 

Prints the host address ``ha'' followed by ``port'' to ``dst''.

The string written to ``dst'' is always NUL-terminated unless ``size'' is zero. If ``size'' is too small, the string will be truncated.

Parameters:
dst the destination buffer; may be NULL iff ``size'' is zero.
ha the host address.
port the port number.
size the size of ``dst'' in bytes.
Returns:
The length of the resulting string assuming ``size'' is sufficient.

const gchar* host_addr_to_name host_addr_t  addr  ) 
 

Resolves an IP address to a hostname per DNS.

Parameters:
ha The host address to resolve.
Returns:
On success, the hostname is returned. Otherwise, NULL is returned. The resulting string points to a static buffer.

const gchar* host_addr_to_string const host_addr_t  ha  ) 
 

Prints the host address ``ha'' to a static buffer.

Parameters:
ha the host address.
Returns:
a pointer to a static buffer holding a NUL-terminated string representing the given host address.

size_t host_addr_to_string_buf const host_addr_t  ha,
gchar *  dst,
size_t  size
 

Prints the host address ``ha'' to ``dst''.

The string written to ``dst'' is always NUL-terminated unless ``size'' is zero. If ``size'' is too small, the string will be truncated.

Parameters:
dst the destination buffer; may be NULL iff ``size'' is zero.
ha the host address.
size the size of ``dst'' in bytes.
Returns:
The length of the resulting string assuming ``size'' is sufficient.

struct packed_host host_pack const host_addr_t  addr,
guint16  port
 

const gchar* host_port_to_string const gchar *  hostname,
host_addr_t  addr,
guint16  port
 

gboolean ipv4_addr_is_routable guint32  ip  )  [inline, static]
 

gboolean is_private_addr const host_addr_t  addr  ) 
 

Checks for RFC1918 private addresses but also IPv6 link-local and site-local addresses.

Returns:
TRUE if is a private address.

GSList* name_to_host_addr const gchar *  host,
enum net_type  net
 

Resolves a hostname to IP addresses per DNS.

Todo:
TODO: This should return all resolved address not just the first and it should be possible to request only IPv4 or IPv6 addresses.
Parameters:
host A NUL-terminated string holding the hostname to resolve.
net Use NET_TYPE_IPV4 if you want only IPv4 addresses or like-wise NET_TYPE_IPV6. If you don't care, use NET_TYPE_NONE.
Returns:
On success, a single-linked list of walloc()ated host_addr_t items is returned. Use host_addr_free_list() for convience. On failure, NULL is returned.

host_addr_t name_to_single_host_addr const gchar *  host,
enum net_type  net
 

Resolves a hostname to an IP address per DNS.

This is the same as name_to_host_addr() but we pick a random item from the result list and return it.

guint packed_host_addr_size const struct packed_host_addr  paddr  ) 
 

host_addr_t packed_host_addr_unpack const struct packed_host_addr  paddr  ) 
 

gboolean packed_host_eq_func gconstpointer  p,
gconstpointer  q
 

Compare two packed host buffers (variable-sized).

guint packed_host_hash_func gconstpointer  key  ) 
 

Hash a packed host buffer (variable-sized).

guint packed_host_size const struct packed_host  phost  ) 
 

Significant size of a packed host (serialization size).

guint packed_host_size_ptr const struct packed_host phost  )  [inline, static]
 

Significant size of a packed host (serialization size), given by address.

gboolean packed_host_unpack const struct packed_host  phost,
host_addr_t addr_ptr,
guint16 *  port_ptr
 

GSList* resolve_hostname const gchar *  host,
enum net_type  net
[static]
 

socklen_t socket_addr_init socket_addr_t sa_ptr,
enum net_type  net
 

socklen_t socket_addr_set socket_addr_t sa_ptr,
const host_addr_t  addr,
guint16  port
 

Initializes sa_ptr from a host address and a port number.

Parameters:
addr The host address.
port The port number.
sa_ptr a pointer to a socket_addr_t
Returns:
The length of the initialized structure.

gboolean string_to_host_addr const char *  s,
const gchar **  endptr,
host_addr_t addr_ptr
 

Parses IPv4 and IPv6 addresses.

The latter requires IPv6 support to be enabled.

Parameters:
s The string to parse.
endptr This will point to the first character after the parsed address.
addr_ptr If not NULL, it is set to the parsed host address or ``zero_host_addr'' on failure.
Returns:
Returns TRUE on success; otherwise FALSE.

gboolean string_to_host_addr_port const gchar *  str,
const gchar **  endptr,
host_addr_t addr_ptr,
guint16 *  port_ptr
 

gboolean string_to_host_or_addr const char *  s,
const gchar **  endptr,
host_addr_t ha
 

Parses the NUL-terminated string ``s'' for a host address or a hostname.

If ``s'' points to a parsable address, ``*ha'' will be set to it. Otherwise, ``*ha'' is set to ``zero_host_addr''. If the string is a possible hostname the function returns TRUE nonetheless and ``*endptr'' will point to the first character after hostname. If IPv6 support is disabled, "[::]" will be considered a hostname rather than a host address.

Parameters:
s the string to parse.
endptr if not NULL, it will point the first character after the parsed host address or hostname.
ha if not NULL, it is set to the parsed host address or ``zero_host_addr'' on failure.
Returns:
TRUE if the string points to host address or is a possible hostname.

gpointer walloc_packed_host const host_addr_t  addr,
guint16  port
 

Allocate a packed_host key.

void wfree_host_addr gpointer  key,
gpointer  unused_data
 

void wfree_packed_host gpointer  key,
gpointer  unused_data
 

Release packed_host key.


Generated on Sat Jun 30 17:53:27 2007 for gtk-gnutella by  doxygen 1.3.9.1