Gestion des erreurs venant de différentes couches

razuki Messages postés 242 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 5 décembre 2012 - 31 mars 2011 à 17:32
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 31 mars 2011 à 18:24
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 :

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 :
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 :

err = MY_ERROR_PUB_KEY_NOT_FOUND

ou
err = ERR_SSL_PUB_KEY_NOT_FOUND


Merci d'avance pour votre aide.

5 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
31 mars 2011 à 17:38
Utilise tes propres codes d'erreurs. En effet, si un code d'erreur SSL à la même valeur qu'une erreur existante dans la solution que tu reprends, tu seras bien embêté...

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
razuki Messages postés 242 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 5 décembre 2012
31 mars 2011 à 18:00
Et le mec qui a écrit les codes d'erreur MY_ERROR_..., comment il peut savoir que ca coincide pas aux codes d'erreur de l'OS ?
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
31 mars 2011 à 18:04
Aucune importance, tant qu'il n'exploite pas les deux au même moment.

Le seul souci c'est quand tu compares les valeurs:
#define MY_ERROR1 1
#define MY_ERROR2 2

#define KERNEL_ERROR 1
#define UNKNOW_ERROR 2

int err = UNKNOW_ERROR;

if (err == MY_ERROR2)
{
  // Entrera ici
}
else if (err == UNKNOW_ERROR)
{
  // N'entrera jamais ici
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
razuki Messages postés 242 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 5 décembre 2012
31 mars 2011 à 18:18
D'acc.

en fait il n'a pas utilisé des #defines mais un myerrno.h contenant :
enum MY_ERRORS {

  MY_ERROR_NOERROR 		= 0,
  MY_ERROR_SUCCESS 		= 0,

  MY_ERROR_BASE                = 0x0C510000,        /* Potentiellement à modifier */

 
  /* Erreurs génériques */
  MY_ERROR_BUFFERTOOSMALL,                          /* Taille du tampon trop petite. */
  MY_ERROR_TIMEOUT,                                 /* L'opération est trop longue. */
  MY_ERROR_OUTOFMEMORY,                             /* Il n'y a plus de mémoire disponible. */
  MY_ERROR_INVALIDPARAMETERS,                       /* Certains paramètres sont invalides. */
  MY_ERROR_INVALIDFORMAT,                           /* Le format des données entrées est incorrect*/
  MY_ERROR_NOTREADY,                                /* La fonction n'est pas prête à effectuer l'opération. */ 
  MY_ERROR_FILENOTFOUND,                            /* Le fichier est introuvable */	
  MY_ERROR_SOCKETERROR,                             /* Erreur de la bibliothèque socket du système*/

  /* Erreurs réseaux */
  MY_ERROR_NETWORK = (MY_ERROR_BASE + 0x1000),
  MY_ERROR_CONNECTIONREFUSED,                       /* Le serveur a refusé la connexion. */


j'imagine que la valeur MY_ERROR_BASE n'est pas à choisir au hasard ...
il faut prendre les un interval sûr, c'est à dire non occupé par les erreurs système, non ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
31 mars 2011 à 18:24
Oui :)
L'important ce que tu n'ais pas de code d'erreur ayant la même valeur au sein de ton application, s'ils ont vocation à être comparé dans un même ensemble.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
Rejoignez-nous