diff --git a/CMakeLists.txt b/CMakeLists.txt index c08d21b3b403b06c447b8096ff373da139b12b02..f8f5de1c836c75968e98d9e64eeff72028fc06d6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,7 +40,9 @@ add_subdirectory(modules/dap-sdk/net/server/http) add_subdirectory(modules/dap-sdk/net/server/json_rpc) add_subdirectory(modules/cellframe-sdk/common) add_subdirectory(modules/cellframe-sdk/net) +add_subdirectory(modules/cellframe-sdk/net/srv) add_subdirectory(modules/cellframe-sdk/gdb) +add_subdirectory(modules/cellframe-sdk/global-db) add_subdirectory(modules/cellframe-sdk/chain) add_subdirectory(modules/cellframe-sdk/app-cli) add_subdirectory(modules/cellframe-sdk/wallet) @@ -50,6 +52,7 @@ add_subdirectory(modules/cellframe-sdk/type/dag) target_compile_options(dap_python_module PRIVATE "-fpic" ) target_compile_options(dap_crypto_python_module PRIVATE "-fpic" ) target_compile_options(dap_chain_net_python_module PRIVATE "-fpic") + target_compile_options(dap_chain_net_srv_python_module PRIVATE "-fpic") target_compile_options(dap_chain_gdb_python_module PRIVATE "-fpic") target_compile_options(dap_chain_python_module PRIVATE "-fpic") target_compile_options(dap_app_cli_python_module PRIVATE "-fpic") @@ -179,7 +182,9 @@ target_link_libraries(${PROJECT_NAME} cellframe-sdk dap_python_module dap_server_http_python_module dap_chain_python_module dap_chain_net_python_module + dap_chain_net_srv_python_module dap_chain_gdb_python_module + dap_chain_global_db_python_module dap_app_cli_python_module dap_chain_wallet_python_module dap_server_json_rpc_python_module diff --git a/modules/cellframe-sdk/global-db/CMakeLists.txt b/modules/cellframe-sdk/global-db/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..e1369be6fc6f5156f33c4d1a442b681123761df2 --- /dev/null +++ b/modules/cellframe-sdk/global-db/CMakeLists.txt @@ -0,0 +1,227 @@ +project(dap_chain_global_db_python_module C) +cmake_minimum_required(VERSION 3.0) + +set(CMAKE_VERBOSE_MAKEFILE ON) +set(CMAKE_COLOR_MAKEFILE ON) +set(CMAKE_C_STANDARD 11) +add_definitions("-fpic") +add_definitions ("-DNODE_NETNAME=\"cellframe\"") +add_definitions("-DDAP_LOG_MT") + +if(UNIX) + add_definitions("-DDAP_OS_UNIX") +endif() + +if(NOT (${SUBMODULES_NO_BUILD} MATCHES ON)) + set (SUBMODULES_NO_BUILD ON) + if (NOT (TARGET dap_core)) + add_subdirectory(libdap) + target_compile_options( + dap_core PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_crypto)) + add_subdirectory(libdap-crypto) + target_compile_options( + dap_crypto PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain)) + add_subdirectory(libdap-chain) + target_compile_options( + dap_chain PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain_crypto)) + add_subdirectory(libdap-chain-crypto) + target_compile_options( + dap_chain_crypto PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain_mempool)) + add_subdirectory(libdap-chain-mempool) + target_compile_options( + dap_chain_mempool PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain_net)) + add_subdirectory(libdap-chain-net) + target_compile_options( + dap_chain_net PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_server_core)) + add_subdirectory(libdap-server-core) + target_compile_options( + dap_server_core PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain_global_db)) + add_subdirectory(libdap-chain-global-db) + target_compile_options( + dap_chain_global_db PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_client)) + add_subdirectory(libdap-client) + target_compile_options( + dap_client PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET libdap-server)) + add_subdirectory(libdap-server) +# target_compile_options( +# libdap-server PRIVATE +# "-fpic" +# ) + endif() + if (NOT (TARGET dap_stream)) + add_subdirectory(libdap-stream) + target_compile_options( + dap_stream PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_stream_ch)) + add_subdirectory(libdap-stream-ch) + target_compile_options( + dap_stream_ch PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_stream_ch_chain)) + add_subdirectory(libdap-stream-ch-chain) + target_compile_options( + dap_stream_ch_chain PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_stream_ch_chain_net)) + add_subdirectory(libdap-stream-ch-chain-net) + target_compile_options( + dap_stream_ch_chain_net PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_udp_server)) + add_subdirectory(libdap-server-udp) + target_compile_options( + dap_udp_server PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain_net_srv)) + add_subdirectory(libdap-chain-net-srv) + target_compile_options( + dap_chain_net_srv PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain_wallet)) + add_subdirectory(libdap-chain-wallet) + target_compile_options( + dap_chain_wallet PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_server_http_db)) + add_subdirectory(libdap-server-http-db) + target_compile_options( + dap_server_http_db PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_server_http_db_auth)) + add_subdirectory(libdap-server-http-db-auth) + target_compile_options( + dap_server_http_db_auth PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain_gdb)) + add_subdirectory(libdap-chain-gdb) + target_compile_options( + dap_chain_gdb PRIVATE + "-fpic" + ) + endif() + #if (NOT (TARGET dap_python_module)) + # add_subdirectory(libdap-python) + # target_compile_options( + # dap_python_module PRIVATE + # "-fpic" + # ) + #endif() + #if (NOT (TARGET dap_crypto_python_module)) + # add_subdirectory(libdap-crypto-python) + # target_compile_options( + # dap_crypto_python_module PRIVATE + # "-fpic" + # ) + #endif() + if (NOT (TARGET dap_chain_net_srv_vpn)) + add_subdirectory(libdap-chain-net-srv-vpn) + target_compile_options( + dap_chain_net_srv_vpn PRIVATE + "-fpic" + ) + endif() +endif() +#add_definitions("-DDAP_APP_NAME=\"TestPRJ\" -DSYSTEM_CONFIGS_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\"") + +file(GLOB CHAIN_GLOBAL_DB_PYTHON_SRCS src/*.c) +file(GLOB CHAIN_GLOBAL_DB_PYTHON_HEADERS include/*.h) + +set(Python_ADDITIONAL_VERSIONS 3.7) +find_package (PythonLibs REQUIRED) +include_directories(${PYTHON_INCLUDE_DIR} include/) + +add_library(${PROJECT_NAME} STATIC ${CHAIN_GLOBAL_DB_PYTHON_SRCS} ${CHAIN_GLOBAL_DB_PYTHON_HEADERS}) + +target_link_libraries(${PROJECT_NAME}) + +target_include_directories(${PROJECT_NAME} PUBLIC include/ ) + +#target_compile_options( +# dap_core PRIVATE +# "-fpic" +#) +#target_compile_options( +# dap_crypto PRIVATE +# "-fpic" +#) + + +target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_crypto dap_server_core dap_chain_net dap_chain_global_db dap_chain_common_python_module) +#target_link_libraries(${PROJECT_NAME} dap_core dap_crypto dap_chain dap_chain_global_db dap_chain_crypto dap_chain_mempool +# +# ) #dap_chain_crypto dap_chain_mempool dap_chain_global_db ) +#target_link_libraries(${PROJECT_NAME} dap_core dap_crypto) + +target_include_directories(${PROJECT_NAME} PUBLIC include/ ) + +#if(BUILD_DAP_CRYPTO_PYTHON_TESTS) +# add_subdirectory(test) +# file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test/test_b58.py +# DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/test/) +# file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test/test_b64.py +# DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/test/) +# file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test/test_iaes256_cbc.py +# DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/test/) +# file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test/test_iaes256_cbc.py +# DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/test/) +# file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/test/test_oaes.py +# DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/test/) + + +#endif() + diff --git a/modules/cellframe-sdk/global-db/include/wrapping_dap_chain_global_db.h b/modules/cellframe-sdk/global-db/include/wrapping_dap_chain_global_db.h new file mode 100644 index 0000000000000000000000000000000000000000..9b5e82e0f3f4195cdc97a052ab5d8d8cca933d05 --- /dev/null +++ b/modules/cellframe-sdk/global-db/include/wrapping_dap_chain_global_db.h @@ -0,0 +1,64 @@ +#pragma once + +#include "Python.h" +#include "dap_chain_global_db.h" +#include "dap_strfuncs.h" + +typedef struct PyDapChainGlobalDB{ + PyObject_HEAD +}PyDapChainGlobalDBObject; + +PyObject *wrapping_dap_chain_global_db_gr_get(PyObject *self, PyObject *args); +PyObject *wrapping_dap_chain_global_db_gr_set(PyObject *self, PyObject *args); +PyObject *wrapping_dap_chain_global_db_gr_del(PyObject *self, PyObject *args); +PyObject *wrapping_dap_chain_global_db_gr_pin(PyObject *self, PyObject *args); + +static PyMethodDef DapChainGlobalDB_Methods[] = { + {"get", (PyCFunction)wrapping_dap_chain_global_db_gr_get, METH_VARARGS | METH_STATIC, ""}, + {"set", (PyCFunction)wrapping_dap_chain_global_db_gr_set, METH_VARARGS | METH_STATIC, ""}, + {"delete", (PyCFunction)wrapping_dap_chain_global_db_gr_del, METH_VARARGS | METH_STATIC, ""}, + {"pin", (PyCFunction)wrapping_dap_chain_global_db_gr_pin, METH_VARARGS | METH_STATIC, ""}, + {NULL, NULL, 0, NULL} +}; + +static PyTypeObject DapChainGlobalDBObject_DapChainDlobalDBType = { + PyVarObject_HEAD_INIT(NULL, 0) + "CellFrame.ChainGlobalDB", /* tp_name */ + sizeof(PyDapChainGlobalDBObject), /* 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 */ + "Chain global db object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + DapChainGlobalDB_Methods, /* 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/global-db/src/wrapping_dap_chain_global_db.c b/modules/cellframe-sdk/global-db/src/wrapping_dap_chain_global_db.c new file mode 100644 index 0000000000000000000000000000000000000000..b6cdac709947800521a78617e62bdc2093f49519 --- /dev/null +++ b/modules/cellframe-sdk/global-db/src/wrapping_dap_chain_global_db.c @@ -0,0 +1,57 @@ +#include "wrapping_dap_chain_global_db.h" + +PyObject *wrapping_dap_chain_global_db_gr_get(PyObject *self, PyObject *args){ + (void)self; + const char *l_key; + const char *l_group; + if (!PyArg_ParseTuple(args, "ss", &l_key, &l_group)){ + return NULL; + } + size_t l_size_data = 0; + void *l_bytes = dap_chain_global_db_gr_get(l_key, &l_size_data, l_group); + if (l_size_data == 0) + return Py_None; + PyObject *l_obj_bytes = PyBytes_FromStringAndSize(l_bytes, (Py_ssize_t)l_size_data); + return l_obj_bytes; +} +PyObject *wrapping_dap_chain_global_db_gr_set(PyObject *self, PyObject *args){ + (void)self; + char *l_key; + char *l_group; + PyObject *obj_byte; + if (!PyArg_ParseTuple(args, "ssO", &l_key, &l_group, &obj_byte)){ + return NULL; + } + if (!PyBytes_Check(obj_byte)){ + return NULL; + } + char *l_key_dup = dap_strdup(l_key); + void *l_bytes = PyBytes_AsString(obj_byte); + size_t l_bytes_size = PyBytes_Size(obj_byte); + void *l_bytes_dup = dap_strdup(l_bytes); + bool ret = dap_chain_global_db_gr_set(l_key_dup, l_bytes_dup, l_bytes_size, l_group); + if (ret == true){ + return Py_True; + } else { + return Py_False; + } +} +PyObject *wrapping_dap_chain_global_db_gr_del(PyObject *self, PyObject *args){ + (void)self; + const char *l_key; + const char *l_group; + if (!PyArg_ParseTuple(args, "ss",&l_key, &l_group)){ + return NULL; + } + char *l_key_dup = dap_strdup(l_key); + char *l_group_dup = dap_strdup(l_group); + bool ret = dap_chain_global_db_gr_del(l_key_dup, l_group_dup); + if (ret == true) + return Py_True; + else + return Py_False; +} + +PyObject *wrapping_dap_chain_global_db_gr_pin(PyObject *self, PyObject *args){ + return Py_None; +} diff --git a/modules/cellframe-sdk/net/include/libdap_chain_net_python.h b/modules/cellframe-sdk/net/include/libdap_chain_net_python.h index 36c62ceb9d7c44e047199db6bf0ae28af9cd22ea..04c9b11560c98f8949602b2b50b2146250fd72a7 100644 --- a/modules/cellframe-sdk/net/include/libdap_chain_net_python.h +++ b/modules/cellframe-sdk/net/include/libdap_chain_net_python.h @@ -76,8 +76,6 @@ PyObject *dap_chain_net_links_connect_py(PyObject *self, PyObject *args); PyObject *dap_chain_net_get_chain_by_chain_type_py(PyObject *self, PyObject *args); PyObject *dap_chain_net_get_ledger_py(PyObject *self, PyObject *args); PyObject *dap_chain_net_get_name_py(PyObject *self, PyObject *args); -PyObject *dap_chain_net_get_tx_by_hash_py(PyObject *self, PyObject *args); -PyObject *dap_chain_net_python_get_id(PyObject *self, void *closure); static PyMethodDef DapChainNetMethods[] = { {"loadAll", dap_chain_net_load_all_py, METH_NOARGS | METH_STATIC, ""}, @@ -102,12 +100,13 @@ static PyMethodDef DapChainNetMethods[] = { {"getChainByChainType", dap_chain_net_get_chain_by_chain_type_py, METH_VARARGS, ""}, {"getLedger", dap_chain_net_get_ledger_py, METH_NOARGS, ""}, {"getName", dap_chain_net_get_name_py, METH_NOARGS, ""}, - {"getTxByHash", dap_chain_net_get_tx_by_hash_py, METH_VARARGS, ""}, {NULL, NULL, 0, NULL} }; +PyObject *dap_chain_net_python_get_id(PyObject *self, void *closure); + static PyGetSetDef DapChainNetGetsSetsDef[] = { - {"id", (getter)dap_chain_net_python_get_id, NULL, NULL, NULL}, + {"id", (getter)dap_chain_net_python_get_id, NULL, NULL, NULL}, {NULL} }; @@ -140,9 +139,9 @@ static PyTypeObject DapChainNetObject_DapChainNetObjectType = { 0, /* tp_weaklistoffset */ 0, /* tp_iter */ 0, /* tp_iternext */ - DapChainNetMethods, /* tp_methods */ - 0, /* tp_members */ - DapChainNetGetsSetsDef, /* tp_getset */ + DapChainNetMethods, /* tp_methods */ + 0, /* tp_members */ + DapChainNetGetsSetsDef, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ @@ -153,6 +152,10 @@ static PyTypeObject DapChainNetObject_DapChainNetObjectType = { PyType_GenericNew, /* tp_new */ }; +static bool PyDapChainNet_Check(PyObject *a_obj){ + return PyObject_TypeCheck(a_obj, &DapChainNetObject_DapChainNetObjectType); +} + #ifdef __cplusplus } #endif diff --git a/modules/cellframe-sdk/net/src/libdap_chain_net_python.c b/modules/cellframe-sdk/net/src/libdap_chain_net_python.c index 5d1a0c8d97d7bd6137adcefe3ee77344c6d7d6f2..3f83e3165f5da189eae0cb5fa547189740ddcfe4 100644 --- a/modules/cellframe-sdk/net/src/libdap_chain_net_python.c +++ b/modules/cellframe-sdk/net/src/libdap_chain_net_python.c @@ -107,6 +107,14 @@ PyObject *dap_chain_net_get_chain_by_name_py(PyObject *self, PyObject *args){ return Py_BuildValue("O", obj_chain); } +PyObject *dap_chain_net_python_get_id(PyObject *self, void *closure){ + (void)closure; + PyDapChainNetIdObject *obj_net_id = PyObject_New(PyDapChainNetIdObject, &DapChainNetIdObject_DapChainNetIdObjectType); + PyObject_Dir((PyObject*)obj_net_id); + obj_net_id->net_id = ((PyDapChainNetObject*)self)->chain_net->pub.id; + return (PyObject*)obj_net_id; +} + PyObject *dap_chain_net_get_cur_addr_py(PyObject *self, PyObject *args){ PyObject *obj_node_addr = _PyObject_New(&DapChainNodeAddrObject_DapChainNodeAddrObjectType); ((PyDapChainNodeAddrObject*)obj_node_addr)->node_addr = dap_chain_net_get_cur_addr(((PyDapChainNetObject*)self)->chain_net); @@ -167,27 +175,3 @@ PyObject *dap_chain_net_get_name_py(PyObject *self, PyObject *args){ PyObject *obj_name = PyUnicode_FromString(((PyDapChainNetObject*)self)->chain_net->pub.name); return obj_name; } - -PyObject *dap_chain_net_get_tx_by_hash_py(PyObject *self, PyObject *args){ - PyObject *obj_hash; - if (!PyArg_ParseTuple(args, "O", &obj_hash)){ - return NULL; - } - PyDapChainDatumTxObject *obj_tx = PyObject_New(PyDapChainDatumTxObject, &DapChainDatumTx_DapChainDatumTxObjectType); - PyObject_Dir((PyObject*)obj_tx); - obj_tx->datum_tx = dap_chain_net_get_tx_by_hash(((PyDapChainNetObject*)self)->chain_net, - ((PyDapHashFastObject*)obj_hash)->hash_fast, TX_SEARCH_TYPE_LOCAL); - if(obj_tx->datum_tx == NULL){ - Py_XDECREF(obj_tx); - return Py_None; - } - return (PyObject*)obj_tx; -} - -PyObject *dap_chain_net_python_get_id(PyObject *self, void *closure){ - (void)closure; - PyDapChainNetIdObject *obj_net_id = PyObject_New(PyDapChainNetObject, &DapChainNetIdObject_DapChainNetIdObjectType); - PyObject_Dir((PyObject*)obj_net_id); - obj_net_id->net_id = ((PyDapChainNetObject*)self)->chain_net->pub.id; - return (PyObject*)obj_net_id; -} diff --git a/modules/cellframe-sdk/net/src/wrapping_dap_app_cli_server.c b/modules/cellframe-sdk/net/src/wrapping_dap_app_cli_server.c index d8ebafb661d3a09412b6e0f156abf55619f5db83..b98191cd5750cd4af5263a810a79330dd4926376 100644 --- a/modules/cellframe-sdk/net/src/wrapping_dap_app_cli_server.c +++ b/modules/cellframe-sdk/net/src/wrapping_dap_app_cli_server.c @@ -100,7 +100,6 @@ void element_py_func_del_all(){ } static int wrapping_cmdfunc(int argc, char **argv, char **str_reply){ - PyGILState_STATE state = PyGILState_Ensure(); size_t id_str_replay = elements_str_reply_add(str_reply); PyObject *obj_argv = stringToPyList(argc, argv); PyObject *obj_id_str_replay = PyLong_FromSize_t(id_str_replay); @@ -115,7 +114,6 @@ static int wrapping_cmdfunc(int argc, char **argv, char **str_reply){ Py_XDECREF(arglist); Py_XDECREF(obj_argv); elements_str_reply_delete(id_str_replay); - PyGILState_Release(state); return 0; } diff --git a/modules/cellframe-sdk/net/srv/CMakeLists.txt b/modules/cellframe-sdk/net/srv/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..866b93e4bce8a8ac33a0cc47f2962c8c94a54366 --- /dev/null +++ b/modules/cellframe-sdk/net/srv/CMakeLists.txt @@ -0,0 +1,199 @@ +project(dap_chain_net_srv_python_module C) +cmake_minimum_required(VERSION 3.0) + +set(CMAKE_VERBOSE_MAKEFILE ON) +set(CMAKE_COLOR_MAKEFILE ON) +set(CMAKE_C_STANDARD 11) +add_definitions("-fpic") + +if(UNIX) + add_definitions("-DDAP_OS_UNIX") +endif() + +if(NOT (${SUBMODULES_NO_BUILD} MATCHES ON)) + set (SUBMODULES_NO_BUILD ON) + if (NOT (TARGET dap_core)) + add_subdirectory(libdap) + target_compile_options( + dap_core PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_crypto)) + add_subdirectory(libdap-crypto) + target_compile_options( + dap_crypto PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain)) + add_subdirectory(libdap-chain) + target_compile_options( + dap_chain PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain_crypto)) + add_subdirectory(libdap-chain-crypto) + target_compile_options( + dap_chain_crypto PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain_mempool)) + add_subdirectory(libdap-chain-mempool) + target_compile_options( + dap_chain_mempool PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain_net)) + add_subdirectory(libdap-chain-net) + target_compile_options( + dap_chain_net PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_server_core)) + add_subdirectory(libdap-server-core) + target_compile_options( + dap_server_core PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain_global_db)) + add_subdirectory(libdap-chain-global-db) + target_compile_options( + dap_chain_global_db PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_client)) + add_subdirectory(libdap-client) + target_compile_options( + dap_client PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET libdap-server)) + add_subdirectory(libdap-server) + # target_compile_options( + # libdap-server PRIVATE + # "-fpic" + # ) + endif() + if (NOT (TARGET dap_stream)) + add_subdirectory(libdap-stream) + target_compile_options( + dap_stream PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_stream_ch)) + add_subdirectory(libdap-stream-ch) + target_compile_options( + dap_stream_ch PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_stream_ch_chain)) + add_subdirectory(libdap-stream-ch-chain) + target_compile_options( + dap_stream_ch_chain PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_stream_ch_chain_net)) + add_subdirectory(libdap-stream-ch-chain-net) + target_compile_options( + dap_stream_ch_chain_net PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_udp_server)) + add_subdirectory(libdap-server-udp) + target_compile_options( + dap_udp_server PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain_net_srv)) + add_subdirectory(libdap-chain-net-srv) + target_compile_options( + dap_chain_net_srv PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain_wallet)) + add_subdirectory(libdap-chain-wallet) + target_compile_options( + dap_chain_wallet PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain_gdb)) + add_subdirectory(libdap-chain-gdb) + target_compile_options( + dap_chain_gdb PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_python_module)) + add_subdirectory(libdap-python) + target_compile_options( + dap_python_module PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_crypto_python_module)) + add_subdirectory(libdap-crypto-python) + target_compile_options( + dap_crypto_python_module PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain_net_srv_vpn)) + add_subdirectory(libdap-chain-net-srv-vpn) + target_compile_options( + dap_chain_net_srv_vpn PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_chain_python_module)) + add_subdirectory(libdap-chain-python) + target_compile_options( + dap_chain_python_module PRIVATE + "-fpic" + ) + endif() + if (NOT (TARGET dap_client_python_module)) + add_subdirectory(libdap-client-python) + target_compile_options( + dap_client_python_module PRIVATE + "-fpic" + ) + endif() +endif() +#add_definitions("-DDAP_APP_NAME=\"TestPRJ\" -DSYSTEM_CONFIGS_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\"") + +file(GLOB CHAIN_NET_SRV_PYTHON_SRCS src/*.c) +file(GLOB CHAIN_NET_SRV_PYTHON_HEADERS include/*.h) + +set(Python_ADDITIONAL_VERSIONS 3.7 3.6 3.5 3.4) +find_package (PythonLibs REQUIRED) +include_directories(${PYTHON_INCLUDE_DIR} include/) + +add_library(${PROJECT_NAME} STATIC ${CHAIN_NET_SRV_PYTHON_SRCS} ${CHAIN_NET_SRV_PYTHON_HEADERS}) + +target_link_libraries(${PROJECT_NAME}) +target_include_directories(${PROJECT_NAME} PUBLIC include/ ) + +target_link_libraries(${PROJECT_NAME} dap_core + dap_crypto + dap_chain + dap_server_core + dap_chain_net + dap_chain_net_srv + dap_chain_python_module + dap_chain_net_python_module + dap_client_python_module) diff --git a/modules/cellframe-sdk/net/srv/include/wrapping_dap_chain_net_srv.h b/modules/cellframe-sdk/net/srv/include/wrapping_dap_chain_net_srv.h new file mode 100644 index 0000000000000000000000000000000000000000..87409ada2507ef7a58e33fd4128d73d2536872dd --- /dev/null +++ b/modules/cellframe-sdk/net/srv/include/wrapping_dap_chain_net_srv.h @@ -0,0 +1,78 @@ +#pragma once + +#include "Python.h" +#include "dap_chain_net_srv.h" +#include "uthash.h" +#include "wrapping_dap_chain_net_srv_client_remote.h" +#include "wrapping_dap_chain_common.h" +//#include "wrapping_dap_chain_net_srv_common.h" + +typedef struct PyDapChainNetSrv{ + PyObject_HEAD + dap_chain_net_srv_t *srv; + bool original; +}PyDapChainNetSrvObject; + +int PyDapChainNetSrv_init(PyDapChainNetSrvObject* self, PyObject *args, PyObject *kwds); +void PyDapChainNetSrv_dealloc(PyDapChainNetSrvObject* self); + +PyObject *wrapping_dap_chain_net_srv_get_uid(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_get_abstract(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_get_price_list(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_get_ban_list(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_get_grace_period(PyObject *self, void *closure); + +//Function +//PyObject *wrapping_dap_chain_net_srv_issue_receipt(PyObject *self, PyObject *args); + +static PyMethodDef DapChainNetSrvMethods[]={ + {NULL, NULL, 0, NULL} +}; + +static PyGetSetDef DapChaiNetSrvGetsSets[] = { + {"uid", (getter)wrapping_dap_chain_net_srv_get_uid, NULL, NULL, NULL}, + {"gracePeriod", (getter)wrapping_dap_chain_net_srv_get_grace_period, NULL, NULL, NULL}, + {NULL} +}; + +static PyTypeObject DapChainNetSrvObject_DapChainNetSrvObjectType = { + PyVarObject_HEAD_INIT(NULL, 0) + "CellFrame.ChainNetSrv", /* tp_name */ + sizeof(PyDapChainNetSrvObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)PyDapChainNetSrv_dealloc, /* 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 */ + "Chain net srv object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + DapChainNetSrvMethods, /* tp_methods */ + 0, /* tp_members */ + DapChaiNetSrvGetsSets, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + (initproc)PyDapChainNetSrv_init, /* tp_init */ + 0, /* tp_alloc */ + PyType_GenericNew, /* tp_new */ +}; diff --git a/modules/cellframe-sdk/net/srv/include/wrapping_dap_chain_net_srv_client.h b/modules/cellframe-sdk/net/srv/include/wrapping_dap_chain_net_srv_client.h new file mode 100644 index 0000000000000000000000000000000000000000..c42ef10ec386008c688c5a28c6807175938d51af --- /dev/null +++ b/modules/cellframe-sdk/net/srv/include/wrapping_dap_chain_net_srv_client.h @@ -0,0 +1,65 @@ +#pragma once + +#include "Python.h" +#include "dap_chain_net_srv_client.h" +#include "libdap_chain_net_python.h" + +typedef struct PyDapChainNetSrvClient{ + PyObject_HEAD + dap_chain_net_srv_client_t *srv_client; +}PyDapChainNetSrvClientObject; + +int PyDapChainNetSrvClient_init(PyDapChainNetSrvClientObject* self, PyObject *args, PyObject *kwds); +PyObject *wrapping_dap_chain_net_srv_client_write(PyObject *self, PyObject *args); + +static PyMethodDef DapChainNetSrvClientMethods[]={ + {NULL, NULL, 0, NULL} +}; + +static PyGetSetDef DapChaiNetSrvClientGetsSets[] = { +// {"uid", (getter)wrapping_dap_chain_net_srv_get_uid, NULL, NULL, NULL}, +// {"gracePeriod", (getter)wrapping_dap_chain_net_srv_get_grace_period, NULL, NULL, NULL}, + {NULL} +}; + +static PyTypeObject DapChainNetSrvClientObject_DapChainNetSrvClientObjectType = { + PyVarObject_HEAD_INIT(NULL, 0) + "CellFrame.ChainNetSrv", /* tp_name */ + sizeof(PyDapChainNetSrvClientObject), /* 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 */ + "Chain net srv client object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + DapChainNetSrvClientMethods, /* 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 */ + (initproc)PyDapChainNetSrvClient_init, /* tp_init */ + 0, /* tp_alloc */ + PyType_GenericNew, /* tp_new */ +}; diff --git a/modules/cellframe-sdk/net/srv/include/wrapping_dap_chain_net_srv_client_remote.h b/modules/cellframe-sdk/net/srv/include/wrapping_dap_chain_net_srv_client_remote.h new file mode 100644 index 0000000000000000000000000000000000000000..c34cbd95113a20acc5017e2201203bac71d72c55 --- /dev/null +++ b/modules/cellframe-sdk/net/srv/include/wrapping_dap_chain_net_srv_client_remote.h @@ -0,0 +1,84 @@ +// +// Created by blus on 05.02.2022. +// + +#include "Python.h" +#include "datetime.h" +#include "dap_chain_net_srv.h" + +#ifndef WRAPPING_DAP_CHAIN_NET_SRV_CLIENT_REMOTE_H +#define WRAPPING_DAP_CHAIN_NET_SRV_CLIENT_REMOTE_H + +typedef struct PyDapChainNetSrvClientRemote{ + PyObject_HEAD + dap_chain_net_srv_client_remote_t *srv_client_remote; +}PyDapChainNetSrvClientRemoteObject; + +PyObject *wrapping_dap_chain_net_srv_client_remote_get_ch(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_client_remote_get_ts_created(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_client_remote_get_created(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_client_remote_get_stream_worker(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_client_remote_get_session_id(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_client_remote_get_bytes_received(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_client_remote_get_bytes_send(PyObject *self, void *closure); +//PyObject *wrapping_dap_chain_net_srv_client_remote_get_bytes_prev(PyObject *self, void *closure); +//PyObject *wrapping_dap_chain_net_srv_client_remote_get_bytes_next(PyObject *self, void *closure); + +static PyMethodDef DapChainNetSrvClientMethods[]={ + {NULL, NULL, 0, NULL} +}; + +static PyGetSetDef DapChaiNetSrvClientGetsSets[] = { + {"ch", (getter)wrapping_dap_chain_net_srv_client_remote_get_ch, NULL, NULL, NULL}, + {"tsCreated", (getter)wrapping_dap_chain_net_srv_client_remote_get_ts_created, NULL, NULL, NULL}, + {"created", (getter)wrapping_dap_chain_net_srv_client_remote_get_created, NULL, NULL, NULL}, + {"streamWorker", (getter)wrapping_dap_chain_net_srv_client_remote_get_stream_worker, NULL, NULL, NULL}, + {"sessionId", (getter)wrapping_dap_chain_net_srv_client_remote_get_session_id, NULL, NULL, NULL}, + {"bytesReceived", (getter)wrapping_dap_chain_net_srv_client_remote_get_bytes_received, NULL, NULL, NULL}, + {"bytesSend", (getter)wrapping_dap_chain_net_srv_client_remote_get_bytes_send, NULL, NULL, NULL}, + {NULL} +}; + +static PyTypeObject DapChainNetSrvClientObject_DapChainNetSrvClientObjectType = { + PyVarObject_HEAD_INIT(NULL, 0) + "CellFrame.ChainNetSrvClientRemote", /* tp_name */ + sizeof(PyDapChainNetSrvClientRemoteObject), /* 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 */ + "Chain net srv client object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + DapChainNetSrvClientMethods, /* tp_methods */ + 0, /* tp_members */ + DapChaiNetSrvClientGetsSets, /* 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 */ +}; + +#endif //WRAPPING_DAP_CHAIN_NET_SRV_CLIENT_REMOTE_H diff --git a/modules/cellframe-sdk/net/srv/include/wrapping_dap_chain_net_srv_common.h b/modules/cellframe-sdk/net/srv/include/wrapping_dap_chain_net_srv_common.h new file mode 100644 index 0000000000000000000000000000000000000000..7fd561c3359df4e1c55ac6528dbaf76be0a8176e --- /dev/null +++ b/modules/cellframe-sdk/net/srv/include/wrapping_dap_chain_net_srv_common.h @@ -0,0 +1,135 @@ +#pragma once + + +#include "Python.h" +#include "dap_chain_net_srv_common.h" +#include "wrapping_dap_chain_common.h" +#include "libdap_chain_net_python.h" + +/*wrapping dap_chain_net_srv_price*/ +typedef struct PyDapChainNetSrvPrice{ + PyObject_HEAD + dap_chain_net_srv_price_t price; +}PyDapChainNetSrvPriceObject; + +PyObject *wrapping_dap_chain_net_srv_get_wallet(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_get_net_name(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_get_net(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_get_value_datoshi(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_get_token(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_get_units(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_get_units_uid(PyObject *self, void *closure); + +static PyGetSetDef DapChainNetSrvPrice_GetsSetsDef[] = { + {"wallet", (getter)wrapping_dap_chain_net_srv_get_wallet, NULL, NULL, NULL}, + {"netName", (getter)wrapping_dap_chain_net_srv_get_net_name, NULL, NULL, NULL}, + {"net", (getter)wrapping_dap_chain_net_srv_get_net, NULL, NULL, NULL}, + {"valueDatoshi", (getter)wrapping_dap_chain_net_srv_get_value_datoshi, NULL, NULL, NULL}, + {"token", (getter)wrapping_dap_chain_net_srv_get_token, NULL, NULL, NULL}, + {"units", (getter)wrapping_dap_chain_net_srv_get_units, NULL, NULL, NULL}, + {"unitsUid", (getter)wrapping_dap_chain_net_srv_get_units_uid, NULL, NULL, NULL}, + {NULL} +}; + +static PyTypeObject DapChainNetSrvPriceObject_DapChainNetSrvPriceObjectType = { + PyVarObject_HEAD_INIT(NULL, 0) + "CellFrame.ChainNetSrvPrice", /* tp_name */ + sizeof(PyDapChainNetSrvPriceObject), /* 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 */ + "Chain net srv price object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + DapChainNetSrvPrice_GetsSetsDef, /* 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 */ +}; + +/*wrapping dap_chain_net_srv_order_direction*/ +typedef struct PyDapChainNetSrvOrderDirection{ + PyObject_HEAD + dap_chain_net_srv_order_direction_t direction; +}PyDapChainNetSrvOrderDirectionObject; + +PyObject *DapChainNetSrvOrderDirection_str(PyObject *self); + +PyObject *wrapping_dap_chain_net_srv_order_direction_get_serv_dir_buy(PyObject *self, PyObject *args); +PyObject *wrapping_dap_chain_net_srv_order_direction_get_serv_dir_sell(PyObject *self, PyObject *args); +PyObject *wrapping_dap_chain_net_srv_order_direction_get_serv_dir_undefined(PyObject *self, PyObject *args); + +static PyMethodDef DapChainNetSrvOrderDirection_Methods[] = { + {"getDirBuy", (PyCFunction)wrapping_dap_chain_net_srv_order_direction_get_serv_dir_buy, METH_NOARGS | METH_STATIC, ""}, + {"getDirSell", (PyCFunction)wrapping_dap_chain_net_srv_order_direction_get_serv_dir_sell, METH_NOARGS | METH_STATIC, ""}, + {"getDirUndefined", (PyCFunction)wrapping_dap_chain_net_srv_order_direction_get_serv_dir_undefined, METH_NOARGS | METH_STATIC, ""}, + {NULL, NULL, 0, NULL} +}; + +static PyTypeObject DapChainNetSrvOrderDirectionObject_DapChainNetSrvOrderDirectionObjectType = { + PyVarObject_HEAD_INIT(NULL, 0) + "CellFrame.ChainNetSrvOrderDirection", /* tp_name */ + sizeof(PyDapChainNetSrvOrderDirectionObject), /* 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 */ + DapChainNetSrvOrderDirection_str, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | + Py_TPFLAGS_BASETYPE, /* tp_flags */ + "Chain net srv order direction object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + DapChainNetSrvOrderDirection_Methods, /* 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 */ +}; \ No newline at end of file diff --git a/modules/cellframe-sdk/net/srv/include/wrapping_dap_chain_net_srv_order.h b/modules/cellframe-sdk/net/srv/include/wrapping_dap_chain_net_srv_order.h new file mode 100644 index 0000000000000000000000000000000000000000..ea4e7ec0610f22e690a51adeeda9eca22ca63cf3 --- /dev/null +++ b/modules/cellframe-sdk/net/srv/include/wrapping_dap_chain_net_srv_order.h @@ -0,0 +1,118 @@ +#pragma once + +#include "Python.h" +#include "dap_chain_net_srv_order.h" +#include "wrapping_dap_chain_common.h" +#include "libdap_chain_net_python.h" +#include "wrapping_dap_chain_net_srv_common.h" +#include "datetime.h" +#include "libdap_crypto_key_python.h" + +typedef struct PyDapChainNetSrvOrder{ + PyObject_HEAD + dap_chain_net_srv_order_t *order; + //dap_chain_net_srv_order_old_t *order_old; +}PyDapChainNetSrvOrderObject; + +//constructor +int PyDapChainNetSrvOrder_init(PyDapChainNetSrvOrderObject *self, PyObject *args, PyObject *kwds); + +//Attributes +PyObject *wrapping_dap_chain_net_srv_order_get_version(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_order_get_srv_uid(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_order_get_srv_direction(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_order_get_srv_node_addr(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_order_get_srv_tx_cond_hash(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_order_get_srv_price_unit(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_order_get_srv_ts_created(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_order_get_srv_ts_expires(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_order_get_srv_price(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_order_get_srv_price_ticker(PyObject *self, void *closure); +//PyObject *wrapping_dap_chain_net_srv_order_get_srv_free_space(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_order_get_srv_ext_size(PyObject *self, void *closure); +PyObject *wrapping_dap_chain_net_srv_order_get_srv_ext_n_sign(PyObject *self, void *closure); +//Functions +PyObject *wrapping_dap_chain_net_srv_order_get_size(PyObject *self, PyObject *args); +//PyObject *wrapping_dap_chain_net_srv_order_set_continent_region(PyObject *self, PyObject *args); +//PyObject *wrapping_dap_chain_net_srv_order_get_continent_region(PyObject *self, PyObject *args); + +//PyObject *wrapping_dap_chain_net_srv_order_get_country_code(PyObject *self, PyObject *args); +//PyObject *wrapping_dap_chain_net_srv_order_continents_count(PyObject *self, PyObject *args); +//PyObject *wrapping_dap_chain_net_srv_order_continent_to_str(PyObject *self, PyObject *args); +//PyObject *wrapping_dap_chain_net_srv_order_continent_to_num(PyObject *self, PyObject *args); + +PyObject *wrapping_dap_chain_net_srv_order_find(PyObject *self, PyObject *args); +PyObject *wrapping_dap_chain_net_srv_order_delete(PyObject *self, PyObject *args); + +PyObject *wrapping_dap_chain_net_srv_order_find_all_by(PyObject *self, PyObject *args); +PyObject *wrapping_dap_chain_net_srv_order_save(PyObject *self, PyObject *args); +PyObject *wrapping_dap_chain_net_srv_order_get_gdb_group(PyObject *self, PyObject *args); +PyObject *wrapping_dap_chain_net_srv_order_get_nodelist_group(PyObject *self, PyObject *args); + +static PyMethodDef DapChainNetSrvOrderMethods[]={ + {"size", (PyCFunction)wrapping_dap_chain_net_srv_order_get_size, METH_VARARGS, ""}, + {"find", (PyCFunction)wrapping_dap_chain_net_srv_order_find, METH_VARARGS | METH_STATIC, ""}, + {"delete", (PyCFunction)wrapping_dap_chain_net_srv_order_delete, METH_VARARGS | METH_STATIC, ""}, + {"save", (PyCFunction)wrapping_dap_chain_net_srv_order_save, METH_VARARGS, ""}, + {"getGdbGroup", (PyCFunction)wrapping_dap_chain_net_srv_order_get_gdb_group, METH_VARARGS | METH_STATIC, ""}, + {"getNodelistGroup", (PyCFunction)wrapping_dap_chain_net_srv_order_get_nodelist_group, METH_VARARGS | METH_STATIC, ""}, + {NULL, NULL, 0, NULL} +}; + +static PyGetSetDef DapChaiNetSrvOrderGetsSets[] = { + {"version", (getter)wrapping_dap_chain_net_srv_order_get_version, NULL, NULL, NULL}, + {"uid", (getter)wrapping_dap_chain_net_srv_order_get_srv_uid, NULL, NULL, NULL}, + {"direction", (getter)wrapping_dap_chain_net_srv_order_get_srv_direction, NULL, NULL, NULL}, + {"nodeAddr", (getter)wrapping_dap_chain_net_srv_order_get_srv_node_addr, NULL, NULL, NULL}, + {"condHash", (getter)wrapping_dap_chain_net_srv_order_get_srv_tx_cond_hash, NULL, NULL, NULL}, + {"priceUnit", (getter)wrapping_dap_chain_net_srv_order_get_srv_price_unit, NULL, NULL, NULL}, + {"tsCreated", (getter)wrapping_dap_chain_net_srv_order_get_srv_ts_created, NULL, NULL, NULL}, + {"tsExpires", (getter)wrapping_dap_chain_net_srv_order_get_srv_ts_expires, NULL, NULL, NULL}, + {"srvPrice", (getter)wrapping_dap_chain_net_srv_order_get_srv_price, NULL, NULL, NULL}, + {"srvPriceTicker", (getter)wrapping_dap_chain_net_srv_order_get_srv_price_ticker, NULL, NULL, NULL}, + {"extSize", (getter)wrapping_dap_chain_net_srv_order_get_srv_ext_size, NULL, NULL, NULL}, + {"extSign", (getter)wrapping_dap_chain_net_srv_order_get_srv_ext_n_sign, NULL, NULL, NULL}, + {NULL} +}; + +static PyTypeObject DapChainNetSrvOrderObject_DapChainNetSrvOrderObjectType = { + PyVarObject_HEAD_INIT(NULL, 0) + "CellFrame.ChainNetSrvOrder", /* tp_name */ + sizeof(PyDapChainNetSrvOrderObject), /* 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 */ + "Chain net srv client object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + DapChainNetSrvOrderMethods, /* tp_methods */ + 0, /* tp_members */ + DapChaiNetSrvOrderGetsSets, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + (initproc)PyDapChainNetSrvOrder_init, /* tp_init */ + 0, /* tp_alloc */ + PyType_GenericNew, /* tp_new */ +}; diff --git a/modules/cellframe-sdk/net/srv/src/wrapping_dap_chain_net_srv.c b/modules/cellframe-sdk/net/srv/src/wrapping_dap_chain_net_srv.c new file mode 100644 index 0000000000000000000000000000000000000000..9708e471a09265556021c6a80899c223336c8567 --- /dev/null +++ b/modules/cellframe-sdk/net/srv/src/wrapping_dap_chain_net_srv.c @@ -0,0 +1,324 @@ +#include "wrapping_dap_chain_net_srv.h" + +enum _wrapping_dap_chain_net_srv_type_callbacks{ + WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_REQUESTED, + WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_RESPONSE_SUCCESS, + WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_RESPONSE_ERROR, + WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_RECEIPT_NEXT_SUCCESS, + WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_STREAM_CH_READ, + WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_CLIENT_SUCCESS +}; + +typedef struct _wrapping_dap_chain_net_srv_callbacks_key{ + enum _wrapping_dap_chain_net_srv_type_callbacks type; + dap_chain_net_srv_t *srv; +}_wrapping_dap_chain_net_srv_callbacks_key_t; + +typedef struct _wrapping_dap_chain_net_srv_callbacks{ + _wrapping_dap_chain_net_srv_callbacks_key_t *key; + dap_chain_net_srv_uid_t uid; + PyObject *func; + UT_hash_handle hh; +}_wrapping_dap_chain_net_srv_callbacks_t; + +static _wrapping_dap_chain_net_srv_callbacks_t *_s_callbacks = NULL; + +void _wrapping_dap_chain_net_srv_del(_wrapping_dap_chain_net_srv_callbacks_t *a_callback){ + if (a_callback != NULL) { + HASH_DEL(_s_callbacks, a_callback); + Py_XINCREF(a_callback->func); + } +} + +PyObject* _wrapping_dap_chain_net_srv_search(_wrapping_dap_chain_net_srv_callbacks_key_t *a_key){ + _wrapping_dap_chain_net_srv_callbacks_t *callbacks = NULL; + HASH_FIND(hh, _s_callbacks, a_key, sizeof(_wrapping_dap_chain_net_srv_callbacks_key_t), callbacks); + if (callbacks == NULL){ + return Py_None; + } else { + return callbacks->func; + } +} + +_wrapping_dap_chain_net_srv_callbacks_t* _wrapping_dap_chain_net_srv_search_el(_wrapping_dap_chain_net_srv_callbacks_key_t *a_key){ + _wrapping_dap_chain_net_srv_callbacks_t *callbacks = NULL; + HASH_FIND(hh, _s_callbacks, a_key, sizeof(_wrapping_dap_chain_net_srv_callbacks_key_t), callbacks); + return callbacks; +} + +int _wrapping_dap_chain_net_srv_add( + enum _wrapping_dap_chain_net_srv_type_callbacks a_type, + dap_chain_net_srv_t *a_srv, + dap_chain_net_srv_uid_t a_uid, + PyObject *a_obj_func){ + if (PyCallable_Check(a_obj_func)){ + _wrapping_dap_chain_net_srv_callbacks_t *callbacks = DAP_NEW(_wrapping_dap_chain_net_srv_callbacks_t); + _wrapping_dap_chain_net_srv_callbacks_key_t *l_key = DAP_NEW(_wrapping_dap_chain_net_srv_callbacks_key_t); + l_key->type = a_type; + l_key->srv = a_srv; + callbacks->key = l_key; + callbacks->uid = a_uid; + callbacks->func = a_obj_func; + Py_XINCREF(a_obj_func); + HASH_ADD(hh, _s_callbacks, key, sizeof(_wrapping_dap_chain_net_srv_callbacks_key_t), callbacks); + return 0; + } + return -1; +} + +PyObject *_wrapping_dac_chain_callback_data_t_get_tuple( + dap_chain_net_srv_t *a_srv, //NOT USAGE + uint32_t a_usage_id, + dap_chain_net_srv_client_remote_t * a_srv_client, + const void *a_custom_data, + size_t a_custom_data_size){ + PyDapChainNetSrvClientRemoteObject *l_obj_srv_client = NULL; + if (a_srv_client == NULL){ + l_obj_srv_client = (PyDapChainNetSrvClientRemoteObject *)Py_None; + } else { + l_obj_srv_client = PyObject_New(PyDapChainNetSrvClientRemoteObject, + &DapChainNetSrvClientObject_DapChainNetSrvClientObjectType); + PyObject_Dir((PyObject *) l_obj_srv_client); + l_obj_srv_client->srv_client_remote = a_srv_client; + } + PyObject *l_obj_custom_data = NULL; + if (a_custom_data == NULL || a_custom_data_size == 0){ + l_obj_custom_data = Py_None; + }else{ + l_obj_custom_data = PyBytes_FromStringAndSize((char*)a_custom_data_size, (Py_ssize_t)a_custom_data_size); + } + return Py_BuildValue("iOO", l_obj_srv_client, l_obj_custom_data); +} + +int _w_dap_chain_callback_data_t_requested( + dap_chain_net_srv_t *a_srv, + uint32_t a_usage_id, + dap_chain_net_srv_client_remote_t * a_srv_client, + const void *a_custom_data, + size_t a_custom_data_size){ + _wrapping_dap_chain_net_srv_callbacks_key_t *l_key = DAP_NEW(_wrapping_dap_chain_net_srv_callbacks_key_t); + l_key->srv = a_srv; + l_key->type = WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_REQUESTED; + PyObject *l_func = _wrapping_dap_chain_net_srv_search(l_key); + Py_INCREF(l_func); + PyObject *l_arg = _wrapping_dac_chain_callback_data_t_get_tuple(a_srv, a_usage_id, a_srv_client, a_custom_data, a_custom_data_size); + PyObject *result = PyObject_CallObject(l_func, l_arg); + if(result == NULL){ + PyErr_Print(); + return -1; + } + Py_XINCREF(l_func); + Py_XINCREF(l_arg); + if (!PyLong_Check(result)){ + return -1; + } + int res_int = _PyLong_AsInt(result); + return res_int; +} +int _w_dap_chain_callback_data_t_response_success( + dap_chain_net_srv_t *a_srv, + uint32_t a_usage_id, + dap_chain_net_srv_client_remote_t * a_srv_client, + const void *a_custom_data, + size_t a_custom_data_size){ + _wrapping_dap_chain_net_srv_callbacks_key_t *l_key = DAP_NEW(_wrapping_dap_chain_net_srv_callbacks_key_t); + l_key->srv = a_srv; + l_key->type = WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_RESPONSE_SUCCESS; + PyObject *l_func = _wrapping_dap_chain_net_srv_search(l_key); + Py_INCREF(l_func); + PyObject *l_arg = _wrapping_dac_chain_callback_data_t_get_tuple(a_srv, a_usage_id, a_srv_client, a_custom_data, a_custom_data_size); + PyObject *result = PyObject_CallObject(l_func, l_arg); + if(result == NULL){ + PyErr_Print(); + return -1; + } + Py_XINCREF(l_func); + Py_XINCREF(l_arg); + if (!PyLong_Check(result)){ + return -1; + } + int res_int = _PyLong_AsInt(result); + return res_int; + return 0; +} +int _w_dap_chain_callback_data_t_response_error( + dap_chain_net_srv_t *a_srv, + uint32_t a_usage_id, + dap_chain_net_srv_client_remote_t * a_srv_client, + const void *a_custom_data, + size_t a_custom_data_size){ + _wrapping_dap_chain_net_srv_callbacks_key_t *l_key = DAP_NEW(_wrapping_dap_chain_net_srv_callbacks_key_t); + l_key->srv = a_srv; + l_key->type = WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_RESPONSE_ERROR; + PyObject *l_func = _wrapping_dap_chain_net_srv_search(l_key); + Py_INCREF(l_func); + PyObject *l_arg = _wrapping_dac_chain_callback_data_t_get_tuple(a_srv, a_usage_id, a_srv_client, a_custom_data, a_custom_data_size); + PyObject *result = PyObject_CallObject(l_func, l_arg); + if(result == NULL){ + PyErr_Print(); + return -1; + } + Py_XINCREF(l_func); + Py_XINCREF(l_arg); + if (!PyLong_Check(result)){ + return -1; + } + int res_int = _PyLong_AsInt(result); + return res_int; + return 0; +} +int _w_dap_chain_callback_data_t_receipt_next_success( + dap_chain_net_srv_t *a_srv, + uint32_t a_usage_id, + dap_chain_net_srv_client_remote_t * a_srv_client, + const void *a_custom_data, + size_t a_custom_data_size){ + _wrapping_dap_chain_net_srv_callbacks_key_t *l_key = DAP_NEW(_wrapping_dap_chain_net_srv_callbacks_key_t); + l_key->srv = a_srv; + l_key->type = WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_RECEIPT_NEXT_SUCCESS; + PyObject *l_func = _wrapping_dap_chain_net_srv_search(l_key); + Py_INCREF(l_func); + PyObject *l_arg = _wrapping_dac_chain_callback_data_t_get_tuple(a_srv, a_usage_id, a_srv_client, a_custom_data, a_custom_data_size); + PyObject *result = PyObject_CallObject(l_func, l_arg); + if(result == NULL){ + PyErr_Print(); + return -1; + } + Py_XINCREF(l_func); + Py_XINCREF(l_arg); + if (!PyLong_Check(result)){ + return -1; + } + int res_int = _PyLong_AsInt(result); + return res_int; + return 0; +} +int _w_dap_chain_callback_data_t_stream_ch_read( + dap_chain_net_srv_t *a_srv, + uint32_t a_usage_id, + dap_chain_net_srv_client_remote_t * a_srv_client, + const void *a_custom_data, + size_t a_custom_data_size){ + return 0; +} +int _w_dap_chain_callback_data_t_client_success( + dap_chain_net_srv_t *a_srv, + uint32_t a_usage_id, + dap_chain_net_srv_client_remote_t * a_srv_client, + const void *a_custom_data, + size_t a_custom_data_size){ + return 0; +} + +//Conructor +int PyDapChainNetSrv_init(PyDapChainNetSrvObject* self, PyObject *args, PyObject *kwds){ + const char *kwlist[] = { + "uid", + "callbackRequested", + "callbackResponseSuccess", + "callbackResponseError", + "callbackReceiptNextSuccess", + NULL}; + PyObject *obj_uid; + PyObject *obj_callback_requested; + PyObject *obj_callback_response_success; + PyObject *obj_callback_response_error; + PyObject *obj_callback_receipt_next_success; + if(!PyArg_ParseTupleAndKeywords(args, kwds, "OOOOO", (char **)kwlist, + &obj_uid, + &obj_callback_requested, + &obj_callback_response_success, + &obj_callback_response_error, + &obj_callback_receipt_next_success)) { + return -1; + } + if ( + PyDapChainNetSrvUid_Check(obj_uid)|| + PyCallable_Check(obj_callback_requested)|| + PyCallable_Check(obj_callback_response_success)|| + PyCallable_Check(obj_callback_response_error)|| + PyCallable_Check(obj_callback_receipt_next_success)) { + self->srv = dap_chain_net_srv_add( + ((PyDapChainNetSrvUIDObject*)obj_uid)->net_srv_uid, + _w_dap_chain_callback_data_t_requested, + _w_dap_chain_callback_data_t_response_success, + _w_dap_chain_callback_data_t_response_error, + _w_dap_chain_callback_data_t_receipt_next_success + ); + if (self->srv == NULL){ + return -3; + } + _wrapping_dap_chain_net_srv_add( + WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_REQUESTED, + self->srv, + ((PyDapChainNetSrvUIDObject*)self)->net_srv_uid, + obj_callback_requested); + _wrapping_dap_chain_net_srv_add( + WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_RESPONSE_SUCCESS, + self->srv, + ((PyDapChainNetSrvUIDObject*)self)->net_srv_uid, + obj_callback_response_success); + _wrapping_dap_chain_net_srv_add( + WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_RESPONSE_ERROR, + self->srv, + ((PyDapChainNetSrvUIDObject*)self)->net_srv_uid, + obj_callback_response_error); + _wrapping_dap_chain_net_srv_add( + WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_RECEIPT_NEXT_SUCCESS, + self->srv, + ((PyDapChainNetSrvUIDObject*)self)->net_srv_uid, + obj_callback_receipt_next_success); + self->original = true; + return 0; + } + return -2; +} + +void PyDapChainNetSrv_dealloc(PyDapChainNetSrvObject* self){ + if(self->original == true){ + _wrapping_dap_chain_net_srv_callbacks_t *callback = NULL; + _wrapping_dap_chain_net_srv_callbacks_key_t *l_key_requested = DAP_NEW(_wrapping_dap_chain_net_srv_callbacks_key_t); + l_key_requested->type = WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_REQUESTED; + l_key_requested->srv = self->srv; + callback = _wrapping_dap_chain_net_srv_search_el(l_key_requested); + _wrapping_dap_chain_net_srv_del(callback); + DAP_FREE(callback); + DAP_FREE(l_key_requested); + _wrapping_dap_chain_net_srv_callbacks_key_t *l_key_success = DAP_NEW(_wrapping_dap_chain_net_srv_callbacks_key_t);; + l_key_success->type = WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_RESPONSE_SUCCESS; + l_key_success->srv = self->srv; + callback = _wrapping_dap_chain_net_srv_search_el(l_key_success); + _wrapping_dap_chain_net_srv_del(callback); + DAP_FREE(callback); + DAP_FREE(l_key_requested); + _wrapping_dap_chain_net_srv_callbacks_key_t *l_key_error = DAP_NEW(_wrapping_dap_chain_net_srv_callbacks_key_t);; + l_key_error->type = WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_RESPONSE_ERROR; + l_key_error->srv = self->srv; + callback = _wrapping_dap_chain_net_srv_search_el(l_key_error); + _wrapping_dap_chain_net_srv_del(callback); + DAP_FREE(callback); + DAP_FREE(l_key_error); + _wrapping_dap_chain_net_srv_callbacks_key_t *l_key_receipt_new_success = DAP_NEW(_wrapping_dap_chain_net_srv_callbacks_key_t);; + l_key_receipt_new_success->type = WRAPPING_DAP_CHAIN_NET_SERV_CALLBACK_DATA_RECEIPT_NEXT_SUCCESS; + l_key_error->srv = self->srv; + callback = _wrapping_dap_chain_net_srv_search_el(l_key_receipt_new_success); + _wrapping_dap_chain_net_srv_del(callback); + DAP_FREE(callback); + DAP_FREE(l_key_receipt_new_success); + dap_chain_net_srv_del(self->srv); + } + Py_TYPE(self)->tp_free((PyObject*)self); +} + +PyObject *wrapping_dap_chain_net_srv_get_uid(PyObject *self, void *closure){ + (void)closure; + PyDapChainNetSrvUIDObject *l_obj_srv_uid = PyObject_New(PyDapChainNetSrvUIDObject, &DapChainNetSrvUIDObject_DapChainNetSrvUIDObjectType); + PyObject_Dir((PyObject*)l_obj_srv_uid); + l_obj_srv_uid->net_srv_uid = ((PyDapChainNetSrvObject *)self)->srv->uid; + return (PyObject*)l_obj_srv_uid; +} + +PyObject *wrapping_dap_chain_net_srv_get_grace_period(PyObject *self, void *closure){ + (void)closure; + return Py_BuildValue("I", ((PyDapChainNetSrvObject*)self)->srv->grace_period); +} diff --git a/modules/cellframe-sdk/net/srv/src/wrapping_dap_chain_net_srv_client.c b/modules/cellframe-sdk/net/srv/src/wrapping_dap_chain_net_srv_client.c new file mode 100644 index 0000000000000000000000000000000000000000..1f077013205d672ccbe1bedd026ca56bb88f085d --- /dev/null +++ b/modules/cellframe-sdk/net/srv/src/wrapping_dap_chain_net_srv_client.c @@ -0,0 +1,96 @@ +#include "wrapping_dap_chain_net_srv_client.h" + +#define LOG_TAG "wrapping_dap_chain_net_srv_client" + +#define _TYPE_CALLBACK_CONNECTED 0 +#define _TYPE_CALLBACK_DISCONNECTED 1 +#define _TYPE_CALLBACK_DELETE 2 + +void _wrapping_dap_chain_net_srv_client_callback_connected(dap_chain_net_srv_client_t* a_client, void *a_arg){ + if(PyCallable_Check(a_arg)) { + PyGILState_STATE state = PyGILState_Ensure(); + PyObject *l_call = (PyObject*)a_arg; + PyDapChainNetSrvClientObject *client = PyObject_New(PyDapChainNetSrvClientObject, + &DapChainNetSrvClientObject_DapChainNetSrvClientObjectType); + PyObject_Dir((PyObject *) client); + client->srv_client = a_client; + PyObject *l_args = Py_BuildValue("Oi", client, _TYPE_CALLBACK_CONNECTED); + Py_INCREF(l_args); + Py_INCREF(l_call); + PyEval_CallObject(l_call, l_args); + Py_XDECREF(l_args); + Py_XDECREF(l_call); + PyGILState_Release(state); + }else{ + log_it(L_ERROR, "Can't called handler Python in callback connected"); + } +} +void _wrapping_dap_chain_net_srv_client_callback_disconnected(dap_chain_net_srv_client_t* a_client, void *a_arg){ + if(PyCallable_Check(a_arg)) { + PyGILState_STATE state = PyGILState_Ensure(); + PyObject *l_call = (PyObject*)a_arg; + PyDapChainNetSrvClientObject *client = PyObject_New(PyDapChainNetSrvClientObject, + &DapChainNetSrvClientObject_DapChainNetSrvClientObjectType); + PyObject_Dir((PyObject *) client); + client->srv_client = a_client; + PyObject *l_args = Py_BuildValue("Oi", client, _TYPE_CALLBACK_DISCONNECTED); + Py_INCREF(l_args); + Py_INCREF(l_call); + PyEval_CallObject(l_call, l_args); + Py_XDECREF(l_args); + Py_XDECREF(l_call); + PyGILState_Release(state); + }else{ + log_it(L_ERROR, "Can't called handler Python in callback disconnected"); + } +} +void _wrapping_dap_chain_net_srv_client_callback_deleted(dap_chain_net_srv_client_t* a_client, void *a_arg){ + if(PyCallable_Check(a_arg)) { + PyGILState_STATE state = PyGILState_Ensure(); + PyObject *l_call = (PyObject*)a_arg; + PyDapChainNetSrvClientObject *client = PyObject_New(PyDapChainNetSrvClientObject, + &DapChainNetSrvClientObject_DapChainNetSrvClientObjectType); + PyObject_Dir((PyObject *) client); + client->srv_client = a_client; + PyObject *l_args = Py_BuildValue("Oi", client, _TYPE_CALLBACK_DELETE); + Py_INCREF(l_args); + Py_INCREF(l_call); + PyEval_CallObject(l_call, l_args); + Py_XDECREF(l_args); + Py_XDECREF(l_call); + PyGILState_Release(state); + }else{ + log_it(L_ERROR, "Can't called handler Python in callback delete"); + } +} +void _wrapping_dap_chain_net_srv_client_callback_pkt_it(dap_chain_net_srv_client_t* a_client, void *a_arg){} + +int PyDapChainNetSrvClient_init(PyDapChainNetSrvClientObject* self, PyObject *args, PyObject *kwds){ + const char *kwlist[] = { + "net", + "addr", + "port", + "handler", + NULL + }; + PyObject *obj_net, *obj_hander; + const char *addr; + uint16_t port; + if (!PyArg_ParseTupleAndKeywords(args, kwds, "OsH", (char *)kwlist, &obj_net, &addr, &port, &obj_hander)){ + return -1; + } + if (!PyCallable_Check(obj_hander)){ + return -1; + } + dap_chain_net_srv_client_callbacks_t callbacks = {0}; + callbacks.connected = _wrapping_dap_chain_net_srv_client_callback_connected; + callbacks.disconnected = _wrapping_dap_chain_net_srv_client_callback_disconnected; + callbacks.deleted = _wrapping_dap_chain_net_srv_client_callback_deleted; +// callbacks. + dap_chain_net_srv_client_create_n_connect(((PyDapChainNetObject*)obj_net)->chain_net, (char *)addr, port, &callbacks, obj_hander); + return 0; +} + +PyObject *wrapping_dap_chain_net_srv_client_write(PyObject *self, PyObject *args){ + return Py_None; +} diff --git a/modules/cellframe-sdk/net/srv/src/wrapping_dap_chain_net_srv_client_remote.c b/modules/cellframe-sdk/net/srv/src/wrapping_dap_chain_net_srv_client_remote.c new file mode 100644 index 0000000000000000000000000000000000000000..a6451cde5494007fce952011c8235a2e9ab33542 --- /dev/null +++ b/modules/cellframe-sdk/net/srv/src/wrapping_dap_chain_net_srv_client_remote.c @@ -0,0 +1,49 @@ +//#include "wrapping_dap_chain_net_" +#include "wrapping_dap_chain_net_srv_client_remote.h" + +#define WRAPPING_DAP_CHAIN_NET_SRV_CLIENT(a) ((dap_chain_net_srv_client_remote_t*)((PyDapPyDapChainNetSrvClientObject*)a)->srv_client) +#define _PyDapChainNetSrvClient(a) ((PyDapChainNetSrvClient*)a) + +PyObject *wrapping_dap_chain_net_srv_client_remote_get_ch(PyObject *self, void *closure){ + (void)closure; + //TODO + return Py_None; +} +PyObject *wrapping_dap_chain_net_srv_client_remote_get_ts_created(PyObject *self, void *closure){ + (void)closure; + return Py_BuildValue("k", ((PyDapChainNetSrvClientRemoteObject*)self)->srv_client_remote->ts_created); +} +PyObject *wrapping_dap_chain_net_srv_client_remote_get_created(PyObject *self, void *closure){ + (void)closure; + PyDateTime_IMPORT; + PyObject *l_obj_long_ts = PyLong_FromDouble(((PyDapChainNetSrvClientRemoteObject*)self)->srv_client_remote->ts_created); + PyObject *l_obj_tuple = Py_BuildValue("(O)", l_obj_long_ts); + PyObject *l_obj_dateTime = PyDateTime_FromTimestamp(l_obj_tuple); + return l_obj_dateTime; +} +PyObject *wrapping_dap_chain_net_srv_client_remote_get_stream_worker(PyObject *self, void *closure){ + (void)closure; + //TODO + return Py_None; +} +PyObject *wrapping_dap_chain_net_srv_client_remote_get_session_id(PyObject *self, void *closure){ + (void)closure; + return Py_BuildValue("i", ((PyDapChainNetSrvClientRemoteObject*)self)->srv_client_remote->session_id); +} +PyObject *wrapping_dap_chain_net_srv_client_remote_get_bytes_received(PyObject *self, void *closure){ + (void)closure; + dap_chain_net_srv_client_remote_t *l_client = ((PyDapChainNetSrvClientRemoteObject*)self)->srv_client_remote; + return Py_BuildValue("k", l_client->bytes_received); +} +PyObject *wrapping_dap_chain_net_srv_client_remote_get_bytes_send(PyObject *self, void *closure){ + (void)closure; + dap_chain_net_srv_client_remote_t *l_client = ((PyDapChainNetSrvClientRemoteObject*)self)->srv_client_remote; + return Py_BuildValue("k", l_client->bytes_sent); +} +//PyObject *wrapping_dap_chain_net_srv_client_remote_get_bytes_prev(PyObject *self, void *closure){ +// (void)closure; +//} +//PyObject *wrapping_dap_chain_net_srv_client_remote_get_bytes_next(PyObject *self, void *closure){ +// (void)closure; +// PyDapChain +//} diff --git a/modules/cellframe-sdk/net/srv/src/wrapping_dap_chain_net_srv_common.c b/modules/cellframe-sdk/net/srv/src/wrapping_dap_chain_net_srv_common.c new file mode 100644 index 0000000000000000000000000000000000000000..8fb82f21a5da01262536f70b31fe7f5dff5a3c0b --- /dev/null +++ b/modules/cellframe-sdk/net/srv/src/wrapping_dap_chain_net_srv_common.c @@ -0,0 +1,87 @@ +#include "wrapping_dap_chain_net_srv_common.h" + +/* Attribute for ChainNetSrvPrice */ +#define WRAPPING_DAP_CHAIN_NET_SRV_PRICE(a) ((PyDapChainNetSrvPriceObject*) a) + +PyObject *wrapping_dap_chain_net_srv_get_wallet(PyObject *self, void *closure){ + (void)closure; +} +PyObject *wrapping_dap_chain_net_srv_get_net_name(PyObject *self, void *closure){ + (void)closure; + return Py_BuildValue("s", WRAPPING_DAP_CHAIN_NET_SRV_PRICE(self)->price.net_name); +} +PyObject *wrapping_dap_chain_net_srv_get_net(PyObject *self, void *closure){ + (void)closure; + PyDapChainNetObject *l_obj_net = PyObject_New(PyDapChainNetObject, &DapChainNetObject_DapChainNetObjectType); + PyObject_Dir((PyObject*)l_obj_net); + l_obj_net->chain_net = WRAPPING_DAP_CHAIN_NET_SRV_PRICE(self)->price.net; + return (PyObject*)l_obj_net; +} +PyObject *wrapping_dap_chain_net_srv_get_value_datoshi(PyObject *self, void *closure){ + (void)closure; + return Py_BuildValue("k", WRAPPING_DAP_CHAIN_NET_SRV_PRICE(self)->price.value_datoshi); +} +PyObject *wrapping_dap_chain_net_srv_get_token(PyObject *self, void *closure){ + (void)closure; + return Py_BuildValue("s", WRAPPING_DAP_CHAIN_NET_SRV_PRICE(self)->price.token); +} +PyObject *wrapping_dap_chain_net_srv_get_units(PyObject *self, void *closure){ + (void)closure; + return Py_BuildValue("k", WRAPPING_DAP_CHAIN_NET_SRV_PRICE(self)->price.units); +} +PyObject *wrapping_dap_chain_net_srv_get_units_uid(PyObject *self, void *closure){ + (void)closure; + PyDapChainNetSrvPriceUnitUIDObject *l_price_unit_uid = PyObject_New(PyDapChainNetSrvPriceUnitUIDObject, &DapChainNetSrvPriceUnitUIDObject_DapChainNetSrvPriceUnitUIDObjectType); + PyObject_Dir((PyObject*)l_price_unit_uid); + l_price_unit_uid->price_unit_uid = WRAPPING_DAP_CHAIN_NET_SRV_PRICE(self)->price.units_uid; + return (PyObject*)l_price_unit_uid; +} + +/* wrapping dap_chain_net_srv_order_direction */ + +PyObject *DapChainNetSrvOrderDirection_str(PyObject *self){ + char *ret; + switch (((PyDapChainNetSrvOrderDirectionObject*)self)->direction) { + case 1: + ret = "SERV_DIR_BUY"; + break; + case 2: + ret = "SERV_DIR_SELL"; + break; + default: + ret = "SERV_DIR_UNDEFINED"; + break; + } + return Py_BuildValue("s", ret); +} + +PyObject *wrapping_dap_chain_net_srv_order_direction_get_serv_dir_buy(PyObject *self, PyObject *args){ + (void)self; + (void)args; + PyDapChainNetSrvOrderDirectionObject *l_obj = PyObject_New( + PyDapChainNetSrvOrderDirectionObject, + &DapChainNetSrvOrderDirectionObject_DapChainNetSrvOrderDirectionObjectType); + PyObject_Dir((PyObject*)l_obj); + l_obj->direction = SERV_DIR_BUY; + return (PyObject*)l_obj; +} +PyObject *wrapping_dap_chain_net_srv_order_direction_get_serv_dir_sell(PyObject *self, PyObject *args){ + (void)self; + (void)args; + PyDapChainNetSrvOrderDirectionObject *l_obj = PyObject_New( + PyDapChainNetSrvOrderDirectionObject, + &DapChainNetSrvOrderDirectionObject_DapChainNetSrvOrderDirectionObjectType); + PyObject_Dir((PyObject*)l_obj); + l_obj->direction = SERV_DIR_SELL; + return (PyObject*)l_obj; +} +PyObject *wrapping_dap_chain_net_srv_order_direction_get_serv_dir_undefined(PyObject *self, PyObject *args){ + (void)self; + (void)args; + PyDapChainNetSrvOrderDirectionObject *l_obj = PyObject_New( + PyDapChainNetSrvOrderDirectionObject, + &DapChainNetSrvOrderDirectionObject_DapChainNetSrvOrderDirectionObjectType); + PyObject_Dir((PyObject*)l_obj); + l_obj->direction = SERV_DIR_UNDEFINED; + return (PyObject*)l_obj; +} diff --git a/modules/cellframe-sdk/net/srv/src/wrapping_dap_chain_net_srv_order.c b/modules/cellframe-sdk/net/srv/src/wrapping_dap_chain_net_srv_order.c new file mode 100644 index 0000000000000000000000000000000000000000..dd28206ddfe5a113df5f433192194a755bd2a6b0 --- /dev/null +++ b/modules/cellframe-sdk/net/srv/src/wrapping_dap_chain_net_srv_order.c @@ -0,0 +1,264 @@ +#include "wrapping_dap_chain_net_srv_order.h" + +#define WRAPPING_DAP_CHAIN_NET_SRV_ORDER(a) ((PyDapChainNetSrvOrderObject*)a) + +int PyDapChainNetSrvOrder_init(PyDapChainNetSrvOrderObject *self, PyObject *args, PyObject *kwds){ + const char *kwlist[] = { + "net", + "direction", + "srvUID", + "nodeAddr", + "txCondHash", + "price", + "priceUnit", + "priceTicker", + "expires", + "ext", +// "extSize", +// "region", +// "continentNum", + "key", + NULL + }; + PyObject *obj_net, *obj_direction, *obj_srv_uid, *obj_node_addr, *obj_tx_cond_hash, *obj_price_unit; + uint64_t price; + char *price_ticker; + unsigned long expires; + PyObject *obj_ext, *obj_key; + if (!PyArg_ParseTupleAndKeywords(args, kwds, "OOOOOkOOO", kwlist, &obj_net, &obj_direction, &obj_srv_uid, + &obj_node_addr, &obj_tx_cond_hash, &price, &obj_price_unit, &price_ticker, + &expires, &obj_ext, &obj_key)){ + return -1; + } + void* l_ext = (void*)PyBytes_AsString(obj_ext); + size_t l_ext_size = PyBytes_Size(obj_ext); + dap_chain_net_srv_order_create( + ((PyDapChainNetObject*)obj_net)->chain_net, + ((PyDapChainNetSrvOrderDirectionObject*)obj_direction)->direction, + ((PyDapChainNetSrvUIDObject*)obj_srv_uid)->net_srv_uid, + *((PyDapChainNodeAddrObject*)obj_node_addr)->node_addr, + *((PyDapHashFastObject*)obj_tx_cond_hash)->hash_fast, + price, + ((PyDapChainNetSrvPriceUnitUIDObject*)obj_price_unit)->price_unit_uid, + price_ticker, + (time_t)expires, + l_ext, + l_ext_size, + "", + 0, + ((PyCryptoKeyObject*)obj_key)->key + ); + return 0; +} +PyObject *wrapping_dap_chain_net_srv_order_get_version(PyObject *self, void *closure){ + (void)closure; + return Py_BuildValue("H", WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order->version); +} +PyObject *wrapping_dap_chain_net_srv_order_get_srv_uid(PyObject *self, void *closure){ + (void)closure; + PyDapChainNetSrvUIDObject *obj_srv_uid = PyObject_New(PyDapChainNetSrvUIDObject, &DapChainNetSrvUIDObject_DapChainNetSrvUIDObjectType); + PyObject_Dir((PyObject*)obj_srv_uid); + obj_srv_uid->net_srv_uid = WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order->srv_uid; + return (PyObject*)obj_srv_uid; +} +PyObject *wrapping_dap_chain_net_srv_order_get_srv_direction(PyObject *self, void *closure){ + (void)closure; + PyDapChainNetSrvOrderDirectionObject *srv_direction = PyObject_New(PyDapChainNetSrvOrderDirectionObject, &DapChainNetSrvOrderDirectionObject_DapChainNetSrvOrderDirectionObjectType); + PyObject_Dir((PyObject*)srv_direction); + srv_direction->direction = WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order->direction; + return (PyObject*)srv_direction; +} +PyObject *wrapping_dap_chain_net_srv_order_get_srv_node_addr(PyObject *self, void *closure){ + (void)closure; + PyDapChainNodeAddrObject *l_obj_node_addr = PyObject_New(PyDapChainNodeAddrObject, &DapChainNodeAddrObject_DapChainNodeAddrObjectType); + PyObject_Dir((PyObject*)l_obj_node_addr); + l_obj_node_addr->node_addr = &WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order->node_addr; + return (PyObject*)l_obj_node_addr; +} +PyObject *wrapping_dap_chain_net_srv_order_get_srv_tx_cond_hash(PyObject *self, void *closure){ + (void)closure; + PyDapHashFastObject *l_obj_hf = PyObject_New(PyDapHashFastObject, &DapHashFastObject_DapHashFastObjectType); + PyObject_Dir((PyObject*)l_obj_hf); + l_obj_hf->hash_fast = &WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order->tx_cond_hash; + return (PyObject*)l_obj_hf; +} +PyObject *wrapping_dap_chain_net_srv_order_get_srv_price_unit(PyObject *self, void *closure){ + (void)closure; + PyDapChainNetSrvPriceUnitUIDObject *l_obj_srv_price_uid = PyObject_New(PyDapChainNetSrvPriceUnitUIDObject, &DapChainNetSrvPriceUnitUIDObject_DapChainNetSrvPriceUnitUIDObjectType); + PyObject_Dir((PyObject*)l_obj_srv_price_uid); + l_obj_srv_price_uid->price_unit_uid = WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order->price_unit; + return (PyObject*)l_obj_srv_price_uid; +} +PyObject *wrapping_dap_chain_net_srv_order_get_srv_ts_created(PyObject *self, void *closure){ + (void)closure; + return Py_BuildValue("k", WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order->ts_created); +} +PyObject *wrapping_dap_chain_net_srv_order_get_srv_ts_expires(PyObject *self, void *closure){ + (void)closure; + return Py_BuildValue("k", WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order->ts_expires); +} +PyObject *wrapping_dap_chain_net_srv_order_get_srv_price(PyObject *self, void *closure){ + (void)closure; + return Py_BuildValue("k", WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order->price); +} +PyObject *wrapping_dap_chain_net_srv_order_get_srv_price_ticker(PyObject *self, void *closure){ + (void)closure; + return Py_BuildValue("s", WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order->price_ticker); +} +//PyObject *wrapping_dap_chain_net_srv_order_get_srv_free_space(PyObject *self, void *closure){} +PyObject *wrapping_dap_chain_net_srv_order_get_srv_ext_size(PyObject *self, void *closure){ + (void)closure; + if(WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order == NULL){ + return Py_BuildValue("I", 0); + }else{ + return Py_BuildValue("I", WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order->ext_size); + } +} +PyObject *wrapping_dap_chain_net_srv_order_get_srv_ext_n_sign(PyObject *self, void *closure) { + (void) closure; + if (WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order != NULL) { + dap_sign_t *l_sign = WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order->ext[WRAPPING_DAP_CHAIN_NET_SRV_ORDER( + self)->order->ext_size]; + if (dap_sign_verify_size(l_sign, WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order->ext_size)) { + PyDapSignObject *obj_sign = PyObject_New(PyDapSignObject, &DapSignObject_DapSignObjectType); + PyObject_Dir((PyObject *) obj_sign); + obj_sign->sign = l_sign; + return (PyObject *) obj_sign; + } + return Py_None; + } + return Py_None; +} + +//Functions +PyObject *wrapping_dap_chain_net_srv_order_get_size(PyObject *self, PyObject *args){ + (void)args; + return Py_BuildValue("n", dap_chain_net_srv_order_get_size(WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order)); +} +//PyObject *wrapping_dap_chain_net_srv_order_set_continent_region(PyObject *self, PyObject *args){} +//PyObject *wrapping_dap_chain_net_srv_order_get_continent_region(PyObject *self, PyObject *args){} + +//PyObject *wrapping_dap_chain_net_srv_order_get_country_code(PyObject *self, PyObject *args){} +//PyObject *wrapping_dap_chain_net_srv_order_continents_count(PyObject *self, PyObject *args){} +//PyObject *wrapping_dap_chain_net_srv_order_continent_to_str(PyObject *self, PyObject *args){} +//PyObject *wrapping_dap_chain_net_srv_order_continent_to_num(PyObject *self, PyObject *args){} + +PyObject *wrapping_dap_chain_net_srv_order_find(PyObject *self, PyObject *args){ + (void)self; + PyObject *obj_net; + PyObject *obj_order_hash; + if (!PyArg_ParseTuple(args, "OO", &obj_net, &obj_order_hash)){ + PyErr_SetString(PyExc_ValueError, "This function must take two arguments. "); + return NULL; + } + dap_chain_net_srv_order_t *l_order = NULL; + if(!PyDapChainNet_Check(obj_net)){ + PyErr_SetString(PyExc_ValueError, "As the first argument, this function takes " + "an instance of an object of type ChainNet."); + return NULL; + } + if (PyUnicode_Check(obj_order_hash)){ + const char *l_str = PyUnicode_AsUTF8(obj_order_hash); + l_order = dap_chain_net_srv_order_find_by_hash_str(((PyDapChainNetObject*)obj_net)->chain_net, l_str); + if (l_order == NULL){ + return Py_None; + } + PyDapChainNetSrvOrderObject *l_obj_order = PyObject_New(PyDapChainNetSrvOrderObject, &DapChainNetSrvOrderObject_DapChainNetSrvOrderObjectType); + PyObject_Dir((PyObject *)l_obj_order); + l_obj_order->order = l_order; + return (PyObject*)l_obj_order; + } + if (PyDapHashFast_Check(obj_order_hash)){ + l_order = dap_chain_net_srv_order_find_by_hash(((PyDapChainNetObject*)obj_net)->chain_net, + ((PyDapHashFastObject*)obj_order_hash)->hash_fast); + if (l_order == NULL){ + return Py_None; + } + PyDapChainNetSrvOrderObject *l_obj_order = PyObject_New(PyDapChainNetSrvOrderObject, &DapChainNetSrvOrderObject_DapChainNetSrvOrderObjectType); + PyObject_Dir((PyObject *)l_obj_order); + l_obj_order->order = l_order; + return (PyObject*)l_obj_order; + } + PyErr_SetString(PyExc_ValueError, "An invalid argument type was passed to this function. " + "This function can take a string or an object of the HashFast type " + "as the second argument. "); + return NULL; +} + +PyObject *wrapping_dap_chain_net_srv_order_delete(PyObject *self, PyObject *args){ + (void)self; + PyObject *obj_net; + PyObject *obj_order_hash; + if (!PyArg_ParseTuple(args, "OO", &obj_net, &obj_order_hash)){ + PyErr_SetString(PyExc_ValueError, "This function must take two arguments. "); + return NULL; + } + if(!PyDapChainNet_Check(obj_net)){ + PyErr_SetString(PyExc_ValueError, "As the first argument, this function takes " + "an instance of an object of type ChainNet."); + return NULL; + } + int res = -1; + if (PyUnicode_Check(obj_order_hash)){ + const char *l_str = PyUnicode_AsUTF8(obj_order_hash); + res = dap_chain_net_srv_order_delete_by_hash_str(((PyDapChainNetObject*)obj_net)->chain_net, + l_str); + return Py_BuildValue("i", res); + } + if (PyDapHashFast_Check(obj_order_hash)) { + res =dap_chain_net_srv_order_delete_by_hash(((PyDapChainNetObject*)obj_net)->chain_net, + ((PyDapHashFastObject*)obj_order_hash)->hash_fast); + return Py_BuildValue("i", res); + } + PyErr_SetString(PyExc_ValueError, "An invalid argument type was passed to this function. " + "This function can take a string or an object of the HashFast type " + "as the second argument. "); + return NULL; +} + +PyObject *wrapping_dap_chain_net_srv_order_find_all_by(PyObject *self, PyObject *args){} +PyObject *wrapping_dap_chain_net_srv_order_save(PyObject *self, PyObject *args){ + PyObject *obj_net; + if(!PyArg_ParseTuple(args, "O", &obj_net)){ + PyErr_SetString(PyExc_ValueError, "This function must take one arguments. "); + return NULL; + } + if(!PyDapChainNet_Check(obj_net)){ + PyErr_SetString(PyExc_ValueError, "As the first argument, this function takes " + "an instance of an object of type ChainNet."); + return NULL; + } + int res = -1; + res = dap_chain_net_srv_order_save(((PyDapChainNetObject *) self)->chain_net, + WRAPPING_DAP_CHAIN_NET_SRV_ORDER(self)->order); + return Py_BuildValue("i", res); +} +PyObject *wrapping_dap_chain_net_srv_order_get_gdb_group(PyObject *self, PyObject *args){ + (void)self; + PyObject *obj_net; + if(!PyArg_ParseTuple(args, "O", &obj_net)){ + PyErr_SetString(PyExc_ValueError, "This function must take one arguments. "); + return NULL; + } + if(!PyDapChainNet_Check(obj_net)){ + PyErr_SetString(PyExc_ValueError, "As the first argument, this function takes " + "an instance of an object of type ChainNet."); + return NULL; + } + return Py_BuildValue("s", dap_chain_net_srv_order_get_gdb_group(((PyDapChainNetObject*)obj_net)->chain_net)); +} +PyObject *wrapping_dap_chain_net_srv_order_get_nodelist_group(PyObject *self, PyObject *args){ + (void)self; + PyObject *obj_net; + if(!PyArg_ParseTuple(args, "O", &obj_net)){ + PyErr_SetString(PyExc_ValueError, "This function must take one arguments. "); + return NULL; + } + if(!PyDapChainNet_Check(obj_net)){ + PyErr_SetString(PyExc_ValueError, "As the first argument, this function takes " + "an instance of an object of type ChainNet."); + return NULL; + } + return Py_BuildValue("s", + dap_chain_net_srv_order_get_nodelist_group(((PyDapChainNetObject*)obj_net)->chain_net)); +}