/* ***********************IMPORTANT *********************************************
 *  Copyright (C) 2004-2007 Thierry Lagarde <tlagarde@users.sourceforge.net>
 *  This program 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 2 of the License.
 *
 *
 *                      ********************
 *
 *
 *  This program 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 Library General Public License for more details.
 *
 *
 *                      ********************
 *
 *
 * You are highly encouraged to send your changes to <tlagarde@users.sourceforge.net>
 * for possible incorporation into the main distribution.
 * By sending these changes to <tlagarde@users.sourceforge.net>,
 * it is assumed that you are offering <tlagarde@users.sourceforge.net>
 * the unlimited, non-exclusive right to reuse, modify, and relicense the code.
 *
 *
 *                      ********************
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 **************************************************************************************/
#include <time.h>
#include "Equipement.h"
#include "Equipement_Port.h"
#include "Com/Commun.h"
#include "Com/Communication.h"
#include "Debug.h"
#include "Objet.h"
#include "Interface/Alert_Interface.h"
#include "Interface/Root_Interface.h"
#include "Equipement_Historique.h"
#include "Equipement_Signature.h"
#include "Image.h"
#include "Animation.h"
#include "Sound.h"
#include "Smtp.h"
#include "Objet_Liste.h"
#include "Settings.h"
#include "Modules.h"
#include "Declaration_Constante.h"
#include "Macro.h"
#include "Snmp.h"


struct Struct_Liste_Port_UDP Liste_Port_UDP[] = {
	{DHCPC,68},
	{SVRLOC,427},
	{LISTENER,1025},
	{UPNP,1900},
	{SIP, 5060},
	{ZEROCONF,5353}	
};

void Sauve_Etat_Deplier_Objet_Equipement (struct Struct_Liste_Reseau *Reseau)
{
	struct Struct_Equipement *Equipement = NULL;
	struct Struct_Modele_Objet *Objet = NULL, *Objet_Pere = NULL;
	GtkTreePath *path = NULL;
	GtkTreeModel *model = NULL;
	gint      Nb_Objet_Liste, i;

	ERROR_if (Reseau == NULL);

	model = gtk_tree_view_get_model (GTK_TREE_VIEW (Reseau->Liste_Equipement_Type));
	Nb_Objet_Liste = g_list_length (Reseau->GList_Liste_Equipement);
	for (i = 0; i < Nb_Objet_Liste; i++) {
		Objet = g_list_nth_data (Reseau->GList_Liste_Equipement, i);
		if (Objet->Pointeur_Attacher != NULL) {
			Equipement = (struct Struct_Equipement *) Objet->Pointeur_Attacher;
			Objet_Pere = (struct Struct_Modele_Objet *) Objet->Objet_Pere;
			path = gtk_tree_model_get_path (model, &Objet_Pere->ID_Arbre_Ligne);
			Equipement->Deplier = gtk_tree_view_row_expanded (GTK_TREE_VIEW (Reseau->Liste_Equipement_Type), path);
		
		}
	}
}

void Grise_Equipement_Eteint(struct Struct_Equipement *Equipement,struct Struct_Liste_Reseau *Reseau){
	struct Struct_Modele_Objet *Objet_Liste = NULL;
	struct Struct_Modele_Objet *Objet_Texte_Ip = NULL;
	GtkTreeModel *model = NULL;
	gchar    *Texte_Ip = NULL;
		
	bzero (&Equipement->ID_Equipement[6], IP_ADDR_LEN);
	strcpy (Equipement->Adresse_Ip_Char, "0.0.0.0");
	Equipement->Equipement_Allumer = FALSE;
				

	Objet_Liste = Equipement->Objet_Liste_Par_Type;
	if ((Equipement->Alias == NULL) && (Equipement->Nom_DNS == NULL) && (strlen (Equipement->Smb.HostName) == 0)) {
		model = gtk_tree_view_get_model (GTK_TREE_VIEW (Widget_Liste (Objet_Liste, Reseau)));
		gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Liste->ID_Arbre_Ligne, COL_TEXT_LIST, Equipement->Adresse_MAC_Char, -1);
	}
	Affiche_Icone_Defaut_Griser_Objet_liste (Objet_Liste, Reseau);
	Change_Couleur_Gris_Texte_liste (Objet_Liste, Reseau);

	Objet_Liste = Equipement->Objet_Liste_Par_Ip;
	model = gtk_tree_view_get_model (GTK_TREE_VIEW (Widget_Liste (Objet_Liste, Reseau)));
	gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Liste->ID_Arbre_Ligne, COL_TEXT_EQUIPEMENT, Equipement->Adresse_MAC_Char, -1);
	Affiche_Icone_Defaut_Griser_Objet_liste (Objet_Liste, Reseau);
	Change_Couleur_Gris_Texte_liste (Objet_Liste, Reseau);
	
	if ((Equipement == Equipement_Selectionner) && (Reseau == Reseau_Selectionner)) {
		gtk_widget_hide (vbox_Milieu);
		Initialisation_Aucun_Module ();
		creation_combo_milieu ();
		Modifie_Coloration_Text_Equipement (Reseau, Equipement);
		gtk_widget_set_sensitive (combobox_liste_Modules, FALSE);
	
		Objet_Texte_Ip = g_list_nth_data (Reseau->GList_Liste_Info, 0);
		model = gtk_tree_view_get_model (GTK_TREE_VIEW (Widget_Liste (Objet_Texte_Ip, Reseau)));
		Texte_Ip = g_strdup_printf ("Ip Address : %s", Equipement->Adresse_Ip_Char);
		gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Texte_Ip->ID_Arbre_Ligne, COL_TEXT_LIST, Texte_Ip, -1);
		MYFREE (Texte_Ip);
	}
				
}

void Equipement_Ip_Modifier (gpointer * Donnee)
{
	struct struct_Ip_Modifier *Message = (struct struct_Ip_Modifier *) Donnee;
	struct Struct_Liste_Reseau *Reseau = NULL;
	struct Struct_Equipement *Equipement = NULL;
	struct Struct_Modele_Objet *Objet = NULL, *Objet_Liste = NULL;
	struct Struct_Modele_Objet *Objet_Texte_Ip = NULL;
	GtkTreeModel *model = NULL;
	gchar    *Texte_Notification = NULL;
	gchar    *Texte_Ip = NULL;
	gint      Nb_Objet_Liste, i;

	ERROR_if (Donnee == NULL);
	Reseau = Recupere_Pointeur_Structure_Reseau (Message->ID_Reseau);
	Nb_Objet_Liste = g_list_length (Reseau->GList_Liste_Equipement);
	for (i = 0; i < Nb_Objet_Liste; i++) {
		Objet = g_list_nth_data (Reseau->GList_Liste_Equipement, i);
		if (Objet->Pointeur_Attacher != NULL) {
			Equipement = (struct Struct_Equipement *) Objet->Pointeur_Attacher;
			debug_printf (INTERFACE, D_WARN, __FILE__, __PRETTY_FUNCTION__, __LINE__, "[%d] : [%s][%s]", i, Equipement->Adresse_Ip_Char, Equipement->Adresse_MAC_Char);
			if (memcmp (Equipement->ID_Equipement, Message->ID_Equipement, MAC_ADDR_LEN) == 0) {
				debug_printf (INTERFACE, D_WARN, __FILE__, __PRETTY_FUNCTION__, __LINE__, "Retrouvé modifier");
			
				memcpy (&Equipement->ID_Equipement[6], Message->Nouvelle_Adresse_Ip, IP_ADDR_LEN + 1);
				sprintf (Equipement->Adresse_Ip_Char, "%d.%d.%d.%d", Equipement->ID_Equipement[6], Equipement->ID_Equipement[7], Equipement->ID_Equipement[8], Equipement->ID_Equipement[9]);
			
				Equipement->Equipement_Allumer = TRUE;
			
				Objet_Liste = Equipement->Objet_Liste_Par_Type;
				if ((Equipement->Alias == NULL) && (Equipement->Nom_DNS == NULL) && (strlen (Equipement->Smb.HostName) == 0)) {
					model = gtk_tree_view_get_model (GTK_TREE_VIEW (Widget_Liste (Objet_Liste, Reseau)));
					gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Liste->ID_Arbre_Ligne, COL_TEXT_LIST, Equipement->Adresse_Ip_Char, -1);
				}
				Affiche_Icone_Defaut_Objet_liste (Objet_Liste, Reseau);
				Change_Couleur_Noir_Texte_liste (Objet_Liste, Reseau);	
			
				Objet_Liste = Equipement->Objet_Liste_Par_Ip;
				model = gtk_tree_view_get_model (GTK_TREE_VIEW (Widget_Liste (Objet_Liste, Reseau)));
				gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Liste->ID_Arbre_Ligne, COL_TEXT_EQUIPEMENT, Equipement->Adresse_Ip_Char, -1);
				Affiche_Icone_Defaut_Objet_liste (Objet_Liste, Reseau);
				Change_Couleur_Noir_Texte_liste (Objet_Liste, Reseau);	
/*				
				model = gtk_tree_view_get_model (GTK_TREE_VIEW (Widget_Liste (Objet, Reseau)));
				if (Reseau->Mode_Liste_Detaille) {
				
					gtk_tree_store_set (GTK_TREE_STORE (model), &Objet->ID_Arbre_Ligne, COL_TEXT_EQUIPEMENT, Equipement->Adresse_Ip_Char, -1);
				}
				else {
					if ((Equipement->Alias == NULL) && (Equipement->Nom_DNS == NULL) && (strlen (Equipement->Smb.HostName) == 0))
						gtk_tree_store_set (GTK_TREE_STORE (model), &Objet->ID_Arbre_Ligne, COL_TEXT_LIST, Equipement->Adresse_Ip_Char, -1);
				}*/

				if ((Equipement == Equipement_Selectionner) && (Reseau == Reseau_Selectionner)) {
					Modifie_Coloration_Text_Equipement (Reseau, Equipement);
					gtk_widget_set_sensitive (combobox_liste_Modules, TRUE);
				
					Objet_Texte_Ip = g_list_nth_data (Reseau->GList_Liste_Info, 0);
					model = gtk_tree_view_get_model (GTK_TREE_VIEW (Widget_Liste (Objet_Texte_Ip, Reseau)));
					Texte_Ip = g_strdup_printf ("Ip Address : %s", Equipement->Adresse_Ip_Char);
					gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Texte_Ip->ID_Arbre_Ligne, COL_TEXT_LIST, Texte_Ip, -1);
					MYFREE (Texte_Ip);
				}

				if (Equipement->Alert_Notification_En_Cours) {
					Reseau->GList_Test_Etat = Supprime_Dans_Liste_Objets (Reseau->GList_Test_Etat, Objet, TRUE);
					Equipement->Alert_Notification_En_Cours = FALSE;
					Texte_Notification = g_strdup_printf ("Host [%s] is up", Equipement->Adresse_Ip_Char);
					Ajouter_Historique (Equipement, Texte_Notification, HISTORIQUE_INFO);
					if (Equipement->Contact_Admin)
						Envoie_Email_Notification (Texte_Notification, Equipement->Contact_Admin);
					MYFREE (Texte_Notification);
				}
				return;
			}
		}
	}

}


void Equipement_Ip_Perdu (gpointer * Donnee)
{
	struct struct_Ip_Retrouver *Message = (struct struct_Ip_Retrouver *) Donnee;
	struct Struct_Liste_Reseau *Reseau = NULL;
	struct Struct_Equipement *Equipement = NULL;
	struct Struct_Modele_Objet *Objet = NULL;
	gint      Nb_Objet_Liste, i;

	ERROR_if (Donnee == NULL);
	Reseau = Recupere_Pointeur_Structure_Reseau (Message->ID_Reseau);
	Nb_Objet_Liste = g_list_length (Reseau->GList_Liste_Equipement);
	for (i = 0; i < Nb_Objet_Liste; i++) {
		Objet = g_list_nth_data (Reseau->GList_Liste_Equipement, i);
		if (Objet->Pointeur_Attacher != NULL) {
			Equipement = (struct Struct_Equipement *) Objet->Pointeur_Attacher;
			debug_printf (INTERFACE, D_WARN, __FILE__, __PRETTY_FUNCTION__, __LINE__, "[%d] : [%s][%s]", i, Equipement->Adresse_Ip_Char, Equipement->Adresse_MAC_Char);
			if (memcmp (Equipement->ID_Equipement, Message->ID_Equipement, MAC_ADDR_LEN + IP_ADDR_LEN + 1) == 0) {
				debug_printf (INTERFACE, D_WARN, __FILE__, __PRETTY_FUNCTION__, __LINE__, "Retrouvé");
				Grise_Equipement_Eteint(Equipement,Reseau);
				return;
			}
		}
	}

}


void Equipement_Ip_Retrouver (gpointer * Donnee)
{
	struct struct_Ip_Retrouver *Message = (struct struct_Ip_Retrouver *) Donnee;
	struct Struct_Liste_Reseau *Reseau = NULL;
	struct Struct_Equipement *Equipement = NULL;
	struct Struct_Modele_Objet *Objet = NULL, *Objet_Liste = NULL;
	struct Struct_Modele_Objet *Objet_Texte_Ip = NULL;
	GtkTreeModel *model = NULL;
	gchar    *Texte_Ip = NULL;
	gchar    *Texte_Notification = NULL;
	gint      Nb_Objet_Liste, i;

	ERROR_if (Donnee == NULL);
	Reseau = Recupere_Pointeur_Structure_Reseau (Message->ID_Reseau);
	Nb_Objet_Liste = g_list_length (Reseau->GList_Liste_Equipement);
	for (i = 0; i < Nb_Objet_Liste; i++) {
		Objet = g_list_nth_data (Reseau->GList_Liste_Equipement, i);
		if (Objet->Pointeur_Attacher != NULL) {
			Equipement = (struct Struct_Equipement *) Objet->Pointeur_Attacher;
			debug_printf (INTERFACE, D_WARN, __FILE__, __PRETTY_FUNCTION__, __LINE__, "[%d] : [%s][%s]", i, Equipement->Adresse_Ip_Char, Equipement->Adresse_MAC_Char);
			if ((memcmp (Equipement->ID_Equipement, Message->ID_Equipement, MAC_ADDR_LEN) == 0) && (Equipement->ID_Equipement[6] == 0)) {
				debug_printf (INTERFACE, D_WARN, __FILE__, __PRETTY_FUNCTION__, __LINE__, "Retrouvé");
				memcpy (Equipement->ID_Equipement, Message->ID_Equipement, MAC_ADDR_LEN + IP_ADDR_LEN + 1);
				sprintf (Equipement->Adresse_Ip_Char, "%d.%d.%d.%d", Equipement->ID_Equipement[6], Equipement->ID_Equipement[7], Equipement->ID_Equipement[8], Equipement->ID_Equipement[9]);
			
				Equipement->Equipement_Allumer = TRUE;
								
			
				Objet_Liste = Equipement->Objet_Liste_Par_Type;
				if ((Equipement->Alias == NULL) && (Equipement->Nom_DNS == NULL) && (strlen (Equipement->Smb.HostName) == 0)) {
					model = gtk_tree_view_get_model (GTK_TREE_VIEW (Widget_Liste (Objet_Liste, Reseau)));
					gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Liste->ID_Arbre_Ligne, COL_TEXT_LIST, Equipement->Adresse_Ip_Char, -1);
				}
				Affiche_Icone_Defaut_Objet_liste (Objet_Liste, Reseau);
				Change_Couleur_Noir_Texte_liste (Objet_Liste, Reseau);
			
				Objet_Liste = Equipement->Objet_Liste_Par_Ip;
				model = gtk_tree_view_get_model (GTK_TREE_VIEW (Widget_Liste (Objet_Liste, Reseau)));
				gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Liste->ID_Arbre_Ligne, COL_TEXT_EQUIPEMENT, Equipement->Adresse_Ip_Char, -1);
				Affiche_Icone_Defaut_Objet_liste (Objet_Liste, Reseau);
				Change_Couleur_Noir_Texte_liste (Objet_Liste, Reseau);

			
			

				if ((Equipement == Equipement_Selectionner) && (Reseau == Reseau_Selectionner)) {
					gtk_widget_show (vbox_Milieu);
					creation_combo_milieu ();
					Modifie_Coloration_Text_Equipement (Reseau, Equipement);
					gtk_widget_set_sensitive (combobox_liste_Modules, TRUE);
				
					Objet_Texte_Ip = g_list_nth_data (Reseau->GList_Liste_Info, 0);
					model = gtk_tree_view_get_model (GTK_TREE_VIEW (Widget_Liste (Objet_Texte_Ip, Reseau)));
					Texte_Ip = g_strdup_printf ("Ip Address : %s", Equipement->Adresse_Ip_Char);
					gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Texte_Ip->ID_Arbre_Ligne, COL_TEXT_LIST, Texte_Ip, -1);
					MYFREE (Texte_Ip);
				}

				if (Equipement->Alert_Notification_En_Cours) {
					Reseau->GList_Test_Etat = Supprime_Dans_Liste_Objets (Reseau->GList_Test_Etat, Objet, TRUE);
					Equipement->Alert_Notification_En_Cours = FALSE;
					Texte_Notification = g_strdup_printf ("Host [%s] is up", Equipement->Adresse_Ip_Char);
					Ajouter_Historique (Equipement, Texte_Notification, HISTORIQUE_INFO);
					if (Equipement->Contact_Admin)
						Envoie_Email_Notification (Texte_Notification, Equipement->Contact_Admin);
					MYFREE (Texte_Notification);
				}
				return;
			}
		}
	}

}



