--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/libc.pxd Sun Aug 16 03:39:52 2009 +0300
@@ -0,0 +1,134 @@
+"""
+ Libc stuff
+"""
+
+cdef extern from "stdint.h":
+ # yes, these are "wrong"
+ ctypedef unsigned char uint8_t
+ ctypedef unsigned short uint16_t
+ ctypedef unsigned int uint32_t
+
+ ctypedef signed char int8_t
+ ctypedef signed short int16_t
+ ctypedef signed int int32_t
+
+# <linux/types.h>
+cdef extern from "linux/types.h" :
+ ctypedef uint8_t __u8
+ ctypedef uint16_t __u16
+ ctypedef uint32_t __u32
+
+ ctypedef int8_t __s8
+ ctypedef int16_t __s16
+ ctypedef int32_t __s32
+
+cdef extern from "string.h" :
+ void* memcpy (void *dest, void *src, size_t n)
+
+cdef extern from "alloca.h" :
+ void* alloca (size_t size)
+
+# <sys/socket.h>
+cdef extern from "sys/socket.h" :
+ enum :
+ SOCK_STREAM
+ SOCK_DGRAM
+ SOCK_SEQPACKET
+
+ enum :
+ PF_UNSPEC
+ PF_LOCAL
+ PF_INET
+ PF_INET6
+
+ # these are #defines
+ enum :
+ PF_UNIX
+
+ AF_UNSPEC
+ AF_LOCAL
+ AF_UNIX
+ AF_INET
+ AF_INET6
+
+ ctypedef uint16_t sa_family_t
+ ctypedef uint16_t in_port_t
+ ctypedef uint32_t in_addr_t
+
+ ## AF_INET
+ struct in_addr :
+ in_addr_t s_addr
+
+ struct sockaddr_in :
+ sa_family_t sin_family
+ in_port_t sin_port
+ in_addr sin_addr
+
+ # XXX: should these be in another cdef?
+ in_addr_t INADDR_ANY
+
+ ## AF_INET6
+ struct in6_addr :
+ pass
+
+ struct sockaddr_in6 :
+ sa_family_t sin6_family
+ in_port_t sin6_port
+ uint32_t sin6_flowinfo
+ in6_addr sin6_addr
+ uint32_t sin6_scope_id
+
+ # common in6_addr's
+ in6_addr in6addr_any
+ in6_addr in6addr_loopback
+
+ ## actually from bits/socket.h...
+ struct sockaddr :
+ sa_family_t sa_family
+
+ struct sockaddr_storage :
+ sa_family_t ss_family
+
+cdef extern from "arpa/inet.h" :
+ uint16_t htons(uint16_t)
+ uint32_t htonl(uint32_t)
+ uint16_t ntohs(uint16_t)
+ uint32_t ntohl(uint32_t)
+
+ # XXX: correct?!
+ ctypedef size_t socklen_t
+
+ ## constants
+ enum :
+ INET_ADDRSTRLEN
+ INET6_ADDRSTRLEN
+
+ char* c_inet_ntop "inet_ntop" (int af, void *sockaddr, char *buf, socklen_t len)
+ int c_inet_pton "inet_pton" (int af, char *src, void *dst)
+
+cdef extern from "netdb.h" :
+ int c_getnameinfo "getnameinfo" (
+ sockaddr *sa, socklen_t salen,
+ char *host, size_t hostlen,
+ char *serv, size_t servlen,
+ int flags
+ )
+
+ enum :
+ NI_NOFQDN
+ NI_NUMERICHOST
+ NI_NAMEREQD
+ NI_NUMERICSERV
+ NI_DGRAM
+
+ NI_MAXHOST
+ NI_MAXSERV
+
+ char* gai_strerror (int err)
+
+# python-friendly wrapper around inet_ntop
+cdef object inet_ntop (int af, void *sockaddr)
+cdef object inet_pton (int af, char *addr, void *sockaddr_out)
+
+# sockaddr, flags -> (host, service)
+cdef object getnameinfo (sockaddr *sa, socklen_t salen, int flags)