KDECore
netsupp.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _NETSUPP_H_
00022 #define _NETSUPP_H_
00023
00024 #include <kdecore_export.h>
00025
00026 #include <config.h>
00027 #include <config-network.h>
00028
00029 #include <sys/socket.h>
00030 #include <netdb.h>
00031
00032
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 quint8 sin6_len;
00066 quint8 sin6_family;
00067 #else //HAVE_STRUCT_SOCKADDR_SA_LEN
00068 quint16 sin6_family;
00069 #endif
00070 unsigned short sin6_port;
00071 quint32 sin6_flowinfo;
00072 struct kde_in6_addr sin6_addr;
00073 quint32 sin6_scope_id;
00074 };
00075
00076
00077
00078 #define KDE_IN6_IS_ADDR_UNSPECIFIED(a) \
00079 (((quint32 *) (a))[0] == 0 && ((quint32 *) (a))[1] == 0 && \
00080 ((quint32 *) (a))[2] == 0 && ((quint32 *) (a))[3] == 0)
00081
00082 #define KDE_IN6_IS_ADDR_LOOPBACK(a) \
00083 (((quint32 *) (a))[0] == 0 && ((quint32 *) (a))[1] == 0 && \
00084 ((quint32 *) (a))[2] == 0 && ((quint32 *) (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 ((((quint32 *) (a))[0] & htonl (0xffc00000)) == htonl (0xfe800000))
00090
00091 #define KDE_IN6_IS_ADDR_SITELOCAL(a) \
00092 ((((quint32 *) (a))[0] & htonl (0xffc00000)) == htonl (0xfec00000))
00093
00094 #define KDE_IN6_IS_ADDR_V4MAPPED(a) \
00095 ((((quint32 *) (a))[0] == 0) && (((quint32 *) (a))[1] == 0) && \
00096 (((quint32 *) (a))[2] == htonl (0xffff)))
00097
00098 #define KDE_IN6_IS_ADDR_V4COMPAT(a) \
00099 ((((quint32 *) (a))[0] == 0) && (((quint32 *) (a))[1] == 0) && \
00100 (((quint32 *) (a))[2] == 0) && (ntohl (((quint32 *) (a))[3]) > 1))
00101
00102 #define KDE_IN6_ARE_ADDR_EQUAL(a,b) \
00103 ((((quint32 *) (a))[0] == ((quint32 *) (b))[0]) && \
00104 (((quint32 *) (a))[1] == ((quint32 *) (b))[1]) && \
00105 (((quint32 *) (a))[2] == ((quint32 *) (b))[2]) && \
00106 (((quint32 *) (a))[3] == ((quint32 *) (b))[3]))
00107
00108 #define KDE_IN6_IS_ADDR_MC_NODELOCAL(a) \
00109 (KDE_IN6_IS_ADDR_MULTICAST(a) && ((((quint8 *) (a))[1] & 0xf) == 0x1))
00110
00111 #define KDE_IN6_IS_ADDR_MC_LINKLOCAL(a) \
00112 (KDE_IN6_IS_ADDR_MULTICAST(a) && ((((quint8 *) (a))[1] & 0xf) == 0x2))
00113
00114 #define KDE_IN6_IS_ADDR_MC_SITELOCAL(a) \
00115 (KDE_IN6_IS_ADDR_MULTICAST(a) && ((((quint8 *) (a))[1] & 0xf) == 0x5))
00116
00117 #define KDE_IN6_IS_ADDR_MC_ORGLOCAL(a) \
00118 (KDE_IN6_IS_ADDR_MULTICAST(a) && ((((quint8 *) (a))[1] & 0xf) == 0x8))
00119
00120 #define KDE_IN6_IS_ADDR_MC_GLOBAL(a) \
00121 (KDE_IN6_IS_ADDR_MULTICAST(a) && ((((quint8 *) (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 KDECORE_EXPORT int kde_getaddrinfo(const char *name, const char *service,
00162 const struct addrinfo* hint,
00163 struct kde_addrinfo** result);
00164 extern KDECORE_EXPORT 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 # ifndef EAI_ADDRFAMILY
00212 # define EAI_ADDRFAMILY 1
00213 # endif
00214 # ifndef EAI_AGAIN
00215 # define EAI_AGAIN 2
00216 # endif
00217 # ifndef EAI_BADFLAGS
00218 # define EAI_BADFLAGS 3
00219 # endif
00220 # ifndef EAI_FAIL
00221 # define EAI_FAIL 4
00222 # endif
00223 # ifndef EAI_FAMILY
00224 # define EAI_FAMILY 5
00225 # endif
00226 # ifndef EAI_MEMORY
00227 # define EAI_MEMORY 6
00228 # endif
00229 # ifndef EAI_NODATA
00230 # define EAI_NODATA 7
00231 # endif
00232 # ifndef EAI_NONAME
00233 # define EAI_NONAME 8
00234 # endif
00235 # ifndef EAI_SERVICE
00236 # define EAI_SERVICE 9
00237 # endif
00238 # ifndef EAI_SOCKTYPE
00239 # define EAI_SOCKTYPE 10
00240 # endif
00241 # ifndef EAI_SYSTEM
00242 # define EAI_SYSTEM 11
00243 # endif
00244
00245
00246
00247
00248
00249
00250 # define NI_MAXHOST 1025
00251 # define NI_MAXSERV 32
00252
00253 # ifdef NI_NUMERICHOST
00254 # undef NI_NUMERICHOST
00255 # undef NI_NUMERICSERV
00256 # undef NI_NOFQDN
00257 # undef NI_NAMEREQD
00258 # undef NI_DGRAM
00259 # endif
00260
00261 # define NI_NUMERICHOST 1
00262 # define NI_NUMERICSERV 2
00263 # define NI_NOFQDN 4
00264 # define NI_NAMEREQD 8
00265 # define NI_DGRAM 16
00266
00267 # ifdef gai_strerror
00268 # undef gai_strerror
00269 # endif
00270
00271 # ifdef getaddrinfo
00272 # undef getaddrinfo
00273 # endif
00274
00275 # ifdef freeaddrinfo
00276 # undef freeaddrinfo
00277 # endif
00278
00279 # ifdef getnameinfo
00280 # undef getnameinfo
00281 # endif
00282
00283 namespace KDE
00284 {
00286 extern KDECORE_EXPORT int getaddrinfo(const char *name, const char *service,
00287 const struct addrinfo* hint,
00288 struct addrinfo** result);
00290 extern KDECORE_EXPORT void freeaddrinfo(struct addrinfo* ai);
00292 extern KDECORE_EXPORT int getnameinfo(const struct sockaddr *sa,
00293 kde_socklen_t salen,
00294 char *host, size_t hostlen,
00295 char *serv, size_t servlen,
00296 int flags);
00297 }
00298
00299 # ifndef HAVE_GAI_STRERROR_PROTO
00300
00301 extern KDECORE_EXPORT char *gai_strerror(int errorcode);
00302 # endif
00303
00304 # define getaddrinfo KDE::getaddrinfo
00305 # define freeaddrinfo KDE::freeaddrinfo
00306 # define getnameinfo KDE::getnameinfo
00307
00308
00309 #endif
00310
00311 #ifndef HAVE_INET_PTON
00312
00313 namespace KDE
00314 {
00316 extern KDECORE_EXPORT int inet_pton(int af, const char *cp, void* buf);
00317 }
00318
00319 # define inet_pton KDE::inet_pton
00320 #endif
00321
00322 #ifndef HAVE_INET_NTOP
00323
00324 namespace KDE
00325 {
00327 extern KDECORE_EXPORT const char* inet_ntop(int af, const void *cp, char *buf, size_t len);
00328 }
00329
00330 # define inet_ntop KDE::inet_ntop
00331 #endif
00332
00333 #endif