0
|
1 |
"""
|
|
2 |
Libc stuff
|
|
3 |
"""
|
|
4 |
|
|
5 |
cdef extern from "stdint.h":
|
|
6 |
# yes, these are "wrong"
|
|
7 |
ctypedef unsigned char uint8_t
|
|
8 |
ctypedef unsigned short uint16_t
|
|
9 |
ctypedef unsigned int uint32_t
|
|
10 |
|
|
11 |
ctypedef signed char int8_t
|
|
12 |
ctypedef signed short int16_t
|
|
13 |
ctypedef signed int int32_t
|
|
14 |
|
|
15 |
# <linux/types.h>
|
|
16 |
cdef extern from "linux/types.h" :
|
|
17 |
ctypedef uint8_t __u8
|
|
18 |
ctypedef uint16_t __u16
|
|
19 |
ctypedef uint32_t __u32
|
|
20 |
|
|
21 |
ctypedef int8_t __s8
|
|
22 |
ctypedef int16_t __s16
|
|
23 |
ctypedef int32_t __s32
|
|
24 |
|
|
25 |
cdef extern from "alloca.h" :
|
|
26 |
void* alloca (size_t size)
|
|
27 |
|
|
28 |
# <sys/socket.h>
|
|
29 |
cdef extern from "sys/socket.h" :
|
|
30 |
enum :
|
|
31 |
SOCK_STREAM
|
|
32 |
SOCK_DGRAM
|
|
33 |
SOCK_SEQPACKET
|
|
34 |
|
|
35 |
enum :
|
|
36 |
PF_UNSPEC
|
|
37 |
PF_LOCAL
|
|
38 |
PF_INET
|
|
39 |
PF_INET6
|
|
40 |
|
|
41 |
# these are #defines
|
|
42 |
enum :
|
|
43 |
PF_UNIX
|
|
44 |
|
|
45 |
AF_UNSPEC
|
|
46 |
AF_LOCAL
|
|
47 |
AF_UNIX
|
|
48 |
AF_INET
|
|
49 |
AF_INET6
|
|
50 |
|
|
51 |
ctypedef uint16_t sa_family_t
|
|
52 |
ctypedef uint16_t in_port_t
|
|
53 |
ctypedef uint32_t in_addr_t
|
|
54 |
|
|
55 |
## AF_INET
|
|
56 |
struct in_addr :
|
|
57 |
in_addr_t s_addr
|
|
58 |
|
|
59 |
struct sockaddr_in :
|
|
60 |
sa_family_t sin_family
|
|
61 |
in_port_t sin_port
|
|
62 |
in_addr sin_addr
|
|
63 |
|
|
64 |
# XXX: should these be in another cdef?
|
|
65 |
in_addr_t INADDR_ANY
|
|
66 |
|
|
67 |
## AF_INET6
|
|
68 |
struct in6_addr :
|
|
69 |
pass
|
|
70 |
|
|
71 |
struct sockaddr_in6 :
|
|
72 |
sa_family_t sin6_family
|
|
73 |
in_port_t sin6_port
|
|
74 |
uint32_t sin6_flowinfo
|
|
75 |
in6_addr sin6_addr
|
|
76 |
uint32_t sin6_scope_id
|
|
77 |
|
|
78 |
# common in6_addr's
|
|
79 |
in6_addr in6addr_any
|
|
80 |
in6_addr in6addr_loopback
|
|
81 |
|
|
82 |
## actually from bits/socket.h...
|
|
83 |
struct sockaddr :
|
|
84 |
sa_family_t sa_family
|
|
85 |
|
|
86 |
struct sockaddr_storage :
|
|
87 |
sa_family_t ss_family
|
|
88 |
|
|
89 |
cdef extern from "arpa/inet.h" :
|
|
90 |
uint16_t htons(uint16_t)
|
|
91 |
uint32_t htonl(uint32_t)
|
|
92 |
uint16_t ntohs(uint16_t)
|
|
93 |
uint32_t ntohl(uint32_t)
|
|
94 |
|
|
95 |
# XXX: correct?!
|
|
96 |
ctypedef size_t socklen_t
|
|
97 |
|
|
98 |
## constants
|
|
99 |
enum :
|
|
100 |
INET_ADDRSTRLEN
|
|
101 |
INET6_ADDRSTRLEN
|
|
102 |
|
|
103 |
char* c_inet_ntop "inet_ntop" (int af, void *sockaddr, char *buf, socklen_t len)
|
|
104 |
int c_inet_pton "inet_pton" (int af, char *src, void *dst)
|
|
105 |
|
|
106 |
cdef extern from "netdb.h" :
|
|
107 |
int c_getnameinfo "getnameinfo" (
|
|
108 |
sockaddr *sa, socklen_t salen,
|
|
109 |
char *host, size_t hostlen,
|
|
110 |
char *serv, size_t servlen,
|
|
111 |
int flags
|
|
112 |
)
|
|
113 |
|
|
114 |
enum :
|
|
115 |
NI_NOFQDN
|
|
116 |
NI_NUMERICHOST
|
|
117 |
NI_NAMEREQD
|
|
118 |
NI_NUMERICSERV
|
|
119 |
NI_DGRAM
|
|
120 |
|
|
121 |
NI_MAXHOST
|
|
122 |
NI_MAXSERV
|
|
123 |
|
|
124 |
char* gai_strerror (int err)
|
|
125 |
|
|
126 |
# python-friendly wrapper around inet_ntop
|
|
127 |
cdef object inet_ntop (int af, void *sockaddr)
|
|
128 |
cdef object inet_pton (int af, char *addr, void *sockaddr_out)
|
|
129 |
|
|
130 |
# sockaddr, flags -> (host, service)
|
|
131 |
cdef object getnameinfo (sockaddr *sa, socklen_t salen, int flags)
|