Newer
Older

alexey.stratulat
committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#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;
}