Lets keep our version of opftpd in the CVS
[oftpd.git] / src / af_portability.h
1 #ifndef AF_PORTABILITY_H
2 #define AF_PORTABILITY_H
3
4 #include <netinet/in.h>
5 #include <sys/socket.h>
6
7 /* _x_ must be a pointer to a sockaddr structure */
8
9 #define SAFAM(_x_)      (((struct sockaddr *)(_x_))->sa_family)
10
11 #ifdef HAVE_NEW_SS_FAMILY
12 #define SSFAM(_x_)      (((struct sockaddr_storage *)(_x_))->ss_family)
13 #else
14 #define SSFAM(_x_)      (((struct sockaddr_storage *)(_x_))->__ss_family)
15 #endif
16
17 #define SIN4ADDR(_x_)   (((struct sockaddr_in *)(_x_))->sin_addr)
18 #define SIN4PORT(_x_)   (((struct sockaddr_in *)(_x_))->sin_port)
19 #define SIN6ADDR(_x_)   (((struct sockaddr_in6 *)(_x_))->sin6_addr)
20 #define SIN6PORT(_x_)   (((struct sockaddr_in6 *)(_x_))->sin6_port)
21
22 #ifdef INET6
23 #define SINADDR(_x_)    ((SAFAM(_x_)==AF_INET6) ? SIN6ADDR(_x_) : SIN4ADDR(_x_))
24 #define SINPORT(_x_)    ((SAFAM(_x_)==AF_INET6) ? SIN6PORT(_x_) : SIN4PORT(_x_))
25 #else
26 #define SINADDR(_x_)    SIN4ADDR(_x_)
27 #define SINPORT(_x_)    SIN4PORT(_x_)
28 #endif
29
30 #ifndef INET_ADDRSTRLEN
31 #define INET_ADDRSTRLEN 16
32 #endif
33
34 #ifndef INET6_ADDRSTRLEN
35 #define INET6_ADDRSTRLEN 46 
36 #endif
37
38 #ifdef INET6
39 #define IP6_ADDRSTRLEN INET6_ADDRSTRLEN
40 #define IP4_ADDRSTRLEN INET_ADDRSTRLEN
41 #define IP_ADDRSTRLEN INET6_ADDRSTRLEN
42 #else
43 #define IP_ADDRSTRLEN INET_ADDRSTRLEN
44 #endif
45
46 #ifdef INET6
47 typedef struct sockaddr_storage sockaddr_storage_t;
48 #else
49 typedef struct sockaddr_in sockaddr_storage_t;
50 #endif 
51
52 #endif /* AF_PORTABILITY_H */