chiark / gitweb /
ident.pyx: Remove traces of bogus `failed' and `eof' callbacks.
[mLib-python] / defs.pxi
1 ### -*-pyrex-*-
2 ###
3 ### Basic definitions, used all over
4 ###
5 ### (c) 2005 Straylight/Edgeware
6 ###
7
8 ###----- Licensing notice ---------------------------------------------------
9 ###
10 ### This file is part of the Python interface to mLib.
11 ###
12 ### mLib/Python is free software; you can redistribute it and/or modify
13 ### it under the terms of the GNU General Public License as published by
14 ### the Free Software Foundation; either version 2 of the License, or
15 ### (at your option) any later version.
16 ###
17 ### mLib/Python is distributed in the hope that it will be useful,
18 ### but WITHOUT ANY WARRANTY; without even the implied warranty of
19 ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 ### GNU General Public License for more details.
21 ###
22 ### You should have received a copy of the GNU General Public License
23 ### along with mLib/Python; if not, write to the Free Software Foundation,
24 ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25
26 ###--------------------------------------------------------------------------
27 ### C library.
28
29 cdef extern from 'errno.h':
30   int errno
31   enum:
32     EINTR
33     EAGAIN
34 cdef extern from 'limits.h':
35   enum:
36     LONG_MAX
37 cdef extern from 'math.h':
38   double modf(double x, double *i)
39 cdef extern from 'stddef.h':
40   ctypedef int size_t
41 cdef extern from 'string.h':
42   void memcpy(void *p, void *q, size_t n)
43   char *strerror(int err)
44   size_t strlen(char *p)
45
46 ###--------------------------------------------------------------------------
47 ### Unix interface.
48
49 cdef extern from 'sys/types.h':
50   pass
51 cdef extern from 'sys/time.h':
52   struct timeval:
53     int tv_sec
54     int tv_usec
55
56 cdef extern from 'sys/socket.h':
57   ctypedef int socklen_t
58   struct sockaddr:
59     int sa_family
60   enum:
61     AF_INET
62   int getsockname(int fd, sockaddr *pa, size_t *psz)
63   int getpeername(int fd, sockaddr *pa, size_t *psz)
64 cdef extern from 'arpa/inet.h':
65   struct in_addr:
66     int s_addr
67   int inet_aton(char *rp, in_addr *ia)
68   char *inet_ntoa(in_addr ia)
69 cdef extern from 'netinet/in.h':
70   struct sockaddr_in:
71     int sin_family
72     in_addr sin_addr
73     int sin_port
74   int htons(int x)
75   int htonl(int x)
76   int ntohs(int x)
77   int ntohl(int x)
78 cdef extern from 'netdb.h':
79   struct hostent:
80     char *h_name
81     char **h_aliases
82     int h_addrtype
83     int h_length
84     char **h_addr_list
85     char *h_addr
86   int h_errno
87
88 ###--------------------------------------------------------------------------
89 ### Python.
90
91 cdef extern from 'Python.h':
92
93   ctypedef struct PyObject:
94     pass
95   ctypedef struct PyTypeObject:
96     pass
97
98   object PyString_FromStringAndSize(char *p, Py_ssize_t len)
99   int PyString_AsStringAndSize(obj, char **p, Py_ssize_t *len) except -1
100   int PyObject_AsReadBuffer(obj, void **buf, Py_ssize_t *len) except -1
101   object PyInt_FromLong(long i)
102   object PyLong_FromUnsignedLong(unsigned long i)
103   char *PyString_AS_STRING(string)
104   int _PyString_Resize(PyObject **string, int size) except -1
105
106   void Py_INCREF(PyObject *obj)
107   void Py_DECREF(PyObject *obj)
108
109 ###--------------------------------------------------------------------------
110 ### mLib basic stuff.
111
112 cdef extern from 'mLib/alloc.h':
113   char *xstrdup(char *p)
114   void *xmalloc(size_t sz)
115   void xfree(void *p)
116
117 cdef extern from 'mLib/bits.h':
118   ctypedef int uint32
119
120 cdef extern from 'mLib/dstr.h':
121   ctypedef struct dstr:
122     char *buf
123     int len
124   void DCREATE(dstr *d)
125   void dstr_destroy(dstr *d)
126
127 ###--------------------------------------------------------------------------
128 ### CRC32.
129
130 cdef extern from 'mLib/crc32.h':
131   uint32 c_crc32 "crc32" (uint32 a, void *p, int sz)
132
133 ###--------------------------------------------------------------------------
134 ### Universal hashing.
135
136 cdef extern from 'mLib/unihash.h':
137   ctypedef struct unihash_info:
138     pass
139   void unihash_setkey(unihash_info *i, uint32 k)
140   uint32 UNIHASH_INIT(unihash_info *i)
141   uint32 unihash_hash(unihash_info *i, uint32 a, void *p, int sz)
142   unihash_info unihash_global
143
144 ###--------------------------------------------------------------------------
145 ### Symbol tables.
146
147 cdef extern from 'mLib/sym.h':
148   ctypedef struct sym_table:
149     pass
150   ctypedef struct sym_base:
151     pass
152   ctypedef struct sym_iter:
153     pass
154   void sym_create(sym_table *t)
155   void sym_destroy(sym_table *t)
156   void *sym_find(sym_table *t, char *n, long l, int sz, unsigned *f)
157   void sym_remove(sym_table *t, void *b)
158   char *SYM_NAME(void *b)
159   int SYM_LEN(void *b)
160   void sym_mkiter(sym_iter *i, sym_table *t)
161   void *sym_next(sym_iter *i)
162
163 ###--------------------------------------------------------------------------
164 ### String utilities.
165
166 cdef extern from 'mLib/str.h':
167   enum:
168     STRF_QUOTE
169     STRF_PREFIX
170   char *str_qword(char **pp, unsigned f)
171   size_t str_qsplit(char *p, char **v, size_t c, char **rest, unsigned f)
172   int str_matchx(char *p, char *s, unsigned f)
173   void str_sanitize(char *d, char *p, size_t sz)
174
175 cdef extern from 'mLib/versioncmp.h':
176   int _versioncmp "versioncmp"(char *va, char *vb)
177
178 ###--------------------------------------------------------------------------
179 ### Form-urlencoding functions.
180
181 cdef extern from 'mLib/url.h':
182   struct url_ectx:
183     unsigned f
184   struct url_dctx:
185     char *p
186     unsigned f
187   enum:
188     URLF_STRICT
189     URLF_LAX
190     URLF_SEMI
191   void url_initenc(url_ectx *ctx)
192   void url_enc(url_ectx *ctx, dstr *d, char *name, char *value)
193   void url_initdec(url_dctx *ctx, char *p)
194   int url_dec(url_dctx *ctx, dstr *n, dstr *v)
195
196 ###--------------------------------------------------------------------------
197 ### Atom stuff.
198
199 ## Atoms.
200 ##
201 ## Partly written in `real' C.
202 cdef extern from 'atom.h':
203   ctypedef struct atom:
204     pass
205   ctypedef struct atom_iter:
206     pass
207   ctypedef struct atom_table:
208     pass
209   atom_table *ATOM_GLOBAL
210   void atom_mkiter(atom_iter *i, atom_table *t)
211   atom *atom_next(atom_iter *)
212   void atom_pysetup()
213   atom_pywrap(atom *a)
214   atom_pyintern(obj)
215   atom *ATOM_A(obj)
216   PyTypeObject atom_pytype
217
218 ## Association tables.
219 cdef extern from 'mLib/assoc.h':
220   ctypedef struct assoc_table:
221     pass
222   ctypedef struct assoc_base:
223     pass
224   ctypedef struct assoc_iter:
225     pass
226   void assoc_create(assoc_table *t)
227   void assoc_destroy(assoc_table *t)
228   void *assoc_find(assoc_table *t, atom *a, int sz, unsigned *f)
229   void assoc_remove(assoc_table *t, void *b)
230   atom *ASSOC_ATOM(void *b)
231   void assoc_mkiter(assoc_iter *i, assoc_table *t)
232   void *assoc_next(assoc_iter *i)
233
234 ###--------------------------------------------------------------------------
235 ### Double-ended arrays.
236
237 cdef extern from 'array.h':
238   void da_pysetup()
239   PyTypeObject da_pytype
240   PyTypeObject daiter_pytype
241
242 ###--------------------------------------------------------------------------
243 ### Line buffer.
244
245 cdef extern from 'mLib/lbuf.h':
246   cdef struct lbuf:
247     int f
248     int delim
249     size_t sz
250   enum:
251     LBUF_ENABLE
252     _LBUF_CRLF "LBUF_CRLF"
253     _LBUF_STRICTCRLF "LBUF_STRICTCRLF"
254   void lbuf_flush(lbuf *b, char *p, size_t len)
255   void lbuf_close(lbuf *b)
256   size_t lbuf_free(lbuf *b, char **p)
257   void lbuf_setsize(lbuf *b, size_t sz)
258   void lbuf_enable(lbuf *b)
259   void lbuf_disable(lbuf *b)
260   void lbuf_init(lbuf *b,
261                  void (*func)(char *s, size_t len, void *arg), void *arg)
262   void lbuf_destroy(lbuf *b)
263
264 ###--------------------------------------------------------------------------
265 ### Packet buffer.
266
267 cdef extern from 'mLib/pkbuf.h':
268   ctypedef struct pkbuf:
269     int f
270     int want
271   enum:
272     PKBUF_ENABLE
273   void pkbuf_flush(pkbuf *pk, unsigned char *p, size_t len)
274   void pkbuf_close(pkbuf *pk)
275   size_t pkbuf_free(pkbuf *pk, unsigned char **p)
276   void pkbuf_want(pkbuf *pk, size_t sz)
277   void pkbuf_init(pkbuf *b,
278                   void (*func)(unsigned char *s, size_t len,
279                                pkbuf *pk, size_t *keep, void *arg),
280                   void *arg)
281   void pkbuf_destroy(pkbuf *b)
282
283 ###--------------------------------------------------------------------------
284 ### Select stuff.
285
286 ## Basics.
287 cdef extern from 'mLib/sel.h':
288   ctypedef struct sel_state:
289     pass
290   ctypedef struct sel_file:
291     int fd
292   ctypedef struct sel_timer:
293     pass
294   enum:
295     _SEL_READ "SEL_READ"
296     _SEL_WRITE "SEL_WRITE"
297     _SEL_EXC "SEL_EXC"
298   void sel_init(sel_state *s)
299   void sel_initfile(sel_state *s, sel_file *f, int fd, unsigned mode,
300                     void (*func)(int fd, unsigned mode, void *arg),
301                     void *arg)
302   void sel_force(sel_file *f)
303   void sel_addfile(sel_file *f)
304   void sel_rmfile(sel_file *f)
305   void sel_addtimer(sel_state *s, sel_timer *t, timeval *tv,
306                     void (*func)(timeval *tv, void *arg),
307                     void *arg)
308   void sel_rmtimer(sel_timer *t)
309   int sel_select(sel_state *s) except *
310
311 ### Non-blocking connection.
312 cdef extern from 'mLib/conn.h':
313   ctypedef struct conn:
314     pass
315   int conn_fd(conn *c, sel_state *s, int fd,
316               void (*func)(int fd, void *arg), void *arg)
317   void conn_kill(conn *c)
318
319 ## Background name resolver.
320 cdef extern from 'mLib/bres.h':
321   ctypedef struct bres_client:
322     pass
323   void bres_byname(bres_client *r, char *name,
324                    void (*func)(hostent *h, void *arg), void *arg)
325   void bres_byaddr(bres_client *r, in_addr addr,
326                    void (*func)(hostent *h, void *arg), void *arg)
327   void bres_abort(bres_client *r)
328   void bres_exec(char *null)
329   void bres_init(sel_state *s)
330
331 ## In-band signal handling.
332 cdef extern from 'mLib/sig.h':
333   ctypedef struct sig:
334     pass
335   void sig_add(sig *s, int n, void (*func)(int n, void *arg), void *arg)
336   void sig_remove(sig *s)
337   void sig_init(sel_state *s)
338
339 ## Line buffer.
340 cdef extern from 'mLib/selbuf.h':
341   ctypedef struct selbuf:
342     sel_file reader
343     lbuf b
344   void selbuf_enable(selbuf *b)
345   void selbuf_disable(selbuf *b)
346   void selbuf_setsize(selbuf *b, size_t sz)
347   void selbuf_init(selbuf *b, sel_state *s, int fd,
348                    void (*func)(char *s, size_t len, void *arg), void *arg)
349   void selbuf_destroy(selbuf *b)
350
351 ## Packet buffer.
352 cdef extern from 'mLib/selpk.h':
353   ctypedef struct selpk:
354     sel_file reader
355     pkbuf pk
356   void selpk_enable(selpk *b)
357   void selpk_disable(selpk *b)
358   void selpk_want(selpk *b, size_t sz)
359   void selpk_init(selpk *b, sel_state *s, int fd,
360                   void (*func)(unsigned char *p, size_t n,
361                                pkbuf *pk, size_t *keep, void *arg),
362                   void *arg)
363   void selpk_destroy(selpk *b)
364
365 ## Ident client.
366 cdef extern from 'mLib/ident.h':
367   ctypedef struct ident_request:
368     pass
369   enum:
370     IDENT_USERID
371     IDENT_ERROR
372     IDENT_BAD
373   struct ident_userid:
374     char *os
375     char *user
376   union ident_u:
377     ident_userid userid
378     char *error
379   ctypedef struct ident_reply:
380     int sport
381     int dport
382     int type
383     ident_u u
384   void ident(ident_request *rq, sel_state *s,
385              sockaddr_in *local, sockaddr_in *remote,
386              void (*func)(ident_reply *r, void *arg),
387              void *arg)
388   void ident_abort(ident_request *rq)
389
390 ###--------------------------------------------------------------------------
391 ### Error reporting.
392
393 cdef extern from 'mLib/quis.h':
394   void _ego "ego"(char *prog)
395   char *_quis "quis"()
396
397 cdef extern from 'mLib/report.h':
398   void _moan "moan"(char *f, char *msg)
399
400 ###--------------------------------------------------------------------------
401 ### File comparison.
402
403 cdef extern from 'mLib/fwatch.h':
404   ctypedef struct fwatch:
405     pass
406   void fwatch_init(fwatch *f, char *name)
407   void fwatch_initfd(fwatch *f, int fd)
408   int fwatch_update(fwatch *f, char *name)
409   int fwatch_updatefd(fwatch *f, int fd)
410
411 ###--------------------------------------------------------------------------
412 ### File descriptor hacking.
413
414 cdef extern from 'mLib/fdflags.h':
415   int _fdflags "fdflags"(int fd,
416                          unsigned fbic, unsigned fxor,
417                          unsigned fdbic, unsigned fdxor)
418
419 cdef extern from 'mLib/fdpass.h':
420   int fdpass_send(int sock, int fd, void *p, size_t sz)
421   int fdpass_recv(int sock, int *fd, void *p, size_t sz)
422
423 cdef extern from 'mLib/mdup.h':
424   ctypedef struct mdup_fd:
425     int cur
426     int want
427   int _mdup "mdup"(mdup_fd *v, size_t n)
428
429 ###--------------------------------------------------------------------------
430 ### Daemon utilities.
431
432 cdef extern from 'mLib/daemonize.h':
433   int _daemonize "daemonize"()
434   void _detachtty "detachtty"()
435
436 ###--------------------------------------------------------------------------
437 ### Internal utilities.
438
439 cdef extern from 'grim.h':
440   int PSIZEOF(void *x)
441   ctypedef void *cvp
442
443 ###----- That's all, folks --------------------------------------------------