summaryrefslogtreecommitdiffstats
path: root/include/sh_ipvx.h
blob: 03eae9c835998f2249027d163d4df4d3576ae87a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#ifndef SH_IPVX_H
#define SH_IPVX_H

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>

#if defined(USE_IPVX)
#define SH_SSP_LEN(a) ((a)->ss_family == AF_INET) ? \
	sizeof(struct sockaddr_in) : \
	sizeof(struct sockaddr_in6)

#define SH_SS_LEN(a) ((a).ss_family == AF_INET) ? \
	sizeof(struct sockaddr_in) : \
	sizeof(struct sockaddr_in6)
#else
#define SH_SSP_LEN(a) sizeof(struct sockaddr_in)
#define SH_SS_LEN(a)  sizeof(struct sockaddr_in)
#endif

struct sh_sockaddr {
  int ss_family;

  struct sockaddr_in  sin;
#if defined(USE_IPVX)
  struct sockaddr_in6 sin6;
#endif
};

/* Cast a sockaddress
 */
struct sockaddr * sh_ipvx_sockaddr_cast (struct sh_sockaddr * ss);

/* Compare with any_address
 */
int sh_ipvx_isany (struct sh_sockaddr * a);

/* Compare two addresses
 */
int sh_ipvx_cmp(struct sh_sockaddr * a, struct sh_sockaddr * b);

/* Set the port
 */
int sh_ipvx_set_port(struct sh_sockaddr * ss, int port);

/* Get the port
 */
int sh_ipvx_get_port(struct sh_sockaddr * ss);

/* Save a sockaddress
 */
void sh_ipvx_save(struct sh_sockaddr * ss, int sa_family, struct sockaddr * sa);

/* Ascii numerical sockaddress
 */
char * sh_ipvx_print_sockaddr (struct sockaddr * sa, int sa_family);

/* Determine whether the given address is numeric
 */
int sh_ipvx_is_numeric (const char * addr);

/* Convert a network address to an ascii numeric address
 */
int sh_ipvx_ntoa (char * name, size_t name_size, struct sh_sockaddr * ss);

/* Convert an ascii numeric address to a network address
 */
int sh_ipvx_aton (const char * name, struct sh_sockaddr * ss);

/* Try to find canonical hostname
 */
char * sh_ipvx_canonical(const char * hostname, char * numeric, size_t nlen);

/* Convert address to hostname
 */
char * sh_ipvx_addrtoname(struct sh_sockaddr * ss);

/* Try a reverse lookup
 */
int sh_ipvx_reverse_check_ok (char * peer, int port, struct sh_sockaddr * ss);
#endif