Annotation of embedaddon/strongswan/src/libstrongswan/networking/host.h, revision 1.1.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>