diff options
Diffstat (limited to 'plugins/pychrysalide/analysis/db')
-rw-r--r-- | plugins/pychrysalide/analysis/db/analyst.c | 48 |
1 files changed, 28 insertions, 20 deletions
diff --git a/plugins/pychrysalide/analysis/db/analyst.c b/plugins/pychrysalide/analysis/db/analyst.c index c55f34a..3cb77d1 100644 --- a/plugins/pychrysalide/analysis/db/analyst.c +++ b/plugins/pychrysalide/analysis/db/analyst.c @@ -30,7 +30,7 @@ #include <i18n.h> -#include <analysis/db/analyst.h> +#include <analysis/db/analyst-int.h> #include <core/collections.h> @@ -45,8 +45,8 @@ -/* Crée un nouvel objet Python de type 'AnalystClient'. */ -static PyObject *py_analyst_client_new(PyTypeObject *, PyObject *, PyObject *); +/* Initialise une instance sur la base du dérivé de GObject. */ +static int py_analyst_client_init(PyObject *, PyObject *, PyObject *); /* Envoie un contenu binaire pour conservation côté serveur. */ static PyObject *py_analyst_client_send_content(PyObject *, PyObject *); @@ -80,23 +80,26 @@ static PyObject *py_analyst_client_get_current_snapshot(PyObject *, void *); +CREATE_DYN_CONSTRUCTOR(analyst_client, G_TYPE_ANALYST_CLIENT); + + /****************************************************************************** * * -* Paramètres : type = type de l'objet à instancier. * +* Paramètres : self = objet à initialiser (théoriquement). * * args = arguments fournis à l'appel. * * kwds = arguments de type key=val fournis. * * * -* Description : Crée un nouvel objet Python de type 'AnalystClient'. * +* Description : Initialise une instance sur la base du dérivé de GObject. * * * -* Retour : Instance Python mise en place. * +* Retour : 0. * * * * Remarques : - * * * ******************************************************************************/ -static PyObject *py_analyst_client_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +static int py_analyst_client_init(PyObject *self, PyObject *args, PyObject *kwds) { - PyObject *result; /* Instance à retourner */ + int result; /* Bilan à retourner */ GLoadedContent *loaded; /* Contenu local déjà chargé */ const char *hash; /* Empreinte du binaire visé */ const char *class; /* Nature du contenu analysé */ @@ -107,7 +110,8 @@ static PyObject *py_analyst_client_new(PyTypeObject *type, PyObject *args, PyObj Py_ssize_t i; /* Boucle de parcours */ PyObject *item; /* Elément de la liste Python */ GDbCollection *collec; /* Version équivalente native */ - GAnalystClient *client; /* Serveur mis en place */ + GAnalystClient *client; /* Client mis en place */ + bool status; /* Bilan d'initialisation */ #define ANALYST_CLIENT_DOC \ "AnalystClient provides and receives binary updates to and from a connected" \ @@ -142,12 +146,17 @@ static PyObject *py_analyst_client_new(PyTypeObject *type, PyObject *args, PyObj loaded = NULL; ret = PyArg_ParseTuple(args, "ssO|O&", &hash, &class, &list, convert_to_loaded_content, &loaded); - if (!ret) return NULL; + if (!ret) return -1; + + /* Initialisation d'un objet GLib */ + + ret = forward_pygobjet_init(self); + if (ret == -1) return -1; if (!PySequence_Check(list)) { PyErr_SetString(PyExc_TypeError, _("The second argument must be a collection list")); - return NULL; + return -1; } length = PySequence_Length(list); @@ -165,7 +174,7 @@ static PyObject *py_analyst_client_new(PyTypeObject *type, PyObject *args, PyObj if (ret != 1) { delete_collections_list(&collections); - result = NULL; + result = -1; goto exit; } @@ -174,14 +183,11 @@ static PyObject *py_analyst_client_new(PyTypeObject *type, PyObject *args, PyObj } - client = g_analyst_client_new(hash, class, collections, loaded); + client = G_ANALYST_CLIENT(pygobject_get(self)); - if (client != NULL) - { - result = pygobject_new(G_OBJECT(client)); - g_object_unref(client); - } - else result = NULL; + status = g_analyst_client_setup(client, hash, class, collections, loaded); + + result = status ? 0 : -1; exit: @@ -861,7 +867,9 @@ PyTypeObject *get_python_analyst_client_type(void) .tp_methods = py_analyst_client_methods, .tp_getset = py_analyst_client_getseters, - .tp_new = py_analyst_client_new, + + .tp_init = py_analyst_client_init, + .tp_new = py_analyst_client_new }; |