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>