kdecore Library API Documentation

netsupp.h

00001 /* 00002 * This file is part of the KDE libraries 00003 * Copyright (C) 2000-2003 Thiago Macieira <thiago.macieira@kdemail.net>> 00004 * 00005 * This library is free software; you can redistribute it and/or 00006 * modify it under the terms of the GNU Library General Public 00007 * License as published by the Free Software Foundation; either 00008 * version 2 of the License, or (at your option) any later version. 00009 * 00010 * This library is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 * Library General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU Library General Public License 00016 * along with this library; see the file COPYING.LIB. If not, write to 00017 * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00018 * Boston, MA 02111-1307, USA. 00019 **/ 00020 00021 #ifndef _NETSUPP_H_ 00022 #define _NETSUPP_H_ 00023 00024 #ifdef HAVE_CONFIG_H 00025 #include <config.h> 00026 #endif 00027 00028 #include <sys/socket.h> 00029 #include <netdb.h> 00030 //#include "ksockaddr.h" 00031 00032 /* 00033 * Seems some systems don't know about AF_LOCAL 00034 */ 00035 #ifndef AF_LOCAL 00036 #define AF_LOCAL AF_UNIX 00037 #define PF_LOCAL PF_UNIX 00038 #endif 00039 00040 #ifdef CLOBBER_IN6 00041 #define kde_in6_addr in6_addr 00042 #define kde_sockaddr_in6 sockaddr_in6 00043 #endif 00044 00045 /*** IPv6 structures that might be missing from some implementations ***/ 00046 00051 struct kde_in6_addr 00052 { 00053 unsigned char __u6_addr[16]; 00054 }; 00055 00060 struct kde_sockaddr_in6 00061 { 00062 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN 00063 Q_UINT8 sin6_len; 00064 Q_UINT8 sin6_family; 00065 #else //HAVE_STRUCT_SOCKADDR_SA_LEN 00066 Q_UINT16 sin6_family; 00067 #endif 00068 unsigned short sin6_port; /* RFC says in_port_t */ 00069 Q_UINT32 sin6_flowinfo; 00070 struct kde_in6_addr sin6_addr; 00071 Q_UINT32 sin6_scope_id; 00072 }; 00073 00074 /* IPv6 test macros that could be missing from some implementations */ 00075 00076 #define KDE_IN6_IS_ADDR_UNSPECIFIED(a) \ 00077 (((Q_UINT32 *) (a))[0] == 0 && ((Q_UINT32 *) (a))[1] == 0 && \ 00078 ((Q_UINT32 *) (a))[2] == 0 && ((Q_UINT32 *) (a))[3] == 0) 00079 00080 #define KDE_IN6_IS_ADDR_LOOPBACK(a) \ 00081 (((Q_UINT32 *) (a))[0] == 0 && ((Q_UINT32 *) (a))[1] == 0 && \ 00082 ((Q_UINT32 *) (a))[2] == 0 && ((Q_UINT32 *) (a))[3] == htonl (1)) 00083 00084 #define KDE_IN6_IS_ADDR_MULTICAST(a) (((u_int8_t *) (a))[0] == 0xff) 00085 00086 #define KDE_IN6_IS_ADDR_LINKLOCAL(a) \ 00087 ((((Q_UINT32 *) (a))[0] & htonl (0xffc00000)) == htonl (0xfe800000)) 00088 00089 #define KDE_IN6_IS_ADDR_SITELOCAL(a) \ 00090 ((((Q_UINT32 *) (a))[0] & htonl (0xffc00000)) == htonl (0xfec00000)) 00091 00092 #define KDE_IN6_IS_ADDR_V4MAPPED(a) \ 00093 ((((Q_UINT32 *) (a))[0] == 0) && (((Q_UINT32 *) (a))[1] == 0) && \ 00094 (((Q_UINT32 *) (a))[2] == htonl (0xffff))) 00095 00096 #define KDE_IN6_IS_ADDR_V4COMPAT(a) \ 00097 ((((Q_UINT32 *) (a))[0] == 0) && (((Q_UINT32 *) (a))[1] == 0) && \ 00098 (((Q_UINT32 *) (a))[2] == 0) && (ntohl (((Q_UINT32 *) (a))[3]) > 1)) 00099 00100 #define KDE_IN6_ARE_ADDR_EQUAL(a,b) \ 00101 ((((Q_UINT32 *) (a))[0] == ((Q_UINT32 *) (b))[0]) && \ 00102 (((Q_UINT32 *) (a))[1] == ((Q_UINT32 *) (b))[1]) && \ 00103 (((Q_UINT32 *) (a))[2] == ((Q_UINT32 *) (b))[2]) && \ 00104 (((Q_UINT32 *) (a))[3] == ((Q_UINT32 *) (b))[3])) 00105 00106 #define KDE_IN6_IS_ADDR_MC_NODELOCAL(a) \ 00107 (KDE_IN6_IS_ADDR_MULTICAST(a) && ((((Q_UINT8 *) (a))[1] & 0xf) == 0x1)) 00108 00109 #define KDE_IN6_IS_ADDR_MC_LINKLOCAL(a) \ 00110 (KDE_IN6_IS_ADDR_MULTICAST(a) && ((((Q_UINT8 *) (a))[1] & 0xf) == 0x2)) 00111 00112 #define KDE_IN6_IS_ADDR_MC_SITELOCAL(a) \ 00113 (KDE_IN6_IS_ADDR_MULTICAST(a) && ((((Q_UINT8 *) (a))[1] & 0xf) == 0x5)) 00114 00115 #define KDE_IN6_IS_ADDR_MC_ORGLOCAL(a) \ 00116 (KDE_IN6_IS_ADDR_MULTICAST(a) && ((((Q_UINT8 *) (a))[1] & 0xf) == 0x8)) 00117 00118 #define KDE_IN6_IS_ADDR_MC_GLOBAL(a) \ 00119 (KDE_IN6_IS_ADDR_MULTICAST(a) && ((((Q_UINT8 *) (a))[1] & 0xf) == 0xe)) 00120 00121 #ifdef NEED_IN6_TESTS 00122 # define IN6_IS_ADDR_UNSPECIFIED KDE_IN6_IS_ADDR_UNSPECIFIED 00123 # define IN6_IS_ADDR_LOOPBACK KDE_IN6_IS_ADDR_LOOPBACK 00124 # define IN6_IS_ADDR_MULTICAST KDE_IN6_IS_ADDR_MULTICAST 00125 # define IN6_IS_ADDR_LINKLOCAL KDE_IN6_IS_ADDR_LINKLOCAL 00126 # define IN6_IS_ADDR_SITELOCAL KDE_IN6_IS_ADDR_SITELOCAL 00127 # define IN6_IS_ADDR_V4MAPPED KDE_IN6_IS_ADDR_V4MAPPED 00128 # define IN6_IS_ADDR_V4COMPAT KDE_IN6_IS_ADDR_V4COMPAT 00129 # define IN6_ARE_ADDR_EQUAL KDE_IN6_ARE_ADDR_EQUAL 00130 # define IN6_IS_ADDR_MC_NODELOCAL KDE_IN6_IS_ADDR_MC_NODELOCAL 00131 # define IN6_IS_ADDR_MC_LINKLOCAL KDE_IN6_IS_ADDR_MC_LINKLOCAL 00132 # define IN6_IS_ADDR_MC_SITELOCAL KDE_IN6_IS_ADDR_MC_SITELOCAL 00133 # define IN6_IS_ADDR_MC_ORGLOCAL KDE_IN6_IS_ADDR_MC_ORGLOCAL 00134 # define IN6_IS_ADDR_MC_GLOBAL KDE_IN6_IS_ADDR_MC_GLOBAL 00135 #endif 00136 00137 /* Special internal structure */ 00138 00139 #define KAI_SYSTEM 0 /* data is all-system */ 00140 #define KAI_LOCALUNIX 1 /* data contains a Unix addrinfo allocated by us */ 00141 #define KAI_QDNS 2 /* data contains data derived from QDns */ 00142 00143 struct addrinfo; /* forward declaration; this could be needed */ 00144 00153 struct kde_addrinfo 00154 { 00155 struct addrinfo *data; 00156 int origin; 00157 }; 00158 00159 extern int kde_getaddrinfo(const char *name, const char *service, 00160 const struct addrinfo* hint, 00161 struct kde_addrinfo** result); 00162 extern void kde_freeaddrinfo(struct kde_addrinfo *p); 00163 00164 #if !defined(HAVE_GETADDRINFO) || defined(HAVE_BROKEN_GETADDRINFO) 00165 00166 # ifndef HAVE_STRUCT_ADDRINFO 00167 00170 struct addrinfo 00171 { 00172 int ai_flags; /* Input flags. */ 00173 int ai_family; /* Protocol family for socket. */ 00174 int ai_socktype; /* Socket type. */ 00175 int ai_protocol; /* Protocol for socket. */ 00176 int ai_addrlen; /* Length of socket address. */ 00177 struct sockaddr *ai_addr; /* Socket address for socket. */ 00178 char *ai_canonname; /* Canonical name for service location. */ 00179 struct addrinfo *ai_next; /* Pointer to next in list. */ 00180 }; 00181 # endif 00182 00183 # ifdef AI_PASSIVE 00184 # undef AI_PASSIVE 00185 # undef AI_CANONNAME 00186 # undef AI_NUMERICHOST 00187 # endif 00188 00189 /* Possible values for `ai_flags' field in `addrinfo' structure. */ 00190 # define AI_PASSIVE 1 /* Socket address is intended for `bind'. */ 00191 # define AI_CANONNAME 2 /* Request for canonical name. */ 00192 # define AI_NUMERICHOST 4 /* Don't use name resolution. */ 00193 00194 # ifdef EAI_ADDRFAMILY 00195 # undef EAI_ADDRFAMILY 00196 # undef EAI_AGAIN 00197 # undef EAI_BADFLAGS 00198 # undef EAI_FAIL 00199 # undef EAI_FAMILY 00200 # undef EAI_MEMORY 00201 # undef EAI_NODATA 00202 # undef EAI_NONAME 00203 # undef EAI_SERVICE 00204 # undef EAI_SOCKTYPE 00205 # undef EAI_SYSTEM 00206 # endif 00207 00208 /* Error values for `getaddrinfo' function. */ 00209 # define EAI_ADDRFAMILY 1 /* Address family for NAME not supported. */ 00210 # define EAI_AGAIN 2 /* Temporary failure in name resolution. */ 00211 # define EAI_BADFLAGS 3 /* Invalid value for `ai_flags' field. */ 00212 # define EAI_FAIL 4 /* Non-recoverable failure in name res. */ 00213 # define EAI_FAMILY 5 /* `ai_family' not supported. */ 00214 # define EAI_MEMORY 6 /* Memory allocation failure. */ 00215 # define EAI_NODATA 7 /* No address associated with NAME. */ 00216 # define EAI_NONAME 8 /* NAME or SERVICE is unknown. */ 00217 # define EAI_SERVICE 9 /* SERVICE not supported for `ai_socktype'. */ 00218 # define EAI_SOCKTYPE 10 /* `ai_socktype' not supported. */ 00219 # define EAI_SYSTEM 11 /* System error returned in `errno'. */ 00220 00221 /* 00222 * These are specified in the RFC 00223 * We won't undefine them. If someone defined them to a different value 00224 * the preprocessor will generate an error 00225 */ 00226 # define NI_MAXHOST 1025 00227 # define NI_MAXSERV 32 00228 00229 # ifdef NI_NUMERICHOST 00230 # undef NI_NUMERICHOST 00231 # undef NI_NUMERICSERV 00232 # undef NI_NOFQDN 00233 # undef NI_NAMEREQD 00234 # undef NI_DGRAM 00235 # endif 00236 00237 # define NI_NUMERICHOST 1 /* Don't try to look up hostname. */ 00238 # define NI_NUMERICSERV 2 /* Don't convert port number to name. */ 00239 # define NI_NOFQDN 4 /* Only return nodename portion. */ 00240 # define NI_NAMEREQD 8 /* Don't return numeric addresses. */ 00241 # define NI_DGRAM 16 /* Look up UDP service rather than TCP. */ 00242 00243 # ifdef getaddrinfo 00244 # undef getaddrinfo 00245 # endif 00246 00247 namespace KDE 00248 { 00250 extern int getaddrinfo(const char *name, const char *service, 00251 const struct addrinfo* hint, 00252 struct addrinfo** result); 00254 extern void freeaddrinfo(struct addrinfo* ai); 00256 extern char *gai_strerror(int errorcode); 00258 extern int getnameinfo(const struct sockaddr *sa, 00259 unsigned int salen, 00260 char *host, size_t hostlen, 00261 char *serv, size_t servlen, 00262 int flags); 00263 } 00264 00265 # define getaddrinfo KDE::getaddrinfo 00266 # define freeaddrinfo KDE::freeaddrinfo 00267 # define gai_strerror KDE::gai_strerror 00268 # define getnameinfo KDE::getnameinfo 00269 00270 00271 #endif 00272 00273 #ifndef HAVE_INET_PTON 00274 00275 namespace KDE 00276 { 00278 extern int inet_pton(int af, const char *cp, void* buf); 00279 } 00280 00281 # define inet_pton KDE::inet_pton 00282 #endif 00283 00284 #ifndef HAVE_INET_NTOP 00285 00286 namespace KDE 00287 { 00289 extern const char* inet_ntop(int af, const void *cp, char *buf, size_t len); 00290 } 00291 00292 # define inet_ntop KDE::inet_ntop 00293 #endif 00294 00295 #endif
KDE Logo
This file is part of the documentation for kdecore Library Version 3.3.1.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sun Oct 17 11:26:11 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003