void Retour_Rafraichir_Equipement (gpointer * Donnee)
{
	struct struct_Retour_Rafraichir_Equipement *Message = (struct struct_Retour_Rafraichir_Equipement *) Donnee;
	struct Struct_Liste_Reseau *Reseau = NULL;
	struct Struct_Equipement *Equipement = NULL;
	struct Struct_Modele_Objet *Objet = NULL;
	struct Struct_Port *Port_Equipement = NULL;
	gchar    *Point_DNS = NULL, Dns[TAILLE_CHAINE_NOM_DNS + 1];
	md5_state_t md_ctx;
	md5_byte_t digest[16];
	gint      i, Taille_Chaine;

	ERROR_if (Donnee == NULL);
	Reseau = Recupere_Pointeur_Structure_Reseau (Message->ID_Reseau);
	Objet = Recherche_Objet_Equipement (Message->ID_Equipement, Message->ID_Reseau);
	if (Objet == NULL) {
		debug_printf (INTERFACE, D_WARN, __FILE__, __PRETTY_FUNCTION__, __LINE__, "Retour_Rafraichir_Equipement (Equipment unknown)");
		return;
	}
	Equipement = (struct Struct_Equipement *) Objet->Pointeur_Attacher;
	Reseau->GList_Rafraichissement = Supprime_Dans_Liste_Objets (Reseau->GList_Rafraichissement, Objet, TRUE);
	if (Equipement->Equipement_Allumer) {
		Affiche_Icone_Defaut_Objet_liste (Objet, Reseau);
		Change_Couleur_Noir_Texte_liste (Objet, Reseau);
	}
	else {
		Affiche_Icone_Defaut_Griser_Objet_liste (Objet, Reseau);
		Change_Couleur_Gris_Texte_liste (Objet, Reseau);
		Initialisation_WakeUp();
	}
	if (Message->Scan_Accompli) {
	
		memcpy (Equipement->Reponse_Signature, Message->Reponse_Signature, sizeof (struct struct_Reponse) * NB_SCAN_OS);
	
		memcpy (Equipement->Reponse_Signature_W, Message->Reponse_Signature, sizeof (struct struct_Reponse) * NB_SCAN_OS);
		memcpy (Equipement->Reponse_Signature_Debug, Message->Reponse_Signature_Debug, sizeof (struct struct_Reponse_debug) * NB_SCAN_OS);
	
		for (i = 0; i < NB_SCAN_OS; i++)
			Equipement->Reponse_Signature_W[i].TaillePacketReponse = 0;
	
		memcpy (&Equipement->Smb, &Message->Smb, sizeof (struct struct_Smb));
	
		Equipement->GateWay = Message->GateWay;
		Equipement->Routage = Message->Routage;
	
		if ((Equipement == Equipement_Selectionner) && (Reseau == Reseau_Selectionner))
			Initialisation_Aucun_Module ();
	
		Efface_Tout_Les_Ports (Equipement);
		
	
		for (i = 0; i < Message->Nb_Port_Ouvert; i++)
			Ajouter_Nouveau_Port_Equipement (Equipement, Message->Port_Ouvert[i].Num_Port,Message->Port_Ouvert[i].Flags);
	
		i = 0;
		while ((Message->Port_Fermer[i].Num_Port!=0) && (i<MAX_PORTS)){
			Ajouter_Nouveau_Port_Equipement_Fermer_Firewall (Equipement, Message->Port_Fermer[i].Num_Port,FERMER,Message->Port_Fermer[i].Flags);	
			i++;
		}
	
		i = 0;
		while ((Message->Port_Firewalled[i].Num_Port!=0) && (i<MAX_PORTS)){
			Ajouter_Nouveau_Port_Equipement_Fermer_Firewall (Equipement, Message->Port_Firewalled[i].Num_Port,FIREWALLED,Message->Port_Firewalled[i].Flags);	
			i++;
		}
	
		for (i = 0; i < NB_PORT_UDP; i++)
			Equipement->Liste_Etat_Udp[i] = Message->Liste_Etat_Udp[i];

		
		/* 
		printf("Nb port ouvert : %d\n",Message->Nb_Port_Ouvert);
		for (i = 0; i < Message->Nb_Port_Ouvert; i++) {
			printf("Port %d  Etat : %d\n",Message->Port_Ouvert[i].Num_Port,Message->Port_Ouvert[i].Etat_Port);
			Port_Equipement = Ajouter_Nouveau_Port_Equipement (Equipement, Message->Port_Ouvert[i].Num_Port);
			Port_Equipement->Notification_En_Cours = Message->Port_Ouvert[i].Notification_Active;
			Port_Equipement->Etat_Port = Message->Port_Ouvert[i].Etat_Port;
		}*/
		if ((Equipement == Equipement_Selectionner) && (Reseau == Reseau_Selectionner))
			Initialisation_Liste_ports ();
	
		md5_init (&md_ctx);
		md5_append (&md_ctx, (const md5_byte_t *) Equipement->Reponse_Signature, sizeof (struct struct_Reponse) * NB_SCAN_OS);
		md5_finish (&md_ctx, digest);
		sprintf (Equipement->Md5_Signature, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", digest[0], digest[1], digest[2], digest[3], digest[4], digest[5], digest[6], digest[7], digest[8], digest[9], digest[10], digest[11], digest[12], digest[13], digest[14], digest[15]);
		debug_printf (INTERFACE, D_INFO, __FILE__, __PRETTY_FUNCTION__, __LINE__, "Signature : [%s]", Equipement->Md5_Signature);
		Equipement->Debug_Signature = Debug_Signature_Equipement (Equipement);
		debug_printf (INTERFACE, D_INFO, __FILE__, __PRETTY_FUNCTION__, __LINE__, "\nDebug : [%s]", Equipement->Debug_Signature);
	
		md5_init (&md_ctx);
		md5_append (&md_ctx, (const md5_byte_t *) Equipement->Reponse_Signature_W, sizeof (struct struct_Reponse) * NB_SCAN_OS);
		md5_finish (&md_ctx, digest);
		sprintf (Equipement->Md5_Signature_W, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", digest[0], digest[1], digest[2], digest[3], digest[4], digest[5], digest[6], digest[7], digest[8], digest[9], digest[10], digest[11], digest[12], digest[13], digest[14], digest[15]);
		debug_printf (INTERFACE, D_INFO, __FILE__, __PRETTY_FUNCTION__, __LINE__, "Signature : [%s]", Equipement->Md5_Signature_W);
		
	
		Equipement->Temps_Scan_Complet = Message->Temps_Scan_Complet;
		Equipement->Temps_Resolv_DNS = Message->Temps_Resolv_DNS;
		Equipement->Temps_Scan_Port = Message->Temps_Scan_Port;
		Equipement->Temps_Scan_Port_Udp = Message->Temps_Scan_Port_Udp;
		Equipement->Temps_Scan_Signature = Message->Temps_Scan_Signature;
		Equipement->Temps_Scan_Service_Ftp = Message->Temps_Scan_Service_Ftp ;
		Equipement->Temps_Scan_Service_Http = Message->Temps_Scan_Service_Http ;
		Equipement->Temps_Scan_Service_Https = -1 ;
		Equipement->Temps_Scan_Service_Imap = Message->Temps_Scan_Service_Imap ;
		Equipement->Temps_Scan_Service_Smtp = Message->Temps_Scan_Service_Smtp ;
		Equipement->Temps_Scan_Service_Ssh = Message->Temps_Scan_Service_Ssh ;
		Equipement->Temps_Scan_Service_Telnet = Message->Temps_Scan_Service_Telnet ;
		Equipement->Temps_Samba = Message->Temps_Samba ;
		Equipement->Temps_Scan_Snmp = Message->Temps_Scan_Snmp ;
		
	
		free_gchar_if_no_null (Equipement->Entete_FTP);
		Equipement->Entete_FTP = url_encode (Message->Entete_FTP);
		free_gchar_if_no_null (Equipement->Entete_HTTP);
		Equipement->Entete_HTTP = url_encode (Message->Entete_HTTP);
		free_gchar_if_no_null (Equipement->Entete_HTTPS);
		Equipement->Entete_HTTPS =  g_strdup("");//		Equipement->Entete_HTTPS = url_encode (Message->Entete_HTTPS);
		free_gchar_if_no_null (Equipement->Entete_IMAP);
		Equipement->Entete_IMAP = url_encode (Message->Entete_IMAP);
		free_gchar_if_no_null (Equipement->Entete_SMTP);
		Equipement->Entete_SMTP = url_encode (Message->Entete_SMTP);
		free_gchar_if_no_null (Equipement->Entete_SSH);
		Equipement->Entete_SSH = url_encode (Message->Entete_SSH);
		free_gchar_if_no_null (Equipement->Entete_TELNET);
		Equipement->Entete_TELNET = url_encode (Message->Entete_TELNET);
	
		Equipement->Nb_Port_Total_Scanner = Message->Nb_Port_Total_Scanner;
		Equipement->Nb_Port_Ouvert = Message->Nb_Port_Ouvert;
		Equipement->Nb_Port_Fermer = Message->Nb_Port_Fermer;
		Equipement->Nb_Port_Firewaller = Message->Nb_Port_Firewaller;
	
	
		if (strlen (Message->Nom_DNS) != 0) {
			free_gchar_if_no_null (Equipement->Nom_DNS_Complet);
			free_gchar_if_no_null (Equipement->Nom_DNS);
			Equipement->Nom_DNS_Complet = g_strdup (Message->Nom_DNS);
			Point_DNS = index (Equipement->Nom_DNS_Complet, '.');
			if (Point_DNS != NULL) {
				Taille_Chaine = Point_DNS - Equipement->Nom_DNS_Complet;
				strncpy (Dns, Equipement->Nom_DNS_Complet, Taille_Chaine);
				Dns[Taille_Chaine] = 0;
				Equipement->Nom_DNS = g_strdup (Dns);
			}
		}

		Deplace_Equipement (Objet, Reseau);
	
		Modification_Toggle_En_Cours = TRUE;
		gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (toggletoolbutton_Notification), FALSE);
		Modification_Toggle_En_Cours = FALSE;
		gtk_widget_set_sensitive (toggletoolbutton_Notification, FALSE);
	}
	Recuperation_Nb_Octet_Recu (sizeof (struct struct_Retour_Rafraichir_Equipement), Reseau);

	Equipement->Rafraichir_Equipement = FALSE;
}


void Modifie_Coloration_Text_Equipement (struct Struct_Liste_Reseau *Reseau, struct Struct_Equipement *Equipement)
{
	struct Struct_Modele_Objet *Objet = NULL;
	gint      Nb_Objet_Liste, i;

	Nb_Objet_Liste = g_list_length (Reseau->GList_Liste_Info);
	if (Nb_Objet_Liste < 4)
		return;
	for (i = 0; i < 4; i++) {
		Objet = g_list_nth_data (Reseau->GList_Liste_Info, i);
		if (Equipement->Equipement_Allumer) {
			Affiche_Icone_Defaut_Objet_liste (Objet, Reseau);
			Change_Couleur_Noir_Texte_liste (Objet, Reseau);
		}
		else {
			Affiche_Icone_Defaut_Griser_Objet_liste (Objet, Reseau);
			Change_Couleur_Gris_Texte_liste (Objet, Reseau);
		}
	}
}


void Change_Interface_Modification_Equipement(struct Struct_Equipement *Equipement,struct Struct_Modele_Objet *Objet,struct Struct_Liste_Reseau *Reseau){
	struct Struct_Modele_Objet *Objet_Texte_Ping_Time = NULL;
	struct struct_Demande_Rachaichir_Etat_Equipement Message_Ping;
	GtkTreeModel *model = NULL;
	gchar    *Texte_Notification = NULL;
	gint      Position_Glist;
	
	if (Equipement->Equipement_Allumer) {
		if ((Position_Glist = Recupere_Rang_Objet_Dans_Une_Liste (Reseau->GList_Test_Etat, Objet)) != -1) {
			Reseau->GList_Test_Etat = Supprime_Dans_Liste_Objets (Reseau->GList_Test_Etat, Objet, TRUE);
			Equipement->Alert_Notification_En_Cours = FALSE;
			Texte_Notification = g_strdup_printf ("Host [%s] is up", Equipement->Adresse_Ip_Char);
			Ajouter_Historique (Equipement, Texte_Notification, HISTORIQUE_INFO);
			if (Equipement->Contact_Admin)
				Envoie_Email_Notification (Texte_Notification, Equipement->Contact_Admin);
			MYFREE (Texte_Notification);
		}
	
		Affiche_Icone_Defaut_Objet_liste (Equipement->Objet_Liste_Par_Type, Reseau);
		Change_Couleur_Noir_Texte_liste (Equipement->Objet_Liste_Par_Type, Reseau);
	
		Affiche_Icone_Defaut_Objet_liste (Equipement->Objet_Liste_Par_Ip, Reseau);
		Change_Couleur_Noir_Texte_liste (Equipement->Objet_Liste_Par_Ip, Reseau);

		if ((Equipement == Equipement_Selectionner) && (Reseau == Reseau_Selectionner)){
			Modifie_Coloration_Text_Equipement (Reseau, Equipement);
		
			Efface_Combo (combobox_liste_Modules);
			creation_combo_milieu ();	
		}
		Demande_Agent_Raffraichir_Tout_Liste_Snmp(Objet,Equipement,Reseau);
	
		bzero (&Message_Ping, sizeof (struct struct_Demande_Rachaichir_Etat_Equipement));
		Message_Ping.ID_Reseau = Objet->ID_Reseau;
		memcpy (Message_Ping.ID_Equipement, Equipement->ID_Equipement, MAC_ADDR_LEN + IP_ADDR_LEN + 1);
		Communication_Envoie_Donnee (Reseau->Pid_Agent, DEMANDE_RAFRAICHIR_ETAT_EQUIMEMENT, (gpointer *) & Message_Ping, sizeof (Message_Ping), Reseau);
	}
	else {
	
		Affiche_Icone_Defaut_Griser_Objet_liste (Equipement->Objet_Liste_Par_Type, Reseau);
		Change_Couleur_Gris_Texte_liste (Equipement->Objet_Liste_Par_Type, Reseau);
	
		Affiche_Icone_Defaut_Griser_Objet_liste (Equipement->Objet_Liste_Par_Ip, Reseau);
		Change_Couleur_Gris_Texte_liste (Equipement->Objet_Liste_Par_Ip, Reseau);
		
		if ((Equipement == Equipement_Selectionner) && (Reseau == Reseau_Selectionner)){
			Modifie_Coloration_Text_Equipement (Reseau, Equipement);
		
		
		
		
		
			Efface_Combo (combobox_liste_Modules);
			creation_combo_milieu ();	
		}
	}
}


void Retour_Modification_Etat_Equipement (gpointer * Donnee)
{
	struct struct_Retour_Rachaichir_Etat_Equipement *Message = (struct struct_Retour_Rachaichir_Etat_Equipement *) Donnee;
	struct Struct_Liste_Reseau *Reseau = NULL;
	struct Struct_Equipement *Equipement = NULL;
	struct Struct_Modele_Objet *Objet = NULL;
	

	ERROR_if (Donnee == NULL);
	Reseau = Recupere_Pointeur_Structure_Reseau (Message->ID_Reseau);
	Objet = Recherche_Objet_Equipement (Message->ID_Equipement, Message->ID_Reseau);
	if (Objet == NULL) {
		debug_printf (INTERFACE, D_WARN, __FILE__, __PRETTY_FUNCTION__, __LINE__, "Retour_Modification_Etat_Equipement (Equipment unknown***********)");
		return;
	}
	Equipement = (struct Struct_Equipement *) Objet->Pointeur_Attacher;
	Equipement->Equipement_Allumer = Message->Equipement_Allumer;
	Equipement->Derniere_Modification_Etat_Equipement = Message->Derniere_Modification_Etat_Equipement;
	Change_Interface_Modification_Equipement(Equipement,Objet,Reseau);	
	Recuperation_Nb_Octet_Recu (sizeof (struct struct_Retour_Rachaichir_Etat_Equipement), Reseau);
}

void Retour_Info (gpointer * Donnee)
{
	struct struct_Info_Agent *Message = (struct struct_Info_Agent *) Donnee;
	struct Struct_Liste_Reseau *Reseau = NULL;

	ERROR_if (Donnee == NULL);
	Reseau = Recupere_Pointeur_Structure_Reseau (Message->ID_Reseau);
	Reseau->Nb_Equipement = Message->Nb_Machine_Dans_La_Liste;
	Reseau->Nb_Equipement_En_Cours_De_Scan = Message->Nb_Machine_En_Cours_De_Scan;
	Reseau->Nb_Equipement_En_Attente_De_Scan = Message->Nb_Machine_En_Attente_De_Scan;
	Reseau->Octet_Recu = Message->Octet_Recu;
	Reseau->Octet_Envoyer = Message->Octet_Envoyer;
	Affiche_Info_Reseau (Reseau);

}


void Retour_Alerte_Intrusion (gpointer * Donnee)
{
	struct struct_Alerte_Intrus *Message = (struct struct_Alerte_Intrus *) Donnee;
	struct Struct_Liste_Reseau *Reseau = NULL;
	gchar    *Texte_Alerte = NULL;

	ERROR_if (Donnee == NULL);
	Reseau = Recupere_Pointeur_Structure_Reseau (Message->ID_Reseau);
	Texte_Alerte = g_strdup_printf ("Intrusion Alert: \nIP : %d.%d.%d.%d\nAdresse Mac : %02X:%02X:%02X:%02X:%02X:%02X\nNetwork : [%s]", Message->ID_Equipement[6], Message->ID_Equipement[7], Message->ID_Equipement[8], Message->ID_Equipement[9], Message->ID_Equipement[0], Message->ID_Equipement[1], Message->ID_Equipement[2], Message->ID_Equipement[3], Message->ID_Equipement[4], Message->ID_Equipement[5], Reseau->Nom_Complet_Reseau);
	Affiche_Win_Alert();
	gtk_label_set_text (GTK_LABEL (label_Info_Alert), Texte_Alerte);
	MYFREE (Texte_Alerte);
	Recuperation_Nb_Octet_Recu (sizeof (struct struct_Alerte_Intrus), Reseau);
#ifdef  __SOUND_ENABLE
	Sound_Alarme_Active = TRUE;
#endif
}


void Retour_Notification_Equipement (gpointer * Donnee)
{
	struct struct_Retour_Notification_Changement_Etat_Equipement *Message = (struct struct_Retour_Notification_Changement_Etat_Equipement *) Donnee;
	struct Struct_Modele_Objet *Objet = NULL;
	struct Struct_Liste_Reseau *Reseau = NULL;
	struct Struct_Equipement *Equipement = NULL;
	gchar    *Texte_Notification = NULL;

	ERROR_if (Donnee == NULL);
	Reseau = Recupere_Pointeur_Structure_Reseau (Message->ID_Reseau);
	Objet = Recherche_Objet_Equipement (Message->ID_Equipement, Message->ID_Reseau);
	if (Objet == NULL) {
		debug_printf (INTERFACE, D_WARN, __FILE__, __PRETTY_FUNCTION__, __LINE__, "Retour notification (Equipment unknown)");
		return;
	}
	Equipement = (struct Struct_Equipement *) Objet->Pointeur_Attacher;
	Texte_Notification = g_strdup_printf ("Host [%s] is down\nNetwork : [%s]", Equipement->Adresse_Ip_Char, Reseau->Nom_Complet_Reseau);
	Affiche_Win_Alert();
	gtk_label_set_text (GTK_LABEL (label_Info_Alert), Texte_Notification);
	if (Equipement->Contact_Admin)
		Envoie_Email_Notification (Texte_Notification, Equipement->Contact_Admin);
	MYFREE (Texte_Notification);
	Texte_Notification = g_strdup_printf ("Host [%s] is down", Equipement->Adresse_Ip_Char);
	Active_Test_Etat_Objet (Objet, Recupere_Pointeur_Structure_Reseau (Message->ID_Reseau));
	Ajouter_Historique (Equipement, Texte_Notification, HISTORIQUE_ALERTE);
	MYFREE (Texte_Notification);
	Equipement->Alert_Notification_En_Cours = TRUE;
	Equipement->Equipement_Allumer = FALSE;
	Change_Interface_Modification_Equipement(Equipement,Objet,Reseau);	
	Recuperation_Nb_Octet_Recu (sizeof (struct struct_Retour_Notification_Changement_Etat_Equipement), Reseau);
#ifdef  __SOUND_ENABLE
	Sound_Alarme_Active = TRUE;
#endif
}




void Retour_Rafraichir_Nom_Utilisateur (gpointer * Donnee)
{
	struct struct_Retour_Rafraichir_Nom_Utilisateur *Message = (struct struct_Retour_Rafraichir_Nom_Utilisateur *) Donnee;
	struct Struct_Modele_Objet *Objet = NULL,*Objet_Equipement = NULL;
	struct Struct_Liste_Reseau *Reseau = NULL;
	struct Struct_Equipement *Equipement = NULL;
	GtkTreeModel *model = NULL;
	GtkTreeIter Ligne;

	ERROR_if (Donnee == NULL);
	Reseau = Recupere_Pointeur_Structure_Reseau (Message->ID_Reseau);
	Objet = Recherche_Objet_Equipement (Message->ID_Equipement, Message->ID_Reseau);
	if (Objet == NULL) {
		debug_printf (INTERFACE, D_WARN, __FILE__, __PRETTY_FUNCTION__, __LINE__, "Retour_Rafraichir_Nom_Utilisateur (Equipment unknown)");
		return;
	}

	Equipement = (struct Struct_Equipement *) Objet->Pointeur_Attacher;
	strcpy(Equipement->Smb.Utilisateur,Message->Utilisateur);
	printf("Modification nom utilisateur   [%s]->>[%s]\n",Equipement->Smb.Utilisateur,Equipement->Smb.HostName);

	Objet_Equipement = Equipement->Objet_Liste_Par_Ip;
	model = gtk_tree_view_get_model (GTK_TREE_VIEW (Widget_Liste (Objet_Equipement, Reseau)));
	if (strcmp(Equipement->Smb.Utilisateur,Equipement->Smb.HostName)!=0)
		gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Equipement->ID_Arbre_Ligne, USER, Equipement->Smb.Utilisateur, -1);
	else
		gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Equipement->ID_Arbre_Ligne, USER, "-- LOGIN --", -1);

	Recuperation_Nb_Octet_Recu (sizeof (struct struct_Retour_Rafraichir_Nom_Utilisateur), Reseau);
}


