1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
from ctypes import *
x=cdll.LoadLibrary("../libxpa.so.1.0")
c_byte_p = POINTER(c_byte)
## int XPAPoll(int msec, int maxreq);
XPAPoll = x.XPAPoll
x.XPAPoll.restype = c_int
x.XPAPoll.argtypes = [c_int, c_int]
## typedef struct xparec{
## /* xpa version */
## char *version;
## /* status of this xpa */
## int status;
## /* "g", "s", "i" are server types; "c" for client */
## char *type;
## /*
## * THE SERVER SIDE
## */
## struct xparec *next;
## char *xclass;
## char *name;
## char *help;
##
## /* and so on */
##
## } *XPA;
# ctypes wrapper
class xparec(Structure):
_fields_ = [ ("version", c_char_p), \
("status", c_int), \
("type", c_char_p), \
("next", c_void_p), \
("xclass", c_char_p), \
("name", c_char_p), \
("help", c_char_p) \
]
XPA = POINTER(xparec)
## int XPAFree(XPA xpa);
XPAFree = x.XPAFree
x.XPAFree.restype = c_void_p
x.XPAFree.argtypes = [XPA]
## info callback:
## int info_cb(void *info_data, void *call_data, char *paramlist)
INFOCBFUNC = CFUNCTYPE(c_int, c_char_p, XPA, c_char_p)
### implement like this:
#def py_infocb_func(a, b, c):
# print "py_cmp_func", a, b
# return 0
#
#infocb_func = INFOCBFUNC(py_infocb_func)
## XPA XPAInfoNew(char *class, char *name,
## int (*info_callback)(),
## void *info_data, char *info_mode);
XPAInfoNew = x.XPAInfoNew
x.XPAInfoNew.restype = XPA
x.XPAInfoNew.argtypes = [c_char_p, c_char_p, INFOCBFUNC, c_char_p, c_char_p]
## int send_callback(void *send_data, void *call_data,
## char *paramlist, char **buf, int *len)
SENDCBFUNC = CFUNCTYPE(c_int, c_char_p, XPA, c_char_p, POINTER(c_byte_p), POINTER(c_int))
### implement like this:
#def py_sendcb_func(a, data, call_data, param, buf, len):
# print "inside send_callback"
# return 0
#
#sendcb_func = SENDCBFUNC(py_sendcb_func)
## int receive_callback(void *receive_data, void *call_data,
## char *paramlist, char *buf, int len)
RCVCBFUNC = CFUNCTYPE(c_int, c_char_p, XPA, c_char_p, c_byte_p, c_int)
## XPA XPANew(char *class, char *name, char *help,
## int (*send_callback)(),
## void *send_data, char *send_mode,
## int (*rec_callback)(),
## void *rec_data, char *rec_mode);
XPANew = x.XPANew
x.XPANew.restype = XPA
x.XPANew.argtypes = [c_char_p, c_char_p, c_char_p, \
SENDCBFUNC, \
c_char_p, c_char_p, \
RCVCBFUNC, \
c_char_p, c_char_p \
]
|