X-Git-Url: http://www.dolda2000.com/gitweb/?p=ashd.git;a=blobdiff_plain;f=python%2Fhtp.c;h=ec4ebabce26d0ebe36f008c7e87f27a0aea4bd82;hp=04058095b96d537147473c72fb34887b9f8d00bb;hb=5fc5488205264fd1e202bd45b83f701971526847;hpb=4942dacd8281b9095468148b0df84af9e0aaaddc diff --git a/python/htp.c b/python/htp.c index 0405809..ec4ebab 100644 --- a/python/htp.c +++ b/python/htp.c @@ -19,8 +19,8 @@ #include #include -#include -#include +#include +#include static PyObject *p_recvfd(PyObject *self, PyObject *args) { @@ -32,29 +32,32 @@ static PyObject *p_recvfd(PyObject *self, PyObject *args) fd = 0; if(!PyArg_ParseTuple(args, "|i", &fd)) return(NULL); - if((ret = recvfd(fd, &data, &dlen)) < 0) { + Py_BEGIN_ALLOW_THREADS; + ret = recvfd(fd, &data, &dlen); + Py_END_ALLOW_THREADS; + if(ret < 0) { if(errno == 0) return(Py_BuildValue("OO", Py_None, Py_None)); PyErr_SetFromErrno(PyExc_OSError); return(NULL); } - ro = Py_BuildValue("Ni", PyString_FromStringAndSize(data, dlen), ret); + ro = Py_BuildValue("Ni", PyBytes_FromStringAndSize(data, dlen), ret); free(data); return(ro); } static PyObject *p_sendfd(PyObject *self, PyObject *args) { - int sock, fd; - PyObject *data; + int sock, fd, ret; + Py_buffer data; - if(!PyArg_ParseTuple(args, "iiO", &sock, &fd, &data)) + if(!PyArg_ParseTuple(args, "iiy*", &sock, &fd, &data)) return(NULL); - if(!PyString_Check(data)) { - PyErr_SetString(PyExc_TypeError, "datagram must be a string"); - return(NULL); - } - if(sendfd(sock, fd, PyString_AsString(data), PyString_Size(data)) < 0) { + Py_BEGIN_ALLOW_THREADS; + ret = sendfd(sock, fd, data.buf, data.len); + Py_END_ALLOW_THREADS; + PyBuffer_Release(&data); + if(ret < 0) { PyErr_SetFromErrno(PyExc_OSError); return(NULL); } @@ -67,7 +70,14 @@ static PyMethodDef methods[] = { {NULL, NULL, 0, NULL} }; -PyMODINIT_FUNC inithtlib(void) +static struct PyModuleDef module = { + PyModuleDef_HEAD_INIT, + .m_name = "htlib", + .m_size = -1, + .m_methods = methods, +}; + +PyMODINIT_FUNC PyInit_htlib(void) { - Py_InitModule("ashd.htlib", methods); + return(PyModule_Create(&module)); }