void Copie_Icone_Equipement (gpointer * pointeur)
{
	struct Struct_Modele_Objet *Objet = (struct Struct_Modele_Objet *) pointeur;
	struct Struct_Equipement *Equipement = NULL;
	gchar *path = NULL;

	ERROR_if (pointeur == NULL);
	Equipement = (struct Struct_Equipement *) Objet->Pointeur_Attacher;

	if ((Equipement->Signature->icone == NULL) && (Equipement->Signature->Icon != NULL) && (strlen (Equipement->Signature->Icon) != 0)) {
		path = g_strdup_printf(PATH_ROOT "%s",Equipement->Signature->Icon);
		Equipement->Signature->icone = Chargement_Image (path, COULEUR);
		Equipement->Signature->icone_grise = Chargement_Image (path, NOIR_ET_BLANC);
		MYFREE (path);
	}
	if (Equipement->Signature->icone != NULL) {
		Objet->icone = Equipement->Signature->icone;
		Objet->icone_griser = Equipement->Signature->icone_grise;
	}
}


void Debug_ID_Equipement (unsigned char *ID_Equipement)
{
	ERROR_if (ID_Equipement == NULL);
	printf ("Adresse Mac : %02X:%02X:%02X:%02X:%02X:%02X  IP : %d.%d.%d.%d\n", ID_Equipement[0], ID_Equipement[1], ID_Equipement[2], ID_Equipement[3], ID_Equipement[4], ID_Equipement[5], ID_Equipement[6], ID_Equipement[7], ID_Equipement[8], ID_Equipement[9]);
}



void Restore_Different_Etat_Equipement (struct Struct_Equipement *Equipement, struct Struct_Modele_Objet *Objet_Equipement, gint ID_Reseau)
{
	struct Struct_Liste_Reseau *Reseau = NULL;
	GtkTreeModel *model = NULL;

	ERROR_if (Equipement == NULL);
	Reseau = Recupere_Pointeur_Structure_Reseau (ID_Reseau);
	if (!Equipement->Equipement_Allumer) {
		Affiche_Icone_Defaut_Griser_Objet_liste (Objet_Equipement, Reseau);
		Change_Couleur_Gris_Texte_liste (Objet_Equipement, Reseau);
	}
	if (Equipement->Intrus)
		Active_Alerte_Objet (Objet_Equipement, Reseau);
	if (Equipement->Alert_Notification_En_Cours)
		Active_Test_Etat_Objet (Objet_Equipement, Reseau);
	if (Equipement->Notification_En_Cours) {
		Objet_Equipement->Notification_En_Cours = TRUE;
		if (Reseau->Mode_Liste_Detaille) {
			model = gtk_tree_view_get_model (GTK_TREE_VIEW (Widget_Liste (Objet_Equipement, Reseau)));
			gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Equipement->ID_Arbre_Ligne, NOTIFICATION, "YES", -1);
		}
	}
	if (Equipement->Rafraichir_Equipement)
		Active_Rachaichissment_Objet (Objet_Equipement, Reseau);
}


struct Struct_Modele_Objet *Afficher_Nouveau_Equipement_Liste_Detaille (struct Struct_Equipement *Equipement, gint ID_Reseau)
{
	struct Struct_Modele_Objet *Objet_Equipement = NULL;
	struct Struct_Liste_Reseau *Reseau = NULL;
	GtkTreeModel *model = NULL;
	GtkTreeIter Ligne;
	gchar    *Chaine_Default = NULL;

	ERROR_if (Equipement == NULL);


	Reseau = Recupere_Pointeur_Structure_Reseau (ID_Reseau);
	if (Equipement->ID_Equipement[6] != 0)
		Chaine_Default = Equipement->Adresse_Ip_Char;
	else
		Chaine_Default = Equipement->Adresse_MAC_Char;


	if (Equipement->Agent_AutoScan) {
		Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT_AGENT_AUTOSCAN, Chaine_Default, (gpointer *) Equipement, NULL, PERE_RACINE, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_IP);
		Change_Couleur_Ligne_Liste (Objet_Equipement, 123 * 255, 141 * 255, 152 * 255,Recupere_Pointeur_Structure_Reseau(ID_Reseau));
	}
	else {
	
		if (Equipement->Signature != NULL) {
			Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT, Chaine_Default, (gpointer *) Equipement, NULL, PERE_RACINE, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_IP);
			model = gtk_tree_view_get_model (GTK_TREE_VIEW (Widget_Liste (Objet_Equipement, Reseau)));
			gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Equipement->ID_Arbre_Ligne, OS, Equipement->Signature->System_Name, -1);
		}
		else {
			if (Equipement->Nb_Port_Firewaller == Equipement->Nb_Port_Total_Scanner)
				Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT_FIREWALL, Chaine_Default, (gpointer *) Equipement, NULL, PERE_RACINE, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_IP);
			else if (Equipement->Nb_Port_Ouvert == 0)
				Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT_PORT_FERMER, Chaine_Default, (gpointer *) Equipement, NULL, PERE_RACINE, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_IP);
			else
				Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT_INCONNU, Chaine_Default, (gpointer *) Equipement, NULL, PERE_RACINE, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_IP);
		}
	}
	model = gtk_tree_view_get_model (GTK_TREE_VIEW (Widget_Liste (Objet_Equipement, Reseau)));

	if (Equipement->Alias != NULL)
		gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Equipement->ID_Arbre_Ligne, HOSTNAME, Equipement->Alias, -1);
	else if (strlen (Equipement->Smb.HostName) != 0)
		gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Equipement->ID_Arbre_Ligne, HOSTNAME, Equipement->Smb.HostName, -1);
	else if (Equipement->Nom_DNS != NULL)
		gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Equipement->ID_Arbre_Ligne, HOSTNAME, Equipement->Nom_DNS, -1);

	
	if (strlen (Equipement->Smb.Utilisateur) != 0)
		if (strcmp(Equipement->Smb.Utilisateur,Equipement->Smb.HostName)!=0)
			gtk_tree_store_set (GTK_TREE_STORE (model), &Objet_Equipement->ID_Arbre_Ligne, USER, Equipement->Smb.Utilisateur, -1);
	
	Equipement->Objet_Liste_Par_Ip = Objet_Equipement;

	if (!check_entete_valide(Equipement))
		Change_Couleur_Ligne_Liste (Objet_Equipement, 244 * 255, 14 * 255, 14 * 255,Recupere_Pointeur_Structure_Reseau(ID_Reseau));
	
	return Objet_Equipement;
}


gboolean check_entete_valide(struct Struct_Equipement *Equipement){
	if ((Equipement->Entete_FTP != NULL) && (strcmp(Equipement->Entete_FTP,ERROR_FTP)==0))
		return FALSE;	
	if ((Equipement->Entete_HTTP != NULL) && (strcmp(Equipement->Entete_HTTP,ERROR_HTTP)==0))
		return FALSE;	
	if ((Equipement->Entete_HTTPS != NULL) && (strcmp(Equipement->Entete_HTTPS,ERROR_HTTPS)==0))
		return FALSE;	
	if ((Equipement->Entete_IMAP != NULL) && (strcmp(Equipement->Entete_IMAP,ERROR_IMAP)==0))
		return FALSE;	
	if ((Equipement->Entete_SMTP != NULL) && (strcmp(Equipement->Entete_SMTP,ERROR_SMTP)==0))
		return FALSE;	
	if ((Equipement->Entete_SSH != NULL) && (strcmp(Equipement->Entete_SSH,ERROR_SSH)==0))
		return FALSE;	
	if ((Equipement->Entete_TELNET != NULL) && (strcmp(Equipement->Entete_TELNET,ERROR_TELNET)==0))
		return FALSE;	
	return TRUE;	
}

struct Struct_Modele_Objet *Afficher_Nouveau_Equipement (struct Struct_Equipement *Equipement, gint ID_Reseau)
{
	struct Struct_Modele_Objet *Objet_Equipement = NULL;
	gint      Equipment_Type;
	gchar    *Chaine_Default = NULL;

	ERROR_if (Equipement == NULL);


	if (Equipement->ID_Equipement[6] != 0)
		Chaine_Default = Equipement->Adresse_Ip_Char;
	else
		Chaine_Default = Equipement->Adresse_MAC_Char;

	if (strlen (Equipement->Smb.HostName) != 0)
		Chaine_Default = Equipement->Smb.HostName;

	if (Equipement->Agent_AutoScan) {
		Equipment_Type = LISTE_STATION;
		if (Cherche_Si_Port_Serveur (Equipement))
			Equipment_Type = LISTE_SERVEUR;
		if (strlen (Equipement->Smb.DomainName) == 0)
			Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT_AGENT_AUTOSCAN, Chaine_Default, (gpointer *) Equipement, NULL, Equipment_Type, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
		else
			Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT_AGENT_AUTOSCAN, Chaine_Default, (gpointer *) Equipement, NULL, LISTE_MODELE_DOMAINE, Equipement->Smb.DomainName, Equipment_Type, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
	
	
	
	
		Change_Couleur_Ligne_Liste (Objet_Equipement, 123 * 255, 141 * 255, 152 * 255,Recupere_Pointeur_Structure_Reseau(ID_Reseau));
		Equipement->Objet_Liste_Par_Type = Objet_Equipement;
		return Objet_Equipement;
	}

	Equipement->Signature = Retour_Pointeur_Signature_Correspondant (Equipement);
	if (Equipement->Signature != NULL) {
		
		Equipment_Type = Equipement->Signature->Equipment_Type;
		if (Equipment_Type == LISTE_STATION) {
			if (Cherche_Si_Port_Serveur (Equipement))
				Equipment_Type = LISTE_SERVEUR;
		}
		if (strlen (Equipement->Smb.DomainName) == 0) {
		
			if (Equipement->Alias != NULL) {
				Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT, Equipement->Alias, (gpointer *) Equipement, NULL, Equipment_Type, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
			}
			else {
				if (Equipement->Nom_DNS == NULL)
					Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT, Chaine_Default, (gpointer *) Equipement, NULL, Equipment_Type, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
				else
					Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT, Equipement->Nom_DNS, (gpointer *) Equipement, NULL, Equipment_Type, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
			}
		}
		else {
			if (Equipement->Alias != NULL)
				Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT, Equipement->Alias, (gpointer *) Equipement, NULL, LISTE_MODELE_DOMAINE, Equipement->Smb.DomainName, Equipment_Type, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
			else if (strlen (Equipement->Smb.HostName) != 0)
				Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT, Chaine_Default, (gpointer *) Equipement, NULL, LISTE_MODELE_DOMAINE, Equipement->Smb.DomainName, Equipment_Type, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
			else if (Equipement->Nom_DNS != NULL) {
				Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT, Equipement->Nom_DNS, (gpointer *) Equipement, NULL, LISTE_MODELE_DOMAINE, Equipement->Smb.DomainName, Equipment_Type, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
			}
			else
				Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT, Chaine_Default, (gpointer *) Equipement, NULL, LISTE_MODELE_DOMAINE, Equipement->Smb.DomainName, Equipment_Type, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
		}
	}
	else {
	
		if (Equipement->Nb_Port_Firewaller == Equipement->Nb_Port_Total_Scanner) {
		
		
			if (Equipement->Alias != NULL)
				Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT_FIREWALL, Equipement->Alias, (gpointer *) Equipement, NULL, LISTE_FIREWALL, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
			else if (Equipement->Nom_DNS != NULL)
				Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT_FIREWALL, Equipement->Nom_DNS, (gpointer *) Equipement, NULL, LISTE_FIREWALL, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
			else
				Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT_FIREWALL, Chaine_Default, (gpointer *) Equipement, NULL, LISTE_FIREWALL, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
		}
		else {
			if (Equipement->Nb_Port_Ouvert == 0) {
			
				if (Equipement->Alias != NULL)
					Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT_PORT_FERMER, Equipement->Alias, (gpointer *) Equipement, NULL, LISTE_INCONNU, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
				else if (Equipement->Nom_DNS != NULL)
					Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT_PORT_FERMER, Equipement->Nom_DNS, (gpointer *) Equipement, NULL, LISTE_INCONNU, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
				else
					Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT_PORT_FERMER, Chaine_Default, (gpointer *) Equipement, NULL, LISTE_INCONNU, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
			}
			else {
			
				if (Equipement->Alias != NULL)
					Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT_INCONNU, Equipement->Alias, (gpointer *) Equipement, NULL, LISTE_INCONNU, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
				else if (strlen (Equipement->Smb.HostName) != 0)
					Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT_INCONNU, Chaine_Default, (gpointer *) Equipement, NULL, LISTE_INCONNU, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
				else if (Equipement->Nom_DNS != NULL) {
					Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT_INCONNU, Equipement->Nom_DNS, (gpointer *) Equipement, NULL, LISTE_INCONNU, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
				}
				else
					Objet_Equipement = Ajouter_Nouvelle_Objet (LISTE_MODELE_EQUIPEMENT_INCONNU, Chaine_Default, (gpointer *) Equipement, NULL, LISTE_INCONNU, NULL, PERE_RACINE, PERE_RACINE, PERE_RACINE, PERE_RACINE, ID_Reseau, LISTE_MACHINE_PAR_TYPE);
			}
		}
	}
	Equipement->Objet_Liste_Par_Type = Objet_Equipement;

	if (!check_entete_valide(Equipement))
		Change_Couleur_Ligne_Liste (Objet_Equipement, 244 * 255, 14 * 255, 14 * 255,Recupere_Pointeur_Structure_Reseau(ID_Reseau));

	return Objet_Equipement;
}


void Deplace_Equipement (struct Struct_Modele_Objet *Objet, struct Struct_Liste_Reseau *Reseau)
{
	struct Struct_Equipement *Equipement = NULL;
	struct Struct_Modele_Objet *Objet_Liste = NULL,*Objet_Par_Type = NULL,*Objet_Par_Ip = NULL;
	GtkTreeModel *model = NULL;
	guint     Nb_Objet_Liste;

	
	ERROR_if (Objet == NULL);
	ERROR_if (Reseau == NULL);
	Nb_Objet_Liste = g_list_length (GList_Liste (Objet, Reseau));
	if (Nb_Objet_Liste != 0) {
		if (Objet->Nb_Enfant == 0) {
			Equipement = (struct Struct_Equipement *) Objet->Pointeur_Attacher;
		
			Objet_Liste = Equipement->Objet_Liste_Par_Type;
			if (!Equipement->Equipement_Erase){
				Desactive_Rachaichissment_Objet (Objet_Liste, Reseau, FALSE);
				Desactive_Alerte_Objet (Objet_Liste, Reseau, FALSE);
				Desactive_Test_Etat_Objet (Objet_Liste, Reseau, FALSE);
			
				Recupere_Nouveau_Pointeur_Liste (Objet_Liste, Reseau, Supprime_Dans_Liste_Objets (GList_Liste (Objet_Liste, Reseau), Objet_Liste, TRUE));
			
				model = gtk_tree_view_get_model (GTK_TREE_VIEW (Widget_Liste (Objet_Liste, Reseau)));
				gtk_tree_store_remove (GTK_TREE_STORE (model), &Objet_Liste->ID_Arbre_Ligne);
			
				if (Objet_Liste->Objet_Pere != NULL)
					Supprime_Objet_Liste ((struct Struct_Modele_Objet *) Objet_Liste->Objet_Pere, Reseau);
			}
			else {
			
				Reseau->Nb_Equipement_Erase--;
				Affiche_Info_Reseau (Reseau);
			}
		
			Objet_Par_Type = Afficher_Nouveau_Equipement ((struct Struct_Equipement *) Equipement, Objet_Liste->ID_Reseau);
			MYFREE (Objet_Liste);
						
		
			Objet_Liste = Equipement->Objet_Liste_Par_Ip;
			if (!Equipement->Equipement_Erase){
				Desactive_Rachaichissment_Objet (Objet_Liste, Reseau, FALSE);
				Desactive_Alerte_Objet (Objet_Liste, Reseau, FALSE);
				Desactive_Test_Etat_Objet (Objet_Liste, Reseau, FALSE);
			
				Recupere_Nouveau_Pointeur_Liste (Objet_Liste, Reseau, Supprime_Dans_Liste_Objets (GList_Liste (Objet_Liste, Reseau), Objet_Liste, TRUE));
			
				model = gtk_tree_view_get_model (GTK_TREE_VIEW (Widget_Liste (Objet_Liste, Reseau)));
				gtk_tree_store_remove (GTK_TREE_STORE (model), &Objet_Liste->ID_Arbre_Ligne);
			}
		
			Objet_Par_Ip = Afficher_Nouveau_Equipement_Liste_Detaille ((struct Struct_Equipement *) Equipement, Objet_Liste->ID_Reseau);
			MYFREE (Objet_Liste);	
			
			if (!Reseau->Mode_Liste_Detaille)
				Objet_Equipement_Selectionner = Objet_Par_Type;
			else
				Objet_Equipement_Selectionner = Objet_Par_Ip;
			
		}
		else
			debug_printf (INTERFACE, D_ERRO, __FILE__, __PRETTY_FUNCTION__, __LINE__, "Deplace objet impossible : objet parent [%s]", Objet->Texte_Defaut);
	}
	else
		debug_printf (INTERFACE, D_ERRO, __FILE__, __PRETTY_FUNCTION__, __LINE__, "Deplace objet impossible : aucun objet dans la liste");
}


void Parcours_Equipement_Inconnu (gchar * Signature)
{			
	struct Struct_Liste_Reseau *Reseau = NULL;
	struct Struct_Equipement *Equipement = NULL;
	struct Struct_Modele_Objet *Objet = NULL;
	gint      Nb_Objet_Liste, i;

	ERROR_if (Signature == NULL);
	Reseau = Recupere_Pointeur_Structure_Reseau (ID_Reseau_En_Cours);
	Nb_Objet_Liste = g_list_length (Reseau->GList_Liste_Equipement);
	for (i = 0; i < Nb_Objet_Liste; i++) {
		Objet = g_list_nth_data (Reseau->GList_Liste_Equipement, i);
		if (Objet->Pointeur_Attacher != NULL) {
			Equipement = (struct Struct_Equipement *) Objet->Pointeur_Attacher;
			if (strcmp (Signature, Equipement->Md5_Signature_W) == 0) {
			
				Deplace_Equipement (Objet, Reseau);
				Nb_Objet_Liste = g_list_length (Reseau->GList_Liste_Equipement);
			}
		}
	}
}

struct Struct_Modele_Objet *Recherche_Objet_Equipement (unsigned char *ID_Equipement, gint ID_Reseau)
{
	struct Struct_Liste_Reseau *Reseau = NULL;
	struct Struct_Equipement *Equipement = NULL;
	struct Struct_Modele_Objet *Objet = NULL;
	gint      Nb_Objet_Liste, i;

	ERROR_if (ID_Equipement == NULL);
	Reseau = Recupere_Pointeur_Structure_Reseau (ID_Reseau);
	Nb_Objet_Liste = g_list_length (Reseau->GList_Liste_Equipement);
	for (i = 0; i < Nb_Objet_Liste; i++) {
		Objet = g_list_nth_data (Reseau->GList_Liste_Equipement, i);
		if (Objet->Pointeur_Attacher != NULL) {
			Equipement = (struct Struct_Equipement *) Objet->Pointeur_Attacher;
			if (memcmp (Equipement->ID_Equipement, ID_Equipement, MAC_ADDR_LEN + IP_ADDR_LEN + 1) == 0) {
			
				return Objet;
			}
		}
	}
	return NULL;	
}


static unsigned char hexchars[] = "0123456789ABCDEF";

gchar    *url_encode (gchar * source)
{
	gchar    *resultat = NULL;
	int       i, index;


	if (source == NULL)
		return g_strdup ("-null-");
	MALLOC (resultat,(sizeof (char)) * ((3 * strlen (source)) + 1));
	index = 0;
	for (i = 0; i < strlen (source); i++) {
		resultat[index] = source[i];
		if ((source[i] != '$') && (source[i] != '(') && (source[i] != ')')) {
			if (!(((source[i] <= '9') && (source[i] >= '0'))
					|| ((source[i] <= 'Z') && (source[i] >= 'A'))
					|| ((source[i] <= 'z') && (source[i] >= 'a'))
				)
				) {
				resultat[index] = '%';
				resultat[index + 1] = hexchars[(unsigned char) source[i] >> 4];
				resultat[index + 2] = hexchars[(unsigned char) source[i] & 15];
				index = index + 2;
			}
		}
		index++;
	}
	resultat[index] = '\0';
	return resultat;
}


