libc.pxd
changeset 3 bbad9790b786
parent 2 171e77f8d675
child 4 664a1dfe08ac
--- /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)