Skip to content
Snippets Groups Projects
Commit 78bf5954 authored by alexey.stratulat's avatar alexey.stratulat
Browse files

[+] Added a list. It saved structures are saved in which a pointer to the link...

[+] Added a list. It saved structures are saved in which a pointer to the link of the registered plug-in and functions that are present in it are stored.
parent b797632c
No related branches found
No related tags found
1 merge request!27Support update sdk and merge plugins repo
#ifndef _DAP_CHAIN_PLUGINS_LIST_
#define _DAP_CHAIN_PLUGINS_LIST_
#include "Python.h"
#include "stdbool.h"
#include "dap_list.h"
#include "dap_common.h"
#include "dap_strfuncs.h"
#ifdef __cplusplus
extern "C" {
#endif
#undef LOG_TAG
#define LOG_TAG "dap_chain_plugins_list"
typedef struct dap_chain_plugin_module{
char *name;
PyObject *obj_module;
bool isFuncOnChainsUpdated;
bool isFuncOnGdbUpdated;
bool isFuncOnNetStatusChanged;
}dap_chain_plugins_module_t;
static dap_list_t* dap_chain_plugins_module_list;
int dap_chain_plugins_list_init();
void dap_chain_plugins_list_deint();
void dap_chain_plugins_list_add(PyObject *module, const char *name);
unsigned int dap_chain_plugins_list_lenght();
dap_chain_plugins_module_t *dap_chain_plugins_list_get_module(unsigned int id);
PyObject *dap_chain_plugins_list_get_object(unsigned int id);
bool dap_chai_plugins_list_module_check_on_chains_updated(unsigned int id);
bool dap_chai_plugins_list_module_check_on_gdb_updated(unsigned int id);
bool dap_chai_plugins_list_module_check_on_net_status_updated(unsigned int id);
bool dap_chain_plugins_list_module_del(dap_chain_plugins_module_t *module);
bool dap_chain_plugins_list_id_del(unsigned int id_module);
bool dap_chain_plugins_list_name_del(const char *name_module);
#ifdef __cplusplus
extern "C" {
#endif
#endif // _DAP_CHAIN_PLUGINS_LIST_
#include "dap_chain_plugins_list.h"
int dap_chain_plugins_list_init(){
dap_chain_plugins_module_list = dap_list_alloc();
}
void dap_chain_plugins_list_deint(){
unsigned int len = dap_chain_plugins_list_lenght();
if (len > 0){
for (unsigned int i=0; i < len; i++){
dap_chain_plugins_list_id_del(i);
}
}
dap_list_free(dap_chain_plugins_module_list);
}
void dap_chain_plugins_list_add(PyObject *module, const char *name){
dap_chain_plugins_module_t *module_s = (dap_chain_plugins_module_t*)malloc(sizeof (dap_chain_plugins_module_t));
module_s->name = dap_strdup(name);
module_s->obj_module = module;
module_s->isFuncOnGdbUpdated = true;
module_s->isFuncOnChainsUpdated = true;
module_s->isFuncOnNetStatusChanged = true;
//Checking func
PyObject *F_FuncOnGdbUpdated = PyObject_GetAttrString(module_s->obj_module, "onGdbUpdated");
PyObject *F_FuncOnChainsUpdated = PyObject_GetAttrString(module_s->obj_module, "onChainsUpdated");
PyObject *F_FuncOnNetStatusChanged = PyObject_GetAttrString(module_s->obj_module, "onNetStatusChanged");
if (F_FuncOnGdbUpdated == NULL || !PyCallable_Check(F_FuncOnGdbUpdated)){
log_it(L_WARNING, "Plugin %s don't callable function onGdbUpdated", module_s->name);
module_s->isFuncOnGdbUpdated = false;
}
if (F_FuncOnChainsUpdated == NULL || !PyCallable_Check(F_FuncOnChainsUpdated)){
log_it(L_WARNING, "Plugin %s don't callable function onChainsUpdated", module_s->name);
module_s->isFuncOnChainsUpdated = false;
}
if (F_FuncOnNetStatusChanged == NULL || !PyCallable_Check(F_FuncOnNetStatusChanged)){
log_it(L_WARNING, "Plugin %s don't callable function onNetStatusChanged", module_s->name);
module_s->isFuncOnNetStatusChanged = false;
}
//Added structur to list
dap_list_append(dap_chain_plugins_module_list, module_s);
}
unsigned int dap_chain_plugins_list_lenght(){
return dap_list_length(dap_chain_plugins_module_list);
}
dap_chain_plugins_module_t *dap_chain_plugins_list_get_module(unsigned int id){
if (dap_chain_plugins_list_lenght() < id)
return NULL;
return (dap_chain_plugins_module_t*)dap_list_nth_data(dap_chain_plugins_module_list, id);
}
PyObject *dap_chain_plugins_list_get_object(unsigned int id){
if (dap_chain_plugins_list_lenght() < id)
return NULL;
return (dap_chain_plugins_list_get_module(id))->obj_module;
}
bool dap_chai_plugins_list_module_check_on_chains_updated(unsigned int id){
if (dap_chain_plugins_list_lenght() < id)
return NULL;
dap_chain_plugins_module_t *module = (dap_chain_plugins_module_t*)dap_list_nth_data(
dap_chain_plugins_module_list, id
);
return module->isFuncOnChainsUpdated;
}
bool dap_chai_plugins_list_module_check_on_gdb_updated(unsigned int id){
if (dap_chain_plugins_list_lenght() < id)
return NULL;
dap_chain_plugins_module_t *module = (dap_chain_plugins_module_t*)dap_list_nth_data(
dap_chain_plugins_module_list, id
);
return module->isFuncOnGdbUpdated;
}
bool dap_chai_plugins_list_module_check_on_net_status_updated(unsigned int id){
if (dap_chain_plugins_list_lenght() < id)
return NULL;
dap_chain_plugins_module_t *module = (dap_chain_plugins_module_t*)dap_list_nth_data(
dap_chain_plugins_module_list, id
);
return module->isFuncOnNetStatusChanged;
}
bool dap_chain_plugins_list_module_del(dap_chain_plugins_module_t *module){
for (unsigned int i=0; i < dap_chain_plugins_list_lenght(); i++){
if (((dap_chain_plugins_module_t*)dap_list_nth_data(dap_chain_plugins_module_list, i)) == module){
dap_chain_plugins_list_id_del(i);
return true;
}
}
return false;
}
bool dap_chain_plugins_list_id_del(unsigned int id_module){
if (dap_chain_plugins_list_lenght() < id_module)
return false;
dap_chain_plugins_module_t *mod = (dap_chain_plugins_module_t*)dap_list_nth_data(dap_chain_plugins_module_list, id_module);
Py_XDECREF(mod->obj_module);
free(mod->name);
dap_list_remove(dap_chain_plugins_module_list, dap_list_nth_data(dap_chain_plugins_module_list, id_module));
return true;
}
bool dap_chain_plugins_list_name_del(const char *name_module){
for (unsigned int i=0; i < dap_chain_plugins_list_lenght(); i++){
if (strcmp(((dap_chain_plugins_module_t*)dap_list_nth_data(dap_chain_plugins_module_list, i))->name, name_module) == 0){
dap_chain_plugins_list_id_del(i);
return true;
}
}
return false;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment