From 37f6fb7f2d957a87e9c599ebb141c072bfa79140 Mon Sep 17 00:00:00 2001 From: Alexey Stratulat <--local> Date: Thu, 1 Aug 2019 23:49:19 +0700 Subject: [PATCH] [*] Changed the wrapper. Added temporary initialization of dap_common. Made a DapServer object. And we changed the wrapping functions to work with them. --- include/libdap-server-core-python.h | 31 +++++++++++++++++++++++++++-- src/libdap-server-core-python.c | 18 +++++++++++++---- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/include/libdap-server-core-python.h b/include/libdap-server-core-python.h index 1d7771d1..cc71a4db 100644 --- a/include/libdap-server-core-python.h +++ b/include/libdap-server-core-python.h @@ -11,7 +11,34 @@ extern "C" { dap_server_t *t_server; - +typedef struct PyDapServer { + PyObject_HEAD + dap_server_t *t_server; +}PyDapServerObject; + +static PyTypeObject dapServer_dapServerType = { + PyVarObject_HEAD_INIT(NULL, 0) + "libdap_server_core_python_module.DapServer", /* tp_name */ + sizeof(PyDapServerObject), /* 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 */ + "DapServer objects", /* tp_doc */ +}; #define LOG_TAG "libdap-server-core-python" @@ -31,7 +58,7 @@ static PyMethodDef DapServerCorePythonMethods[] = { static struct PyModuleDef dapservercorepythonmodule = { PyModuleDef_HEAD_INIT, - "libdap_python_module", /* name of module */ + "libdap_server_core_python_module", /* name of module */ NULL, /* module documentation, may be NULL */ -1, /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */ diff --git a/src/libdap-server-core-python.c b/src/libdap-server-core-python.c index 4eb618a5..fed7b846 100644 --- a/src/libdap-server-core-python.c +++ b/src/libdap-server-core-python.c @@ -4,13 +4,14 @@ static PyObject *dap_server_core_init(PyObject *self, PyObject *args){ uint32_t l_thread_cnt; size_t conn_t; + dap_common_init("CVNT", "CVNT.log"); if (!PyArg_ParseTuple(args, "I|n", &l_thread_cnt, &conn_t)){ return NULL; } int32_t result = dap_server_init(l_thread_cnt); if ( result != 0 ) { log_it( L_CRITICAL, "Can't init socket server module" ); - } + } dap_events_init(l_thread_cnt, conn_t); dap_client_remote_init(); return PyLong_FromLong(result); @@ -23,7 +24,12 @@ static PyObject *dap_server_core_deinit(){ } static PyObject *dap_server_core_loop(PyObject *self, PyObject *args){ - int32_t result = dap_server_loop(t_server); + PyObject *obj_server; + if (!PyArg_ParseTuple(args, "O", &obj_server)){ + return NULL; + } + int32_t result = dap_server_loop(((PyDapServerObject*)obj_server)->t_server); + log_it( result ? L_CRITICAL : L_NOTICE, "Server loop stopped with return code %d", ((PyDapServerObject*)obj_server)->t_server ); return PyLong_FromLong(result); } @@ -36,11 +42,15 @@ static PyObject *dap_server_core_listen(PyObject *self, PyObject *args){ } if (type > 1) return NULL; - t_server = dap_server_listen(addr, port, type); - return PyLong_FromLong(0); + PyObject *obj = _PyObject_New(&dapServer_dapServerType); + ((PyDapServerObject*)obj)->t_server = dap_server_listen(addr, port, type); + return Py_BuildValue("O", obj); } PyMODINIT_FUNC PyInit_libdap_server_core_python_module(void){ + dapServer_dapServerType.tp_new = PyType_GenericNew; + if (PyType_Ready(&dapServer_dapServerType) < 0) + return NULL; return PyModule_Create(&dapservercorepythonmodule); } -- GitLab