gchar    *Get_Key_Signature_Equipement (struct Struct_Equipement * Equipement){
	return g_strdup_printf ("%02X%02X%02X%01X%04X%02X%01X%02X%02X%04X-%02X%02X%02X%01X%04X%02X%01X%02X%02X%04X",Equipement->Reponse_Signature[0].HeaderLengthIP,Equipement->Reponse_Signature[0].DSF,Equipement->Reponse_Signature[0].TailleTotal,Equipement->Reponse_Signature[0].Id,Equipement->Reponse_Signature[0].Flags_IP_Offset,Equipement->Reponse_Signature[0].TTL,Equipement->Reponse_Signature[0].NumSeq,Equipement->Reponse_Signature[0].HeaderLengthTCP,Equipement->Reponse_Signature[0].Flags_TCP,Equipement->Reponse_Signature[0].WindowSize,Equipement->Reponse_Signature[6].HeaderLengthIP,Equipement->Reponse_Signature[6].DSF,Equipement->Reponse_Signature[6].TailleTotal,Equipement->Reponse_Signature[6].Id,Equipement->Reponse_Signature[6].Flags_IP_Offset,Equipement->Reponse_Signature[6].TTL,Equipement->Reponse_Signature[6].NumSeq,Equipement->Reponse_Signature[6].HeaderLengthTCP,Equipement->Reponse_Signature[6].Flags_TCP,	Equipement->Reponse_Signature[6].WindowSize);
}


gchar    *Debug_Signature_Equipement (struct Struct_Equipement * Equipement)
{			
	gchar    *ligne = NULL, *debugSignature = NULL;
	gint      tailleDebugSignature;

	ERROR_if (Equipement == NULL);

	ligne = g_strdup_printf ("Syn o  %02X |%02X %02X %02X %01X %04X %02X %01X %02X %02X %04X|  [%i][%d]\n", Equipement->Reponse_Signature[0].TaillePacketReponse, Equipement->Reponse_Signature[0].HeaderLengthIP, Equipement->Reponse_Signature[0].DSF, Equipement->Reponse_Signature[0].TailleTotal, Equipement->Reponse_Signature[0].Id, Equipement->Reponse_Signature[0].Flags_IP_Offset, Equipement->Reponse_Signature[0].TTL, Equipement->Reponse_Signature[0].NumSeq, Equipement->Reponse_Signature[0].HeaderLengthTCP, Equipement->Reponse_Signature[0].Flags_TCP,Equipement->Reponse_Signature[0].WindowSize,Equipement->Reponse_Signature_Debug[0].Num_Port_Utiliser,Equipement->Reponse_Signature_Debug[0].Temps_Reponse);
	tailleDebugSignature = strlen (ligne) + 1;
	MALLOC (debugSignature,sizeof (gchar) * tailleDebugSignature);
	strcpy (debugSignature, ligne);
	MYFREE (ligne);

	ligne = g_strdup_printf ("Nul o  %02X |%02X %02X %02X %01X %04X %02X %01X %02X %02X %04X|  [%i][%d]\n", Equipement->Reponse_Signature[1].TaillePacketReponse, Equipement->Reponse_Signature[1].HeaderLengthIP, Equipement->Reponse_Signature[1].DSF, Equipement->Reponse_Signature[1].TailleTotal, Equipement->Reponse_Signature[1].Id, Equipement->Reponse_Signature[1].Flags_IP_Offset, Equipement->Reponse_Signature[1].TTL, Equipement->Reponse_Signature[1].NumSeq, Equipement->Reponse_Signature[1].HeaderLengthTCP, Equipement->Reponse_Signature[1].Flags_TCP, Equipement->Reponse_Signature[1].WindowSize,Equipement->Reponse_Signature_Debug[1].Num_Port_Utiliser,Equipement->Reponse_Signature_Debug[1].Temps_Reponse);
	tailleDebugSignature = strlen (ligne) + tailleDebugSignature;
	REALLOC (debugSignature,sizeof (char) * tailleDebugSignature);
	strcat (debugSignature, ligne);
	MYFREE (ligne);

	ligne = g_strdup_printf ("Ecn o  %02X |%02X %02X %02X %01X %04X %02X %01X %02X %02X %04X|  [%i][%d]\n", Equipement->Reponse_Signature[2].TaillePacketReponse, Equipement->Reponse_Signature[2].HeaderLengthIP, Equipement->Reponse_Signature[2].DSF, Equipement->Reponse_Signature[2].TailleTotal, Equipement->Reponse_Signature[2].Id, Equipement->Reponse_Signature[2].Flags_IP_Offset, Equipement->Reponse_Signature[2].TTL, Equipement->Reponse_Signature[2].NumSeq, Equipement->Reponse_Signature[2].HeaderLengthTCP, Equipement->Reponse_Signature[2].Flags_TCP, Equipement->Reponse_Signature[2].WindowSize,Equipement->Reponse_Signature_Debug[2].Num_Port_Utiliser,Equipement->Reponse_Signature_Debug[2].Temps_Reponse);
	tailleDebugSignature = strlen (ligne) + tailleDebugSignature;
	REALLOC (debugSignature, sizeof (char) * tailleDebugSignature);
	strcat (debugSignature, ligne);
	MYFREE (ligne);

	ligne = g_strdup_printf ("FUP o  %02X |%02X %02X %02X %01X %04X %02X %01X %02X %02X %04X|  [%i][%d]\n", Equipement->Reponse_Signature[3].TaillePacketReponse, Equipement->Reponse_Signature[3].HeaderLengthIP, Equipement->Reponse_Signature[3].DSF, Equipement->Reponse_Signature[3].TailleTotal, Equipement->Reponse_Signature[3].Id, Equipement->Reponse_Signature[3].Flags_IP_Offset, Equipement->Reponse_Signature[3].TTL, Equipement->Reponse_Signature[3].NumSeq, Equipement->Reponse_Signature[3].HeaderLengthTCP, Equipement->Reponse_Signature[3].Flags_TCP, Equipement->Reponse_Signature[3].WindowSize,Equipement->Reponse_Signature_Debug[3].Num_Port_Utiliser,Equipement->Reponse_Signature_Debug[3].Temps_Reponse);
	tailleDebugSignature = strlen (ligne) + tailleDebugSignature;
	REALLOC (debugSignature, sizeof (char) * tailleDebugSignature);
	strcat (debugSignature, ligne);
	MYFREE (ligne);

	ligne = g_strdup_printf ("Ack o  %02X |%02X %02X %02X %01X %04X %02X %01X %02X %02X %04X|  [%i][%d]\n", Equipement->Reponse_Signature[4].TaillePacketReponse, Equipement->Reponse_Signature[4].HeaderLengthIP, Equipement->Reponse_Signature[4].DSF, Equipement->Reponse_Signature[4].TailleTotal, Equipement->Reponse_Signature[4].Id, Equipement->Reponse_Signature[4].Flags_IP_Offset, Equipement->Reponse_Signature[4].TTL, Equipement->Reponse_Signature[4].NumSeq, Equipement->Reponse_Signature[4].HeaderLengthTCP, Equipement->Reponse_Signature[4].Flags_TCP, Equipement->Reponse_Signature[4].WindowSize,Equipement->Reponse_Signature_Debug[4].Num_Port_Utiliser,Equipement->Reponse_Signature_Debug[4].Temps_Reponse);
	tailleDebugSignature = strlen (ligne) + tailleDebugSignature;
	REALLOC (debugSignature, sizeof (char) * tailleDebugSignature);
	strcat (debugSignature, ligne);
	MYFREE (ligne);

	ligne = g_strdup_printf ("Fin o  %02X |%02X %02X %02X %01X %04X %02X %01X %02X %02X %04X|  [%i][%d]\n", Equipement->Reponse_Signature[5].TaillePacketReponse, Equipement->Reponse_Signature[5].HeaderLengthIP, Equipement->Reponse_Signature[5].DSF, Equipement->Reponse_Signature[5].TailleTotal, Equipement->Reponse_Signature[5].Id, Equipement->Reponse_Signature[5].Flags_IP_Offset, Equipement->Reponse_Signature[5].TTL, Equipement->Reponse_Signature[5].NumSeq, Equipement->Reponse_Signature[5].HeaderLengthTCP, Equipement->Reponse_Signature[5].Flags_TCP, Equipement->Reponse_Signature[5].WindowSize,Equipement->Reponse_Signature_Debug[5].Num_Port_Utiliser,Equipement->Reponse_Signature_Debug[5].Temps_Reponse);
	tailleDebugSignature = strlen (ligne) + tailleDebugSignature;
	REALLOC (debugSignature, sizeof (char) * tailleDebugSignature);
	strcat (debugSignature, ligne);
	MYFREE (ligne);

	ligne = g_strdup_printf ("Syn f  %02X |%02X %02X %02X %01X %04X %02X %01X %02X %02X %04X|  [%i][%d]\n", Equipement->Reponse_Signature[6].TaillePacketReponse, Equipement->Reponse_Signature[6].HeaderLengthIP, Equipement->Reponse_Signature[6].DSF, Equipement->Reponse_Signature[6].TailleTotal, Equipement->Reponse_Signature[6].Id, Equipement->Reponse_Signature[6].Flags_IP_Offset, Equipement->Reponse_Signature[6].TTL, Equipement->Reponse_Signature[6].NumSeq, Equipement->Reponse_Signature[6].HeaderLengthTCP, Equipement->Reponse_Signature[6].Flags_TCP, Equipement->Reponse_Signature[6].WindowSize,Equipement->Reponse_Signature_Debug[6].Num_Port_Utiliser,Equipement->Reponse_Signature_Debug[6].Temps_Reponse);
	tailleDebugSignature = strlen (ligne) + tailleDebugSignature;
	REALLOC(debugSignature, sizeof (char) * tailleDebugSignature);
	strcat (debugSignature, ligne);
	MYFREE (ligne);

	ligne = g_strdup_printf ("Nul f  %02X |%02X %02X %02X %01X %04X %02X %01X %02X %02X %04X|  [%i][%d]\n", Equipement->Reponse_Signature[7].TaillePacketReponse, Equipement->Reponse_Signature[7].HeaderLengthIP, Equipement->Reponse_Signature[7].DSF, Equipement->Reponse_Signature[7].TailleTotal, Equipement->Reponse_Signature[7].Id, Equipement->Reponse_Signature[7].Flags_IP_Offset, Equipement->Reponse_Signature[7].TTL, Equipement->Reponse_Signature[7].NumSeq, Equipement->Reponse_Signature[7].HeaderLengthTCP, Equipement->Reponse_Signature[7].Flags_TCP, Equipement->Reponse_Signature[7].WindowSize,Equipement->Reponse_Signature_Debug[7].Num_Port_Utiliser,Equipement->Reponse_Signature_Debug[7].Temps_Reponse);
	tailleDebugSignature = strlen (ligne) + tailleDebugSignature;
	REALLOC (debugSignature, sizeof (char) * tailleDebugSignature);
	strcat (debugSignature, ligne);
	MYFREE (ligne);

	ligne = g_strdup_printf ("Ecn f  %02X |%02X %02X %02X %01X %04X %02X %01X %02X %02X %04X|  [%i][%d]\n", Equipement->Reponse_Signature[8].TaillePacketReponse, Equipement->Reponse_Signature[8].HeaderLengthIP, Equipement->Reponse_Signature[8].DSF, Equipement->Reponse_Signature[8].TailleTotal, Equipement->Reponse_Signature[8].Id, Equipement->Reponse_Signature[8].Flags_IP_Offset, Equipement->Reponse_Signature[8].TTL, Equipement->Reponse_Signature[8].NumSeq, Equipement->Reponse_Signature[8].HeaderLengthTCP, Equipement->Reponse_Signature[8].Flags_TCP, Equipement->Reponse_Signature[8].WindowSize,Equipement->Reponse_Signature_Debug[8].Num_Port_Utiliser,Equipement->Reponse_Signature_Debug[8].Temps_Reponse);
	tailleDebugSignature = strlen (ligne) + tailleDebugSignature;
	REALLOC (debugSignature, sizeof (char) * tailleDebugSignature);
	strcat (debugSignature, ligne);
	MYFREE (ligne);

	ligne = g_strdup_printf ("FUP f  %02X |%02X %02X %02X %01X %04X %02X %01X %02X %02X %04X|  [%i][%d]\n", Equipement->Reponse_Signature[9].TaillePacketReponse, Equipement->Reponse_Signature[9].HeaderLengthIP, Equipement->Reponse_Signature[9].DSF, Equipement->Reponse_Signature[9].TailleTotal, Equipement->Reponse_Signature[9].Id, Equipement->Reponse_Signature[9].Flags_IP_Offset, Equipement->Reponse_Signature[9].TTL, Equipement->Reponse_Signature[9].NumSeq, Equipement->Reponse_Signature[9].HeaderLengthTCP, Equipement->Reponse_Signature[9].Flags_TCP, Equipement->Reponse_Signature[9].WindowSize,Equipement->Reponse_Signature_Debug[9].Num_Port_Utiliser,Equipement->Reponse_Signature_Debug[9].Temps_Reponse);
	tailleDebugSignature = strlen (ligne) + tailleDebugSignature;
	REALLOC (debugSignature, sizeof (char) * tailleDebugSignature);
	strcat (debugSignature, ligne);
	MYFREE (ligne);

	ligne = g_strdup_printf ("Ack f  %02X |%02X %02X %02X %01X %04X %02X %01X %02X %02X %04X|  [%i][%d]\n", Equipement->Reponse_Signature[10].TaillePacketReponse, Equipement->Reponse_Signature[10].HeaderLengthIP, Equipement->Reponse_Signature[10].DSF, Equipement->Reponse_Signature[10].TailleTotal, Equipement->Reponse_Signature[10].Id, Equipement->Reponse_Signature[10].Flags_IP_Offset, Equipement->Reponse_Signature[10].TTL, Equipement->Reponse_Signature[10].NumSeq, Equipement->Reponse_Signature[10].HeaderLengthTCP, Equipement->Reponse_Signature[10].Flags_TCP, Equipement->Reponse_Signature[10].WindowSize,Equipement->Reponse_Signature_Debug[10].Num_Port_Utiliser,Equipement->Reponse_Signature_Debug[10].Temps_Reponse);
	tailleDebugSignature = strlen (ligne) + tailleDebugSignature;
	REALLOC (debugSignature, sizeof (char) * tailleDebugSignature);
	strcat (debugSignature, ligne);
	MYFREE (ligne);

	ligne = g_strdup_printf ("Fin f  %02X |%02X %02X %02X %01X %04X %02X %01X %02X %02X %04X|  [%i][%d]\n", Equipement->Reponse_Signature[11].TaillePacketReponse, Equipement->Reponse_Signature[11].HeaderLengthIP, Equipement->Reponse_Signature[11].DSF, Equipement->Reponse_Signature[11].TailleTotal, Equipement->Reponse_Signature[11].Id, Equipement->Reponse_Signature[11].Flags_IP_Offset, Equipement->Reponse_Signature[11].TTL, Equipement->Reponse_Signature[11].NumSeq, Equipement->Reponse_Signature[11].HeaderLengthTCP, Equipement->Reponse_Signature[11].Flags_TCP, Equipement->Reponse_Signature[11].WindowSize,Equipement->Reponse_Signature_Debug[11].Num_Port_Utiliser,Equipement->Reponse_Signature_Debug[11].Temps_Reponse);
	tailleDebugSignature = strlen (ligne) + tailleDebugSignature;
	REALLOC (debugSignature, sizeof (char) * tailleDebugSignature);
	strcat (debugSignature, ligne);
	MYFREE (ligne);

	ligne = g_strdup_printf ("Ping   %02X |%02X %02X %02X %01X %04X %02X %01X %02X %02X %04X|  [%d][%d]\n", Equipement->Reponse_Signature[12].TaillePacketReponse, Equipement->Reponse_Signature[12].HeaderLengthIP, Equipement->Reponse_Signature[12].DSF, Equipement->Reponse_Signature[12].TailleTotal, Equipement->Reponse_Signature[12].Id, Equipement->Reponse_Signature[12].Flags_IP_Offset, Equipement->Reponse_Signature[12].TTL, Equipement->Reponse_Signature[12].NumSeq, Equipement->Reponse_Signature[12].HeaderLengthTCP, Equipement->Reponse_Signature[12].Flags_TCP, Equipement->Reponse_Signature[12].WindowSize,Equipement->Reponse_Signature_Debug[12].Num_Port_Utiliser,Equipement->Reponse_Signature_Debug[12].Temps_Reponse);
	tailleDebugSignature = strlen (ligne) + tailleDebugSignature;
	REALLOC (debugSignature, sizeof (char) * tailleDebugSignature);
	strcat (debugSignature, ligne);
	MYFREE (ligne);

	ligne = g_strdup_printf ("IcmpT  %02X |%02X %02X %02X %01X %04X %02X %01X %02X %02X %04X|  [%d][%d]\n", Equipement->Reponse_Signature[13].TaillePacketReponse, Equipement->Reponse_Signature[13].HeaderLengthIP, Equipement->Reponse_Signature[13].DSF, Equipement->Reponse_Signature[13].TailleTotal, Equipement->Reponse_Signature[13].Id, Equipement->Reponse_Signature[13].Flags_IP_Offset, Equipement->Reponse_Signature[13].TTL, Equipement->Reponse_Signature[13].NumSeq, Equipement->Reponse_Signature[13].HeaderLengthTCP, Equipement->Reponse_Signature[13].Flags_TCP, Equipement->Reponse_Signature[13].WindowSize,Equipement->Reponse_Signature_Debug[13].Num_Port_Utiliser,Equipement->Reponse_Signature_Debug[13].Temps_Reponse);
	tailleDebugSignature = strlen (ligne) + tailleDebugSignature;
	REALLOC (debugSignature, sizeof (char) * tailleDebugSignature);
	strcat (debugSignature, ligne);
	MYFREE (ligne);

	ligne = g_strdup_printf ("UDP    %02X |%02X %02X %02X %01X %04X %02X %01X %02X %02X %04X|  [%d][%u]", Equipement->Reponse_Signature[14].TaillePacketReponse, Equipement->Reponse_Signature[14].HeaderLengthIP, Equipement->Reponse_Signature[14].DSF, Equipement->Reponse_Signature[14].TailleTotal, Equipement->Reponse_Signature[14].Id, Equipement->Reponse_Signature[14].Flags_IP_Offset, Equipement->Reponse_Signature[14].TTL, Equipement->Reponse_Signature[14].NumSeq, Equipement->Reponse_Signature[14].HeaderLengthTCP, Equipement->Reponse_Signature[14].Flags_TCP, Equipement->Reponse_Signature[14].WindowSize,Equipement->Reponse_Signature_Debug[14].Num_Port_Utiliser,Equipement->Reponse_Signature_Debug[14].Temps_Reponse);
	tailleDebugSignature = strlen (ligne) + tailleDebugSignature;
	REALLOC (debugSignature, sizeof (char) * tailleDebugSignature);
	strcat (debugSignature, ligne);
	MYFREE (ligne);
	return debugSignature;
}


