author | Tero Marttila <terom@fixme.fi> |
Sat, 26 Sep 2009 21:51:46 +0300 | |
changeset 53 | b2d407968973 |
parent 27 | 12468e38227e |
permissions | -rw-r--r-- |
10 | 1 |
""" |
2 |
Platform definitions for... 64-bit linux. They're all the same, right? |
|
3 |
""" |
|
4 |
||
11
7ae92c2b433f
move libc+py back to qmsk.net.x
Tero Marttila <terom@fixme.fi>
parents:
10
diff
changeset
|
5 |
from qmsk.net.libc cimport * |
10 | 6 |
|
7 |
cdef extern from "arpa/inet.h" : |
|
8 |
# XXX: correct?! |
|
9 |
ctypedef uint32_t socklen_t |
|
10 |
||
11 |
char* c_inet_ntop "inet_ntop" (int af, void *sockaddr, char *buf, socklen_t len) |
|
12 |
int c_inet_pton "inet_pton" (int af, char *src, void *dst) |
|
13 |
||
14 |
# <sys/socket.h> |
|
15 |
cdef extern from "sys/socket.h" : |
|
16 |
# socket types |
|
17 |
enum : |
|
18 |
SOCK_STREAM |
|
19 |
SOCK_DGRAM |
|
20 |
SOCK_RAW |
|
21 |
SOCK_RDM |
|
22 |
SOCK_SEQPACKET |
|
23 |
SOCK_PACKET |
|
24 |
||
25 |
# packet/address families |
|
26 |
enum : |
|
27 |
PF_UNSPEC |
|
28 |
PF_LOCAL |
|
29 |
PF_UNIX # same as PF_LOCAL |
|
30 |
PF_FILE # same as PF_LOCAL |
|
31 |
PF_INET |
|
32 |
PF_INET6 |
|
33 |
PF_NETLINK |
|
34 |
PF_ROUTE # same as PF_NETLINK |
|
35 |
||
36 |
||
37 |
# aliases for PF_* |
|
38 |
enum : |
|
39 |
AF_UNSPEC |
|
40 |
AF_LOCAL |
|
41 |
AF_UNIX |
|
42 |
AF_FILE |
|
43 |
AF_INET |
|
44 |
AF_INET6 |
|
45 |
AF_NETLINK |
|
46 |
AF_ROUTE |
|
47 |
||
53
b2d407968973
experimental getsockopt support in socket - for now only SOL_SOCKET/SO_ERROR
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
48 |
# option levels for get/setsockopt |
b2d407968973
experimental getsockopt support in socket - for now only SOL_SOCKET/SO_ERROR
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
49 |
enum : |
b2d407968973
experimental getsockopt support in socket - for now only SOL_SOCKET/SO_ERROR
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
50 |
SOL_SOCKET |
b2d407968973
experimental getsockopt support in socket - for now only SOL_SOCKET/SO_ERROR
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
51 |
|
b2d407968973
experimental getsockopt support in socket - for now only SOL_SOCKET/SO_ERROR
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
52 |
# options for get/setsockopt |
b2d407968973
experimental getsockopt support in socket - for now only SOL_SOCKET/SO_ERROR
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
53 |
enum : |
b2d407968973
experimental getsockopt support in socket - for now only SOL_SOCKET/SO_ERROR
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
54 |
SO_ERROR |
b2d407968973
experimental getsockopt support in socket - for now only SOL_SOCKET/SO_ERROR
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
55 |
|
10 | 56 |
# base sockaddr stuff |
57 |
ctypedef uint16_t sa_family_t |
|
58 |
||
59 |
struct sockaddr : |
|
60 |
sa_family_t sa_family |
|
61 |
||
62 |
struct sockaddr_storage : |
|
63 |
sa_family_t ss_family |
|
64 |
||
65 |
# flag values |
|
66 |
enum : |
|
67 |
MSG_OOB |
|
68 |
MSG_PEEK |
|
69 |
MSG_DONTROUTE |
|
70 |
MSG_CTRUNC |
|
71 |
MSG_PROXY |
|
72 |
MSG_TRUNC |
|
73 |
MSG_DONTWAIT |
|
74 |
MSG_EOR |
|
75 |
MSG_WAITALL |
|
76 |
MSG_FIN |
|
77 |
MSG_SYN |
|
78 |
MSG_CONFIRM |
|
79 |
MSG_RST |
|
80 |
MSG_ERRQUEUE |
|
81 |
MSG_NOSIGNAL |
|
82 |
MSG_MORE |
|
83 |
MSG_CMSG_CLOEXEC |
|
84 |
||
85 |
## send/recv-msg |
|
86 |
struct msghdr : |
|
87 |
void *msg_name # sockaddr |
|
88 |
socklen_t msg_namelen |
|
89 |
||
90 |
iovec *msg_iov # message data |
|
91 |
size_t msg_iovlen |
|
92 |
||
93 |
void *msg_control # aux data |
|
94 |
size_t msg_controllen |
|
95 |
||
96 |
int msg_flags # flags |
|
97 |
||
98 |
struct cmsghdr : |
|
99 |
size_t cmsg_len # length including this cmsghdr struct |
|
100 |
||
101 |
int cmsg_level # originating protocol (IPPROTO_* ???) |
|
102 |
int cmsg_type # protocol-specific type |
|
103 |
||
104 |
## socket-level cmsghdr types |
|
105 |
enum : |
|
106 |
SCM_RIGHTS |
|
107 |
SCM_CREDENTIALS |
|
108 |
||
109 |
#- ucred |
|
110 |
||
111 |
# SO_LINGER parameters |
|
112 |
struct linger : |
|
113 |
int l_onoff |
|
114 |
int l_linger |
|
115 |
||
116 |
||
117 |
## API |
|
118 |
int socket (int domain, int socktype, int protocol) |
|
119 |
int bind (int fd, sockaddr *addr, socklen_t len) |
|
120 |
int connect (int fd, sockaddr *addr, socklen_t len) |
|
121 |
int listen (int fd, int n) |
|
122 |
int accept (int fd, sockaddr *addr, socklen_t *len) |
|
123 |
int shutdown (int fd, int how) |
|
124 |
||
125 |
int getsockname (int fd, sockaddr *addr, socklen_t *len) |
|
126 |
int getpeername (int fd, sockaddr *addr, socklen_t *len) |
|
127 |
||
128 |
ssize_t send (int fd, void *buf, size_t n, int flags) |
|
129 |
ssize_t recv (int fd, void *buf, size_t n, int flags) |
|
130 |
ssize_t sendto (int fd, void *buf, size_t n, int flags, sockaddr *addr, socklen_t addr_len) |
|
14
c44754cc1ffe
some recv magic, still no PyString_Resize, though
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
131 |
ssize_t recvfrom (int fd, void *buf, size_t n, int flags, sockaddr *addr, socklen_t *addr_len) |
10 | 132 |
ssize_t sendmsg (int fd, msghdr *msg, int flags) |
133 |
ssize_t recvmsg (int fd, msghdr *msg, int flags) |
|
134 |
||
53
b2d407968973
experimental getsockopt support in socket - for now only SOL_SOCKET/SO_ERROR
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
135 |
int getsockopt (int fd, int level, int optname, void *optval, socklen_t *optlen) |
b2d407968973
experimental getsockopt support in socket - for now only SOL_SOCKET/SO_ERROR
Tero Marttila <terom@fixme.fi>
parents:
27
diff
changeset
|
136 |
int setsockopt (int fd, int level, int optname, void *optval, socklen_t *optlen) |
10 | 137 |
|
138 |
enum : |
|
139 |
SHUT_RD |
|
140 |
SHUT_WR |
|
141 |
SHUT_RDWR |
|
142 |
||
143 |
cdef extern from "netinet/in.h" : |
|
144 |
## socket protocol types |
|
145 |
enum : |
|
146 |
IPPROTO_IP |
|
147 |
IPPROTO_ICMP |
|
148 |
IPPROTO_IGMP |
|
149 |
IPPROTO_TCP |
|
150 |
IPPROTO_UDP |
|
151 |
IPPROTO_IPV6 |
|
152 |
IPPROTO_ICMPV6 |
|
153 |
IPPROTO_SCTP |
|
154 |
IPPROTO_RAW |
|
155 |
||
156 |
||
157 |
## ports |
|
158 |
ctypedef uint16_t in_port_t |
|
159 |
||
160 |
## AF_INET |
|
161 |
ctypedef uint32_t in_addr_t |
|
162 |
struct in_addr : |
|
163 |
in_addr_t s_addr |
|
164 |
||
165 |
# XXX: should these be in another cdef? |
|
166 |
in_addr_t INADDR_ANY |
|
167 |
||
168 |
## AF_INET6 |
|
169 |
struct in6_addr : |
|
170 |
# XXX: check POSIX... |
|
171 |
uint8_t s6_addr[16] |
|
172 |
uint16_t s6_addr16[8] |
|
173 |
uint32_t s6_addr32[4] |
|
174 |
||
175 |
# common in6_addr's |
|
176 |
in6_addr in6addr_any |
|
177 |
in6_addr in6addr_loopback |
|
178 |
||
179 |
## constants |
|
180 |
enum : |
|
181 |
INET_ADDRSTRLEN |
|
182 |
INET6_ADDRSTRLEN |
|
183 |
||
184 |
## sockaddrs |
|
185 |
struct sockaddr_in : |
|
186 |
sa_family_t sin_family |
|
187 |
in_port_t sin_port |
|
188 |
in_addr sin_addr |
|
189 |
||
190 |
struct sockaddr_in6 : |
|
191 |
sa_family_t sin6_family |
|
192 |
in_port_t sin6_port |
|
193 |
uint32_t sin6_flowinfo |
|
194 |
in6_addr sin6_addr |
|
195 |
uint32_t sin6_scope_id |
|
196 |
||
197 |
uint16_t htons(uint16_t) |
|
198 |
uint32_t htonl(uint32_t) |
|
199 |
uint16_t ntohs(uint16_t) |
|
200 |
uint32_t ntohl(uint32_t) |
|
201 |
||
27
12468e38227e
[socket] add sockaddr_un (still dysfunctional\!) + doc fixes
Tero Marttila <terom@fixme.fi>
parents:
14
diff
changeset
|
202 |
cdef extern from "sys/un.h" : |
12468e38227e
[socket] add sockaddr_un (still dysfunctional\!) + doc fixes
Tero Marttila <terom@fixme.fi>
parents:
14
diff
changeset
|
203 |
enum : |
12468e38227e
[socket] add sockaddr_un (still dysfunctional\!) + doc fixes
Tero Marttila <terom@fixme.fi>
parents:
14
diff
changeset
|
204 |
UNIX_PATH_MAX |
12468e38227e
[socket] add sockaddr_un (still dysfunctional\!) + doc fixes
Tero Marttila <terom@fixme.fi>
parents:
14
diff
changeset
|
205 |
|
12468e38227e
[socket] add sockaddr_un (still dysfunctional\!) + doc fixes
Tero Marttila <terom@fixme.fi>
parents:
14
diff
changeset
|
206 |
struct sockaddr_un : |
12468e38227e
[socket] add sockaddr_un (still dysfunctional\!) + doc fixes
Tero Marttila <terom@fixme.fi>
parents:
14
diff
changeset
|
207 |
sa_family_t sun_family |
12468e38227e
[socket] add sockaddr_un (still dysfunctional\!) + doc fixes
Tero Marttila <terom@fixme.fi>
parents:
14
diff
changeset
|
208 |
char sun_path[UNIX_PATH_MAX] |
12468e38227e
[socket] add sockaddr_un (still dysfunctional\!) + doc fixes
Tero Marttila <terom@fixme.fi>
parents:
14
diff
changeset
|
209 |
|
12468e38227e
[socket] add sockaddr_un (still dysfunctional\!) + doc fixes
Tero Marttila <terom@fixme.fi>
parents:
14
diff
changeset
|
210 |
# actually a macro |
12468e38227e
[socket] add sockaddr_un (still dysfunctional\!) + doc fixes
Tero Marttila <terom@fixme.fi>
parents:
14
diff
changeset
|
211 |
# sockaddr_un -> size_t actual length of the sockaddr |
12468e38227e
[socket] add sockaddr_un (still dysfunctional\!) + doc fixes
Tero Marttila <terom@fixme.fi>
parents:
14
diff
changeset
|
212 |
size_t SUN_LEN (sockaddr_un *sa) |
12468e38227e
[socket] add sockaddr_un (still dysfunctional\!) + doc fixes
Tero Marttila <terom@fixme.fi>
parents:
14
diff
changeset
|
213 |
|
10 | 214 |
cdef extern from "netdb.h" : |
215 |
## getaddrinfo |
|
216 |
struct addrinfo : |
|
217 |
int ai_flags |
|
218 |
int ai_family |
|
219 |
int ai_socktype |
|
220 |
int ai_protocol |
|
221 |
int ai_addrlen |
|
222 |
sockaddr *ai_addr |
|
223 |
char *ai_canonname |
|
224 |
addrinfo *ai_next |
|
225 |
||
226 |
enum : |
|
227 |
AI_PASSIVE |
|
228 |
AI_CANONNAME |
|
229 |
AI_NUMERICHOST |
|
230 |
AI_V4MAPPED |
|
231 |
AI_ALL |
|
232 |
AI_ADDRCONFIG |
|
233 |
# AI_*IDN* |
|
234 |
AI_NUMERICSERV |
|
235 |
||
236 |
int c_getaddrinfo "getaddrinfo" ( |
|
237 |
char *node, char *service, |
|
238 |
addrinfo *hints, addrinfo **res |
|
239 |
) |
|
240 |
||
241 |
void c_freeaddrinfo "freeaddrinfo" (addrinfo *res) |
|
242 |
||
243 |
## getnameinfo |
|
244 |
int c_getnameinfo "getnameinfo" ( |
|
245 |
sockaddr *sa, socklen_t salen, |
|
246 |
char *host, size_t hostlen, |
|
247 |
char *serv, size_t servlen, |
|
248 |
int flags |
|
249 |
) |
|
250 |
||
251 |
enum : |
|
252 |
NI_NOFQDN |
|
253 |
NI_NUMERICHOST |
|
254 |
NI_NAMEREQD |
|
255 |
NI_NUMERICSERV |
|
256 |
NI_DGRAM |
|
257 |
||
258 |
NI_MAXHOST |
|
259 |
NI_MAXSERV |
|
260 |
||
261 |
char* gai_strerror (int err) |
|
262 |
||
263 |
# python-friendly wrapper around inet_ntop |
|
264 |
cdef object inet_ntop (int af, void *sockaddr) |
|
265 |
cdef object inet_pton (int af, char *addr, void *sockaddr_out) |
|
266 |
||
267 |
# sockaddr, flags -> (host, service) |
|
268 |
cdef object getnameinfo (sockaddr *sa, socklen_t salen, int flags) |
|
269 |
||
270 |