diff --git a/CMakeLists.txt b/CMakeLists.txt index b540a7b4228959c80f88b90401f6ac48dbadd42a..60a9ce5b1f98b2e5eda4f0f223d01f3dfc42e7a9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,10 +1,7 @@ cmake_minimum_required(VERSION 3.0) -if (SUPPORT_PYTHON_PLUGINS) - project(API_CellFrame C) -else() - project(CellFrame C) -endif() +project(CellFrame C) + set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_COLOR_MAKEFILE ON) set(CMAKE_C_STANDARD 11) diff --git a/CellFrame/python-cellframe.c b/CellFrame/python-cellframe.c index 1722227ef6711ba599c57b4343807c0884822568..b589b9ea75252b05d324268008087a34d8f5c944 100644 --- a/CellFrame/python-cellframe.c +++ b/CellFrame/python-cellframe.c @@ -25,6 +25,101 @@ static bool submodules_deint; PyObject* CellFrame_error = NULL; +static PyMethodDef DapPythonMethods[] = { + {"init", python_dap_init, METH_VARARGS, "Initialization of the Python Cellframe library."}, + {"deinit", python_dap_deinit, METH_VARARGS, "Deinitialization of the Python Cellframe library."}, + {"setLogLevel", (PyCFunction)dap_set_log_level, METH_VARARGS, "Setting the logging level."}, + {"configGetItem", (PyCFunction)py_m_dap_config_get_item, METH_VARARGS, "Get an item from a configuration."}, + {"configGetItemDefault", (PyCFunction)py_m_dap_config_get_item_default, METH_VARARGS, "Get an item from a configuration with a default value."}, + {NULL, NULL, 0, NULL} +}; + +static PyMethodDef CellFramePythonMethods[] = { + {NULL, NULL, 0, NULL} +}; + +static char CellFramePythonModuleDoc[] = "CellFrame SDK.Python v"DAP_VERSION" welcomes you!"; + +static PyModuleDef CellFramePythonModule = { + PyModuleDef_HEAD_INIT, + "CellFrame", /* name of module */ + CellFramePythonModuleDoc, /* module documentation, may be NULL */ + -1, /* size of per-interpreter state of the module, + or -1 if the module keeps state in global variables. */ + CellFramePythonMethods, +}; + +static PyModuleDef DapPythonModule = { + PyModuleDef_HEAD_INIT, + "DAP", /* name of module */ + "DAP SDK.Python v"DAP_VERSION" welcomes you!", /* module documentation, may be NULL */ + -1, /* size of per-interpreter state of the module, + or -1 if the module keeps state in global variables. */ + DapPythonMethods, +}; + +static PyModuleDef DapCorePythonModule = { + PyModuleDef_HEAD_INIT, + "DAP.Core", /* 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. */ + NULL, +}; + +static PyModuleDef DapCryptoPythonModule = { + PyModuleDef_HEAD_INIT, + "DAP.Crypto", /* 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. */ + NULL, +}; + +static PyModuleDef DapNetPythonModule = { + PyModuleDef_HEAD_INIT, + "DAP.Network", /* 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. */ + NULL, +}; + +static PyModuleDef CellframeChainPythonModule = { + PyModuleDef_HEAD_INIT, + "Cellframe.Chain", /* 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. */ + NULL, +}; + +static PyModuleDef CellframeCommonPythonModule = { + PyModuleDef_HEAD_INIT, + "Cellframe.Common", /* 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. */ + NULL, +}; + +static PyModuleDef CellframeNetworkPythonModule = { + PyModuleDef_HEAD_INIT, + "Cellframe.Network", /* 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. */ + NULL, +}; + +static PyModuleDef CellframeConsensusPythonModule = { + PyModuleDef_HEAD_INIT, + "Cellframe.Consensus", /* 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. */ + NULL, +}; #ifdef _WIN32 @@ -47,7 +142,109 @@ void sigfunc(int sig){ } #endif -PyObject *python_cellframe_init(PyObject *self, PyObject *args){ +PyObject *python_cellframe_init(PyObject *self, PyObject *args) +{ + PyObject *cellframeModules = args; + Py_ssize_t size_list = PyList_Size(cellframeModules); + for (int i=0; i < size_list;i++) { + PyObject *value = PyList_GetItem(cellframeModules, i); + const char *c_value = PyUnicode_AsUTF8(value); + log_it(L_INFO, "Initializing \"%s\" module ...", c_value); + if (strcmp(c_value, "Chain") == 0){ + if(dap_chain_init() != 0){ + PyErr_SetString(CellFrame_error, "Failed to initialize \"Chain\" module"); + return NULL; + } + if (dap_chain_cs_init() != 0){ + PyErr_SetString(CellFrame_error, "Failed to initialize \"ChainCS\" module"); + return NULL; + } + } else if (strcmp(c_value, "Mempool") == 0){ + if (dap_datum_mempool_init() != 0){ + PyErr_SetString(CellFrame_error, "Failed to initialize \"Mempool\" module"); + return NULL; + } + s_init_mempool = true; + } else if (strcmp(c_value, "Wallet") == 0){ + if (dap_chain_wallet_init_py() != 0){ + PyErr_SetString(CellFrame_error, "Failed to initialize \"Wallet\" module"); + return NULL; + } + s_init_wallet = true; + /* } else if (strcmp(c_value, "ChainCSDag") == 0){ + if (dap_chain_cs_dag_init() != 0) + { + PyErr_SetString(CellFrame_error, "Failed to initialize ChainCSDag module. "); + return NULL; + } + } else if (strcmp(c_value, "ChainCSDagPoa") == 0){ + if (dap_chain_cs_dag_poa_init() != 0){ + PyErr_SetString(CellFrame_error, "Failed to initialize ChainCSDagPoa module. "); + return NULL; + } + } else if (strcmp(c_value, "ChainCSDagPos") == 0){ + if (dap_chain_cs_dag_pos_init() != 0){ + PyErr_SetString(CellFrame_error, "Failed to initialize ChainCSDagPos module. "); + return NULL; + } */ + } else if (strcmp(c_value, "ChainNetSrv") == 0){ + if (dap_chain_net_srv_init() != 0){ + PyErr_SetString(CellFrame_error, "Failed to initialize \"ChainNetSrv\" module"); + return NULL; + } + }else if (strcmp(c_value, "StreamChChain") == 0){ + if (dap_stream_ch_chain_init() != 0 ){ + PyErr_SetString(CellFrame_error, "Failed to initialize \"StreamChChain\" module"); + return NULL; + } + } else if (strcmp(c_value, "StreamChChainNet") == 0){ + if (dap_stream_ch_chain_net_init() != 0 ){ + PyErr_SetString(CellFrame_error, "Failed to initialize \"StreamChChainNet\" module"); + return NULL; + } + }else if (strcmp(c_value, "StreamChChainNetSrv") == 0){ + if (dap_stream_ch_chain_net_init() != 0 ){ + PyErr_SetString(CellFrame_error, "Failed to initialize \"StreamChChainNetSrv\" module"); + return NULL; + } + }else if (strcmp(c_value, "EncKS") == 0){ + // if (dap_enc_ks_init()) + // if (dap_enc_ks_ + } else if (strcmp(c_value, "GlobalDB") == 0){ + if (dap_chain_global_db_init(g_config) != 0){ + PyErr_SetString(CellFrame_error, "Failed to initialize \"GlobalDB\" module"); + return NULL; + } + }else if (strcmp(c_value, "Client") == 0){ + if (dap_client_init() != 0){ + PyErr_SetString(CellFrame_error, "Failed to initialize \"Client\" module"); + return NULL; + } + }else if (strcmp(c_value, "GDB") == 0){ + if (dap_chain_gdb_init_py() != 0){ + PyErr_SetString(CellFrame_error, "Failed to initialize \"GDB\" module"); + return NULL; + } + }else if (strcmp(c_value, "Net") == 0){ + if (dap_chain_net_init_py() != 0 ){ + PyErr_SetString(CellFrame_error, "Failed to initialize \"Net\" module"); + return NULL; + } + }else if (strcmp(c_value, "AppCliServer") == 0){ + if (dap_chain_node_cli_init(g_config) != 0 ){ + PyErr_SetString(CellFrame_error, "Failed to initialize \"AppCliServer\" module" ); + return NULL; + } + }else{ + log_it(L_WARNING,"Unknown module: \"%s\"", c_value); + } + log_it(L_INFO, "Initialization of module is completed"); + } + return Py_None; +} + +PyObject *python_dap_init(PyObject *self, PyObject *args) +{ const char *app_name; const char *file_name_log; const char *config_dir; @@ -225,15 +422,6 @@ PyObject *python_cellframe_init(PyObject *self, PyObject *args){ return NULL; } s_init_server_core = true; - } else if (strcmp(c_value, "Chain") == 0){ - if(init_chain_py() != 0){ - PyErr_SetString(CellFrame_error, "Failed to initialize \"Chain\" module"); - return NULL; - } - if (dap_chain_cs_init_py() != 0){ - PyErr_SetString(CellFrame_error, "Failed to initialize \"ChainCS\" module"); - return NULL; - } } else if (strcmp(c_value, "Http") == 0){ if(dap_http_init() != 0){ PyErr_SetString(CellFrame_error, "Failed to initialize \"Http\" module"); @@ -281,12 +469,6 @@ PyObject *python_cellframe_init(PyObject *self, PyObject *args){ return NULL; } s_init_stream_ctl = true; - } else if (strcmp(c_value, "Mempool") == 0){ - if (dap_datum_mempool_init() != 0){ - PyErr_SetString(CellFrame_error, "Failed to initialize \"Mempool\" module"); - return NULL; - } - s_init_mempool = true; /* } else if (strcmp(c_value, "HttpClientSimple") == 0){ if (dap_http_client_simple_init() != 0){ @@ -294,284 +476,252 @@ PyObject *python_cellframe_init(PyObject *self, PyObject *args){ return NULL; } s_init_http_client_simple = true;*/ - } else if (strcmp(c_value, "Wallet") == 0){ - if (dap_chain_wallet_init_py() != 0){ - PyErr_SetString(CellFrame_error, "Failed to initialize \"Wallet\" module"); - return NULL; - } - s_init_wallet = true; -/* } else if (strcmp(c_value, "ChainCSDag") == 0){ - if (dap_chain_cs_dag_init() != 0) - { - PyErr_SetString(CellFrame_error, "Failed to initialize ChainCSDag module. "); - return NULL; - } - } else if (strcmp(c_value, "ChainCSDagPoa") == 0){ - if (dap_chain_cs_dag_poa_init() != 0){ - PyErr_SetString(CellFrame_error, "Failed to initialize ChainCSDagPoa module. "); - return NULL; - } - } else if (strcmp(c_value, "ChainCSDagPos") == 0){ - if (dap_chain_cs_dag_pos_init() != 0){ - PyErr_SetString(CellFrame_error, "Failed to initialize ChainCSDagPos module. "); - return NULL; - } */ - } else if (strcmp(c_value, "ChainNetSrv") == 0){ - if (dap_chain_net_srv_init() != 0){ - PyErr_SetString(CellFrame_error, "Failed to initialize \"ChainNetSrv\" module"); - return NULL; - } - }else if (strcmp(c_value, "StreamChChain") == 0){ - if (dap_stream_ch_chain_init() != 0 ){ - PyErr_SetString(CellFrame_error, "Failed to initialize \"StreamChChain\" module"); - return NULL; - } - } else if (strcmp(c_value, "StreamChChainNet") == 0){ - if (dap_stream_ch_chain_net_init() != 0 ){ - PyErr_SetString(CellFrame_error, "Failed to initialize \"StreamChChainNet\" module"); - return NULL; - } - }else if (strcmp(c_value, "StreamChChainNetSrv") == 0){ - if (dap_stream_ch_chain_net_init() != 0 ){ - PyErr_SetString(CellFrame_error, "Failed to initialize \"StreamChChainNetSrv\" module"); - return NULL; - } - }else if (strcmp(c_value, "EncKS") == 0){ -// if (dap_enc_ks_init()) -// if (dap_enc_ks_ - } else if (strcmp(c_value, "GlobalDB") == 0){ - if (dap_chain_global_db_init(g_config) != 0){ - PyErr_SetString(CellFrame_error, "Failed to initialize \"GlobalDB\" module"); - return NULL; - } - }else if (strcmp(c_value, "Client") == 0){ - if (dap_client_init() != 0){ - PyErr_SetString(CellFrame_error, "Failed to initialize \"Client\" module"); - return NULL; - } - }else if (strcmp(c_value, "GDB") == 0){ - if (dap_chain_gdb_init_py() != 0){ - PyErr_SetString(CellFrame_error, "Failed to initialize \"GDB\" module"); - return NULL; - } - }else if (strcmp(c_value, "Net") == 0){ - if (dap_chain_net_init_py() != 0 ){ - PyErr_SetString(CellFrame_error, "Failed to initialize \"Net\" module"); - return NULL; - } - }else if (strcmp(c_value, "AppCliServer") == 0){ - if (dap_chain_node_cli_init(g_config) != 0 ){ - PyErr_SetString(CellFrame_error, "Failed to initialize \"AppCliServer\" module" ); - return NULL; - } - }else{ - log_it(L_WARNING,"Unknown module: \"%s\"", c_value); } - log_it(L_INFO, "Initialization of module is completed"); } + python_cellframe_init(NULL, getModules); // TODO replace it with module init function if (events == NULL) return PyLong_FromLong(0); - else - return Py_BuildValue("iO", PyLong_FromLong(0), events); + else { + Py_INCREF(events); + return Py_BuildValue("iO", 0, events); + } } -PyMODINIT_FUNC PyInit_libCellFrame(void){ - /* === DAP === */ - // === Core === - if ( PyType_Ready( &DapCoreObjectType ) < 0 || - PyType_Ready( &DapLogitObjectType ) < 0 || +PyMODINIT_FUNC PyInit_libDAP() +{ + /* === DAP === */ + if ( + // === Core === + PyType_Ready( &DapCoreObjectType ) < 0 || + PyType_Ready( &DapLogitObjectType ) < 0 || #ifdef DAP_SUPPORT_PYTHON_PLUGINS - PyType_Ready(&DapAppContextObjectType) < 0 || + PyType_Ready( &DapAppContextObjectType) < 0 || #endif - // === Network == - PyType_Ready( &DapServerCoreObjectType ) < 0 || - PyType_Ready( &DapEventsObjectType ) < 0 || - PyType_Ready( &DapEventsSocketObjectType ) < 0 || - PyType_Ready( &DapHttpCodeObjectType) < 0 || - PyType_Ready( &DapHttpObjectType) < 0 || - PyType_Ready( &DapEncServerObjectType) < 0 || - PyType_Ready( &DapStreamObjectType) < 0 || - PyType_Ready( &DapStreamCtlObjectType) < 0 || - // === Crypto === - PyType_Ready( &DapCryptoObjectType ) < 0 || - PyType_Ready( &DapCryptoCertObjectType ) < 0 || - PyType_Ready( &DapCryptoKeyTypeObjectType ) < 0 || - PyType_Ready( &DapCryptoDataTypeObjectType ) < 0 || - PyType_Ready( &DapCryproSignTypeObjectType ) < 0 || - PyType_Ready( &DapCryptoSignObjectType ) < 0 || - /* === Cellframe === */ - // ==== Common === - PyType_Ready(&DapAppCliObjectType ) < 0 || - PyType_Ready(&DapChainWalletObjectType) < 0 || - PyType_Ready(&DapJsonRpcRequestObjectType) < 0 || - PyType_Ready(&DapJsonRpcResponseobjectType) < 0 || - // === Chain === - PyType_Ready( &DapChainObjectType ) < 0 || - PyType_Ready( &DapChainTypeObjectType ) < 0 || - PyType_Ready( &DapChainAtomIterObjectType ) < 0 || - PyType_Ready( &DapChainAtomPtrObjectType ) < 0 || - PyType_Ready( &DapChainCellObjectType ) < 0 || - PyType_Ready( &DapChainGdbObjectType) < 0 || - PyType_Ready( &DapChainMempoolObjectType) < 0 || - PyType_Ready( &DapChainCellIdObjectType) < 0 || - PyType_Ready( &DapChainNodeAddrObjectType) < 0 || - PyType_Ready( &DapChainHashSlowObjectType) < 0 || - PyType_Ready( &DapChainHashFastObjectType) < 0 || - PyType_Ready( &DapChainAddrObjectType) < 0 || - PyType_Ready( &DapChainCsObjectType) < 0 || - PyType_Ready( &DapChainLedgerObjectType) < 0 || - // === Chain datum - /// Common - PyType_Ready( &DapChainDatumTypeIdObjectType) < 0 || - PyType_Ready( &DapChainDatumObjectType) < 0 || - PyType_Ready( &DapChainDatumIterObjectType) < 0 || - /// Token - PyType_Ready( &DapChainDatumTokenObjectType) < 0 || - PyType_Ready( &DapChainDatumTokenEmissionObjectType) < 0 || - /// Custom - PyType_Ready( &DapChainDatumCustomObjectType) < 0 || - /// Transaction - PyType_Ready( &DapChainDatumTxObjectType) < 0 || - PyType_Ready( &DapChainTxItemTypeObjectType) < 0 || - PyType_Ready( &DapChainTxTokenExtType) < 0 || - PyType_Ready( &DapChainTxCondTypeObjectType) < 0 || - PyType_Ready( &DapChainTxOutCondObjectType) < 0 || - PyType_Ready( &DapChainTxOutCondSubTypeSrvPayObjectType) < 0 || - PyType_Ready( &DapChainTxOutCondSubTypeSrvStakeObjectType) < 0 || - PyType_Ready( &DapChainTxOutCondSubTypeSrvXchangeObjectType) < 0 || - PyType_Ready( &DapChainTxInObjectType) < 0 || - PyType_Ready( &DapChainTxInCondObjectType) < 0 || - PyType_Ready( &DapChainTxOutObjectType) < 0 || - PyType_Ready( &DapChainTxPkeyObjectType) < 0 || - PyType_Ready( &DapChainTxReceiptObjectType) < 0 || - PyType_Ready( &DapChainTxOutExtObjectType) < 0 || - // === Chain net === - /// Node - PyType_Ready( &DapChainNodeObjectType) < 0 || - PyType_Ready( &DapChainNodeCliObjectType) < 0 || - PyType_Ready( &DapChainNodeClientObjectType) < 0 || - PyType_Ready( &DapChainNodeInfoObjectType) < 0 || - /// Net - PyType_Ready( &DapChainNetObjectType) < 0 || - PyType_Ready( &DapChainNetStateObjectType) < 0 || - /// Srv - PyType_Ready( &DapChainNetSrvObjectType) < 0 || - PyType_Ready( &DapChainNetSrvClientObjectType) < 0 || - PyType_Ready( &DapChainNetSrvOrderDirectionObjectType) < 0 || - PyType_Ready( &DapChainNetSrvOrderObjectType) < 0 || - PyType_Ready( &DapChainNetSrvUidObjectType) < 0 || - PyType_Ready( &DapChainNetSrvPriceObjectType) < 0 || - PyType_Ready( &DapChainNetSrvPriceUnitUidObjectType) < 0 || - // === Chain consensuses - PyType_Ready( &DapChainCsDagPoaObjectType) < 0 - ){ - log_it(L_CRITICAL,"Not all python type objects are initialized"); + // === Crypto === + PyType_Ready( &DapCryptoAlgoObjectType ) < 0 || + PyType_Ready( &DapCryptoCertObjectType ) < 0 || + PyType_Ready( &DapCryptoKeyTypeObjectType ) < 0 || + PyType_Ready( &DapCryptoDataTypeObjectType ) < 0 || + PyType_Ready( &DapCryproSignTypeObjectType ) < 0 || + PyType_Ready( &DapCryptoSignObjectType ) < 0 || + PyType_Ready( &DapChainHashFastObjectType ) < 0 || + // === Network == + PyType_Ready( &DapServerCoreObjectType ) < 0 || + PyType_Ready( &DapEventsObjectType ) < 0 || + PyType_Ready( &DapEventsSocketObjectType ) < 0 || + PyType_Ready( &DapHttpCodeObjectType ) < 0 || + PyType_Ready( &DapHttpObjectType ) < 0 || + PyType_Ready( &DapHttpSimpleObjectType ) < 0 || + PyType_Ready( &DapEncServerObjectType ) < 0 || + PyType_Ready( &DapStreamObjectType ) < 0 || + PyType_Ready( &DapStreamCtlObjectType ) < 0 || + PyType_Ready( &DapJsonRpcRequestObjectType ) < 0 || + PyType_Ready( &DapJsonRpcResponseobjectType ) < 0 + ) { + log_it(L_CRITICAL,"Not all python type objects are initialized for DAP module"); return NULL; } + PyObject *coreModule = PyModule_Create(&DapCorePythonModule); + PyModule_AddObject(coreModule, "logIt", (PyObject *)&DapLogitObjectType); +#ifdef DAP_SUPPORT_PYTHON_PLUGINS + PyModule_AddObject(coreModule, "AppContext", (PyObject*)&DapAppContextObjectType); +#endif - PyObject *module = PyModule_Create(&CellFramePythonModule); - PyModule_AddStringConstant(module, "__author__", "Alexey Stratulat <alexey.stratulat@demlabs.net>"); - PyModule_AddStringConstant(module, "__version__", DAP_VERSION); + PyObject *cryptoModule = PyModule_Create(&DapCryptoPythonModule); + PyModule_AddObject(cryptoModule, "Algo", (PyObject*)&DapCryptoAlgoObjectType); + PyModule_AddObject(cryptoModule, "Cert", (PyObject*)&DapCryptoCertObjectType); + PyModule_AddObject(cryptoModule, "SignType", (PyObject*)&DapCryproSignTypeObjectType); + PyModule_AddObject(cryptoModule, "Sign", (PyObject*)&DapCryptoSignObjectType); + PyModule_AddObject(cryptoModule, "CryptoKeyType", (PyObject*)&DapCryptoKeyTypeObjectType); + PyModule_AddObject(cryptoModule, "CryptoDataType", (PyObject*)&DapCryptoDataTypeObjectType); + PyModule_AddObject(cryptoModule, "HashFast", (PyObject*)&DapChainHashFastObjectType); + + PyObject *netModule = PyModule_Create(&DapNetPythonModule); + PyModule_AddObject(netModule, "ServerCore", (PyObject*)&DapServerCoreObjectType); + PyModule_AddObject(netModule, "Events", (PyObject*)&DapEventsObjectType); + PyModule_AddObject(netModule, "EventsSocket", (PyObject*)&DapEventsSocketObjectType); + PyModule_AddObject(netModule, "Http", (PyObject*)&DapHttpObjectType); + PyModule_AddObject(netModule, "HttpCode", (PyObject*)&DapHttpCodeObjectType); + PyModule_AddObject(netModule, "HttpSimple", (PyObject*)&DapHttpSimpleObjectType); + PyModule_AddObject(netModule, "EncHttp", (PyObject*)&DapEncServerObjectType); + PyModule_AddObject(netModule, "Stream", (PyObject*)&DapStreamObjectType); + PyModule_AddObject(netModule, "StreamCtl", (PyObject*)&DapStreamCtlObjectType); + PyModule_AddObject(netModule, "JSONRPCRequest", (PyObject*)&DapJsonRpcRequestObjectType); + PyModule_AddObject(netModule, "JSONRPCResponse", (PyObject*)&DapJsonRpcResponseobjectType); + + PyObject *dapModule = PyModule_Create(&DapPythonModule); + PyModule_AddStringConstant(dapModule, "__author__", "Alexey Stratulat <alexey.stratulat@demlabs.net>"); + PyModule_AddStringConstant(dapModule, "__version__", DAP_VERSION); + PyModule_AddObject(dapModule, "error", PyErr_NewException("DAP.error", NULL, NULL)); + PyObject *moduleDict = PyImport_GetModuleDict(); + Py_INCREF(coreModule); + PyModule_AddObject(dapModule, "Core", coreModule); + PyDict_SetItemString(moduleDict, "DAP.Core", coreModule); + Py_INCREF(cryptoModule); + PyModule_AddObject(dapModule, "Crypto", cryptoModule); + PyDict_SetItemString(moduleDict, "DAP.Crypto", cryptoModule); + Py_INCREF(netModule); + PyModule_AddObject(dapModule, "Network", netModule); + PyDict_SetItemString(moduleDict, "DAP.Network", netModule); + return dapModule; +} - CellFrame_error = PyErr_NewException("CellFrame.error", NULL, NULL); - PyModule_AddObject(module, "error", CellFrame_error); - - PyModule_AddObject(module, "logIt", (PyObject *)&DapLogitObjectType); - - PyModule_AddObject(module, "Crypto", (PyObject*)&DapCryptoObjectType); - PyModule_AddObject(module, "Cert", (PyObject*)&DapCryptoCertObjectType); - PyModule_AddObject(module, "SignType", (PyObject*)&DapCryproSignTypeObjectType); - PyModule_AddObject(module, "Sign", (PyObject*)&DapCryptoSignObjectType); - - PyModule_AddObject(module, "ServerCore", (PyObject*)&DapServerCoreObjectType); - PyModule_AddObject(module, "Events", (PyObject*)&DapEventsObjectType); - PyModule_AddObject(module, "EventsSocket", (PyObject*)&DapEventsSocketObjectType); - - PyModule_AddObject(module, "CryptoKeyType", (PyObject*)&DapCryptoKeyTypeObjectType); - PyModule_AddObject(module, "CryptoDataType", (PyObject*)&DapCryptoDataTypeObjectType); - - // === Chain === - PyModule_AddObject(module, "Chain", (PyObject*)&DapChainObjectType); - PyModule_AddObject(module, "ChainType", (PyObject*)&DapChainTypeObjectType); - PyModule_AddObject(module, "ChainAtomIter", (PyObject*)&DapChainAtomIterObjectType); - PyModule_AddObject(module, "ChainAtomPtr", (PyObject*)&DapChainAtomPtrObjectType); - PyModule_AddObject(module, "ChainCell", (PyObject*)&DapChainCellObjectType); -// PyModule_AddObject(module, "ChainCommon", (PyObject*)&ChainCommonObject_ChainCommonType); - - PyModule_AddObject(module, "ChainID", (PyObject*)&DapChainIdObjectType); - PyModule_AddObject(module, "ChainCellID", (PyObject*)&DapChainCellIdObjectType); - PyModule_AddObject(module, "ChainNodeAddr", (PyObject*)&DapChainNodeAddrObjectType); - PyModule_AddObject(module, "ChainNetID", (PyObject*)&DapChainNetIdObjectType); - PyModule_AddObject(module, "ChainHashSlow", (PyObject*)&DapChainHashSlowObjectType); - PyModule_AddObject(module, "ChainHashFast", (PyObject*)&DapChainHashFastObjectType); -// PyModule_AddObject(module, "ChainHAshSlowKind", (PyObject*)&DapChainSlowKindObject_DapChainSlowKindType); - PyModule_AddObject(module, "ChainAddr", (PyObject*)&DapChainAddrObjectType); -// - PyModule_AddObject(module, "ChainCS", (PyObject*)&DapChainCsObjectType); - PyModule_AddObject(module, "ChainDatumTypeID", (PyObject*)&DapChainDatumTypeIdObjectType); - PyModule_AddObject(module, "ChainDatum", (PyObject*)&DapChainDatumObjectType); - PyModule_AddObject(module, "ChainDatumIter", (PyObject*)&DapChainDatumIterObjectType); - PyModule_AddObject(module, "ChainDatumToken", (PyObject*)&DapChainDatumTokenObjectType); - PyModule_AddObject(module, "ChainDatumTokenExt", (PyObject*)&DapChainTxTokenExtType); - PyModule_AddObject(module, "ChainDatumTokenEmisson", (PyObject*)&DapChainDatumTokenEmissionObjectType); - PyModule_AddObject(module, "ChainTxItemType", (PyObject*)&DapChainTxItemTypeObjectType); - PyModule_AddObject(module, "ChainTxCondType", (PyObject*)&DapChainTxCondTypeObjectType); - PyModule_AddObject(module, "ChainDatumTx", (PyObject*)&DapChainDatumTxObjectType); - PyModule_AddObject(module, "ChainTxOutCond", (PyObject*)&DapChainTxOutCondObjectType); - PyModule_AddObject(module, "ChainTxOutCondSubtypeSrvPay", (PyObject*)&DapChainTxOutCondSubTypeSrvPayObjectType); - PyModule_AddObject(module, "ChainTxOutCondSubtypeSrvStake", (PyObject*)&DapChainTxOutCondSubTypeSrvStakeObjectType); - PyModule_AddObject(module, "ChainTxOutCondSubtypeSrvXchange", (PyObject*)&DapChainTxOutCondSubTypeSrvXchangeObjectType); - PyModule_AddObject(module, "ChainLedger", (PyObject*)&DapChainLedgerObjectType); - PyModule_AddObject(module, "ChainTxIn", (PyObject*)&DapChainTxInObjectType); - PyModule_AddObject(module, "ChainTxInCond", (PyObject*)&DapChainTxInCondObjectType); - PyModule_AddObject(module, "ChainTxOut", (PyObject*)&DapChainTxOutObjectType); - PyModule_AddObject(module, "ChainTxPkey", (PyObject*)&DapChainTxPkeyObjectType); - PyModule_AddObject(module, "ChainTxReceipt", (PyObject*)&DapChainTxReceiptObjectType); - PyModule_AddObject(module, "ChainTxOutExt", (PyObject*)&DapChainTxOutExtObjectType); - // ============= +PyMODINIT_FUNC PyInit_libCellFrame(void) +{ + /* === Cellframe === */ + if ( + // ==== Common === + PyType_Ready( &DapAppCliObjectType ) < 0 || + // === Chain === + PyType_Ready( &DapChainObjectType ) < 0 || + PyType_Ready( &DapChainIdObjectType ) < 0 || + PyType_Ready( &DapChainTypeObjectType ) < 0 || + PyType_Ready( &DapChainAtomIterObjectType ) < 0 || + PyType_Ready( &DapChainAtomPtrObjectType ) < 0 || + PyType_Ready( &DapChainCellObjectType ) < 0 || + PyType_Ready( &DapChainGdbObjectType ) < 0 || + PyType_Ready( &DapChainMempoolObjectType ) < 0 || + PyType_Ready( &DapChainCellIdObjectType ) < 0 || + PyType_Ready( &DapChainNodeAddrObjectType ) < 0 || + PyType_Ready( &DapChainHashSlowKindObjectType ) < 0 || + PyType_Ready( &DapChainHashSlowObjectType ) < 0 || + PyType_Ready( &DapChainAddrObjectType ) < 0 || + PyType_Ready( &DapChainCsObjectType ) < 0 || + PyType_Ready( &DapChainLedgerObjectType ) < 0 || + PyType_Ready( &DapChainWalletObjectType ) < 0 || + // === Chain datum + /// Common + PyType_Ready( &DapChainDatumTypeIdObjectType ) < 0 || + PyType_Ready( &DapChainDatumObjectType ) < 0 || + PyType_Ready( &DapChainDatumIterObjectType ) < 0 || + /// Token + PyType_Ready( &DapChainDatumTokenObjectType ) < 0 || + PyType_Ready( &DapChainDatumTokenEmissionObjectType ) < 0 || + /// Custom + PyType_Ready( &DapChainDatumCustomObjectType ) < 0 || + /// Transaction + PyType_Ready( &DapChainDatumTxObjectType ) < 0 || + PyType_Ready( &DapChainTxItemTypeObjectType ) < 0 || + PyType_Ready( &DapChainTxTokenExtType ) < 0 || + PyType_Ready( &DapChainTxCondTypeObjectType ) < 0 || + PyType_Ready( &DapChainTxOutCondObjectType ) < 0 || + PyType_Ready( &DapChainTxOutCondSubTypeSrvPayObjectType ) < 0 || + PyType_Ready( &DapChainTxOutCondSubTypeSrvStakeObjectType ) < 0 || + PyType_Ready( &DapChainTxOutCondSubTypeSrvXchangeObjectType ) < 0 || + PyType_Ready( &DapChainTxInObjectType ) < 0 || + PyType_Ready( &DapChainTxInCondObjectType ) < 0 || + PyType_Ready( &DapChainTxOutObjectType ) < 0 || + PyType_Ready( &DapChainTxPkeyObjectType ) < 0 || + PyType_Ready( &DapChainTxReceiptObjectType ) < 0 || + PyType_Ready( &DapChainTxOutExtObjectType ) < 0 || + // === Chain net === + /// Node + PyType_Ready( &DapChainNodeObjectType ) < 0 || + PyType_Ready( &DapChainNodeCliObjectType ) < 0 || + PyType_Ready( &DapChainNodeClientObjectType ) < 0 || + PyType_Ready( &DapChainNodeInfoObjectType ) < 0 || + /// Net + PyType_Ready( &DapChainNetObjectType ) < 0 || + PyType_Ready( &DapChainNetIdObjectType ) < 0 || + PyType_Ready( &DapChainNetStateObjectType ) < 0 || + /// Srv + PyType_Ready( &DapChainNetSrvObjectType ) < 0 || + PyType_Ready( &DapChainNetSrvClientObjectType ) < 0 || + PyType_Ready( &DapChainNetSrvOrderDirectionObjectType ) < 0 || + PyType_Ready( &DapChainNetSrvOrderObjectType ) < 0 || + PyType_Ready( &DapChainNetSrvUidObjectType ) < 0 || + PyType_Ready( &DapChainNetSrvPriceObjectType ) < 0 || + PyType_Ready( &DapChainNetSrvPriceUnitUidObjectType ) < 0 || + // === Chain consensuses + PyType_Ready( &DapChainCsDagPoaObjectType ) < 0 + ) { + log_it(L_CRITICAL,"Not all python type objects are initialized for CellFrame module"); + return NULL; + } + + PyObject *chainModule = PyModule_Create(&CellframeChainPythonModule); + PyModule_AddObject(chainModule, "Chain", (PyObject*)&DapChainObjectType); + PyModule_AddObject(chainModule, "ChainType", (PyObject*)&DapChainTypeObjectType); + PyModule_AddObject(chainModule, "ChainAtomIter", (PyObject*)&DapChainAtomIterObjectType); + PyModule_AddObject(chainModule, "ChainAtomPtr", (PyObject*)&DapChainAtomPtrObjectType); + PyModule_AddObject(chainModule, "ChainCell", (PyObject*)&DapChainCellObjectType); + PyModule_AddObject(chainModule, "ChainID", (PyObject*)&DapChainIdObjectType); + PyModule_AddObject(chainModule, "ChainCellID", (PyObject*)&DapChainCellIdObjectType); + PyModule_AddObject(chainModule, "ChainHashSlow", (PyObject*)&DapChainHashSlowObjectType); + PyModule_AddObject(chainModule, "ChainHashSlowKind", (PyObject*)&DapChainHashSlowKindObjectType); + PyModule_AddObject(chainModule, "ChainAddr", (PyObject*)&DapChainAddrObjectType); + PyModule_AddObject(chainModule, "ChainCS", (PyObject*)&DapChainCsObjectType); + PyModule_AddObject(chainModule, "GDB", (PyObject*)&DapChainGdbObjectType); + PyModule_AddObject(chainModule, "Wallet", (PyObject*)&DapChainWalletObjectType); + PyModule_AddObject(chainModule, "Mempool", (PyObject*)&DapChainMempoolObjectType); + PyModule_AddObject(chainModule, "Ledger", (PyObject*)&DapChainLedgerObjectType); + + PyObject *commonModule = PyModule_Create(&CellframeCommonPythonModule); + PyModule_AddObject(commonModule, "DatumTypeID", (PyObject*)&DapChainDatumTypeIdObjectType); + PyModule_AddObject(commonModule, "Datum", (PyObject*)&DapChainDatumObjectType); + PyModule_AddObject(commonModule, "DatumIter", (PyObject*)&DapChainDatumIterObjectType); + PyModule_AddObject(commonModule, "DatumToken", (PyObject*)&DapChainDatumTokenObjectType); + PyModule_AddObject(commonModule, "DatumTokenExt", (PyObject*)&DapChainTxTokenExtType); + PyModule_AddObject(commonModule, "DatumEmisson", (PyObject*)&DapChainDatumTokenEmissionObjectType); + PyModule_AddObject(commonModule, "TxItemType", (PyObject*)&DapChainTxItemTypeObjectType); + PyModule_AddObject(commonModule, "TxCondType", (PyObject*)&DapChainTxCondTypeObjectType); + PyModule_AddObject(commonModule, "DatumTx", (PyObject*)&DapChainDatumTxObjectType); + PyModule_AddObject(commonModule, "TxOutCond", (PyObject*)&DapChainTxOutCondObjectType); + PyModule_AddObject(commonModule, "TxOutCondSubtypeSrvPay", (PyObject*)&DapChainTxOutCondSubTypeSrvPayObjectType); + PyModule_AddObject(commonModule, "TxOutCondSubtypeSrvStake", (PyObject*)&DapChainTxOutCondSubTypeSrvStakeObjectType); + PyModule_AddObject(commonModule, "TxOutCondSubtypeSrvXchange", (PyObject*)&DapChainTxOutCondSubTypeSrvXchangeObjectType); + PyModule_AddObject(commonModule, "TxIn", (PyObject*)&DapChainTxInObjectType); + PyModule_AddObject(commonModule, "TxInCond", (PyObject*)&DapChainTxInCondObjectType); + PyModule_AddObject(commonModule, "TxOut", (PyObject*)&DapChainTxOutObjectType); + PyModule_AddObject(commonModule, "TxPkey", (PyObject*)&DapChainTxPkeyObjectType); + PyModule_AddObject(commonModule, "TxReceipt", (PyObject*)&DapChainTxReceiptObjectType); + PyModule_AddObject(commonModule, "TxOutExt", (PyObject*)&DapChainTxOutExtObjectType); + PyModule_AddObject(commonModule, "CustomDatum", (PyObject*)&DapChainDatumCustomObjectType); + + PyObject *netModule = PyModule_Create(&CellframeNetworkPythonModule); + // === Chain node === + PyModule_AddObject(netModule, "Node", (PyObject*)&DapChainNodeObjectType); + PyModule_AddObject(netModule, "NodeInfo", (PyObject*)&DapChainNodeInfoObjectType); + PyModule_AddObject(netModule, "NodeClient", (PyObject*)&DapChainNodeClientObjectType); + PyModule_AddObject(netModule, "NodeAddr", (PyObject*)&DapChainNodeAddrObjectType); // === Chain net === - PyModule_AddObject(module, "ChainNet", (PyObject*)&DapChainNetObjectType); - PyModule_AddObject(module, "ChainNodeClient", (PyObject*)&DapChainNodeClientObjectType); - PyModule_AddObject(module, "ChainNodeInfo", (PyObject*)&DapChainNodeInfoObjectType); - PyModule_AddObject(module, "ChainNetNode", (PyObject*)&DapChainNodeObjectType); - PyModule_AddObject(module, "ChainNetState", (PyObject*)&DapChainNetStateObjectType); - // ============= + PyModule_AddObject(netModule, "Net", (PyObject*)&DapChainNetObjectType); + PyModule_AddObject(netModule, "NetID", (PyObject*)&DapChainNetIdObjectType); + PyModule_AddObject(netModule, "NetState", (PyObject*)&DapChainNetStateObjectType); // === Chain net srv === - PyModule_AddObject(module, "ChainNetSrv", (PyObject*)&DapChainNetSrvObjectType); - PyModule_AddObject(module, "ChainNetSrvClient", (PyObject*)&DapChainNetSrvClientObjectType); - PyModule_AddObject(module, "ChainNetSrvDatum", (PyObject*)&DapChainDatumCustomObjectType); - PyModule_AddObject(module , "ChainNetSrvPrice", (PyObject*)&DapChainNetSrvPriceObjectType); - PyModule_AddObject(module, "ChainNetSrvOrder", (PyObject*)&DapChainNetSrvOrderObjectType); - PyModule_AddObject(module, "ChainNetSrvOrderDirection", (PyObject*)&DapChainNetSrvOrderDirectionObjectType); - PyModule_AddObject(module, "ChainNetSrvUID", (PyObject*)&DapChainNetSrvUidObjectType); - PyModule_AddObject(module, "ChainNetSrvPriceUnitUID", (PyObject*)&DapChainNetSrvPriceUnitUidObjectType); - // ============= + PyModule_AddObject(netModule, "Service", (PyObject*)&DapChainNetSrvObjectType); + PyModule_AddObject(netModule, "ServiceClient", (PyObject*)&DapChainNetSrvClientObjectType); + PyModule_AddObject(netModule, "ServicePrice", (PyObject*)&DapChainNetSrvPriceObjectType); + PyModule_AddObject(netModule, "ServiceOrder", (PyObject*)&DapChainNetSrvOrderObjectType); + PyModule_AddObject(netModule, "ServiceOrderDirection", (PyObject*)&DapChainNetSrvOrderDirectionObjectType); + PyModule_AddObject(netModule, "ServiceUID", (PyObject*)&DapChainNetSrvUidObjectType); + PyModule_AddObject(netModule, "ServicePriceUnitUID", (PyObject*)&DapChainNetSrvPriceUnitUidObjectType); + PyObject *csModule = PyModule_Create(&CellframeConsensusPythonModule); // === Chain cs dag poa - PyModule_AddObject(module, "ChainCsDagPoa", (PyObject*)&DapChainCsDagPoaObjectType); - // ============= - - PyModule_AddObject(module, "ChainGDB", (PyObject*)&DapChainGdbObjectType); - PyModule_AddObject(module, "ChainWallet", (PyObject*)&DapChainWalletObjectType); - - PyModule_AddObject(module, "Http", (PyObject*)&DapHttpObjectType); - PyModule_AddObject(module, "HttpSimple", (PyObject*)&DapHTTPSimple_DapHTTPSimpleType); - PyModule_AddObject(module, "HttpCode", (PyObject*)&DapHttpCodeObjectType); - PyModule_AddObject(module, "EncHttp", (PyObject*)&DapEncServerObjectType); - PyModule_AddObject(module, "Stream", (PyObject*)&DapStreamObjectType); - PyModule_AddObject(module, "StreamCtl", (PyObject*)&DapStreamCtlObjectType); - PyModule_AddObject(module, "Mempool", (PyObject*)&DapChainMempoolObjectType); - - // ============== - PyModule_AddObject(module, "AppCli", (PyObject*)&DapAppCliObjectType); - PyModule_AddObject(module, "AppCliServer", (PyObject*)&DapChainNodeCliObjectType); - #ifdef DAP_SUPPORT_PYTHON_PLUGINS - PyModule_AddObject(module, "AppContext", (PyObject*)&DapAppContextObjectType); - #endif - PyModule_AddObject(module, "JSONRPCRequest", (PyObject*)&DapJsonRpcRequestObjectType); - PyModule_AddObject(module, "JSONRPCResponse", (PyObject*)&DapJsonRpcResponseobjectType); + PyModule_AddObject(csModule, "DagPoa", (PyObject*)&DapChainCsDagPoaObjectType); - return module; + PyObject *cellframeModule = PyModule_Create(&CellFramePythonModule); + PyModule_AddStringConstant(cellframeModule, "__author__", "Alexey Stratulat <alexey.stratulat@demlabs.net>"); + PyModule_AddStringConstant(cellframeModule, "__version__", DAP_VERSION); + CellFrame_error = PyErr_NewException("CellFrame.error", NULL, NULL); + PyModule_AddObject(cellframeModule, "error", CellFrame_error); + PyModule_AddObject(cellframeModule, "AppCli", (PyObject*)&DapAppCliObjectType); + PyModule_AddObject(cellframeModule, "AppCliServer", (PyObject*)&DapChainNodeCliObjectType); + PyObject *moduleDict = PyImport_GetModuleDict(); + Py_INCREF(chainModule); + PyModule_AddObject(cellframeModule, "Chain", chainModule); + PyDict_SetItemString(moduleDict, "CellFrame.Chain", chainModule); + Py_INCREF(commonModule); + PyModule_AddObject(cellframeModule, "Common", commonModule); + PyDict_SetItemString(moduleDict, "CellFrame.Common", commonModule); + Py_INCREF(netModule); + PyModule_AddObject(cellframeModule, "Network", netModule); + PyDict_SetItemString(moduleDict, "CellFrame.Network", netModule); + Py_INCREF(csModule); + PyModule_AddObject(cellframeModule, "Consensus", csModule); + PyDict_SetItemString(moduleDict, "CellFrame.Consensus", csModule); + return cellframeModule; } void deinit_modules(void){ @@ -617,7 +767,7 @@ void deinit_modules(void){ dap_common_deinit(); } -PyObject *python_cellframe_deinit(PyObject *self, PyObject *args){ +PyObject *python_dap_deinit(PyObject *self, PyObject *args){ deinit_modules(); return PyLong_FromLong(0); } diff --git a/CellFrame/wrapping_dap_stream.c b/CellFrame/wrapping_dap_stream.c index 230e60a7b3301f27f3a9f7b182fbd3b9057d46ee..b258ec94eea7bd29f262b5a3e3430f818f33d636 100644 --- a/CellFrame/wrapping_dap_stream.c +++ b/CellFrame/wrapping_dap_stream.c @@ -1,5 +1,53 @@ #include "wrapping_dap_stream.h" +static PyMethodDef DapStreamMethods[] = { + {"addProcHttp", dap_stream_add_proc_http_py, METH_VARARGS | METH_STATIC, ""}, + {NULL, NULL, 0, NULL} +}; + +PyTypeObject DapStreamObjectType = { + PyVarObject_HEAD_INIT(NULL, 0) + "DAP.Net.Stream", /* tp_name */ + sizeof(PyDapStreamObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 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 | + Py_TPFLAGS_BASETYPE, /* tp_flags */ + "Dap stream object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + DapStreamMethods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + PyType_GenericNew, /* tp_new */ +}; + + PyObject *dap_stream_add_proc_http_py(PyObject *self, PyObject *args){ PyObject *obj_server; const char *STREAM_URL; diff --git a/CellFrame/wrapping_dap_stream_ctl.c b/CellFrame/wrapping_dap_stream_ctl.c index 2d3fdc1d0525ea1b9113fb7dd0c50693fa91884a..d825af90fca949b82e0dc62159f4cfe434f51c33 100644 --- a/CellFrame/wrapping_dap_stream_ctl.c +++ b/CellFrame/wrapping_dap_stream_ctl.c @@ -2,6 +2,53 @@ #define LOG_TAG "wrapping_dap_stream_ctl" +static PyMethodDef DapStreamCtlMethods[] = { + {"addProcHttp", dap_stream_ctl_add_proc_py, METH_VARARGS | METH_STATIC, ""}, + {NULL, NULL, 0, NULL} +}; + +PyTypeObject DapStreamCtlObjectType = { + PyVarObject_HEAD_INIT(NULL, 0) + "DAP.Net.StreamCtl", /* tp_name */ + sizeof(PyDapStreamCtlObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 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 | + Py_TPFLAGS_BASETYPE, /* tp_flags */ + "Dap stream ctl object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + DapStreamCtlMethods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + PyType_GenericNew, /* tp_new */ +}; + PyObject *dap_stream_ctl_add_proc_py(PyObject *self, PyObject *args){ PyObject *obj_server; @@ -13,5 +60,6 @@ PyObject *dap_stream_ctl_add_proc_py(PyObject *self, PyObject *args){ } int dap_stream_ctl_init_py(uint32_t size){ - return dap_stream_ctl_init(size); + UNUSED(size); + return dap_stream_ctl_init(); } diff --git a/dists/examples/plugins/demoServiceClient/demoServiceClient.py b/dists/examples/plugins/demoServiceClient/demoServiceClient.py index e46df06b2bbf54a6bf4c130baeb7a7c0b430d7a2..767861d9e8f2664ca70e4c7a2be55ca24549f8be 100644 --- a/dists/examples/plugins/demoServiceClient/demoServiceClient.py +++ b/dists/examples/plugins/demoServiceClient/demoServiceClient.py @@ -1,49 +1,52 @@ -from API_CellFrame import ChainNetSrvClient, logIt, NOTICE, WARNING, ChainNet, ChainNetSrvUID, Cert, ChainTxReceipt, ChainHashFast +from DAP.Core import logIt +from DAP.Crypto import Cert, HashFast +from CellFrame.Common import TxReceipt +from CellFrame.Network import Net, ServiceUID, ServiceClient def callback_connected(serviceClient, arg): - logIt(NOTICE, "Python client connected") - ch_uid = ChainNetSrvUID(123) - net = ChainNet.byName("private") + logIt.notice("Python client connected") + ch_uid = ServiceUID(123) + net = Net.byName("private") #serviceClient.write(ch_uid, "Greetings from test client".encode('utf-8')) #serviceClient.check(net, ch_uid, "Any data".encode('utf-8')) - condHash = ChainHashFast.fromString("0xAF14CB70DB383A4FB840F8BD531A7B58C300B65AD3B3F418DC0713B0F6648643"); + condHash = HashFast.fromString("0xAF14CB70DB383A4FB840F8BD531A7B58C300B65AD3B3F418DC0713B0F6648643"); serviceClient.request(net, ch_uid, condHash) def callback_disconnected(serviceClient, arg): - logIt(NOTICE, "Python client disconnected") + logIt.notice("Python client disconnected") def callback_deleted(serviceClient, arg): - logIt(NOTICE, "Python client deleted") + logIt.notice("Python client deleted") def callback_check(serviceClient, arg): - logIt(NOTICE, "Python client successfully checked the service") + logIt.notice("Python client successfully checked the service") def callback_sign(serviceClient, txCondRec, arg): - logIt(NOTICE, "Siging receipt by python client") + logIt.notice("Siging receipt by python client") signCert = Cert.load("svc_client") return txCondRec.sign(signCert) def callback_success(serviceClient, txCondHash, arg): - logIt(NOTICE, "Python client successfully requested the service") + logIt.notice("Python client successfully requested the service") def callback_error(serviceClient, errorNum, arg): - logIt(WARNING, f"Python client got error {errorNum:#x}") + logIt.warning(f"Python client got error {errorNum:#x}") def callback_data(serviceClient, data, arg): - logIt(NOTICE, f"Python client custom data read back \'{data.decode('utf-8')}\'") + logIt.notice(f"Python client custom data read back \'{data.decode('utf-8')}\'") def init(): - logIt(NOTICE, "Init demoClient") + logIt.notice("Init demoClient") # Command for working cmd client # AppCliServer.cmdItemCreate("myClient", clientCMD, "Command for working cmd", - net = ChainNet.byName("private") - client = ChainNetSrvClient(net, "127.0.0.1", 8089, callback_connected, - callback_disconnected, - callback_deleted, - callback_check, - callback_sign, - callback_success, - callback_error, - callback_data, - 0) + net = Net.byName("private") + client = ServiceClient(net, "127.0.0.1", 8089, callback_connected, + callback_disconnected, + callback_deleted, + callback_check, + callback_sign, + callback_success, + callback_error, + callback_data, + 0) return 0 diff --git a/dists/examples/plugins/demoServiceServer/demoServiceServer.py b/dists/examples/plugins/demoServiceServer/demoServiceServer.py index 67ba1f8786e78687b28072aa45b3b0c577ccbdd0..03f41a29c037dad6d9627e630eded3565ccf5411 100644 --- a/dists/examples/plugins/demoServiceServer/demoServiceServer.py +++ b/dists/examples/plugins/demoServiceServer/demoServiceServer.py @@ -1,29 +1,30 @@ -from API_CellFrame import logItInfo, logItNotice, logItWarning, ChainNet, ChainNetSrv, ChainNetSrvUID +from DAP.Core import logIt +from CellFrame.Network import Net, Service, ServiceUID def requested(srv, usage_id, client_remote, data): - logItInfo("[server] func requested") + logIt.info("[server] func requested") return 0 def response_success(srv, usage_id, client_remote, data): - logItNotice("[server] func response success") + logIt.notice("[server] func response success") return 0 def response_error(srv, usage_id, client_remote, data): - logItWarning("[server] func response error") + logIt.warning("[server] func response error") def next_success(srv, usage_id, client_remote, data): - logItNotice("[server] func next success") + logIt.notice("[server] func next success") return 0 def custom_data(srv, usage_id, client_remote, data): - logItNotice("[server] Input data: " + data.decode("utf-8")) + logIt.notice("[server] Input data: " + data.decode("utf-8")) return data def init(): - logItNotice("Init demoServer") - ch_uid = ChainNetSrvUID(123) - srv_object = ChainNetSrv( + logIt.notice("Init demoServer") + ch_uid = ServiceUID(123) + srv_object = Service( ch_uid, "py_service", requested, diff --git a/include/python-cellframe.h b/include/python-cellframe.h index 5d9d954cc2b9040f0707b31313b2161bac17d06a..37ee615a451addbba0359fc5a3297d6a26759d6f 100644 --- a/include/python-cellframe.h +++ b/include/python-cellframe.h @@ -102,45 +102,12 @@ BOOL WINAPI consoleHandler(DWORD); void sigfunc(int sig); #endif +PyObject *python_dap_init(PyObject *self, PyObject *args); PyObject *python_cellframe_init(PyObject *self, PyObject *args); void deinit_modules(void); -PyObject *python_cellframe_deinit(PyObject *self, PyObject *args); - -static PyMethodDef CellFramePythonMethods[] = { - {"init", python_cellframe_init, METH_VARARGS, "Initialization of the Python Cellframe library."}, - {"deinit", python_cellframe_deinit, METH_VARARGS, "Deinitialization of the Python Cellframe library."}, - {"setLogLevel", (PyCFunction)dap_set_log_level, METH_VARARGS, "Setting the logging level."}, - {"logItDebug", (PyCFunction)dap_log_it_debug, METH_VARARGS, "Log a message with the DEBUG level."}, - {"logItInfo", (PyCFunction)dap_log_it_info, METH_VARARGS, "Log a message with the INFO level."}, - {"logItNotice", (PyCFunction)dap_log_it_notice, METH_VARARGS, "Log a message with the NOTICE level."}, - {"logItMessage", (PyCFunction)dap_log_it_message, METH_VARARGS, "Log a message with the MESSAGE level."}, - {"logItDap", (PyCFunction)dap_log_it_dap, METH_VARARGS, "Log a message with the DAP level."}, - {"logItWarning", (PyCFunction)dap_log_it_warning, METH_VARARGS, "Log a message with the WARNING level WARNING."}, - {"logItAtt", (PyCFunction)dap_log_it_att, METH_VARARGS, "Log a message with the ATT level."}, - {"logItError", (PyCFunction)dap_log_it_error, METH_VARARGS, "Log a message with the ERROR level."}, - {"logItCritical", (PyCFunction)dap_log_it_critical, METH_VARARGS, "Log a message with the CRITICAL level."}, - - {"configGetItem", (PyCFunction)py_m_dap_config_get_item, METH_VARARGS, "Get an item from a configuration."}, - {"configGetItemDefault", (PyCFunction)py_m_dap_config_get_item_default, METH_VARARGS, "Get an item from a configuration with a default value."}, - {NULL, NULL, 0, NULL} -}; - -static char CellFramePythonModuleDoc[]= -"CellFrame SDK.Python v"DAP_VERSION" welcomes you!" -""; -static struct PyModuleDef CellFramePythonModule = { - PyModuleDef_HEAD_INIT, - "CellFrame", /* name of module */ - CellFramePythonModuleDoc, /* module documentation, may be NULL */ - -1, /* size of per-interpreter state of the module, - or -1 if the module keeps state in global variables. */ - CellFramePythonMethods, - NULL, - NULL, - NULL, - NULL -}; +PyObject *python_dap_deinit(PyObject *self, PyObject *args); +PyMODINIT_FUNC PyInit_libDAP(); PyMODINIT_FUNC PyInit_libCellFrame(void); diff --git a/include/wrapping_dap_stream.h b/include/wrapping_dap_stream.h index f0726aa2586d1c16953ce10524fd7a2a9c8a4525..8e21a469431316d4f5947de83733be0a75443ba5 100644 --- a/include/wrapping_dap_stream.h +++ b/include/wrapping_dap_stream.h @@ -11,53 +11,8 @@ typedef struct PyDapStream{ PyObject_HEAD }PyDapStreamObject; -PyObject *dap_stream_add_proc_http_py(PyObject *self, PyObject *args); - -static PyMethodDef DapStreamMethods[] = { - {"addProcHttp", dap_stream_add_proc_http_py, METH_VARARGS | METH_STATIC, ""}, - {NULL, NULL, 0, NULL} -}; +extern PyTypeObject DapStreamObjectType; -static PyTypeObject DapStreamObjectType = { - PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.DapStream", /* tp_name */ - sizeof(PyDapStreamObject), /* tp_basicsize */ - 0, /* tp_itemsize */ - 0, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_reserved */ - 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 | - Py_TPFLAGS_BASETYPE, /* tp_flags */ - "Dap stream object", /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - DapStreamMethods, /* tp_methods */ - 0, /* tp_members */ - 0, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - 0, /* tp_init */ - 0, /* tp_alloc */ - PyType_GenericNew, /* tp_new */ -}; +PyObject *dap_stream_add_proc_http_py(PyObject *self, PyObject *args); #endif // _WRAPPING_DAP_STREAM_ diff --git a/include/wrapping_dap_stream_ctl.h b/include/wrapping_dap_stream_ctl.h index d3ea475bfc9cd52aeb645e9f90e78440870df1a2..82a8d23a13e345cf07f1401aac3d28801b7ad5d3 100644 --- a/include/wrapping_dap_stream_ctl.h +++ b/include/wrapping_dap_stream_ctl.h @@ -12,53 +12,8 @@ typedef struct PyDapStreamCtl{ PyObject_HEAD }PyDapStreamCtlObject; +extern PyTypeObject DapStreamCtlObjectType; + PyObject *dap_stream_ctl_add_proc_py(PyObject *self, PyObject *args); int dap_stream_ctl_init_py(uint32_t size); -static PyMethodDef DapStreamCtlMethods[] = { - {"addProcHttp", dap_stream_ctl_add_proc_py, METH_VARARGS | METH_STATIC, ""}, - {NULL, NULL, 0, NULL} -}; - -static PyTypeObject DapStreamCtlObjectType = { - PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.DapStreamCtl", /* tp_name */ - sizeof(PyDapStreamCtlObject), /* tp_basicsize */ - 0, /* tp_itemsize */ - 0, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_reserved */ - 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 | - Py_TPFLAGS_BASETYPE, /* tp_flags */ - "Dap stream ctl object", /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - DapStreamCtlMethods, /* tp_methods */ - 0, /* tp_members */ - 0, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - 0, /* tp_init */ - 0, /* tp_alloc */ - PyType_GenericNew, /* tp_new */ -}; - diff --git a/modules/cellframe-sdk/common/include/wrapping_dap_chain_common.h b/modules/cellframe-sdk/common/include/wrapping_dap_chain_common.h index adfd99b2dbc699b2832f1b720d77d7a683555acc..8cc93c1f4c45d42de4569e5af4a1e353404e55b7 100644 --- a/modules/cellframe-sdk/common/include/wrapping_dap_chain_common.h +++ b/modules/cellframe-sdk/common/include/wrapping_dap_chain_common.h @@ -158,7 +158,7 @@ typedef struct PyDapChainHashSlowKind{ dap_chain_hash_slow_kind_t *slow_kind; }PyDapChainHashSlowKindObject; -extern PyTypeObject DapChainSlowKindObject_DapChainSlowKindType; +extern PyTypeObject DapChainHashSlowKindObjectType; /*=================*/ diff --git a/modules/cellframe-sdk/common/src/wrapping_dap_chain_common.c b/modules/cellframe-sdk/common/src/wrapping_dap_chain_common.c index d5ccb81a52f87d7d76d77865b16c4804ac87d646..2dc4d7cc4171d7aed9caf2eb993e4df1a1fd85ab 100644 --- a/modules/cellframe-sdk/common/src/wrapping_dap_chain_common.c +++ b/modules/cellframe-sdk/common/src/wrapping_dap_chain_common.c @@ -49,7 +49,7 @@ PyTypeObject DapChainHashSlowObjectType = { }; /* Hash slow kind */ -PyTypeObject DapChainSlowKindObject_DapChainSlowKindType = { +PyTypeObject DapChainHashSlowKindObjectType = { PyVarObject_HEAD_INIT(NULL, 0) "CellFrame.ChainSlowKind" , /* tp_name */ sizeof(PyDapChainHashSlowKindObject), /* tp_basicsize */ diff --git a/modules/cellframe-sdk/wallet/src/dap_chain_wallet_python.c b/modules/cellframe-sdk/wallet/src/dap_chain_wallet_python.c index c9db20f65e628c5458732207ec99a5435f8fe74e..5290b5ceefff7c80d9cf0e01055ee54ace3ee303 100644 --- a/modules/cellframe-sdk/wallet/src/dap_chain_wallet_python.c +++ b/modules/cellframe-sdk/wallet/src/dap_chain_wallet_python.c @@ -201,7 +201,7 @@ PyObject *dap_chain_wallet_get_key_py(PyObject *self, PyObject *argv){ uint32_t key_idx; if (!PyArg_ParseTuple(argv, "I", &key_idx)) return NULL; - PyObject *obj_key = _PyObject_New(&PyCryptoKeyObject_PyCryptoKeyType); + PyObject *obj_key = _PyObject_New(&PyCryptoKeyObjectType); PyObject_Dir(obj_key); ((PyCryptoKeyObject*)obj_key)->key = dap_chain_wallet_get_key( ((PyDapChainWalletObject*)self)->wallet, diff --git a/modules/dap-sdk/core/src/libdap-python.c b/modules/dap-sdk/core/src/libdap-python.c index dcf2ef5d299baeed6b0b36cbe7051be8f268f3ed..ae15428f48907ab5cbd3631a3459cf664ed754d4 100644 --- a/modules/dap-sdk/core/src/libdap-python.c +++ b/modules/dap-sdk/core/src/libdap-python.c @@ -8,7 +8,7 @@ PyMethodDef DapCoreMethods[] = { PyTypeObject DapCoreObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "Dap", /* tp_name */ + "DAP.Core", /* tp_name */ sizeof(PyDapObject), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ diff --git a/modules/dap-sdk/crypto/include/libdap-crypto-python.h b/modules/dap-sdk/crypto/include/libdap-crypto-python.h index 5dbea93c4fb51ebc35dd76e83fee19e6f86d1d15..a55ac423e5615510d034ac079903f11a63081e95 100644 --- a/modules/dap-sdk/crypto/include/libdap-crypto-python.h +++ b/modules/dap-sdk/crypto/include/libdap-crypto-python.h @@ -42,15 +42,15 @@ extern "C" { #endif -typedef struct PyCrypto{ +typedef struct PyCryptoAlgo{ PyObject_HEAD -}PyCryptoObject; +}PyCryptoAlgoObject; int dap_crypto_init(void); void dap_crypto_deinit(void); -extern PyTypeObject DapCryptoObjectType; +extern PyTypeObject DapCryptoAlgoObjectType; #ifdef __cplusplus } diff --git a/modules/dap-sdk/crypto/include/libdap_crypto_key_python.h b/modules/dap-sdk/crypto/include/libdap_crypto_key_python.h index e96c5988f84600f4fa0ad618eb74d14b612be7fe..87e007153e546bf3fdaf4918db69ee64fcbf1d33 100644 --- a/modules/dap-sdk/crypto/include/libdap_crypto_key_python.h +++ b/modules/dap-sdk/crypto/include/libdap_crypto_key_python.h @@ -14,7 +14,7 @@ typedef struct PyCryptoKey{ void PyCryptoKeyObject_dealloc(PyCryptoKeyObject *cryptoObject); -extern PyTypeObject PyCryptoKeyObject_PyCryptoKeyType; +extern PyTypeObject PyCryptoKeyObjectType; #ifdef __cplusplus } diff --git a/modules/dap-sdk/crypto/src/libdap-crypto-python.c b/modules/dap-sdk/crypto/src/libdap-crypto-python.c index 76e2f49f1c0ad0300582c9b2fcd42fad22dde341..9482aef723d0ac42db1c2cbcad5ea9665324e471 100644 --- a/modules/dap-sdk/crypto/src/libdap-crypto-python.c +++ b/modules/dap-sdk/crypto/src/libdap-crypto-python.c @@ -56,10 +56,10 @@ PyMethodDef g_crypto_methods_py[] = { {NULL, NULL, 0, NULL} }; -PyTypeObject DapCryptoObjectType = { +PyTypeObject DapCryptoAlgoObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.Crypto", /* tp_name */ - sizeof(PyCryptoObject), /* tp_basicsize */ + "DAP.Crypto.Algo", /* tp_name */ + sizeof(PyCryptoAlgoObject), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ 0, /* tp_print */ @@ -78,7 +78,7 @@ PyTypeObject DapCryptoObjectType = { 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */ - "Crypto objects", /* tp_doc */ + "Crypto algorithms", /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ @@ -107,7 +107,7 @@ int dap_crypto_init(void){ log_it(L_CRITICAL,"Can't init encryption key module"); return -2; } - PyCryptoKeyObject_PyCryptoKeyType.tp_new = PyType_GenericNew; + PyCryptoKeyObjectType.tp_new = PyType_GenericNew; return 0; } diff --git a/modules/dap-sdk/crypto/src/libdap_crypto_data_type.c b/modules/dap-sdk/crypto/src/libdap_crypto_data_type.c index 52d6e84c9301875ce087a555b3497be37a724c19..6e903b118c8fd3a2cab0dfe9fc491a82cc62a755 100644 --- a/modules/dap-sdk/crypto/src/libdap_crypto_data_type.c +++ b/modules/dap-sdk/crypto/src/libdap_crypto_data_type.c @@ -20,7 +20,7 @@ PyMethodDef PyCryptoDataTypeObjectMethods[] = { PyTypeObject DapCryptoDataTypeObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.CryptoDataType", /* tp_name */ + "DAP.Crypto.DataType", /* tp_name */ sizeof(PyCryptoDataTypeObjecy), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ diff --git a/modules/dap-sdk/crypto/src/libdap_crypto_key_python.c b/modules/dap-sdk/crypto/src/libdap_crypto_key_python.c index f96bd6e76cd7dd0d5e52860d5656e950140bfa2b..4656d1bdd4723dd87cb0c15db975365738bd70a9 100644 --- a/modules/dap-sdk/crypto/src/libdap_crypto_key_python.c +++ b/modules/dap-sdk/crypto/src/libdap_crypto_key_python.c @@ -1,8 +1,8 @@ #include "libdap_crypto_key_python.h" -PyTypeObject PyCryptoKeyObject_PyCryptoKeyType = { +PyTypeObject PyCryptoKeyObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.Crypto.Key", /* tp_name */ + "DAP.Crypto.Key", /* tp_name */ sizeof(PyCryptoKeyObject), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)PyCryptoKeyObject_dealloc, /* tp_dealloc */ diff --git a/modules/dap-sdk/crypto/src/libdap_crypto_key_type_python.c b/modules/dap-sdk/crypto/src/libdap_crypto_key_type_python.c index 38cbca63debf5625c8f523edbfdef19ff76b2d52..21f8994834da04bd0480ce9c7ad166e3ffcea11e 100644 --- a/modules/dap-sdk/crypto/src/libdap_crypto_key_type_python.c +++ b/modules/dap-sdk/crypto/src/libdap_crypto_key_type_python.c @@ -26,7 +26,7 @@ PyMethodDef PyCryptoKeyTypeObjectMethods[] = { PyTypeObject DapCryptoKeyTypeObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.CryptoKeyType", /* tp_name */ + "DAP.Crypto.KeyType", /* tp_name */ sizeof(PyCryptoKeyTypeObject), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ diff --git a/modules/dap-sdk/crypto/src/wrapping_cert.c b/modules/dap-sdk/crypto/src/wrapping_cert.c index d01f3013c9c92dfc30c59e1a47f5791444d8999c..76de17ad9060cb844a45eda5afc3afad661c3b81 100644 --- a/modules/dap-sdk/crypto/src/wrapping_cert.c +++ b/modules/dap-sdk/crypto/src/wrapping_cert.c @@ -48,7 +48,7 @@ PyMethodDef g_crypto_cert_methods_py[] = { PyTypeObject DapCryptoCertObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.Cert", /* tp_name */ + "DAP.Crypto.Cert", /* tp_name */ sizeof(PyCryptoCertObject), /* tp_basicsize */ 0, /* tp_itemsize */ dap_cert_delete_py, /* tp_dealloc */ diff --git a/modules/dap-sdk/crypto/src/wrapping_dap_enc_key.c b/modules/dap-sdk/crypto/src/wrapping_dap_enc_key.c index e754657e0d2e1a071bcda6f0df1498c3d86525d0..6ed032bcf8f4d64f5416e01061e4364857c2299f 100644 --- a/modules/dap-sdk/crypto/src/wrapping_dap_enc_key.c +++ b/modules/dap-sdk/crypto/src/wrapping_dap_enc_key.c @@ -66,7 +66,7 @@ PyObject* dap_enc_key_new_py(PyObject *self, PyObject *args){ return PyLong_FromLong(-1); } dap_enc_key_t *new_key = dap_enc_key_new(type_key); - PyObject *obj = _PyObject_New(&PyCryptoKeyObject_PyCryptoKeyType); + PyObject *obj = _PyObject_New(&PyCryptoKeyObjectType); ((PyCryptoKeyObject*)obj)->key = new_key; return Py_BuildValue("O", obj); } @@ -117,7 +117,7 @@ PyObject *dap_enc_key_new_generate_py(PyObject *self, PyObject *args){ } } } - PyCryptoKeyObject *obj_key = PyObject_New(PyCryptoKeyObject, &PyCryptoKeyObject_PyCryptoKeyType); + PyCryptoKeyObject *obj_key = PyObject_New(PyCryptoKeyObject, &PyCryptoKeyObjectType); PyObject_Dir((PyObject*)obj_key); obj_key->key = dap_enc_key_new_generate(in_type_key, l_kex_buf, l_kex_buf_size, l_seed, l_seed_size, in_key_size); diff --git a/modules/dap-sdk/crypto/src/wrapping_dap_hash.c b/modules/dap-sdk/crypto/src/wrapping_dap_hash.c index 56bf23a18afeff470b5db5b7259f1e6fb0cc129f..a9261f2547dd0afd1f22479edf2b43b6027b73e5 100644 --- a/modules/dap-sdk/crypto/src/wrapping_dap_hash.c +++ b/modules/dap-sdk/crypto/src/wrapping_dap_hash.c @@ -9,7 +9,7 @@ PyMethodDef DapHashTypeMethods[] = { PyTypeObject DapHashTypeObject_DapChainHashTypeObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.HashType", /* tp_name */ + "DAP.Crypto.HashType", /* tp_name */ sizeof(PyDapHashTypeObject), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ @@ -74,7 +74,7 @@ PyMethodDef DapHashFastMethods[] = { PyTypeObject DapChainHashFastObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.HashFast", /* tp_name */ + "DAP.Crypto.HashFast", /* tp_name */ sizeof(PyDapHashFastObject), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ diff --git a/modules/dap-sdk/crypto/src/wrapping_dap_sign.c b/modules/dap-sdk/crypto/src/wrapping_dap_sign.c index c9d9a3165f09470b5b3020a61e8e0b88294b3d3a..eb08103eceb46d3e02b05e6095adde369d300e38 100644 --- a/modules/dap-sdk/crypto/src/wrapping_dap_sign.c +++ b/modules/dap-sdk/crypto/src/wrapping_dap_sign.c @@ -3,7 +3,7 @@ /* Sign type*/ PyTypeObject DapCryproSignTypeObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.SignType", /* tp_name */ + "DAP.Crypto.SignType", /* tp_name */ sizeof(PyDapSignTypeObject),/* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ @@ -58,7 +58,7 @@ PyGetSetDef DapSignObjectGetsSetsDef[] = { PyTypeObject DapCryptoSignObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "DAP.Sign", /* tp_name */ + "DAP.Crypto.Sign", /* tp_name */ sizeof(PyDapSignObject),/* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ @@ -125,4 +125,4 @@ PyObject *wrapping_dap_sign_get_pkey_hash(PyObject *self, void *closure){ PyObject *wrapping_dap_sign_get_size(PyObject *self, void *closure){ (void)closure; return Py_BuildValue("I", ((PyDapSignObject*)self)->sign->header.sign_size); -} \ No newline at end of file +} diff --git a/modules/dap-sdk/net/core/src/dap_events_python.c b/modules/dap-sdk/net/core/src/dap_events_python.c index 8630a94338efb11fbc5bdcf34e08576168469de6..f88ce82d6feadcb5cb845e44ce247a93a5b17067 100644 --- a/modules/dap-sdk/net/core/src/dap_events_python.c +++ b/modules/dap-sdk/net/core/src/dap_events_python.c @@ -10,7 +10,7 @@ PyMethodDef PyDapEventsObject_methods[] = { PyTypeObject DapEventsObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.ServerCore.DapEvents", /* tp_name */ + "DAP.Net.Events", /* tp_name */ sizeof(PyDapEventsObject), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)PyDapEventsObject_dealloc, /* tp_dealloc */ diff --git a/modules/dap-sdk/net/core/src/dap_events_socket_python.c b/modules/dap-sdk/net/core/src/dap_events_socket_python.c index 6e951e7eca102add8edce96f14a396f9a5effe81..8a5b7a34c6d3f13d7ccedd8e64dac50fe760509b 100644 --- a/modules/dap-sdk/net/core/src/dap_events_socket_python.c +++ b/modules/dap-sdk/net/core/src/dap_events_socket_python.c @@ -16,7 +16,7 @@ PyMethodDef PyDapEventsObjectSocket_methods[] = { PyTypeObject DapEventsSocketObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.ServerCore.DapEventsSocket", /* tp_name */ + "DAP.Net.EventsSocket", /* tp_name */ sizeof(PyDapEventsSocketObject), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ diff --git a/modules/dap-sdk/net/core/src/libdap-server-core-python.c b/modules/dap-sdk/net/core/src/libdap-server-core-python.c index 197d789256cbbbbfd30aa8200fb131b42074ecb7..69fb2387fdc099691574f2e000638275244743f0 100644 --- a/modules/dap-sdk/net/core/src/libdap-server-core-python.c +++ b/modules/dap-sdk/net/core/src/libdap-server-core-python.c @@ -10,7 +10,7 @@ PyMethodDef ServerCorePythonMethods[] = { PyTypeObject DapServerCoreObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.ServerCore", /* tp_name */ + "DAP.Net.ServerCore", /* tp_name */ sizeof(PyServerCoreObject), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ diff --git a/modules/dap-sdk/net/server/enc/src/wrapping_dap_enc_http.c b/modules/dap-sdk/net/server/enc/src/wrapping_dap_enc_http.c index a0283257730ec070ab225f47dbc139121c46fc95..565b55d22b945e70835a61555a9a998d683fbc60 100644 --- a/modules/dap-sdk/net/server/enc/src/wrapping_dap_enc_http.c +++ b/modules/dap-sdk/net/server/enc/src/wrapping_dap_enc_http.c @@ -19,7 +19,7 @@ PyGetSetDef PyDapEncServerGetSet[] = { PyTypeObject DapEncServerObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.EncHttp", /* tp_name */ + "DAP.Net.EncHttp", /* tp_name */ sizeof(PyDapEncServerObject), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)enc_http_delegate_delete_py, /* tp_dealloc */ diff --git a/modules/dap-sdk/net/server/http/include/wrapping_dap_http_simple.h b/modules/dap-sdk/net/server/http/include/wrapping_dap_http_simple.h index db731e13ae401b68d56e11a22509ce26cd14a852..32244b28794506af3d5586151af5c847bf67be8d 100644 --- a/modules/dap-sdk/net/server/http/include/wrapping_dap_http_simple.h +++ b/modules/dap-sdk/net/server/http/include/wrapping_dap_http_simple.h @@ -31,7 +31,7 @@ PyObject *dap_http_simple_request_py(PyDapHttpSimpleObject *self, void *clouser) PyObject *dap_http_simple_url_path_py(PyDapHttpSimpleObject *self, void *clouser); PyObject *dap_http_simple_query_py(PyDapHttpSimpleObject *self, void *clouser); -extern PyTypeObject DapHTTPSimple_DapHTTPSimpleType; +extern PyTypeObject DapHttpSimpleObjectType; #ifdef __cplusplus } diff --git a/modules/dap-sdk/net/server/http/src/wrapping_dap_http_simple.c b/modules/dap-sdk/net/server/http/src/wrapping_dap_http_simple.c index b37b3ce205b74d571f08c0b4a6dd82e11d188382..8ec552820f90a131acb7d8b1324075a39256197e 100644 --- a/modules/dap-sdk/net/server/http/src/wrapping_dap_http_simple.c +++ b/modules/dap-sdk/net/server/http/src/wrapping_dap_http_simple.c @@ -20,9 +20,9 @@ PyGetSetDef PyDapHttpSimpleGetSetDef[] = { {NULL} }; -PyTypeObject DapHTTPSimple_DapHTTPSimpleType = { +PyTypeObject DapHttpSimpleObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.HttpSimple", /* tp_name */ + "DAP.Met.HttpSimple", /* tp_name */ sizeof(PyDapHttpSimpleObject), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ @@ -88,7 +88,7 @@ void wrapping_dap_http_simple_callback(dap_http_simple_t *sh, void *obj){ PyGILState_STATE gstate; gstate = PyGILState_Ensure(); PyObject *obj_func = _w_simple_proc_find(sh->http_client->url_path); - PyDapHttpSimpleObject *obj_http_simple = PyObject_NEW(PyDapHttpSimpleObject, &DapHTTPSimple_DapHTTPSimpleType); + PyDapHttpSimpleObject *obj_http_simple = PyObject_NEW(PyDapHttpSimpleObject, &DapHttpSimpleObjectType); PyObject *obj_http_status_code = _PyObject_New(&DapHttpCodeObjectType); ((PyDapHttpSimpleObject*)obj_http_simple)->sh = sh; PyObject_Dir((PyObject*)obj_http_simple); diff --git a/modules/dap-sdk/net/server/http/src/wrapping_http.c b/modules/dap-sdk/net/server/http/src/wrapping_http.c index 7210ba78f65022fbf540ea98d9abadbac636d43c..e47e579b4ed33dbadc9c107913790a039566c4ec 100644 --- a/modules/dap-sdk/net/server/http/src/wrapping_http.c +++ b/modules/dap-sdk/net/server/http/src/wrapping_http.c @@ -7,7 +7,7 @@ PyMethodDef DapHttpMethods[] = { PyTypeObject DapHttpObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.DapHttp", /* tp_name */ + "DAP.Net.Http", /* tp_name */ sizeof(PyDapHttpObject), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ diff --git a/modules/dap-sdk/net/server/http/src/wrapping_http_status_code.c b/modules/dap-sdk/net/server/http/src/wrapping_http_status_code.c index 456a28b63c653d78e19e46dd3530eecc2834dd7c..01482d462623cb560dd7ac541c114cadcacba788 100644 --- a/modules/dap-sdk/net/server/http/src/wrapping_http_status_code.c +++ b/modules/dap-sdk/net/server/http/src/wrapping_http_status_code.c @@ -11,7 +11,7 @@ PyMethodDef PyDapHttpCodeMethods[] = { PyTypeObject DapHttpCodeObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.HTTPCode", /* tp_name */ + "DAP.Net.HttpCode", /* tp_name */ sizeof(PyHttpStatusCodeObject), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ diff --git a/modules/dap-sdk/net/server/json_rpc/src/wrapping_json_rpc_request.c b/modules/dap-sdk/net/server/json_rpc/src/wrapping_json_rpc_request.c index c2deb5c51ee42ae259ad406d608eea32faf31ceb..3f278f1e8d5f3cc176a5e24d5540c2b026da1082 100644 --- a/modules/dap-sdk/net/server/json_rpc/src/wrapping_json_rpc_request.c +++ b/modules/dap-sdk/net/server/json_rpc/src/wrapping_json_rpc_request.c @@ -9,7 +9,7 @@ PyMethodDef PyDapJSONRPCRequestMethods[] = { PyTypeObject DapJsonRpcRequestObjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.JSONRPCRequest", /* tp_name */ + "DAP.Net.JSONRPCRequest", /* tp_name */ sizeof(PyDAPJsonRPCRequestObject), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ diff --git a/modules/dap-sdk/net/server/json_rpc/src/wrapping_json_rpc_response.c b/modules/dap-sdk/net/server/json_rpc/src/wrapping_json_rpc_response.c index f3084f82cc269f849591f5bc2d15d1bb941f4797..527bf4c1b30e82b03344ea9b3474ec227f8d3c83 100644 --- a/modules/dap-sdk/net/server/json_rpc/src/wrapping_json_rpc_response.c +++ b/modules/dap-sdk/net/server/json_rpc/src/wrapping_json_rpc_response.c @@ -15,7 +15,7 @@ PyGetSetDef PyDapJSONRPCResponseGetsSets[] = { PyTypeObject DapJsonRpcResponseobjectType = { PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.JSONRPCResponse", /* tp_name */ + "DAP.Net.JSONRPCResponse", /* tp_name */ sizeof(PyDapJSONRPCResponseObject), /* tp_basicsize */ 0, /* tp_itemsize */ 0, /* tp_dealloc */ diff --git a/modules/plugins/CMakeLists.txt b/modules/plugins/CMakeLists.txt index ff988cc8512076bb30409cb71236f2c8fffc069f..b39a6fd8498b513e2483c5aaf431761dc52669ad 100644 --- a/modules/plugins/CMakeLists.txt +++ b/modules/plugins/CMakeLists.txt @@ -24,7 +24,7 @@ add_library(${PROJECT_NAME} STATIC ${DAP_PLUGINS_PYTHON_SRCS} ${DAP_PLUGINS_PYTH target_link_libraries(${PROJECT_NAME}) -target_link_libraries(${PROJECT_NAME} dap_core API_CellFrame) +target_link_libraries(${PROJECT_NAME} dap_core CellFrame) target_include_directories(${PROJECT_NAME} PUBLIC include/ ) diff --git a/modules/plugins/include/dap_plugins_python_app_context.h b/modules/plugins/include/dap_plugins_python_app_context.h index 6c0c29226fbbd9abefae4b557a9adc686e10f0fb..d7a4c79116cb56de0d0cf3205f72e4b80603ea99 100644 --- a/modules/plugins/include/dap_plugins_python_app_context.h +++ b/modules/plugins/include/dap_plugins_python_app_context.h @@ -23,54 +23,7 @@ typedef struct PyDapAppContext{ PyObject *dap_plugins_python_app_context_get_server(PyObject *self, PyObject *args); PyObject *dap_plugins_python_app_context_get_http(PyObject *self, PyObject *args); -static PyMethodDef DapAppContextMethods[] = { - {"getServer", (PyCFunction)dap_plugins_python_app_context_get_server, METH_VARARGS | METH_STATIC, "Get main server from node"}, - {"getHttp", (PyCFunction)dap_plugins_python_app_context_get_http, METH_NOARGS | METH_STATIC, "Get main server from node"}, - {NULL, NULL, 0, NULL} -}; - - -static PyTypeObject DapAppContextObjectType = { - PyVarObject_HEAD_INIT(NULL, 0) - "CellFrame.AppContext", /* tp_name */ - sizeof(PyDapAppContextObject), /* tp_basicsize */ - 0, /* tp_itemsize */ - 0, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_reserved */ - 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 | - Py_TPFLAGS_BASETYPE, /* tp_flags */ - "Dap App Context object", /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - DapAppContextMethods, /* tp_methods */ - 0, /* tp_members */ - 0, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - 0, /* tp_init */ - 0, /* tp_alloc */ - PyType_GenericNew, /* tp_new */ -}; +extern PyTypeObject DapAppContextObjectType; #ifdef __cplusplus } diff --git a/modules/plugins/src/dap_chain_plugins.c b/modules/plugins/src/dap_chain_plugins.c index a8250dfe29c04809a64cbb346821605587fd0ab3..cda0ab5156985b92ff1a9988d5e8ae18e872939c 100644 --- a/modules/plugins/src/dap_chain_plugins.c +++ b/modules/plugins/src/dap_chain_plugins.c @@ -33,7 +33,8 @@ int dap_chain_plugins_init(dap_config_t *a_config){ log_it(L_ERROR, "Can't find \"%s\" directory", s_plugins_root_path); return -1; } - PyImport_AppendInittab("API_CellFrame", PyInit_libCellFrame); + PyImport_AppendInittab("DAP", PyInit_libDAP); + PyImport_AppendInittab("CellFrame", PyInit_libCellFrame); Py_Initialize(); PyEval_InitThreads(); PyObject *l_sys_module = PyImport_ImportModule("sys"); diff --git a/modules/plugins/src/dap_plugins_python_app_context.c b/modules/plugins/src/dap_plugins_python_app_context.c index 6e1a6ec108a10e7ba4ad0fd9ef405598de619b36..dcec1ca4a545a44d8467a91346257a77d19e225e 100644 --- a/modules/plugins/src/dap_plugins_python_app_context.c +++ b/modules/plugins/src/dap_plugins_python_app_context.c @@ -2,6 +2,55 @@ dap_plugins_python_app_context_t *s_app_context = NULL; +static PyMethodDef DapAppContextMethods[] = { + {"getServer", (PyCFunction)dap_plugins_python_app_context_get_server, METH_VARARGS | METH_STATIC, "Get main server from node"}, + {"getHttp", (PyCFunction)dap_plugins_python_app_context_get_http, METH_NOARGS | METH_STATIC, "Get main server from node"}, + {NULL, NULL, 0, NULL} +}; + + +PyTypeObject DapAppContextObjectType = { + PyVarObject_HEAD_INIT(NULL, 0) + "DAP.AppContext", /* tp_name */ + sizeof(PyDapAppContextObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 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 | + Py_TPFLAGS_BASETYPE, /* tp_flags */ + "Dap App Context object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + DapAppContextMethods, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + PyType_GenericNew, /* tp_new */ +}; + int dap_plugins_python_app_content_init(dap_server_t *a_server){ s_app_context = DAP_NEW(dap_plugins_python_app_context_t); s_app_context->server = a_server; diff --git a/setup.py b/setup.py index 22c4345897c5dd81e967861aa35da21076b7d210..2b560b06b5b6b26b9953421c353df4979c9cc61f 100755 --- a/setup.py +++ b/setup.py @@ -75,6 +75,7 @@ setup( author='Demlabs (2007-2021)', license="GNU GPLv3", packages=['CellFrame'], + ext_package='CellFrame' ext_modules=[CMakeExtension('CellFrame/libCellFrame')], # add custom build_ext command cmdclass={