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

 C++ Discussion :

gestion des erreurs venant de différentes couches


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2007
    Messages
    630
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2007
    Messages : 630
    Points : 234
    Points
    234
    Par défaut gestion des erreurs venant de différentes couches
    Bonjour,
    je dois rajouter une couche SSL sous une application existante :
    TCP-> SSL -> MYapi -> application
    J'ai une classe errorcode qui est définie comme suit :

    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
     
    class errorcode {
     
       int err;
     
     public:
       errorcode() : err(0) { }
       errorcode(int e) : err(e) { }
     
    #if defined(__APPLE__)
       static int lasterror() { (int) pthread_getspecific(gMyErrCode); }
       ~errorcode() { pthread_setspecific(gMyErrCode, (void*) err); }
    #elif !defined(_WIN32_WCE)
       static int lasterror() { return gMyErrCode; }
       ~errorcode() { gMyErrCode = err; }
    #else
       ~errorcode() { TlsSetValue(gMyErrCode, (LPVOID) err); }
       static int lasterror() { return (int)TlsGetValue(gMyErrCode); }
    #endif
       operator int() const { return err; }
       int operator-() const { return -err; }
       errorcode& operator=(int e) { err = e; return *this; } 
     };
    l'utilisation de la classe errorcode est comme suit :
    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
    errorcode err;
    ...
    sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
      if (!sock) {
        err = sockerrno();
        log(ERROR, "error %s creating sock socket", sockstrerror(err));
        goto oserror;
      }
    
    ...
    if (!socki->u.rtcp.info) {
          log(ERROR, "no memory for rtcp protocol info");
          err = MY_ERROR_OUTOFMEMORY;
          goto myerror;
        }
    je dois traiter les erreurs générées éventuellement par ma couche SSL.

    Mes questions :
    Est ce que je dois rajouter des codes d'erreurs de type MY_ERROR_PUB_KEY_NOT_FOUND dans la liste (enum) des codes d'erreurs ou j'utilise le code d'erreurs offert par OpenSSL ? en gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    err = MY_ERROR_PUB_KEY_NOT_FOUND
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    err = ERR_SSL_PUB_KEY_NOT_FOUND
    Merci d'avance pour votre aide.

  2. #2
    Membre émérite
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Points : 2 799
    Points
    2 799
    Par défaut
    Tu ne devrais pas exposer les codes d’erreur de la couche d’en dessous, sinon, tu ne fais plus d’abstraction, et tu passes des lasagnes aux spaghettis (c’est pire ).

    Plus précisément, je pense que non seulement tu devrais utiliser tes propres codes d’erreur, mais en plus les erreurs que remonte ton api sont probablement un peu différentes de celles de ta couche ssl.

  3. #3
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Points : 410
    Points
    410
    Par défaut
    Citation Envoyé par white_tentacle Voir le message
    Tu ne devrais pas exposer les codes d’erreur de la couche d’en dessous, sinon, tu ne fais plus d’abstraction, et tu passes des lasagnes aux spaghettis (c’est pire ).

    Plus précisément, je pense que non seulement tu devrais utiliser tes propres codes d’erreur, mais en plus les erreurs que remonte ton api sont probablement un peu différentes de celles de ta couche ssl.
    +1 pour ça

    Je dirais même que tu n'as pas le choix, je ne vois pas comment tu peux utiliser les errorcodes d'une autre couche. Si tu as:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    enum ErrorCodesSSL
    {
    	LesLasagnesSontPasCuites,
    	LesTomatesSontPasMures
    };
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    enum MyErrorCodes
    {
    	LesSpaghettisSontTropLongs,
    	LesTomatesSontPasMures
    };
    Et si quelque part tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    UNTYPEICI methode()
    {
    	if (....)
    	{
    		return LesLasagnesSontPasCuites;
    	}
    	else if (...)
    	{
    		return LesSpaghettisSontTropLongs;
    	}
    }
    Alors :
    • dans le moins pire des cas, cela ne compile pas, parce que UNTYPEICI est incompatible avec ErrorCodesSSL et/ou avec MyErrorCodes.
    • dans le plus pire des cas, ça compile, mais dans tous les cas, ça renvoit la même valeur, à savoir 0.

Discussions similaires

  1. Couche service, gestion des erreurs
    Par dorian53 dans le forum Langage
    Réponses: 3
    Dernier message: 22/02/2013, 21h54
  2. Couche service, gestion des erreurs
    Par dorian53 dans le forum ALM
    Réponses: 0
    Dernier message: 19/02/2013, 23h49
  3. Gestion des erreurs venant de COM
    Par a028762 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 20/03/2010, 19h23
  4. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 17h19
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 22h41

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