IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[C++.Net2003]Adresse IP


Sujet :

MFC

Vue hybride

aziziti [C++.Net2003]Adresse IP 05/04/2006, 09h39
nico-pyright(c) Re: [C++.Net2003]Adresse IP 05/04/2006, 09h45
aziziti private:... 05/04/2006, 15h14
nico-pyright(c) tu compares une chaine de... 05/04/2006, 15h50
aziziti if... 05/04/2006, 16h21
nico-pyright(c) tu peux tester tous tes... 05/04/2006, 16h29
aziziti Comment je peux passer de... 05/04/2006, 17h34
nico-pyright(c) Tu utilises la propriétés... 05/04/2006, 17h42
aziziti Dans le lien précédent j'ai... 05/04/2006, 18h37
nico-pyright(c) Uri, c'est une classe .Net,... 06/04/2006, 09h44
aziziti private:... 06/04/2006, 14h01
nico-pyright(c) Convert::ToInt32... 06/04/2006, 14h04
aziziti Si on traite cet exemple... 06/04/2006, 14h21
nico-pyright(c) mais, tester chaque caractère... 06/04/2006, 14h49
damien99 moi j'ai fait une fonction... 06/04/2006, 15h01
damien99 Je vient de revoir ma... 06/04/2006, 18h59
damien99 J'ai recodée la fonction,... 22/08/2006, 22h50
aziziti Bonjour tout le monde,... 07/04/2006, 09h41
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 43
    Par défaut [C++.Net2003]Adresse IP
    Bonjour tout le monde,
    J'ai une TextBox et un Bouton
    et je veux, si on clike sur le bouton on vérifie que c'est adresse ip
    Voila que j'ai fait et je suis arrêtée car j'ai pas pu résoulu le problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
    {
    int len=0;
    len = (adresse_IP->ToString())->get_Length();
    if (String::Compare(adresse_IP->Text, "")==0) // champ vide
    {
    MessageBox::Show("Entrez une adresse IP", "Error");
    adresse_IP->Text="";
    adresse_IP->Focus();
    }
    else if (len > 15)
    {
    MessageBox::Show("Votre adresse est invalide!!!!!!!", "Error");
    adresse_IP->Text="";
    adresse_IP->Focus();
    } 
    }
    Merci d'avance!!!!!!!

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut Re: [C++.Net2003]Adresse IP
    Citation Envoyé par aziziti
    Bonjour tout le monde,
    J'ai une TextBox et un Bouton
    et je veux, si on clike sur le bouton on vérifie que c'est adresse ip
    Voila que j'ai fait et je suis arrêtée car j'ai pas pu résoulu le problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
    {
    int len=0;
    len = (adresse_IP->ToString())->get_Length();
    if (String::Compare(adresse_IP->Text, "")==0) // champ vide
    {
    MessageBox::Show("Entrez une adresse IP", "Error");
    adresse_IP->Text="";
    adresse_IP->Focus();
    }
    else if (len > 15)
    {
    MessageBox::Show("Votre adresse est invalide!!!!!!!", "Error");
    adresse_IP->Text="";
    adresse_IP->Focus();
    } 
    }
    Merci d'avance!!!!!!!
    Il faut que tu parses ta chaine (avec split) sur le caractère . et que tu vérifies qu'il y a bien quatres chaines en tout et que ce sont des chiffres

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 43
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    	private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
    			 {
    				 int len=0;
    				 int count=0;
    				 if (String::Compare(adresse_IP->Text, "")==0) // champ vide
    				 {
    					 MessageBox::Show("Entrez une adresse IP", "Error");
    				     adresse_IP->Text="";
    					 adresse_IP->Focus();
    				 }
    				 else
    				 {
    					 String* adrip = adresse_IP->Text->ToString();
                         Char chars[] = {'.'};
                         String* split[] = adrip->Split(chars);
    				     MessageBox::Show(adrip);
    				     IEnumerator* myEnum = split->GetEnumerator();
    				     while (myEnum->MoveNext())
    					 {
    						 String* s = __try_cast<String*>(myEnum->Current);
    					     if (!s->Trim()->Equals(S""))
    						 {
    							 //MessageBox::Show(s);
    							 if ((s>255)||(s<0))
    								 len++;
    							 count++;
    						 }
    					 }
    					 if(count!=4)
    					 {
    						 MessageBox::Show("Votre adresse est invalide!!!!!!!", "Error");
    					     adresse_IP->Text="";
    					     adresse_IP->Focus();
    					 }
    					 else if(len!=0)
    						 {
    							 MessageBox::Show("Votre adresse est invalide!!!!!!!", "Error");
    							 adresse_IP->Text="";
    							 adresse_IP->Focus();
    						 }
    					 else
    						 MessageBox::Show("Votre adresse est valide!!!!!!!", "Error");
    				 }				 
    			 }
    Voila ce que j'ai fait mais:
    1. error C2446: '>'*: pas de conversion de 'int' en 'System::String __gc *'
    2. error C2865: '<'*: comparaison non conforme entre des références et la classe __gc 'System::String'
    Qu'est-ce que je fait?
    Merci.

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    Citation Envoyé par aziziti
    [code]if ((s>255)||(s<0))
    tu compares une chaine de caractères (s) à un nombre (255)

    il faut comparaer à une chaine de caractères "255" "0"

  5. #5
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 43
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ((s->CompareTo("255")>0)||(s->CompareTo("0")<0))
    Oui tu as raison,
    j'ai résolu ce problème, mais
    si on traite ces exemples:
    127.0.0.1a
    12+.0.0.0

    le programme va considérer cette adresse comme valide, ce que je doit faire pour régler ce problème.
    Merci.

  6. #6
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    tu peux tester tous tes caractères avec Char::IsNumber par exemple

  7. #7
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 43
    Par défaut
    Comment je peux passer de String* en char?
    Merci!!

  8. #8
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    Tu utilises la propriétés chars
    n'hésite pas à consulter la msdn http://msdn.microsoft.com/library/de...charstopic.asp

  9. #9
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 43
    Par défaut
    Dans le lien précédent j'ai trouvé cet exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Console::Write(S"Type a string : ");
    String* myString = Console::ReadLine();
    for (int i = 0; i < myString->Length; i ++)
        if(Uri::IsHexDigit(myString->Chars[i]))
            Console::WriteLine(S"{0} is a hexadecimal digit.", __box(myString->Chars[i])); 
        else
            Console::WriteLine(S"{0} is not a hexadecimal digit.", __box(myString->Chars[i]));
    j'ai pas compris c'est quoi Uri
    Merci

  10. #10
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    Uri, c'est une classe .Net, tout est marqué dans msdn : http://msdn2.microsoft.com/en-us/lib...rs(VS.80).aspx

  11. #11
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 43
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    	private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
    			 {
    				 int len=0; 
    				 int count=0;
    				 Boolean verif=true;
    				 if (String::Compare(adresse_IP->Text, "")==0) // champ vide
    				 {
    					 MessageBox::Show("Entrez une adresse IP", "Information",MessageBoxButtons::OK,MessageBoxIcon::Information);
    				     adresse_IP->Text="";
    					 adresse_IP->Focus();
    				 }
    				 else
    				 {
    					 String* adrip = adresse_IP->Text->ToString();					 
                         Char chars[] = {'.'};
                         String* split[] = adrip->Split(chars);
    				     //MessageBox::Show(adrip);
    				     IEnumerator* myEnum = split->GetEnumerator();
    				     while (myEnum->MoveNext()&& verif==true)
    					 {
    						 String* s = __try_cast<String*>(myEnum->Current);
    					     if (!s->Trim()->Equals(S""))
    						 {
    							 //MessageBox::Show(s);							 
    							 if ((s->CompareTo("255")>0)||(s->CompareTo("0")<0))
    								 len++;
    							 for (int i = 0; i < s->Length; i ++)
    							 {
    								 if(Char::IsNumber(s,i))
    									 verif=true;
    								 else
    									 verif=false;
    							 }
    						 }
    						 count++;
    					 }
    					 if(verif!=true)
    					 {
    						 MessageBox::Show("Votre adresse est invalide!", "Erreur",MessageBoxButtons::OK,MessageBoxIcon::Error);
    					     adresse_IP->Text="";
    					     adresse_IP->Focus();
    					 }
    					 else
    					 {
    						 if(count!=4)
    						 {
    							 MessageBox::Show("Votre adresse est invalide!", "Erreur",MessageBoxButtons::OK,MessageBoxIcon::Error);
    					         adresse_IP->Text="";
    					         adresse_IP->Focus();
    					     }
    						 else if(len!=0)
    						 {
    							 MessageBox::Show("Votre adresse est invalide!", "Erreur",MessageBoxButtons::OK,MessageBoxIcon::Error);
    							 adresse_IP->Text="";
    							 adresse_IP->Focus();
    						 }
    						 else
    							 MessageBox::Show("Votre adresse est valide!","Bravo",MessageBoxButtons::OK,MessageBoxIcon::Information);
    					 }
    				 }
    			 }
    Bonjour,
    Voilà j'ai ajouté un code pour indiquer que l'adresse est invalide si on a un tapé au moins un caractère, mais il reste un petit problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if ((s->CompareTo("255")>0)||(s->CompareTo("0")<0))
    Comme vous le savez tous, si on met par exemple 127.0.0.3
    le programme va indiquer que l'adresse est invalide alors que c'est pas le cas.
    En fait je veux savoir comment je peut convertir la chaîne en un Int par exemple et la comparer avec 0 et 255.
    J'ai utilisé et ça n'a pas marché.
    Merci d'avance.

  12. #12
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414

  13. #13
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 43
    Par défaut
    Si on traite cet exemple 1+.0.0.3

    Une exception non gérée du type 'System.FormatException' s'est produite dans mscorlib.dll

    Informations supplémentaires*: Le format de la chaîne d'entrée est incorrect.
    Quoi faire :
    Merci.

  14. #14
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    mais, tester chaque caractère pour savoir s'il est numérique, comme on a dit au dessus

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 227
    Par défaut
    moi j'ai fait une fonction pour tester si une ip est valide, elle est un peu lourde et peut être pas trés optimisé mais elle marche

    Je te passerai ça des que j'aurait le temp (dans 2 jours max.)
    ...

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 227
    Par défaut
    Je vient de revoir ma fonction (elle est en fait assez "merdique") il faudrait que je revienne un peu dessus.... a l'époque je connaissait trés peu les strings....
    Je la met quant même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    BOOL test_ip(const std::string str)
    {
       std::istringstream iss (str.c_str());
       std::string nb;
       int parties=0;
     
       //découpe les parties qui se trouve entre les "."
       while (std::getline( iss, nb, '.' ))   {
     
          //compare le nombre de chiffre au nombre de caractères
          if(((size_of(nb.c_str(),4)-1)!=(nb_chiffres(atoi2(nb.c_str()))))||(atoi2(nb.c_str())>=256))
             return 0;
     
          //compte le nombre de parties
          parties++;
       }
       if(parties==4)   //si les 4 parties ont été validées (IP valide)....
          return 1;
       else                 //sinon (ce qui veut dire qu'on n'a pas 4 parties
          return 0;
    }
    Il faudra aussi avoir ces fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    //converti une char* en int 0 inclu (atoi() retourne 0 en cas d'erreur,
    //on ne peut donc pas convertir le 0) d'ou cette fonction :
    int atoi2(const char* chaine)
    {
    if((chaine[0]==48)&&(chaine[1]==0))   return 1;
    else
       if(atoi(chaine))
          return atoi(chaine);
       else   return -1;
    }
     
    //trouve le nombre de chiffres dans nombre
    int nb_chiffres(const int nb)
    {
       if(nb==0)   return 1;
       if(nb==1000) return 4;   //la je comprend pas pour 1000 ça retournait 3
    //j'ai donc ajouter cette ligne pour remédier au problème
       int nb_chi=0;
       while(nb>=pow(10,nb_chi))
       {
          nb_chi++;
       }
       return nb_chi;
    }
     
    //calcule la taille d'une chaine (nombre de caractères + 1 pour le 0 final
    int size_of(const char* ch,const int max)
    {
       int l;
       for(l=0;l<max;l++)
       {   
          if(ch[l]==0)   return l+1;
       }
       return l;
    }
    Comme vous le voyez le code est assez pitoyable (et peut être pas mal amélioré) mais le principe est la :
    -découpe de la chaine (l'IP)
    -on compare le nombre de chiffres au nombre de caractère dans chaque sous chaine que l'on vient de découper puis on vérifie que le nombre de la partie est bien compris entre 0 et 255 (inclu)
    -on vérifie que le nombre de sous chaine est bien de 4


  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 227
    Par défaut
    Citation Envoyé par damien99
    Je vient de revoir ma fonction (elle est en fait assez "merdique") il faudrait que je revienne un peu dessus.... a l'époque je connaissait trés peu les strings....
    J'ai recodée la fonction, elle est beaucoup plus propre maitenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    /********** Teste si l'IP est valide **********/
    int test_ip(std::string ip)
    {
       if((ip.find_first_not_of("0123456789.")!=-1)||(inet_addr(ip.c_str())==INADDR_NONE))
          return 0;
     
       std::istringstream iss (ip);
       std::string part;
       int nb_part=0, nb;
     
       while(std::getline( iss, part, '.' ))
       {
          nb_part++;
          (std::istringstream)part >> nb;
          if((nb<0)||(nb>255)||((part[0]=='0')&&(part.length()!=1)))
             return 0;
       }
       if(nb_part!=4)
          return 0;
       else
          return 1;
    }
    retourne 1 si l'IP est valide et 0 si elle ne l'est pas.


  18. #18
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 43
    Par défaut
    Bonjour tout le monde,
    Maintenant la fonction marche très bien et voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    	private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
    			 {
    				 int len=0; 
    				 int count=0;
    				 int verif=0;
    				 if (String::Compare(adresse_IP->Text, "")==0) // champ vide
    				 {
    					 MessageBox::Show("Entrez une adresse IP", "Information",MessageBoxButtons::OK,MessageBoxIcon::Information);
    				     adresse_IP->Text="";
    					 adresse_IP->Focus();
    				 }
    				 else
    				 {
    					 String* adrip = adresse_IP->Text->ToString();					 
                         Char chars[] = {'.'};
                         String* split[] = adrip->Split(chars);
    				     //MessageBox::Show(adrip);
    				     IEnumerator* myEnum = split->GetEnumerator();
    				     while (myEnum->MoveNext()&&(verif==0))
    					 {
    						 String* s = __try_cast<String*>(myEnum->Current);
    					     if (!s->Trim()->Equals(S""))
    						 {
    							 //MessageBox::Show(s);							 
    							 for (int i = 0; i < s->Length; i ++)
    							 {
    								 if(Char::IsNumber(s,i))
    									 verif=verif+0;
    								 else
    									 verif=verif+1;
    							 }
    							 if (verif==0)
    							 {
    								 if((Convert::ToInt32(s)>255)||(Convert::ToInt32(s)<0))
    								 len++;
    							 }
    						 }
    						 count++;
    					 }
    					 if(verif!=0)
    					 {
    						 MessageBox::Show("Votre adresse est invalide!", "Erreur",MessageBoxButtons::OK,MessageBoxIcon::Error);
    					     adresse_IP->Text="";
    					     adresse_IP->Focus();
    					 }
    					 else
    					 {
    						 if(count!=4)
    						 {
    							 MessageBox::Show("Votre adresse est invalide!", "Erreur",MessageBoxButtons::OK,MessageBoxIcon::Error);
    					         adresse_IP->Text="";
    					         adresse_IP->Focus();
    					     }
    						 else if(len!=0)
    						 {
    							 MessageBox::Show("Votre adresse est invalide!", "Erreur",MessageBoxButtons::OK,MessageBoxIcon::Error);
    							 adresse_IP->Text="";
    							 adresse_IP->Focus();
    						 }
    						 else
    							 MessageBox::Show("Votre adresse est valide!","Bravo",MessageBoxButtons::OK,MessageBoxIcon::Information);
    					 }
    				 }
    			 }
    Merci tout le monde.
    Bonne programmation!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment récupérer une adresse MAC ?
    Par psau dans le forum Développement
    Réponses: 7
    Dernier message: 19/07/2002, 17h26
  2. Déterminer l'adresse d'une application en mémoire
    Par Gib dans le forum x86 32-bits / 64-bits
    Réponses: 9
    Dernier message: 11/06/2002, 14h27
  3. changer l'adresse d'un fichier...
    Par cava dans le forum C
    Réponses: 6
    Dernier message: 05/06/2002, 12h22
  4. Adresse des polices de caractères dans la RAM video ?
    Par Anonymous dans le forum x86 16-bits
    Réponses: 5
    Dernier message: 27/05/2002, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo