Annotation of embedaddon/strongswan/src/libstrongswan/networking/host.h, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2006-2014 Tobias Brunner
! 3: * Copyright (C) 2006 Daniel Roethlisberger
! 4: * Copyright (C) 2005-2008 Martin Willi
! 5: * Copyright (C) 2005 Jan Hutter
! 6: * HSR Hochschule fuer Technik Rapperswil
! 7: *
! 8: * This program is free software; you can redistribute it and/or modify it
! 9: * under the terms of the GNU General Public License as published by the
! 10: * Free Software Foundation; either version 2 of the License, or (at your
! 11: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
! 12: *
! 13: * This program is distributed in the hope that it will be useful, but
! 14: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 15: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! 16: * for more details.
! 17: */
! 18:
! 19: /**
! 20: * @defgroup host host
! 21: * @{ @ingroup networking
! 22: */
! 23:
! 24: #ifndef HOST_H_
! 25: #define HOST_H_
! 26:
! 27: #include <utils/utils.h>
! 28: #include <utils/chunk.h>
! 29:
! 30: typedef enum host_diff_t host_diff_t;
! 31: typedef struct host_t host_t;
! 32:
! 33: #include <stdlib.h>
! 34: #include <stdio.h>
! 35: #include <sys/types.h>
! 36:
! 37: /**
! 38: * Represents a Host
! 39: *
! 40: * Host object, identifies a address:port pair and defines some
! 41: * useful functions on it.
! 42: */
! 43: struct host_t {
! 44:
! 45: /**
! 46: * Build a clone of this host object.
! 47: *
! 48: * @return cloned host
! 49: */
! 50: host_t *(*clone) (host_t *this);
! 51:
! 52: /**
! 53: * Get a pointer to the internal sockaddr struct.
! 54: *
! 55: * This is used for sending and receiving via sockets.
! 56: *
! 57: * @return pointer to the internal sockaddr structure
! 58: */
! 59: sockaddr_t *(*get_sockaddr) (host_t *this);
! 60:
! 61: /**
! 62: * Get the length of the sockaddr struct.
! 63: *
! 64: * Depending on the family, the length of the sockaddr struct
! 65: * is different. Use this function to get the length of the sockaddr
! 66: * struct returned by get_sock_addr.
! 67: *
! 68: * This is used for sending and receiving via sockets.
! 69: *
! 70: * @return length of the sockaddr struct
! 71: */
! 72: socklen_t *(*get_sockaddr_len) (host_t *this);
! 73:
! 74: /**
! 75: * Gets the family of the address
! 76: *
! 77: * @return family
! 78: */
! 79: int (*get_family) (host_t *this);
! 80:
! 81: /**
! 82: * Checks if the ip address of host is set to default route.
! 83: *
! 84: * @return TRUE if host is 0.0.0.0 or 0::0, FALSE otherwise
! 85: */
! 86: bool (*is_anyaddr) (host_t *this);
! 87:
! 88: /**
! 89: * Get the address of this host as chunk_t
! 90: *
! 91: * Returned chunk points to internal data.
! 92: *
! 93: * @return address blob
! 94: */
! 95: chunk_t (*get_address) (host_t *this);
! 96:
! 97: /**
! 98: * Get the port of this host
! 99: *
! 100: * @return port number
! 101: */
! 102: uint16_t (*get_port) (host_t *this);
! 103:
! 104: /**
! 105: * Set the port of this host
! 106: *
! 107: * @param port port number
! 108: */
! 109: void (*set_port) (host_t *this, uint16_t port);
! 110:
! 111: /**
! 112: * Compare the ips of two hosts hosts.
! 113: *
! 114: * @param other the other to compare
! 115: * @return TRUE if addresses are equal.
! 116: */
! 117: bool (*ip_equals) (host_t *this, host_t *other);
! 118:
! 119: /**
! 120: * Compare two hosts, with port.
! 121: *
! 122: * @param other the other to compare
! 123: * @return TRUE if addresses and ports are equal.
! 124: */
! 125: bool (*equals) (host_t *this, host_t *other);
! 126:
! 127: /**
! 128: * Destroy this host object.
! 129: */
! 130: void (*destroy) (host_t *this);
! 131: };
! 132:
! 133: /**
! 134: * Constructor to create a host_t object from an address string.
! 135: *
! 136: * @param string string of an address, such as "152.96.193.130"
! 137: * @param port port number
! 138: * @return host_t, NULL if string not an address.
! 139: */
! 140: host_t *host_create_from_string(char *string, uint16_t port);
! 141:
! 142: /**
! 143: * Same as host_create_from_string(), but with the option to enforce a family.
! 144: *
! 145: * @param string string of an address
! 146: * @param family address family, or AF_UNSPEC
! 147: * @param port port number
! 148: * @return host_t, NULL if string not an address.
! 149: */
! 150: host_t *host_create_from_string_and_family(char *string, int family,
! 151: uint16_t port);
! 152:
! 153: /**
! 154: * Constructor to create a host_t from a DNS name.
! 155: *
! 156: * @param string hostname to resolve
! 157: * @param family family to prefer, 0 for first match
! 158: * @param port port number
! 159: * @return host_t, NULL lookup failed
! 160: */
! 161: host_t *host_create_from_dns(char *string, int family, uint16_t port);
! 162:
! 163: /**
! 164: * Constructor to create a host_t object from an address chunk.
! 165: *
! 166: * If family is AF_UNSPEC, it is guessed using address.len.
! 167: *
! 168: * @param family Address family, such as AF_INET or AF_INET6
! 169: * @param address address as chunk_t in network order
! 170: * @param port port number
! 171: * @return host_t, NULL if family not supported/chunk invalid
! 172: */
! 173: host_t *host_create_from_chunk(int family, chunk_t address, uint16_t port);
! 174:
! 175: /**
! 176: * Constructor to create a host_t object from a sockaddr struct
! 177: *
! 178: * @param sockaddr sockaddr struct which contains family, address and port
! 179: * @return host_t, NULL if family not supported
! 180: */
! 181: host_t *host_create_from_sockaddr(sockaddr_t *sockaddr);
! 182:
! 183: /**
! 184: * Parse a range definition (1.2.3.0-1.2.3.5), return the two hosts.
! 185: *
! 186: * The two hosts are not ordered, from is simply the first, to is the second,
! 187: * from is not necessarily smaller.
! 188: *
! 189: * @param string string to parse
! 190: * @param from returns the first address (out)
! 191: * @param to returns the second address (out)
! 192: * @return TRUE if parsed successfully, FALSE otherwise
! 193: */
! 194: bool host_create_from_range(char *string, host_t **from, host_t **to);
! 195:
! 196: /**
! 197: * Create a host from a CIDR subnet definition (1.2.3.0/24), return bits.
! 198: *
! 199: * @param string string to parse
! 200: * @param bits gets the number of network bits in CIDR notation
! 201: * @return network start address, NULL on error
! 202: */
! 203: host_t *host_create_from_subnet(char *string, int *bits);
! 204:
! 205: /**
! 206: * Create a netmask host having the first netbits bits set.
! 207: *
! 208: * @param family family of the netmask host
! 209: * @param netbits number of leading bits set in the host
! 210: * @return netmask host
! 211: */
! 212: host_t *host_create_netmask(int family, int netbits);
! 213:
! 214: /**
! 215: * Create a host without an address, a "any" host.
! 216: *
! 217: * @param family family of the any host
! 218: * @return host_t, NULL if family not supported
! 219: */
! 220: host_t *host_create_any(int family);
! 221:
! 222: /**
! 223: * printf hook function for host_t.
! 224: *
! 225: * Arguments are:
! 226: * host_t *host
! 227: * Use #-modifier to include port number
! 228: * Use +-modifier to force numeric representation (instead of e.g. %any)
! 229: */
! 230: int host_printf_hook(printf_hook_data_t *data, printf_hook_spec_t *spec,
! 231: const void *const *args);
! 232:
! 233: #endif /** HOST_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>