diff --git a/include/dap_events_socket_python.h b/include/dap_events_socket_python.h new file mode 100644 index 0000000000000000000000000000000000000000..4bd9cc79f22c47a03572378603f19c53d9e7c702 --- /dev/null +++ b/include/dap_events_socket_python.h @@ -0,0 +1,67 @@ +#ifndef _DAP_EVENTS_SOCKET_PYTHON_H_ +#define _DAP_EVENTS_SOCKET_PYTHON_H_ + +#include "Python.h" +#include "dap_events_socket.h" +#include "dap_events_python.h" +#include "dap_common.h" + +typedef struct PyDapEventsSocket{ + PyObject_HEAD + dap_events_socket_t *t_events_socket; +}PyDapEventsSocketObject; + +static PyTypeObject dapEventsSocket_dapEventsSocketType = { + PyVarObject_HEAD_INIT(NULL, 0) + "libDapServerCore.DapEventsSocket", /* tp_name */ + sizeof(PyDapEventsSocketObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + "DapEventsSocket objects", /* tp_doc */ +}; + + +PyObject *dap_events_socket_init_py(); // Init clients module +PyObject *dap_events_socket_deinit_py(); // Deinit clients module + +PyObject *dap_events_socket_create_after_py(PyObject *self, PyObject *args);//dap_events_socket_t * a_es); + +//PyObject *dap_events_socket_wrap_no_add_py(PyObject *self, PyObject *args);//struct dap_events * a_events, + // int s, dap_events_socket_callbacks_t * a_callbacks); // Create new client and add it to the list + + +PyObject *dap_events_socket_find_py(PyObject *self, PyObject *args);//int sock, struct dap_events * sh); // Find client by socket + +PyObject *dap_events_socket_is_ready_to_read_py(PyObject *self, PyObject *args);//dap_events_socket_t * sc); +PyObject *dap_events_socket_is_ready_to_write_py(PyObject *self, PyObject *args);//dap_events_socket_t * sc); +PyObject *dap_events_socket_set_readable_py(PyObject *self, PyObject *args);//dap_events_socket_t * sc,bool is_ready); +PyObject *dap_events_socket_set_writable_py(PyObject *self, PyObject *args);//dap_events_socket_t * sc,bool is_ready); + +PyObject *dap_events_socket_write_py(PyObject *self, PyObject *args);//dap_events_socket_t *sc, const void * data, size_t data_size); +PyObject *dap_events_socket_write_f_py(PyObject *self, PyObject *args);//dap_events_socket_t *sc, const char * format,...); +PyObject *dap_events_socket_read_py(PyObject *self, PyObject *args);//dap_events_socket_t *sc, void * data, size_t data_size); + +PyObject *dap_events_socket_delete_py(PyObject *self, PyObject *args);//dap_events_socket_t *sc,bool preserve_inheritor); // Removes the client from the list + +PyObject *dap_events_socket_shrink_buf_in_py(PyObject *self, PyObject *args);//dap_events_socket_t * cl, size_t shrink_size); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/libdap-server-core-python.h b/include/libdap-server-core-python.h index 43bfbdb0becbd081a8ec12ed62d3172a52a838cd..411e65e535ff4883fbd8ad473c8ce1d16c738d6d 100644 --- a/include/libdap-server-core-python.h +++ b/include/libdap-server-core-python.h @@ -5,6 +5,7 @@ #include "dap_events.h" #include "dap_common.h" #include "dap_events_python.h" +#include "dap_events_socket_python.h" #ifdef __cplusplus extern "C" { @@ -59,6 +60,20 @@ static PyMethodDef DapServerCorePythonMethods[] = { {"eventsDellete", dap_events_delete_py, METH_VARARGS, ""}, {"eventsStart", dap_events_start_py, METH_VARARGS, ""}, {"eventsWait", dap_events_wait_py, METH_VARARGS, ""}, + /* Events Socket */ + {"eventsSocketInit", dap_events_socket_init_py, METH_NOARGS, ""}, + {"eventsSocketDeinit", dap_events_socket_deinit_py, METH_NOARGS, ""}, + {"eventsSocketCreateAfter", dap_events_socket_create_after_py, METH_VARARGS, ""}, + {"eventsSocketFind", dap_events_socket_find_py, METH_VARARGS, ""}, + {"eventsSocketIsReadyToRead", dap_events_socket_is_ready_to_read_py, METH_VARARGS, ""}, + {"eventsSocketIsReadyToWrite", dap_events_socket_is_ready_to_write_py, METH_VARARGS, ""}, + {"eventsSocketSetReadable", dap_events_socket_set_readable_py, METH_VARARGS, ""}, + {"eventsSocketSetWritable", dap_events_socket_set_writable_py, METH_VARARGS, ""}, + {"eventsSocketWrite", dap_events_socket_write_py, METH_VARARGS, ""}, + {"eventsSocketWriteF", dap_events_socket_write_f_py, METH_VARARGS, ""}, + {"eventsSocketRead", dap_events_socket_read_py, METH_VARARGS, ""}, + {"eventsSocketDelete", dap_events_socket_delete_py, METH_VARARGS, ""}, + {"eventsSocketShrinkBufIn", dap_events_socket_shrink_buf_in_py, METH_VARARGS, ""}, {NULL, NULL, 0, NULL} }; @@ -74,10 +89,6 @@ static struct PyModuleDef dapservercorepythonmodule = { PyMODINIT_FUNC PyInit_libDapServerCore(void); - - - - #ifdef __cplusplus } #endif diff --git a/src/dap_events_socket_python.c b/src/dap_events_socket_python.c new file mode 100644 index 0000000000000000000000000000000000000000..d55acec9bb6543f131d8cd922aae1c78807cf5fd --- /dev/null +++ b/src/dap_events_socket_python.c @@ -0,0 +1,145 @@ +#include "dap_events_socket_python.h" + +PyObject *dap_events_socket_init_py(){ + int result = dap_events_socket_init(); + return PyLong_FromLong(result); +} +PyObject *dap_events_socket_deinit_py(){ + dap_events_socket_deinit(); + return PyLong_FromLong(0); +} + +PyObject *dap_events_socket_create_after_py(PyObject *self, PyObject *args){ + PyObject *in_object; + if(!PyArg_ParseTuple(args, "O", &in_object)){ + return NULL; + } + dap_events_socket_create_after(((PyDapEventsSocketObject*)in_object)->t_events_socket); + return PyLong_FromLong(0); +} + +//PyObject *dap_events_socket_wrap_no_add_py(PyObject *self, PyObject *args){ +// return PyLong_FromLong(0); +//} + + +PyObject *dap_events_socket_find_py(PyObject *self, PyObject *args){ + int socket; + PyObject *in_object; + if (!PyArg_ParseTuple(args, "i|O", &socket, &in_object)){ + return NULL; + } + dap_events_socket_t *events_socket = dap_events_socket_find(socket, ((PyDapEventsObject*)in_object)->t_events); + PyObject *l_events_socket = _PyObject_New(&dapEventsSocket_dapEventsSocketType); + ((PyDapEventsSocketObject*)l_events_socket)->t_events_socket = events_socket; + return Py_BuildValue("O", l_events_socket); +} + +PyObject *dap_events_socket_is_ready_to_read_py(PyObject *self, PyObject *args){ + PyObject *in_obj; + if (!PyArg_ParseTuple(args, "O", &in_obj)){ + return NULL; + } + bool result = dap_events_socket_is_ready_to_read(((PyDapEventsSocketObject*)in_obj)->t_events_socket); + if (result) + return Py_BuildValue("O", Py_True); + else + return Py_BuildValue("O", Py_False); +} +PyObject *dap_events_socket_is_ready_to_write_py(PyObject *self, PyObject *args){ + PyObject *in_obj; + if (!PyArg_ParseTuple(args, "O", &in_obj)){ + return NULL; + } + bool result = dap_events_socket_is_ready_to_write(((PyDapEventsSocketObject*)in_obj)->t_events_socket); + if (result) + return Py_BuildValue("O", Py_True); + else + return Py_BuildValue("O", Py_False); +} +PyObject *dap_events_socket_set_readable_py(PyObject *self, PyObject *args){ + PyObject *in_obj; + PyObject *l_is_ready; + if (!PyArg_ParseTuple(args, "O", &in_obj, &l_is_ready)){ + return NULL; + } + bool is_ready = true; + if (l_is_ready == Py_False) + is_ready = false; + dap_events_socket_set_readable(((PyDapEventsSocketObject*)in_obj)->t_events_socket, is_ready); + return PyLong_FromLong(0); +} +PyObject *dap_events_socket_set_writable_py(PyObject *self, PyObject *args){ + PyObject *in_obj; + PyObject *l_is_ready; + if (!PyArg_ParseTuple(args, "O", &in_obj, &l_is_ready)){ + return NULL; + } + bool is_ready = true; + if (l_is_ready == Py_False) + is_ready = false; + dap_events_socket_set_writable(((PyDapEventsSocketObject*)in_obj)->t_events_socket, is_ready); + return PyLong_FromLong(0); +} + +PyObject *dap_events_socket_write_py(PyObject *self, PyObject *args){ + PyObject *in_obj; + PyBytesObject *in_bytes; + size_t in_size; + if (!PyArg_ParseTuple(args, "O|S|n", &in_obj, &in_bytes, &in_size)){ + return NULL; + } + char *in_v_bytes = PyBytes_AsString((PyObject*)in_bytes); + size_t res_size = dap_events_socket_write(((PyDapEventsSocketObject*)in_obj)->t_events_socket, + in_v_bytes, in_size); + return Py_BuildValue("n", res_size); +} +PyObject *dap_events_socket_write_f_py(PyObject *self, PyObject *args){ + PyObject *in_object; + const char *format; + PyTupleObject *pto; + if (!PyArg_ParseTuple(args, "O|s|O", &in_object, &format, &pto)){ + return NULL; + } + va_list ap; + if (!PyArg_VaParse(args, format, ap)){ + return NULL; + } + size_t res_size = dap_events_socket_write_f(((PyDapEventsSocketObject*)in_object)->t_events_socket, format, ap); + return Py_BuildValue("n", res_size); +} +PyObject *dap_events_socket_read_py(PyObject *self, PyObject *args){ + PyObject *in_object; + size_t in_size; + if (!PyArg_ParseTuple(args, "O|S|n", &in_object, &in_size)){ + return NULL; + } + void *res = DAP_NEW_SIZE(void*, in_size); + size_t res_size = dap_events_socket_read(((PyDapEventsSocketObject*)in_object)->t_events_socket, res, in_size); + PyBytesObject *res_obj = (PyBytesObject*)PyBytes_FromString(res); + return Py_BuildValue("nS", res_size, res_obj); +} + +PyObject *dap_events_socket_delete_py(PyObject *self, PyObject *args){ + PyObject *in_object; + PyObject *in_bool; + if (!PyArg_ParseTuple(args, "O|O", &in_object, &in_bool)){ + return NULL; + } + bool boolean = true; + if (in_bool == Py_False) + boolean = false; + dap_events_socket_delete(((PyDapEventsSocketObject*)in_object)->t_events_socket, boolean); + return PyLong_FromLong(0); +} + +PyObject *dap_events_socket_shrink_buf_in_py(PyObject *self, PyObject *args){ + PyObject *in_object; + size_t in_size; + if(!PyArg_ParseTuple(args, "O|n", &in_object, &in_size)){ + return NULL; + } + dap_events_socket_shrink_buf_in(((PyDapEventsSocketObject*)in_object)->t_events_socket, in_size); + return PyLong_FromLong(0); +} + diff --git a/src/libdap-server-core-python.c b/src/libdap-server-core-python.c index e618cd3c6eb6753da7cd249c62c0a71fb26f0981..aedf19336960866e8a23a672d992419de6ade679 100644 --- a/src/libdap-server-core-python.c +++ b/src/libdap-server-core-python.c @@ -50,7 +50,9 @@ static PyObject *dap_server_core_listen(PyObject *self, PyObject *args){ PyMODINIT_FUNC PyInit_libDapServerCore(void){ dapServer_dapServerType.tp_new = PyType_GenericNew; dapEvents_dapEventsType.tp_new = PyType_GenericNew; - if (PyType_Ready(&dapServer_dapServerType) < 0 || PyType_Ready(&dapEvents_dapEventsType) < 0) + dapEventsSocket_dapEventsSocketType.tp_new = PyType_GenericNew; + if (PyType_Ready(&dapServer_dapServerType) < 0 || PyType_Ready(&dapEvents_dapEventsType) < 0 + || PyType_Ready(&dapEventsSocket_dapEventsSocketType) < 0) return NULL; return PyModule_Create(&dapservercorepythonmodule); }