netsupp.h
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 #ifndef _NETSUPP_H_
00024 #define _NETSUPP_H_
00025 
00026 #ifdef HAVE_CONFIG_H
00027 #include <config.h>
00028 #endif
00029 
00030 #include <sys/socket.h>
00031 #include <netdb.h>
00032 #include "ksockaddr.h"
00033 
00034 
00035 
00036 
00037 #ifndef AF_LOCAL
00038 #define AF_LOCAL    AF_UNIX
00039 #define PF_LOCAL    PF_UNIX
00040 #endif
00041 
00042 #ifdef CLOBBER_IN6
00043 #define kde_in6_addr        in6_addr
00044 #define kde_sockaddr_in6    sockaddr_in6
00045 #endif
00046 
00047 
00048 
00053 struct kde_in6_addr
00054 {
00055   unsigned char __u6_addr[16];
00056 };
00057 
00062 struct kde_sockaddr_in6
00063 {
00064 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
00065   Q_UINT8       sin6_len;
00066   Q_UINT8       sin6_family;
00067 #else  //HAVE_STRUCT_SOCKADDR_SA_LEN
00068   Q_UINT16      sin6_family;
00069 #endif
00070   unsigned short        sin6_port;  
00071   Q_UINT32      sin6_flowinfo;
00072   struct kde_in6_addr   sin6_addr;
00073   Q_UINT32      sin6_scope_id;
00074 };
00075 
00076 
00077 
00078 #define KDE_IN6_IS_ADDR_UNSPECIFIED(a) \
00079     (((Q_UINT32 *) (a))[0] == 0 && ((Q_UINT32 *) (a))[1] == 0 && \
00080      ((Q_UINT32 *) (a))[2] == 0 && ((Q_UINT32 *) (a))[3] == 0)
00081 
00082 #define KDE_IN6_IS_ADDR_LOOPBACK(a) \
00083     (((Q_UINT32 *) (a))[0] == 0 && ((Q_UINT32 *) (a))[1] == 0 && \
00084      ((Q_UINT32 *) (a))[2] == 0 && ((Q_UINT32 *) (a))[3] == htonl (1))
00085 
00086 #define KDE_IN6_IS_ADDR_MULTICAST(a) (((u_int8_t *) (a))[0] == 0xff)
00087 
00088 #define KDE_IN6_IS_ADDR_LINKLOCAL(a) \
00089     ((((Q_UINT32 *) (a))[0] & htonl (0xffc00000)) == htonl (0xfe800000))
00090 
00091 #define KDE_IN6_IS_ADDR_SITELOCAL(a) \
00092     ((((Q_UINT32 *) (a))[0] & htonl (0xffc00000)) == htonl (0xfec00000))
00093 
00094 #define KDE_IN6_IS_ADDR_V4MAPPED(a) \
00095     ((((Q_UINT32 *) (a))[0] == 0) && (((Q_UINT32 *) (a))[1] == 0) && \
00096      (((Q_UINT32 *) (a))[2] == htonl (0xffff)))
00097 
00098 #define KDE_IN6_IS_ADDR_V4COMPAT(a) \
00099     ((((Q_UINT32 *) (a))[0] == 0) && (((Q_UINT32 *) (a))[1] == 0) && \
00100      (((Q_UINT32 *) (a))[2] == 0) && (ntohl (((Q_UINT32 *) (a))[3]) > 1))
00101 
00102 #define KDE_IN6_ARE_ADDR_EQUAL(a,b) \
00103     ((((Q_UINT32 *) (a))[0] == ((Q_UINT32 *) (b))[0]) && \
00104      (((Q_UINT32 *) (a))[1] == ((Q_UINT32 *) (b))[1]) && \
00105      (((Q_UINT32 *) (a))[2] == ((Q_UINT32 *) (b))[2]) && \
00106      (((Q_UINT32 *) (a))[3] == ((Q_UINT32 *) (b))[3]))
00107 
00108 #define KDE_IN6_IS_ADDR_MC_NODELOCAL(a) \
00109     (KDE_IN6_IS_ADDR_MULTICAST(a) && ((((Q_UINT8 *) (a))[1] & 0xf) == 0x1))
00110 
00111 #define KDE_IN6_IS_ADDR_MC_LINKLOCAL(a) \
00112     (KDE_IN6_IS_ADDR_MULTICAST(a) && ((((Q_UINT8 *) (a))[1] & 0xf) == 0x2))
00113 
00114 #define KDE_IN6_IS_ADDR_MC_SITELOCAL(a) \
00115     (KDE_IN6_IS_ADDR_MULTICAST(a) && ((((Q_UINT8 *) (a))[1] & 0xf) == 0x5))
00116 
00117 #define KDE_IN6_IS_ADDR_MC_ORGLOCAL(a) \
00118     (KDE_IN6_IS_ADDR_MULTICAST(a) && ((((Q_UINT8 *) (a))[1] & 0xf) == 0x8))
00119 
00120 #define KDE_IN6_IS_ADDR_MC_GLOBAL(a) \
00121     (KDE_IN6_IS_ADDR_MULTICAST(a) && ((((Q_UINT8 *) (a))[1] & 0xf) == 0xe))
00122 
00123 #ifdef NEED_IN6_TESTS
00124 # define IN6_IS_ADDR_UNSPECIFIED    KDE_IN6_IS_ADDR_UNSPECIFIED
00125 # define IN6_IS_ADDR_LOOPBACK       KDE_IN6_IS_ADDR_LOOPBACK
00126 # define IN6_IS_ADDR_MULTICAST      KDE_IN6_IS_ADDR_MULTICAST
00127 # define IN6_IS_ADDR_LINKLOCAL      KDE_IN6_IS_ADDR_LINKLOCAL
00128 # define IN6_IS_ADDR_SITELOCAL      KDE_IN6_IS_ADDR_SITELOCAL
00129 # define IN6_IS_ADDR_V4MAPPED       KDE_IN6_IS_ADDR_V4MAPPED
00130 # define IN6_IS_ADDR_V4COMPAT       KDE_IN6_IS_ADDR_V4COMPAT
00131 # define IN6_ARE_ADDR_EQUAL     KDE_IN6_ARE_ADDR_EQUAL
00132 # define IN6_IS_ADDR_MC_NODELOCAL   KDE_IN6_IS_ADDR_MC_NODELOCAL
00133 # define IN6_IS_ADDR_MC_LINKLOCAL   KDE_IN6_IS_ADDR_MC_LINKLOCAL
00134 # define IN6_IS_ADDR_MC_SITELOCAL   KDE_IN6_IS_ADDR_MC_SITELOCAL
00135 # define IN6_IS_ADDR_MC_ORGLOCAL    KDE_IN6_IS_ADDR_MC_ORGLOCAL
00136 # define IN6_IS_ADDR_MC_GLOBAL      KDE_IN6_IS_ADDR_MC_GLOBAL
00137 #endif
00138 
00139 
00140 
00141 #define KAI_SYSTEM      0   
00142 #define KAI_LOCALUNIX       1   
00143 #define KAI_QDNS        2   
00144 
00145 struct addrinfo;        
00146 
00155 struct kde_addrinfo
00156 {
00157   struct addrinfo *data;
00158   int origin;
00159 };
00160 
00161 extern int kde_getaddrinfo(const char *name, const char *service,
00162                const struct addrinfo* hint,
00163                struct kde_addrinfo** result);
00164 extern void kde_freeaddrinfo(struct kde_addrinfo *p);
00165 
00166 #if !defined(HAVE_GETADDRINFO) || defined(HAVE_BROKEN_GETADDRINFO)
00167 
00168 # ifndef HAVE_STRUCT_ADDRINFO
00169 
00172 struct addrinfo
00173 {
00174   int ai_flags;         
00175   int ai_family;        
00176   int ai_socktype;      
00177   int ai_protocol;      
00178   int ai_addrlen;       
00179   struct sockaddr *ai_addr; 
00180   char *ai_canonname;       
00181   struct addrinfo *ai_next; 
00182 };
00183 # endif
00184 
00185 # ifdef AI_PASSIVE
00186 #  undef AI_PASSIVE
00187 #  undef AI_CANONNAME
00188 #  undef AI_NUMERICHOST
00189 # endif
00190 
00191 
00192 # define AI_PASSIVE 1   
00193 # define AI_CANONNAME   2   
00194 # define AI_NUMERICHOST 4   
00195 
00196 # ifdef EAI_ADDRFAMILY
00197 #  undef EAI_ADDRFAMILY
00198 #  undef EAI_AGAIN
00199 #  undef EAI_BADFLAGS
00200 #  undef EAI_FAIL
00201 #  undef EAI_FAMILY
00202 #  undef EAI_MEMORY
00203 #  undef EAI_NODATA
00204 #  undef EAI_NONAME
00205 #  undef EAI_SERVICE
00206 #  undef EAI_SOCKTYPE
00207 #  undef EAI_SYSTEM
00208 # endif
00209 
00210 
00211 # define EAI_ADDRFAMILY 1   
00212 # define EAI_AGAIN  2   
00213 # define EAI_BADFLAGS   3   
00214 # define EAI_FAIL   4   
00215 # define EAI_FAMILY 5   
00216 # define EAI_MEMORY 6   
00217 # define EAI_NODATA 7   
00218 # define EAI_NONAME 8   
00219 # define EAI_SERVICE    9   
00220 # define EAI_SOCKTYPE   10  
00221 # define EAI_SYSTEM 11  
00222 
00223 
00224 
00225 
00226 
00227 
00228 # define NI_MAXHOST 1025
00229 # define NI_MAXSERV 32
00230 
00231 # ifdef NI_NUMERICHOST
00232 #  undef NI_NUMERICHOST
00233 #  undef NI_NUMERICSERV
00234 #  undef NI_NOFQDN
00235 #  undef NI_NAMEREQD
00236 #  undef NI_DGRAM
00237 # endif
00238 
00239 # define NI_NUMERICHOST 1   
00240 # define NI_NUMERICSERV 2   
00241 # define NI_NOFQDN  4   
00242 # define NI_NAMEREQD    8   
00243 # define NI_DGRAM   16  
00244 
00245 # ifdef getaddrinfo
00246 #  undef getaddrinfo
00247 # endif
00248 
00249 namespace KDE
00250 {
00252   extern int getaddrinfo(const char *name, const char *service,
00253              const struct addrinfo* hint,
00254              struct addrinfo** result);
00256   extern void freeaddrinfo(struct addrinfo* ai);
00258   extern char *gai_strerror(int errorcode);
00260   extern int getnameinfo(const struct sockaddr *sa,
00261              unsigned int salen,
00262              char *host, size_t hostlen,
00263              char *serv, size_t servlen,
00264              int flags);
00265 }
00266 
00267 # define getaddrinfo    KDE::getaddrinfo
00268 # define freeaddrinfo   KDE::freeaddrinfo
00269 # define gai_strerror   KDE::gai_strerror
00270 # define getnameinfo    KDE::getnameinfo
00271 
00272 
00273 #endif
00274 
00275 #ifndef HAVE_INET_PTON
00276 
00277 namespace KDE
00278 {
00280   extern int inet_pton(int af, const char *cp, void* buf);
00281 }
00282 
00283 # define inet_pton  KDE::inet_pton
00284 #endif
00285 
00286 #ifndef HAVE_INET_NTOP
00287 
00288 namespace KDE
00289 {
00291   extern const char* inet_ntop(int af, const void *cp, char *buf, size_t len);
00292 }
00293 
00294 # define inet_ntop  KDE::inet_ntop
00295 #endif
00296 
00297 #endif
 
This file is part of the documentation for kdecore Library Version 3.2.0.