diff options
Diffstat (limited to 'plugins/pychrysalide/analysis')
| -rw-r--r-- | plugins/pychrysalide/analysis/binary.c | 50 | ||||
| -rw-r--r-- | plugins/pychrysalide/analysis/db/client.c | 60 | ||||
| -rw-r--r-- | plugins/pychrysalide/analysis/db/collection.c | 26 | ||||
| -rw-r--r-- | plugins/pychrysalide/analysis/db/constants.c | 1 | ||||
| -rw-r--r-- | plugins/pychrysalide/analysis/db/item.c | 40 | 
5 files changed, 160 insertions, 17 deletions
| diff --git a/plugins/pychrysalide/analysis/binary.c b/plugins/pychrysalide/analysis/binary.c index 01160a5..e97bea6 100644 --- a/plugins/pychrysalide/analysis/binary.c +++ b/plugins/pychrysalide/analysis/binary.c @@ -55,6 +55,9 @@ static PyObject *py_loaded_binary_find_collection(PyObject *, PyObject *);  /* Demande l'intégration d'une modification dans une collection. */  static PyObject *py_loaded_binary_add_to_collection(PyObject *, PyObject *); +/* Active les éléments en amont d'un horodatage donné. */ +static PyObject *py_loaded_binary_set_last_active(PyObject *, PyObject *); +  /* Fournit le nom associé à l'élément binaire. */  static PyObject *py_loaded_binary_get_name(PyObject *, void *); @@ -268,6 +271,52 @@ static PyObject *py_loaded_binary_add_to_collection(PyObject *self, PyObject *ar  /******************************************************************************  *                                                                             * +*  Paramètres  : self = binaire chargé à manipuler.                           * +*                args = arguments d'appel à consulter.                        * +*                                                                             * +*  Description : Active les éléments en amont d'un horodatage donné.          * +*                                                                             * +*  Retour      : True si la commande a bien été envoyée, False sinon.         * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static PyObject *py_loaded_binary_set_last_active(PyObject *self, PyObject *args) +{ +    PyObject *result;                       /* Bilan à retourner           */ +    unsigned long long timestamp;           /* Horodatage de limite        */ +    int ret;                                /* Bilan de lecture des args.  */ +    GLoadedBinary *binary;                  /* Binaire en cours d'analyse  */ +    bool status;                            /* Bilan de l'opération        */ + +#define LOADED_BINARY_SET_LAST_ACTIVE_METHOD PYTHON_METHOD_DEF          \ +(                                                                       \ +    set_last_active, "$self, timestamp, /",                             \ +    METH_VARARGS, py_loaded_binary,                                     \ +    "Define the timestamp of the last active item in the collection"    \ +    " and returns the status of the request transmission."              \ +) + +    ret = PyArg_ParseTuple(args, "K", ×tamp); +    if (!ret) return NULL; + +    binary = G_LOADED_BINARY(pygobject_get(self)); + +    status = g_loaded_binary_set_last_active(binary, timestamp); + +    result = status ? Py_True : Py_False; +    Py_INCREF(result); + +    return result; + +} + + +/****************************************************************************** +*                                                                             *  *  Paramètres  : self    = objet Python concerné par l'appel.                 *  *                closure = non utilisé ici.                                   *  *                                                                             * @@ -468,6 +517,7 @@ PyTypeObject *get_python_loaded_binary_type(void)          LOADED_BINARY_GET_CLIENT_METHOD,          LOADED_BINARY_FIND_COLLECTION_METHOD,          LOADED_BINARY_ADD_TO_COLLECTION_METHOD, +        LOADED_BINARY_SET_LAST_ACTIVE_METHOD,          { NULL }      }; diff --git a/plugins/pychrysalide/analysis/db/client.c b/plugins/pychrysalide/analysis/db/client.c index 13966f5..e5b67da 100644 --- a/plugins/pychrysalide/analysis/db/client.c +++ b/plugins/pychrysalide/analysis/db/client.c @@ -51,6 +51,9 @@ static PyObject *py_hub_client_stop(PyObject *, PyObject *);  /* Effectue une demande de sauvegarde de l'état courant. */  static PyObject *py_hub_client_save(PyObject *, PyObject *); +/* Active les éléments en amont d'un horodatage donné. */ +static PyObject *py_hub_client_set_last_active(PyObject *, PyObject *); +  /****************************************************************************** @@ -146,7 +149,7 @@ static PyObject *py_hub_client_new(PyTypeObject *type, PyObject *args, PyObject  /******************************************************************************  *                                                                             * -*  Paramètres  : self = serveur à manipuler.                                  * +*  Paramètres  : self = client à manipuler.                                   *  *                args = paramètres à transmettre à l'appel natif.             *  *                                                                             *  *  Description : Démarre la connexion à la base de données.                   * @@ -201,7 +204,7 @@ static PyObject *py_hub_client_start(PyObject *self, PyObject *args)  /******************************************************************************  *                                                                             * -*  Paramètres  : self = serveur à manipuler.                                  * +*  Paramètres  : self = client à manipuler.                                   *  *                args = arguments d'appel non utilisés ici.                   *  *                                                                             *  *  Description : Arrête la connexion à la base de données.                    * @@ -238,7 +241,7 @@ static PyObject *py_hub_client_stop(PyObject *self, PyObject *args)  /******************************************************************************  *                                                                             * -*  Paramètres  : self = serveur à manipuler.                                  * +*  Paramètres  : self = client à manipuler.                                   *  *                args = arguments d'appel non utilisés ici.                   *  *                                                                             *  *  Description : Effectue une demande de sauvegarde de l'état courant.        * @@ -279,6 +282,56 @@ static PyObject *py_hub_client_save(PyObject *self, PyObject *args)  /******************************************************************************  *                                                                             * +*  Paramètres  : self = client à manipuler.                                   * +*                args = arguments d'appel à consulter.                        * +*                                                                             * +*  Description : Active les éléments en amont d'un horodatage donné.          * +*                                                                             * +*  Retour      : True si la commande a bien été envoyée, False sinon.         * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static PyObject *py_hub_client_set_last_active(PyObject *self, PyObject *args) +{ +    PyObject *result;                       /* Bilan à retourner           */ +    unsigned long long timestamp;           /* Horodatage de limite        */ +    int ret;                                /* Bilan de lecture des args.  */ +    GHubClient *client;                     /* Version native du serveur   */ +    bool status;                            /* Bilan de l'opération        */ + +#define HUB_CLIENT_SET_LAST_ACTIVE_METHOD PYTHON_METHOD_DEF             \ +(                                                                       \ +    set_last_active, "$self, timestamp, /",                             \ +    METH_VARARGS, py_hub_client,                                        \ +    "Define the timestamp of the last active item in the collection"    \ +    " and returns the status of the request transmission."              \ +    "\n"                                                                \ +    "This method should not be used directly. Prefer calling"           \ +    " pychrysalide.analysis.LoadedBinary.set_last_active() instead,"    \ +    " as some items may be volatile and thus not handled by clients."   \ +) + +    ret = PyArg_ParseTuple(args, "K", ×tamp); +    if (!ret) return NULL; + +    client = G_HUB_CLIENT(pygobject_get(self)); + +    status = g_hub_client_set_last_active(client, timestamp); + +    result = status ? Py_True : Py_False; +    Py_INCREF(result); + +    return result; + +} + + +/****************************************************************************** +*                                                                             *  *  Paramètres  : -                                                            *  *                                                                             *  *  Description : Fournit un accès à une définition de type à diffuser.        * @@ -295,6 +348,7 @@ PyTypeObject *get_python_hub_client_type(void)          HUB_CLIENT_START_METHOD,          HUB_CLIENT_STOP_METHOD,          HUB_CLIENT_SAVE_METHOD, +        HUB_CLIENT_SET_LAST_ACTIVE_METHOD,          { NULL }      }; diff --git a/plugins/pychrysalide/analysis/db/collection.c b/plugins/pychrysalide/analysis/db/collection.c index e62c17e..53cdccc 100644 --- a/plugins/pychrysalide/analysis/db/collection.c +++ b/plugins/pychrysalide/analysis/db/collection.c @@ -59,10 +59,9 @@ static PyObject *py_db_collection_get_items(PyObject *self, void *closure)  {      PyObject *result;                       /* Trouvailles à retourner     */      GDbCollection *collec;                  /* Version native              */ -    size_t counter;                         /* Décompte des éléments       */ -    GList *items;                           /* Eléments déjà en place      */ -    GList *iter;                            /* Boucle de parcours          */ -    int ret;                                /* Bilan d'une extension       */ +    size_t count;                           /* Décompte des éléments       */ +    GDbItem **items;                        /* Eléments déjà en place      */ +    size_t i;                               /* Boucle de parcours          */  #define DB_COLLECTION_ITEMS_ATTRIB PYTHON_GET_DEF_FULL      \  (                                                           \ @@ -74,22 +73,21 @@ static PyObject *py_db_collection_get_items(PyObject *self, void *closure)      collec = G_DB_COLLECTION(pygobject_get(self)); -    counter = 0; -    result = PyTuple_New(counter); -      g_db_collection_rlock(collec); -    items = g_db_collection_get_items(G_DB_COLLECTION(collec)); - -    for (iter = g_list_first(items); iter != NULL; iter = g_list_next(iter)) -    { -        ret = _PyTuple_Resize(&result, ++counter); -        if (ret == -1) break; +    items = g_db_collection_get_items(G_DB_COLLECTION(collec), &count); -        PyTuple_SetItem(result, counter - 1, pygobject_new(G_OBJECT(iter->data))); +    result = PyTuple_New(count); +    for (i = 0; i < count; i++) +    { +        PyTuple_SetItem(result, i, pygobject_new(G_OBJECT(items[i]))); +        g_object_unref(G_OBJECT(items[i]));      } +    if (items != NULL) +        free(items); +      g_db_collection_runlock(collec);      return result; diff --git a/plugins/pychrysalide/analysis/db/constants.c b/plugins/pychrysalide/analysis/db/constants.c index 46d0876..07c7a06 100644 --- a/plugins/pychrysalide/analysis/db/constants.c +++ b/plugins/pychrysalide/analysis/db/constants.c @@ -96,6 +96,7 @@ bool define_db_item_constants(PyTypeObject *type)      if (result) result = add_const_to_group(values, "UPDATED", DIF_UPDATED);      if (result) result = add_const_to_group(values, "VOLATILE", DIF_VOLATILE);      if (result) result = add_const_to_group(values, "BROKEN", DIF_BROKEN); +    if (result) result = add_const_to_group(values, "DISABLED", DIF_DISABLED);      if (!result)      { diff --git a/plugins/pychrysalide/analysis/db/item.c b/plugins/pychrysalide/analysis/db/item.c index 0923268..7ef30af 100644 --- a/plugins/pychrysalide/analysis/db/item.c +++ b/plugins/pychrysalide/analysis/db/item.c @@ -48,6 +48,9 @@ static PyObject *py_db_item_remove_flag(PyObject *, PyObject *);  /* Décrit l'élément de collection en place. */  static PyObject *py_db_item_get_label(PyObject *, void *); +/* Fournit l'horodatage associé à l'élément de collection. */ +static PyObject *py_db_item_get_timestamp(PyObject *, void *); +  /* Indique les propriétés particulières appliquées à l'élément. */  static PyObject *py_db_item_get_flags(PyObject *, void *); @@ -178,6 +181,42 @@ static PyObject *py_db_item_get_label(PyObject *self, void *closure)  *  Paramètres  : self    = objet Python concerné par l'appel.                 *  *                closure = non utilisé ici.                                   *  *                                                                             * +*  Description : Fournit l'horodatage associé à l'élément de collection.      * +*                                                                             * +*  Retour      : Date de création de l'élément.                               * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static PyObject *py_db_item_get_timestamp(PyObject *self, void *closure) +{ +    PyObject *result;                       /* Valeur à retourner          */ +    GDbItem *item;                          /* Elément à consulter         */ +    timestamp_t timestamp;                  /* Horodatage de l'élément     */ + +#define DB_ITEM_TIMESTAMP_ATTRIB PYTHON_GET_DEF_FULL    \ +(                                                       \ +    timestamp, py_db_item,                              \ +    "Timestamp of the item creation."                   \ +) + +    item = G_DB_ITEM(pygobject_get(self)); + +    timestamp = g_db_item_get_timestamp(item); + +    result = PyLong_FromUnsignedLongLong(timestamp); + +    return result; + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : self    = objet Python concerné par l'appel.                 * +*                closure = non utilisé ici.                                   * +*                                                                             *  *  Description : Indique les propriétés particulières appliquées à l'élément. *  *                                                                             *  *  Retour      : Propriétés actives de l'élément.                             * @@ -232,6 +271,7 @@ PyTypeObject *get_python_db_item_type(void)      static PyGetSetDef py_db_item_getseters[] = {          DB_ITEM_LABEL_ATTRIB, +        DB_ITEM_TIMESTAMP_ATTRIB,          DB_ITEM_FLAGS_ATTRIB,          { NULL }      }; | 
