symbian-qemu-0.9.1-12/python-2.6.1/Modules/addrinfo.h
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 /*
       
     2  * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
       
     3  * All rights reserved.
       
     4  * 
       
     5  * Redistribution and use in source and binary forms, with or without
       
     6  * modification, are permitted provided that the following conditions
       
     7  * are met:
       
     8  * 1. Redistributions of source code must retain the above copyright
       
     9  *    notice, this list of conditions and the following disclaimer.
       
    10  * 2. Redistributions in binary form must reproduce the above copyright
       
    11  *    notice, this list of conditions and the following disclaimer in the
       
    12  *    documentation and/or other materials provided with the distribution.
       
    13  * 3. Neither the name of the project nor the names of its contributors
       
    14  *    may be used to endorse or promote products derived from this software
       
    15  *    without specific prior written permission.
       
    16  * 
       
    17  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
       
    18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
       
    19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
       
    20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
       
    21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
       
    22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
       
    23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
       
    24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
       
    25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
       
    26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
       
    27  * SUCH DAMAGE.
       
    28  */
       
    29 
       
    30 #ifndef HAVE_GETADDRINFO
       
    31 
       
    32 /*
       
    33  * Error return codes from getaddrinfo()
       
    34  */
       
    35 #ifdef EAI_ADDRFAMILY
       
    36 /* If this is defined, there is a conflicting implementation
       
    37    in the C library, which can't be used for some reason.
       
    38    Make sure it won't interfere with this emulation. */
       
    39 
       
    40 #undef EAI_ADDRFAMILY
       
    41 #undef EAI_AGAIN
       
    42 #undef EAI_BADFLAGS
       
    43 #undef EAI_FAIL
       
    44 #undef EAI_FAMILY
       
    45 #undef EAI_MEMORY
       
    46 #undef EAI_NODATA
       
    47 #undef EAI_NONAME
       
    48 #undef EAI_SERVICE
       
    49 #undef EAI_SOCKTYPE
       
    50 #undef EAI_SYSTEM
       
    51 #undef EAI_BADHINTS
       
    52 #undef EAI_PROTOCOL
       
    53 #undef EAI_MAX
       
    54 #undef getaddrinfo
       
    55 #define getaddrinfo fake_getaddrinfo
       
    56 #endif /* EAI_ADDRFAMILY */
       
    57 
       
    58 #define	EAI_ADDRFAMILY	 1	/* address family for hostname not supported */
       
    59 #define	EAI_AGAIN	 2	/* temporary failure in name resolution */
       
    60 #define	EAI_BADFLAGS	 3	/* invalid value for ai_flags */
       
    61 #define	EAI_FAIL	 4	/* non-recoverable failure in name resolution */
       
    62 #define	EAI_FAMILY	 5	/* ai_family not supported */
       
    63 #define	EAI_MEMORY	 6	/* memory allocation failure */
       
    64 #define	EAI_NODATA	 7	/* no address associated with hostname */
       
    65 #define	EAI_NONAME	 8	/* hostname nor servname provided, or not known */
       
    66 #define	EAI_SERVICE	 9	/* servname not supported for ai_socktype */
       
    67 #define	EAI_SOCKTYPE	10	/* ai_socktype not supported */
       
    68 #define	EAI_SYSTEM	11	/* system error returned in errno */
       
    69 #define EAI_BADHINTS	12
       
    70 #define EAI_PROTOCOL	13
       
    71 #define EAI_MAX		14
       
    72 
       
    73 /*
       
    74  * Flag values for getaddrinfo()
       
    75  */
       
    76 #ifdef AI_PASSIVE
       
    77 #undef AI_PASSIVE
       
    78 #undef AI_CANONNAME
       
    79 #undef AI_NUMERICHOST
       
    80 #undef AI_MASK
       
    81 #undef AI_ALL
       
    82 #undef AI_V4MAPPED_CFG
       
    83 #undef AI_ADDRCONFIG
       
    84 #undef AI_V4MAPPED
       
    85 #undef AI_DEFAULT
       
    86 #endif /* AI_PASSIVE */
       
    87 
       
    88 #define	AI_PASSIVE	0x00000001 /* get address to use bind() */
       
    89 #define	AI_CANONNAME	0x00000002 /* fill ai_canonname */
       
    90 #define	AI_NUMERICHOST	0x00000004 /* prevent name resolution */
       
    91 /* valid flags for addrinfo */
       
    92 #define	AI_MASK		(AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST)
       
    93 
       
    94 #define	AI_ALL		0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */
       
    95 #define	AI_V4MAPPED_CFG	0x00000200 /* accept IPv4-mapped if kernel supports */
       
    96 #define	AI_ADDRCONFIG	0x00000400 /* only if any address is assigned */
       
    97 #define	AI_V4MAPPED	0x00000800 /* accept IPv4-mapped IPv6 address */
       
    98 /* special recommended flags for getipnodebyname */
       
    99 #define	AI_DEFAULT	(AI_V4MAPPED_CFG | AI_ADDRCONFIG)
       
   100 
       
   101 #endif /* !HAVE_GETADDRINFO */
       
   102 
       
   103 #ifndef HAVE_GETNAMEINFO
       
   104 
       
   105 /*
       
   106  * Constants for getnameinfo()
       
   107  */
       
   108 #ifndef NI_MAXHOST
       
   109 #define	NI_MAXHOST	1025
       
   110 #define	NI_MAXSERV	32
       
   111 #endif /* !NI_MAXHOST */
       
   112 
       
   113 /*
       
   114  * Flag values for getnameinfo()
       
   115  */
       
   116 #ifndef NI_NOFQDN
       
   117 #define	NI_NOFQDN	0x00000001
       
   118 #define	NI_NUMERICHOST	0x00000002
       
   119 #define	NI_NAMEREQD	0x00000004
       
   120 #define	NI_NUMERICSERV	0x00000008
       
   121 #define	NI_DGRAM	0x00000010
       
   122 #endif /* !NI_NOFQDN */
       
   123 
       
   124 #endif /* !HAVE_GETNAMEINFO */
       
   125 
       
   126 #ifndef HAVE_ADDRINFO
       
   127 struct addrinfo {
       
   128 	int	ai_flags;	/* AI_PASSIVE, AI_CANONNAME */
       
   129 	int	ai_family;	/* PF_xxx */
       
   130 	int	ai_socktype;	/* SOCK_xxx */
       
   131 	int	ai_protocol;	/* 0 or IPPROTO_xxx for IPv4 and IPv6 */
       
   132 	size_t	ai_addrlen;	/* length of ai_addr */
       
   133 	char	*ai_canonname;	/* canonical name for hostname */
       
   134 	struct sockaddr *ai_addr;	/* binary address */
       
   135 	struct addrinfo *ai_next;	/* next structure in linked list */
       
   136 };
       
   137 #endif /* !HAVE_ADDRINFO */
       
   138 
       
   139 #ifndef HAVE_SOCKADDR_STORAGE
       
   140 /*
       
   141  * RFC 2553: protocol-independent placeholder for socket addresses
       
   142  */
       
   143 #define _SS_MAXSIZE	128
       
   144 #ifdef HAVE_LONG_LONG
       
   145 #define _SS_ALIGNSIZE	(sizeof(PY_LONG_LONG))
       
   146 #else
       
   147 #define _SS_ALIGNSIZE	(sizeof(double))
       
   148 #endif /* HAVE_LONG_LONG */
       
   149 #define _SS_PAD1SIZE	(_SS_ALIGNSIZE - sizeof(u_char) * 2)
       
   150 #define _SS_PAD2SIZE	(_SS_MAXSIZE - sizeof(u_char) * 2 - \
       
   151 				_SS_PAD1SIZE - _SS_ALIGNSIZE)
       
   152 
       
   153 struct sockaddr_storage {
       
   154 #ifdef HAVE_SOCKADDR_SA_LEN
       
   155 	unsigned char ss_len;		/* address length */
       
   156 	unsigned char ss_family;	/* address family */
       
   157 #else
       
   158 	unsigned short ss_family;	/* address family */
       
   159 #endif /* HAVE_SOCKADDR_SA_LEN */
       
   160 	char	__ss_pad1[_SS_PAD1SIZE];
       
   161 #ifdef HAVE_LONG_LONG
       
   162 	PY_LONG_LONG __ss_align;	/* force desired structure storage alignment */
       
   163 #else
       
   164 	double __ss_align;	/* force desired structure storage alignment */
       
   165 #endif /* HAVE_LONG_LONG */
       
   166 	char	__ss_pad2[_SS_PAD2SIZE];
       
   167 };
       
   168 #endif /* !HAVE_SOCKADDR_STORAGE */
       
   169 
       
   170 #ifdef __cplusplus
       
   171 extern "C" {
       
   172 #endif
       
   173 extern void freehostent Py_PROTO((struct hostent *));
       
   174 #ifdef __cplusplus
       
   175 }
       
   176 #endif