void Afficher_Reponse_Signature (struct Struct_Equipement *Equipement)
{
	gint      i;

	ERROR_if (Equipement == NULL);
	for (i = 0; i < NB_SCAN_OS; i++)
		printf ("%02X %02X %02X %02X %01X %04X %02X %01X %02X %02X %04X\n", Equipement->Reponse_Signature[i].TaillePacketReponse, Equipement->Reponse_Signature[i].HeaderLengthIP, Equipement->Reponse_Signature[i].DSF, Equipement->Reponse_Signature[i].TailleTotal, Equipement->Reponse_Signature[i].Id, Equipement->Reponse_Signature[i].Flags_IP_Offset, Equipement->Reponse_Signature[i].TTL, Equipement->Reponse_Signature[i].NumSeq, Equipement->Reponse_Signature[i].HeaderLengthTCP, Equipement->Reponse_Signature[i].Flags_TCP, Equipement->Reponse_Signature[i].WindowSize);
}


void Afficher_Reponse_Signature_W (struct Struct_Equipement *Equipement)
{
	gint      i;

	ERROR_if (Equipement == NULL);
	for (i = 0; i < NB_SCAN_OS; i++)
		printf ("%02X %02X %02X %02X %01X %04X %02X %01X %02X %02X %04X\n", Equipement->Reponse_Signature_W[i].TaillePacketReponse, Equipement->Reponse_Signature_W[i].HeaderLengthIP, Equipement->Reponse_Signature_W[i].DSF, Equipement->Reponse_Signature_W[i].TailleTotal, Equipement->Reponse_Signature_W[i].Id, Equipement->Reponse_Signature_W[i].Flags_IP_Offset, Equipement->Reponse_Signature_W[i].TTL, Equipement->Reponse_Signature_W[i].NumSeq, Equipement->Reponse_Signature_W[i].HeaderLengthTCP, Equipement->Reponse_Signature_W[i].Flags_TCP, Equipement->Reponse_Signature_W[i].WindowSize);
}



void Optimisation_Info_Equipement(struct Struct_Equipement *Equipement){
#define PORT_RECUP 10
	struct Struct_Port_Fermer_Firewall *Port_Equipement_FFW = NULL;
	struct Struct_Port *Port_Equipement = NULL;
	gint Port[PORT_RECUP];
	gint i,j,Nb_Objet_Liste;
	




	Equipement->Fournisseur = Recherche_Fournisseur_Equipement (Equipement->Adresse_MAC_Char);


	bzero (Port, sizeof (gint) * PORT_RECUP);
	Nb_Objet_Liste = g_list_length (Equipement->GList_Port);
	i = 0;
	while ((i < Nb_Objet_Liste) && (i < PORT_RECUP)) {
		Port_Equipement = g_list_nth_data (Equipement->GList_Port, i);
		Port[i] = Port_Equipement->Num_Port;
		i++;
	}
	Equipement->PortOuvertListe = g_strdup_printf ("%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-...",Port[0], Port[1], Port[2], Port[3], Port[4],	Port[5], Port[6], Port[7], Port[8], Port[9]);

	bzero (Port, sizeof (gint) * PORT_RECUP);
	Nb_Objet_Liste = g_list_length (Equipement->GList_Port_Fermer);
	i = 0;
	while ((i < Nb_Objet_Liste) && (i < PORT_RECUP)) {
		Port_Equipement_FFW = g_list_nth_data (Equipement->GList_Port_Fermer, i);
		Port[i] = Port_Equipement_FFW->Num_Port;
		i++;
	}
	Equipement->PortFermerListe = g_strdup_printf ("%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-...",Port[0], Port[1], Port[2], Port[3], Port[4],	Port[5], Port[6], Port[7], Port[8], Port[9]);

	bzero (Port, sizeof (gint) * PORT_RECUP);
	Nb_Objet_Liste = g_list_length (Equipement->GList_Port_Firewall);
	i = 0;
	while ((i < Nb_Objet_Liste) && (i < PORT_RECUP)) {
		Port_Equipement_FFW = g_list_nth_data (Equipement->GList_Port_Firewall, i);
		Port[i] = Port_Equipement_FFW->Num_Port;
		i++;
	}
	Equipement->PortFirewallerListe = g_strdup_printf ("%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-...",Port[0], Port[1], Port[2], Port[3], Port[4],	Port[5], Port[6], Port[7], Port[8], Port[9]);

	bzero (Port, sizeof (gint) * PORT_RECUP);
	i = 0;
	j = 0;
	while ((i < NB_PORT_UDP) && (i < PORT_RECUP)) {
		if (Equipement->Liste_Etat_Udp[i]==UNKOWN_UDP){
			Port[j] = Liste_Port_UDP[i].Num_Port_UDP;
			j++;
		}
		i++;
	}
	Equipement->PortUdpListe = g_strdup_printf ("%d-%d-%d-%d-%d-%d-%d-%d-%d-%d-...",Port[0], Port[1], Port[2], Port[3], Port[4],	Port[5], Port[6], Port[7], Port[8], Port[9]);
}


