--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/qmsk/net/socket/platform.pxd Sun Aug 16 20:18:39 2009 +0300
@@ -0,0 +1,250 @@
+"""
+ Platform definitions for... 64-bit linux. They're all the same, right?
+"""
+
+from libc cimport *
+
+cdef extern from "arpa/inet.h" :
+ # XXX: correct?!
+ ctypedef uint32_t socklen_t
+
+ 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)
+
+# <sys/socket.h>
+cdef extern from "sys/socket.h" :
+ # socket types
+ enum :
+ SOCK_STREAM
+ SOCK_DGRAM
+ SOCK_RAW
+ SOCK_RDM
+ SOCK_SEQPACKET
+ SOCK_PACKET
+
+ # packet/address families
+ enum :
+ PF_UNSPEC
+ PF_LOCAL
+ PF_UNIX # same as PF_LOCAL
+ PF_FILE # same as PF_LOCAL
+ PF_INET
+ PF_INET6
+ PF_NETLINK
+ PF_ROUTE # same as PF_NETLINK
+
+
+ # aliases for PF_*
+ enum :
+ AF_UNSPEC
+ AF_LOCAL
+ AF_UNIX
+ AF_FILE
+ AF_INET
+ AF_INET6
+ AF_NETLINK
+ AF_ROUTE
+
+ # base sockaddr stuff
+ ctypedef uint16_t sa_family_t
+
+ struct sockaddr :
+ sa_family_t sa_family
+
+ struct sockaddr_storage :
+ sa_family_t ss_family
+
+ # flag values
+ enum :
+ MSG_OOB
+ MSG_PEEK
+ MSG_DONTROUTE
+ MSG_CTRUNC
+ MSG_PROXY
+ MSG_TRUNC
+ MSG_DONTWAIT
+ MSG_EOR
+ MSG_WAITALL
+ MSG_FIN
+ MSG_SYN
+ MSG_CONFIRM
+ MSG_RST
+ MSG_ERRQUEUE
+ MSG_NOSIGNAL
+ MSG_MORE
+ MSG_CMSG_CLOEXEC
+
+ ## send/recv-msg
+ struct msghdr :
+ void *msg_name # sockaddr
+ socklen_t msg_namelen
+
+ iovec *msg_iov # message data
+ size_t msg_iovlen
+
+ void *msg_control # aux data
+ size_t msg_controllen
+
+ int msg_flags # flags
+
+ struct cmsghdr :
+ size_t cmsg_len # length including this cmsghdr struct
+
+ int cmsg_level # originating protocol (IPPROTO_* ???)
+ int cmsg_type # protocol-specific type
+
+ ## socket-level cmsghdr types
+ enum :
+ SCM_RIGHTS
+ SCM_CREDENTIALS
+
+ #- ucred
+
+ # SO_LINGER parameters
+ struct linger :
+ int l_onoff
+ int l_linger
+
+
+ ## API
+ int socket (int domain, int socktype, int protocol)
+ int bind (int fd, sockaddr *addr, socklen_t len)
+ int connect (int fd, sockaddr *addr, socklen_t len)
+ int listen (int fd, int n)
+ int accept (int fd, sockaddr *addr, socklen_t *len)
+ int shutdown (int fd, int how)
+
+ int getsockname (int fd, sockaddr *addr, socklen_t *len)
+ int getpeername (int fd, sockaddr *addr, socklen_t *len)
+
+ ssize_t send (int fd, void *buf, size_t n, int flags)
+ ssize_t recv (int fd, void *buf, size_t n, int flags)
+ ssize_t sendto (int fd, void *buf, size_t n, int flags, sockaddr *addr, socklen_t addr_len)
+ ssize_t recvfrom (int fd, void *buf, size_t n, int flags, sockaddr *addr, socklen_t addr_len)
+ ssize_t sendmsg (int fd, msghdr *msg, int flags)
+ ssize_t recvmsg (int fd, msghdr *msg, int flags)
+
+ int getsockopt (int fd, int level, int optname, void *optval, socklen_t optlen)
+ int setsockopt (int fd, int level, int optname, void *optval, socklen_t optlen)
+
+ enum :
+ SHUT_RD
+ SHUT_WR
+ SHUT_RDWR
+
+cdef extern from "netinet/in.h" :
+ ## socket protocol types
+ enum :
+ IPPROTO_IP
+ IPPROTO_ICMP
+ IPPROTO_IGMP
+ IPPROTO_TCP
+ IPPROTO_UDP
+ IPPROTO_IPV6
+ IPPROTO_ICMPV6
+ IPPROTO_SCTP
+ IPPROTO_RAW
+
+
+ ## ports
+ ctypedef uint16_t in_port_t
+
+ ## AF_INET
+ ctypedef uint32_t in_addr_t
+ struct in_addr :
+ in_addr_t s_addr
+
+ # XXX: should these be in another cdef?
+ in_addr_t INADDR_ANY
+
+ ## AF_INET6
+ struct in6_addr :
+ # XXX: check POSIX...
+ uint8_t s6_addr[16]
+ uint16_t s6_addr16[8]
+ uint32_t s6_addr32[4]
+
+ # common in6_addr's
+ in6_addr in6addr_any
+ in6_addr in6addr_loopback
+
+ ## constants
+ enum :
+ INET_ADDRSTRLEN
+ INET6_ADDRSTRLEN
+
+ ## sockaddrs
+ struct sockaddr_in :
+ sa_family_t sin_family
+ in_port_t sin_port
+ in_addr sin_addr
+
+ 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
+
+ uint16_t htons(uint16_t)
+ uint32_t htonl(uint32_t)
+ uint16_t ntohs(uint16_t)
+ uint32_t ntohl(uint32_t)
+
+cdef extern from "netdb.h" :
+ ## getaddrinfo
+ struct addrinfo :
+ int ai_flags
+ int ai_family
+ int ai_socktype
+ int ai_protocol
+ int ai_addrlen
+ sockaddr *ai_addr
+ char *ai_canonname
+ addrinfo *ai_next
+
+ enum :
+ AI_PASSIVE
+ AI_CANONNAME
+ AI_NUMERICHOST
+ AI_V4MAPPED
+ AI_ALL
+ AI_ADDRCONFIG
+ # AI_*IDN*
+ AI_NUMERICSERV
+
+ int c_getaddrinfo "getaddrinfo" (
+ char *node, char *service,
+ addrinfo *hints, addrinfo **res
+ )
+
+ void c_freeaddrinfo "freeaddrinfo" (addrinfo *res)
+
+ ## getnameinfo
+ 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)
+
+