diff options
Diffstat (limited to 'src/dialogs/storage.c')
-rw-r--r-- | src/dialogs/storage.c | 648 |
1 files changed, 0 insertions, 648 deletions
diff --git a/src/dialogs/storage.c b/src/dialogs/storage.c deleted file mode 100644 index 2bf1e2e..0000000 --- a/src/dialogs/storage.c +++ /dev/null @@ -1,648 +0,0 @@ - -/* Chrysalide - Outil d'analyse de fichiers binaires - * storage.c - définition des modes d'enregistrement pour binaires - * - * Copyright (C) 2014 Cyrille Bagard - * - * This file is part of Chrysalide. - * - * OpenIDA is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * OpenIDA is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Foobar. If not, see <http://www.gnu.org/licenses/>. - */ - - -#include "storage.h" - - -#include <i18n.h> - - -#include "../analysis/db/protocol.h" -#include "../common/cpp.h" -#include "../gtkext/easygtk.h" - - - -/* --------------------------- CORPS PRINCIPAL DU CONTENU --------------------------- */ - - -/* Enumération des colonnes de la liste affichée */ -typedef enum StorageColumnTypes -{ - SCT_FEATURE_ID, /* Désignation interne */ - SCT_FEATURE_NAME, /* Désignation humaine */ - SCT_FEATURE_STORAGE, /* Type d'enregistrement */ - SCT_COMBO_COLUMN, /* Fonctionnement du combo */ - - SCT_COUNT - -} StorageColumnTypes; - - -/* Construit l'affichage en liste des enregistrements. */ -static GtkWidget *build_features_list(void); - -/* Sauvegarde l'état des enregistrements et clôt la fenêtre. */ -static void save_storage_params(GtkButton *, GObject *); - - - -/* ---------------------- NOM D'UTILISATEUR ASSOCIE AU BINAIRE ---------------------- */ - - -/* Charge le nom de l'utilisateur associé au binaire. */ -static void load_storage_username(GLoadedBinary *, GObject *); - -/* Sauvegarde le nom de l'utilisateur associé au binaire. */ -static void save_storage_username(GLoadedBinary *, GObject *); - - - -/* ----------------------- SERVEUR DISTANT ASSOCIE AU BINAIRE ----------------------- */ - - -/* Charge la définition du serveur distant associé au binaire. */ -static void load_storage_remote_server(GLoadedBinary *, GObject *); - -/* Sauvegarde la définition du serveur distant du binaire. */ -static void save_storage_remote_server(GLoadedBinary *, GObject *); - -/* Met à jour l'accès aux paramètres du serveur distant. */ -static void on_server_usage_toggle(GtkToggleButton *, GObject *); - - - -/* ------------------------- TRAITEMENT DES FONCTIONNALITES ------------------------- */ - - -/* Remplit la vue présentant les fonctionnalités à traiter. */ -static void fill_storage_features(GtkTreeView *, GLoadedBinary *); - -/* Sauvegarde les statuts d'enregistrement des fonctionnalités. */ -static void save_storage_features(GLoadedBinary *, GObject *); - -/* Met à jour un type d'enregistrement. */ -static void storage_combo_edited_cb(GtkCellRendererText *, const gchar *, const gchar *, GtkListStore *); - - - -/* ---------------------------------------------------------------------------------- */ -/* CORPS PRINCIPAL DU CONTENU */ -/* ---------------------------------------------------------------------------------- */ - - -/****************************************************************************** -* * -* Paramètres : - * -* * -* Description : Construit l'affichage en liste des enregistrements. * -* * -* Retour : Composant graphique prêt à emploi. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static GtkWidget *build_features_list(void) -{ - GtkListStore *store; - GtkWidget *view; - GtkCellRenderer *renderer; - GtkListStore *combo_store; - GtkTreeIter iter; - - store = gtk_list_store_new(SCT_COUNT, - G_TYPE_UINT, - G_TYPE_STRING, - G_TYPE_STRING, - G_TYPE_UINT); - - view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); - - g_object_unref(store); - - /* Intitulé des fonctionnalités */ - - renderer = gtk_cell_renderer_text_new(); - - gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, - _("Features"), renderer, - "text", SCT_FEATURE_NAME, - NULL); - - /* Type d'enregistrement associé */ - - renderer = gtk_cell_renderer_combo_new(); - - combo_store = gtk_list_store_new(1, G_TYPE_STRING); - gtk_list_store_append(combo_store, &iter); - gtk_list_store_set(combo_store, &iter, 0, _("Local storage"), -1); - gtk_list_store_append(combo_store, &iter); - gtk_list_store_set(combo_store, &iter, 0, _("Remote storage"), -1); - gtk_list_store_append(combo_store, &iter); - gtk_list_store_set(combo_store, &iter, 0, _("Local storage with remote access"), -1); - - g_object_set(G_OBJECT(renderer), "model", combo_store, - "editable", TRUE, "has-entry", FALSE, NULL); - g_signal_connect(G_OBJECT(renderer), "edited", G_CALLBACK(storage_combo_edited_cb), store); - - gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(view), -1, - _("Storage"), renderer, - "text", SCT_FEATURE_STORAGE, - "text-column", SCT_COMBO_COLUMN, - NULL); - - return view; - -} - - -/****************************************************************************** -* * -* Paramètres : binary = binaire chargé en mémoire à traiter. * -* parent = fenêtre principale de l'éditeur. * -* * -* Description : Propose une définition des propriétés d'enregistrement. * -* * -* Retour : Adresse de la fenêtre mise en place. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GtkWidget *create_storage_dialog(GLoadedBinary *binary, GtkWindow *parent) -{ - GtkWidget *result; /* Fenêtre à renvoyer */ - GtkWidget *content; /* Zone principale de la boîte */ - GtkWidget *vbox; /* Support à construire #1 */ - GtkWidget *frame; /* Support avec encadrement */ - GtkWidget *hbox; /* Support à construire #2 */ - GtkWidget *label; /* Etiquette d'indication */ - GtkWidget *entry; /* Zone de saisie de texte */ - GtkWidget *checkbutton; /* Activation de la distance */ - GtkWidget *subvbox; /* Support à construire #3 */ - GtkWidget *scrolledwindow; /* Zone de défilement */ - GtkWidget *treeview; /* Liste des fonctionnalités */ - - result = gtk_dialog_new(); - gtk_window_set_title(GTK_WINDOW(result), _("Storage")); - gtk_widget_set_size_request(result, 400, 360); - gtk_window_set_position(GTK_WINDOW(result), GTK_WIN_POS_CENTER); - gtk_window_set_type_hint(GTK_WINDOW(result), GDK_WINDOW_TYPE_HINT_DIALOG); - - gtk_window_set_modal(GTK_WINDOW(result), TRUE); - gtk_window_set_transient_for(GTK_WINDOW(result), parent); - - g_object_ref(G_OBJECT(binary)); - g_object_set_data_full(G_OBJECT(result), "binary", binary, g_object_unref); - - content = gtk_dialog_get_content_area(GTK_DIALOG(result)); - gtk_widget_show(content); - - vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 8); - gtk_widget_show(vbox); - gtk_box_pack_start(GTK_BOX(content), vbox, TRUE, TRUE, 0); - gtk_container_set_border_width(GTK_CONTAINER(vbox), 8); - - /* Définition de l'identité de l'utilisateur */ - - hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); - gtk_widget_show(hbox); - - frame = qck_create_frame(_("<b>Identity</b>"), hbox, 0, 0, 12, 0); - gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, TRUE, 0); - - label = qck_create_label(NULL, NULL, _("Username: ")); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); - - entry = qck_create_entry(G_OBJECT(result), "username", NULL); - gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); - - /* Définition du serveur distant */ - - subvbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); - gtk_widget_show(subvbox); - - frame = qck_create_frame(_("<b>Server to contact</b>"), subvbox, 0, 0, 12, 0); - gtk_box_pack_start(GTK_BOX(vbox), frame, FALSE, TRUE, 0); - - checkbutton = qck_create_check_button(G_OBJECT(result), "use_remote", - _("Use a remote server:"), - G_CALLBACK(on_server_usage_toggle), result); - gtk_widget_show(checkbutton); - gtk_box_pack_start(GTK_BOX(subvbox), checkbutton, FALSE, FALSE, 0); - - hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); - gtk_widget_show(hbox); - gtk_box_pack_start(GTK_BOX(subvbox), hbox, TRUE, TRUE, 0); - - label = qck_create_label(G_OBJECT(result), "host", _("Host: ")); - gtk_widget_show(label); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); - - entry = qck_create_entry(G_OBJECT(result), "remote_host", NULL); - gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); - - label = qck_create_label(G_OBJECT(result), "port", _("Port:")); - gtk_widget_show(label); - gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); - - entry = qck_create_entry(G_OBJECT(result), "remote_port", NULL); - gtk_box_pack_start(GTK_BOX(hbox), entry, FALSE, TRUE, 0); - - /* Affichage des propriétés */ - - scrolledwindow = gtk_scrolled_window_new(NULL, NULL); - gtk_widget_show(scrolledwindow); - gtk_box_pack_start(GTK_BOX(vbox), scrolledwindow, TRUE, TRUE, 0); - gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledwindow), GTK_SHADOW_IN); - - treeview = build_features_list(); - g_object_set_data(G_OBJECT(result), "treeview", treeview); - gtk_widget_show(treeview); - gtk_container_add(GTK_CONTAINER(scrolledwindow), treeview); - - /* Zone de contrôle */ - - gtk_dialog_add_button(GTK_DIALOG(result), _("_Cancel"), GTK_RESPONSE_CANCEL); - gtk_dialog_add_button(GTK_DIALOG(result), _("_Ok"), GTK_RESPONSE_OK); - - /* Chargement des données actuelles */ - - load_storage_username(binary, G_OBJECT(result)); - - load_storage_remote_server(binary, G_OBJECT(result)); - - fill_storage_features(GTK_TREE_VIEW(treeview), binary); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : button = bouton 'OK'. * -* ref = espace de référencement principal. * -* * -* Description : Sauvegarde l'état des enregistrements et clôt la fenêtre. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void save_storage_params(GtkButton *button, GObject *ref) -{ - GLoadedBinary *binary; /* Binaire en cours d'édition */ - - binary = G_LOADED_BINARY(g_object_get_data(ref, "binary")); - - save_storage_username(binary, ref); - - save_storage_remote_server(binary, ref); - - save_storage_features(binary, ref); - -} - - - -/* ---------------------------------------------------------------------------------- */ -/* NOM D'UTILISATEUR ASSOCIE AU BINAIRE */ -/* ---------------------------------------------------------------------------------- */ - - -/****************************************************************************** -* * -* Paramètres : binary = binaire chargé en mémoire à traiter. * -* ref = espace de référencement global. * -* * -* Description : Charge le nom de l'utilisateur associé au binaire. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void load_storage_username(GLoadedBinary *binary, GObject *ref) -{ - GtkEntry *entry; /* Zone de saisie de texte */ - - entry = GTK_ENTRY(g_object_get_data(ref, "username")); - - gtk_entry_set_text(entry, g_loaded_binary_get_username(binary)); - -} - - -/****************************************************************************** -* * -* Paramètres : binary = binaire chargé en mémoire à traiter. * -* ref = espace de référencement global. * -* * -* Description : Sauvegarde le nom de l'utilisateur associé au binaire. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void save_storage_username(GLoadedBinary *binary, GObject *ref) -{ - GtkEntry *entry; /* Zone de saisie de texte */ - const gchar *text; /* Texte à récupérer */ - - entry = GTK_ENTRY(g_object_get_data(ref, "username")); - text = gtk_entry_get_text(entry); - - g_loaded_binary_set_username(binary, text); - -} - - - -/* ---------------------------------------------------------------------------------- */ -/* SERVEUR DISTANT ASSOCIE AU BINAIRE */ -/* ---------------------------------------------------------------------------------- */ - - -/****************************************************************************** -* * -* Paramètres : binary = binaire chargé en mémoire à traiter. * -* ref = espace de référencement global. * -* * -* Description : Charge la définition du serveur distant associé au binaire. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void load_storage_remote_server(GLoadedBinary *binary, GObject *ref) -{ - const char *host; /* Hôte à contacter */ - unsigned short port; /* Port de connexion */ - char port_str[sizeof(XSTR(USHRT_MAX)) + 1]; /* Version chaînée */ - bool use_remote; /* Utilisation du serveur ? */ - GtkEntry *entry; /* Zone de saisie de texte */ - GtkToggleButton *checkbutton; /* Activation de la distance */ - - use_remote = g_loaded_binary_get_remote_server(binary, &host, &port); - sprintf(port_str, "%hu", port); - - entry = GTK_ENTRY(g_object_get_data(ref, "remote_host")); - - gtk_entry_set_text(entry, host); - - entry = GTK_ENTRY(g_object_get_data(ref, "remote_port")); - - gtk_entry_set_text(entry, port_str); - - checkbutton = GTK_TOGGLE_BUTTON(g_object_get_data(ref, "use_remote")); - - gtk_toggle_button_set_active(checkbutton, !use_remote); - gtk_toggle_button_set_active(checkbutton, use_remote); - -} - - -/****************************************************************************** -* * -* Paramètres : binary = binaire chargé en mémoire à traiter. * -* ref = espace de référencement global. * -* * -* Description : Sauvegarde la définition du serveur distant du binaire. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void save_storage_remote_server(GLoadedBinary *binary, GObject *ref) -{ - GtkEntry *entry; /* Zone de saisie de texte */ - const gchar *text; /* Texte à récupérer */ - unsigned short port; /* Port de connexion */ - GtkToggleButton *checkbutton; /* Activation de la distance */ - - entry = GTK_ENTRY(g_object_get_data(ref, "remote_port")); - text = gtk_entry_get_text(entry); - port = atoi(text); - - entry = GTK_ENTRY(g_object_get_data(ref, "remote_host")); - text = gtk_entry_get_text(entry); - - checkbutton = GTK_TOGGLE_BUTTON(g_object_get_data(ref, "use_remote")); - - g_loaded_binary_set_remote_server(binary, text, port, - gtk_toggle_button_get_active(checkbutton)); - -} - - -/****************************************************************************** -* * -* Paramètres : button = oche dont le status vient de changer. * -* ref = espace de référencement global. * -* * -* Description : Met à jour l'accès aux paramètres du serveur distant. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void on_server_usage_toggle(GtkToggleButton *button, GObject *ref) -{ - gboolean state; /* Etat du bouton courant */ - GtkWidget *widget; /* Element dont l'accès change */ - - state = gtk_toggle_button_get_active(button); - - widget = GTK_WIDGET(g_object_get_data(ref, "host")); - if (widget != NULL) - gtk_widget_set_sensitive(widget, state); - - widget = GTK_WIDGET(g_object_get_data(ref, "remote_host")); - if (widget != NULL) - gtk_widget_set_sensitive(widget, state); - - widget = GTK_WIDGET(g_object_get_data(ref, "port")); - if (widget != NULL) - gtk_widget_set_sensitive(widget, state); - - widget = GTK_WIDGET(g_object_get_data(ref, "remote_port")); - if (widget != NULL) - gtk_widget_set_sensitive(widget, state); - -} - - - -/* ---------------------------------------------------------------------------------- */ -/* TRAITEMENT DES FONCTIONNALITES */ -/* ---------------------------------------------------------------------------------- */ - - -/****************************************************************************** -* * -* Paramètres : treeview = vue à compléter. * -* binary = binaire à manipuler. * -* * -* Description : Remplit la vue présentant les fonctionnalités à traiter. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void fill_storage_features(GtkTreeView *treeview, GLoadedBinary *binary) -{ - GtkListStore *store; /* Gestionnaire de liste */ - DBFeatures i; /* Boucle de parcours */ - DBStorage storage; /* Type d'enregistrement */ - char *human_feature; /* Description humaine #1 */ - char *human_value; /* Description humaine #2 */ - GtkTreeIter iter; /* Point d'insertion */ - - store = GTK_LIST_STORE(gtk_tree_view_get_model(treeview)); - - for (i = 0; i < DBF_COUNT; i++) - { - storage = g_loaded_binary_get_storage(binary, i); - - switch (i) - { - case DBF_COMMENTS: - human_feature = _("Comments"); - break; - case DBF_DISPLAY_SWITCHERS: - human_feature = _("Segments display"); - break; - case DBF_BOOKMARKS: - human_feature = _("Bookmarks"); - break; - default: /* Pour GCC... */ - break; - } - - switch (storage) - { - case DBS_ALL_LOCAL: - human_value = _("Local storage"); - break; - case DBS_ALL_REMOTE: - human_value = _("Remote storage"); - break; - case DBS_LOCAL_AND_REMOTE: - human_value = _("Local storage with remote access"); - break; - } - - gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, - SCT_FEATURE_ID, i, - SCT_FEATURE_NAME, human_feature, - SCT_FEATURE_STORAGE, human_value, - -1); - - } - -} - - -/****************************************************************************** -* * -* Paramètres : binary = binaire chargé en mémoire à traiter. * -* ref = espace de référencement global. * -* * -* Description : Sauvegarde les statuts d'enregistrement des fonctionnalités. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void save_storage_features(GLoadedBinary *binary, GObject *ref) -{ - GtkTreeView *treeview; /* Liste des fonctionnalités */ - GtkTreeModel *store; /* Gestionnaire de liste */ - GtkTreeIter iter; /* Point de lecture */ - gboolean valid; /* Point courant valide ? */ - DBFeatures feature; /* Fonctionnalité traitée */ - char *human_value; /* Description humaine */ - DBStorage storage; /* Type d'enregistrement */ - - treeview = GTK_TREE_VIEW(g_object_get_data(ref, "treeview")); - store = GTK_TREE_MODEL(gtk_tree_view_get_model(treeview)); - - for (valid = gtk_tree_model_get_iter_first(store, &iter); - valid; - valid = gtk_tree_model_iter_next(store, &iter)) - { - gtk_tree_model_get(store, &iter, - SCT_FEATURE_ID, &feature, - SCT_FEATURE_STORAGE, &human_value, - -1); - - if (g_strcmp0(human_value, _("Remote storage")) == 0) - storage = DBS_ALL_REMOTE; - else if (g_strcmp0(human_value, _("Local storage with remote access")) == 0) - storage = DBS_LOCAL_AND_REMOTE; - else - storage = DBS_ALL_LOCAL; - - g_loaded_binary_set_storage(binary, feature, storage); - - } - -} - - -/****************************************************************************** -* * -* Paramètres : cell = cellule du tableau à mettre à jour. * -* path = chemin d'accès à l'élément concerné. * -* value = nouvelle valeur à prendre en compte. * -* store = gestionnaire de liste sur lequel s'appuyer. * -* * -* Description : Met à jour un type d'enregistrement. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void storage_combo_edited_cb(GtkCellRendererText *cell, const gchar *path, const gchar *value, GtkListStore *store) -{ - GtkTreePath *tpath; /* Chemin instancié */ - GtkTreeIter iter; /* Point d'accès pour la maj */ - - tpath = gtk_tree_path_new_from_string(path); - - if (gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, tpath)) - gtk_list_store_set(store, &iter, SCT_FEATURE_STORAGE, value, -1); - - gtk_tree_path_free(tpath); - -} |