void Recuperation_Nouveau_Equipement (gpointer * Donnee)
{
	struct struct_Nouveau_Equipement *Nouveau = (struct struct_Nouveau_Equipement *) Donnee;
	struct Struct_Equipement *Equipement = NULL;
	struct Struct_Liste_Reseau *Reseau = NULL;
	struct Struct_Port *Port_Equipement=NULL;
	gchar    *Point_DNS = NULL, Dns[TAILLE_CHAINE_NOM_DNS + 1];
	md5_state_t md_ctx;
	md5_byte_t digest[16];
	gint      i,j, Taille_Chaine,Nb_Objet_Liste;

	ERROR_if (Donnee == NULL);
	MALLOC (Equipement, sizeof (struct Struct_Equipement));

	memcpy (Equipement->ID_Equipement, Nouveau->ID_Equipement, MAC_ADDR_LEN + IP_ADDR_LEN + 1);
	memcpy (Equipement->Adresse_Ip_Char, Nouveau->Adresse_Ip_Char, 15 + 1);
	memcpy (Equipement->Adresse_MAC_Char, Nouveau->Adresse_MAC_Char, 17 + 1);
	Equipement->Equipement_Allumer = TRUE;
	Equipement->Agent_AutoScan = Nouveau->Agent_AutoScan;

	time (&Equipement->Derniere_Modification_Etat_Equipement);

	memcpy (Equipement->Reponse_Signature, Nouveau->Reponse_Signature, sizeof (struct struct_Reponse) * NB_SCAN_OS);

	memcpy (Equipement->Reponse_Signature_W, Nouveau->Reponse_Signature, sizeof (struct struct_Reponse) * NB_SCAN_OS);
	memcpy (Equipement->Reponse_Signature_Debug, Nouveau->Reponse_Signature_Debug, sizeof (struct struct_Reponse_debug) * NB_SCAN_OS);

	for (i = 0; i < NB_SCAN_OS; i++)
		Equipement->Reponse_Signature_W[i].TaillePacketReponse = 0;

	memcpy (&Equipement->Smb, &Nouveau->Smb, sizeof (struct struct_Smb));

	memcpy (&Equipement->Snmp, &Nouveau->Snmp, sizeof (struct Struct_Snmp));
	Equipement->Snmp_Ouvert = Nouveau->Snmp_Ouvert;

	Equipement->GateWay = Nouveau->GateWay;
	Equipement->Routage = Nouveau->Routage;

	for (i = 0; i < Nouveau->Nb_Port_Ouvert; i++)
		Ajouter_Nouveau_Port_Equipement (Equipement, Nouveau->Port_Ouvert[i].Num_Port,Nouveau->Port_Ouvert[i].Flags);

	i = 0;
	while ((Nouveau->Port_Fermer[i].Num_Port!=0) && (i<MAX_PORTS)){
		Ajouter_Nouveau_Port_Equipement_Fermer_Firewall (Equipement, Nouveau->Port_Fermer[i].Num_Port,FERMER,Nouveau->Port_Fermer[i].Flags);	
		i++;
	}

	i = 0;
	while ((Nouveau->Port_Firewalled[i].Num_Port!=0) && (i<MAX_PORTS)){
		Ajouter_Nouveau_Port_Equipement_Fermer_Firewall (Equipement, Nouveau->Port_Firewalled[i].Num_Port,FIREWALLED,Nouveau->Port_Firewalled[i].Flags);	
		i++;
	}

	for (i = 0; i < NB_PORT_UDP; i++)
		Equipement->Liste_Etat_Udp[i] = Nouveau->Liste_Etat_Udp[i];

	md5_init (&md_ctx);
	md5_append (&md_ctx, (const md5_byte_t *) Equipement->Reponse_Signature, sizeof (struct struct_Reponse) * NB_SCAN_OS);
	md5_finish (&md_ctx, digest);
	sprintf (Equipement->Md5_Signature, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", digest[0], digest[1], digest[2], digest[3], digest[4], digest[5], digest[6], digest[7], digest[8], digest[9], digest[10], digest[11], digest[12], digest[13], digest[14], digest[15]);
	Equipement->Debug_Signature = Debug_Signature_Equipement (Equipement);

	md5_init (&md_ctx);
	md5_append (&md_ctx, (const md5_byte_t *) Equipement->Reponse_Signature_W, sizeof (struct struct_Reponse) * NB_SCAN_OS);
	md5_finish (&md_ctx, digest);
	sprintf (Equipement->Md5_Signature_W, "%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", digest[0], digest[1], digest[2], digest[3], digest[4], digest[5], digest[6], digest[7], digest[8], digest[9], digest[10], digest[11], digest[12], digest[13], digest[14], digest[15]);

	Equipement->Temps_Scan_Complet = Nouveau->Temps_Scan_Complet;
	Equipement->Temps_Resolv_DNS = Nouveau->Temps_Resolv_DNS;
	Equipement->Temps_Scan_Port = Nouveau->Temps_Scan_Port;
	Equipement->Temps_Scan_Port_Udp = Nouveau->Temps_Scan_Port_Udp;
	Equipement->Temps_Scan_Signature = Nouveau->Temps_Scan_Signature;
	Equipement->Temps_Scan_Service_Ftp = Nouveau->Temps_Scan_Service_Ftp ;
	Equipement->Temps_Scan_Service_Http = Nouveau->Temps_Scan_Service_Http ;
	Equipement->Temps_Scan_Service_Https = -1;
	Equipement->Temps_Scan_Service_Imap = Nouveau->Temps_Scan_Service_Imap ;
	Equipement->Temps_Scan_Service_Smtp = Nouveau->Temps_Scan_Service_Smtp ;
	Equipement->Temps_Scan_Service_Ssh = Nouveau->Temps_Scan_Service_Ssh ;
	Equipement->Temps_Scan_Service_Telnet = Nouveau->Temps_Scan_Service_Telnet ;
	Equipement->Temps_Samba = Nouveau->Temps_Samba ;
	Equipement->Temps_Scan_Snmp = Nouveau->Temps_Scan_Snmp ;

	debug_printf (INTERFACE, D_INFO, __FILE__, __PRETTY_FUNCTION__, __LINE__, "%s Total : %d - ResolvDNS :%d - ScanPort :%d - ScanSignature :%d - Ftp : %d - http:%d - imap:%d - telnet:%d - samba:%d - snmp:%d",
	Equipement->Adresse_Ip_Char,Equipement->Temps_Scan_Complet,	
	Equipement->Temps_Resolv_DNS,	Equipement->Temps_Scan_Port,	
	Equipement->Temps_Scan_Signature,Equipement->Temps_Scan_Service_Ftp,
	Equipement->Temps_Scan_Service_Http,Equipement->Temps_Scan_Service_Imap,
	Equipement->Temps_Scan_Service_Telnet,Equipement->Temps_Samba,
	Equipement->Temps_Scan_Snmp);


	if (strlen(Nouveau->Entete_FTP) != 0)
		Equipement->Entete_FTP = url_encode (Nouveau->Entete_FTP);
	if (strlen(Nouveau->Entete_HTTP) != 0)
		Equipement->Entete_HTTP = url_encode (Nouveau->Entete_HTTP);

	if (strlen(Nouveau->Entete_IMAP) != 0)
		Equipement->Entete_IMAP = url_encode (Nouveau->Entete_IMAP);
	if (strlen(Nouveau->Entete_SMTP) != 0)
		Equipement->Entete_SMTP = url_encode (Nouveau->Entete_SMTP);	
	if (strlen(Nouveau->Entete_SSH) != 0)
		Equipement->Entete_SSH = url_encode (Nouveau->Entete_SSH);
	if (strlen(Nouveau->Entete_TELNET) != 0)
		Equipement->Entete_TELNET = url_encode (Nouveau->Entete_TELNET);

	Equipement->Nb_Port_Total_Scanner = Nouveau->Nb_Port_Total_Scanner;
	Equipement->Nb_Port_Ouvert = Nouveau->Nb_Port_Ouvert;
	Equipement->Nb_Port_Fermer = Nouveau->Nb_Port_Fermer;
	Equipement->Nb_Port_Firewaller = Nouveau->Nb_Port_Firewaller;

	if (strlen (Nouveau->Nom_DNS) != 0) {
		Equipement->Nom_DNS_Complet = g_strdup (Nouveau->Nom_DNS);
		Point_DNS = index (Equipement->Nom_DNS_Complet, '.');
		if (Point_DNS != NULL) {
			Taille_Chaine = Point_DNS - Equipement->Nom_DNS_Complet;
			strncpy (Dns, Equipement->Nom_DNS_Complet, Taille_Chaine);
			Dns[Taille_Chaine] = 0;
			Equipement->Nom_DNS = g_strdup (Dns);
		}
	}
	Optimisation_Info_Equipement(Equipement);
	G_LIST_APPEND(GList_Equipement_Cours_Affichage,Equipement);
	Reseau = Recupere_Pointeur_Structure_Reseau (Nouveau->ID_Reseau);
	Recuperation_Nb_Octet_Recu (sizeof (struct struct_Nouveau_Equipement), Reseau);

	/*Reseau = Recupere_Pointeur_Structure_Reseau (Nouveau->ID_Reseau);
	
	Objet_Equipement_Par_Type = Afficher_Nouveau_Equipement (Equipement, Nouveau->ID_Reseau);
	Objet_Equipement_Par_Ip = Afficher_Nouveau_Equipement_Liste_Detaille (Equipement, Nouveau->ID_Reseau);
	
	if (Nouveau->Intrus)
		Active_Alerte_Objet (Objet_Equipement_Par_Type, Reseau);*/
	

}

void Affiche_Nouveau_Equipement (gpointer * Donnee)
{
	struct struct_Retour_Affiche_Nouveau_Equipement *Affiche = (struct struct_Retour_Affiche_Nouveau_Equipement *) Donnee;
	struct Struct_Equipement *Equipement = NULL;
	struct Struct_Modele_Objet *Objet = NULL,*Objet_Equipement_Par_Ip = NULL,*Objet_Equipement_Par_Type = NULL;
	struct Struct_Liste_Reseau *Reseau = NULL;
	struct struct_Liste_Snmp *Info_Snmp = NULL;
	GList	*Glist_Snmp = NULL;
	gint i,Nb_Objet_Liste;
	gboolean Trouver;
	
	ERROR_if (Donnee == NULL);

	Reseau = Recupere_Pointeur_Structure_Reseau (Affiche->ID_Reseau);

	i = 0;
	Trouver = FALSE;
	Nb_Objet_Liste = g_list_length (GList_Equipement_Cours_Affichage);
	while ((!Trouver) && (i!=Nb_Objet_Liste)) {
		Equipement = g_list_nth_data (GList_Equipement_Cours_Affichage, i);
		if ((memcmp (Equipement->ID_Equipement, Affiche->ID_Equipement, MAC_ADDR_LEN) == 0))
				Trouver = TRUE;
		i++;
	}
	if (!Trouver) {
		debug_printf (INTERFACE, D_WARN, __FILE__, __PRETTY_FUNCTION__, __LINE__, "Affiche_Nouveau_Equipement (Equipment unknown)");
		return;
	}
	debug_printf (INTERFACE, D_INFO, __FILE__, __PRETTY_FUNCTION__, __LINE__, "Affiche_Nouveau_Equipement  Position GList_Equipement_Cours_Affichage : %d",i);
	G_LIST_REMOVE(GList_Equipement_Cours_Affichage,Equipement);


	free_gchar_if_no_null(Equipement->Snmp_Info_Device);


	Glist_Snmp= Equipement->Glist_Snmp[SNMP_SYSTEM_DEVICE];
	Nb_Objet_Liste = g_list_length (Glist_Snmp);

	if (Nb_Objet_Liste>0){
		i = 0;
		ERROR_if (Equipement->Snmp_Info_Device != NULL);
		while ((Nb_Objet_Liste > i) && (Equipement->Snmp_Info_Device == NULL)) {
			Info_Snmp = g_list_nth_data (Glist_Snmp, i);
		
			if ((Info_Snmp->Ligne==0) && (Info_Snmp->Colonne == 3)) {
				Equipement->Snmp_Info_Device = g_strdup(Info_Snmp->Info);
			}
			i++;
		}
	
	}
	Objet_Equipement_Par_Type = Afficher_Nouveau_Equipement (Equipement, Affiche->ID_Reseau);
	Objet_Equipement_Par_Ip = Afficher_Nouveau_Equipement_Liste_Detaille (Equipement, Affiche->ID_Reseau);

	if (Affiche->Intrus) {
		Active_Alerte_Objet (Objet_Equipement_Par_Type, Reseau);
		Ajouter_Historique (Equipement, "Intrusion Alert", HISTORIQUE_ALERTE);
		Equipement->Intrus = TRUE;
	}
	else {
		Ajouter_Historique (Equipement, "This equipment was found", HISTORIQUE_INFO);
		Equipement->Intrus = FALSE;
	}	
	Recuperation_Nb_Octet_Recu (sizeof (struct struct_Retour_Affiche_Nouveau_Equipement), Reseau);
}
	
void Initialisation_Equipement (void)
{
	Equipement_Selectionner = NULL;
	GList_Equipement_Cours_Affichage = NULL;
}
