Retransmettre l'erreur à l'appliation au dess

Fermé
razuki Messages postés 242 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 5 décembre 2012 - 25 févr. 2011 à 14:50
razuki Messages postés 242 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 5 décembre 2012 - 27 févr. 2011 à 22:58
Bonjour,
je développe une brique sécurisée entre TCP et une appli.
Quand ma fonction de chargement de certificat echoue, en l'occurence la clef privée ne correspond pas au certificat, j'obtiens l'erreur :

error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch


En effet, afin d'obtenir le résultat ci-dessus, j'ai fait :

1. err = ERR_get_error(); // cette fonction récupère la dernière erreur arrivée sur la pile.
   2. ERR_error_string_n(ERR_get_error(), sizeof(buf));// traduit l'erreur en string pour que je puisse comprendre ce qui s'était passé.


Ma question :
Je ne veux pas traiter moi même ce qu'il faut faire si une telle erreur se produit. Je veux juste retransmettre l'erreur au programmeur de l'appli ( qui utilisera donc ma brique ), pour qu'il puisse faire :
   1. if(err = PVKEY_DOES_NOT_MATCH_WITH_CERT) {
   2.      //traiter ici ce qu'il faut faire
   3. }


En gros, comment faire correspondre PVKEY_DOES_NOT_MATCH_WITH_CERT à mon type d'erreur.

PS: je suis débutant en C/C++

Merci d'avance

1 réponse

razuki Messages postés 242 Date d'inscription lundi 17 décembre 2007 Statut Membre Dernière intervention 5 décembre 2012 1
27 févr. 2011 à 22:58
En fait, le gars qui a développé la couche avant moi a déjà crée un enum contenant les codes d'erreurs :

typedef enum LAB_ERRORS_ {
LAB_ERROR_NOERROR 		= 0,
  LAB_ERROR_SUCCESS 		= 0,
 
  LAB_ERROR_BASE                = 0x0D430000,      
 
  /* generic errors */
  LAB_ERROR_BUFFERTOOSMALL,                          
  LAB_ERROR_TIMEOUT,                                 
  LAB_ERROR_OUTOFMEMORY,                                                      
  LAB_ERROR_SOCKETERROR,                             
  LAB_ERROR_OS,                                      
 
  /* network errors */
  LAB_ERROR_NETWORK = (LAB_ERROR_BASE + 0x1000),
  LAB_ERROR_CONNECTIONREFUSED,                      
  LAB_ERROR_PACKETTOOLARGE,                          
			     		
 
  /*security errors */
  LAB_ERROR_SEC = (LAB_ERROR_BASE + 0x2000),
  LAB_ERROR_KEYSUNAVAILABLE,                        
  LAB_ERROR_REVOKEDCERTIFICATE,
  LAB_ERROR_CERTIFICATENOTLOADED
   } LAB_ERRORS;


Le problème c'est que je ne sais pas comment intégrer mon code d'erreur à cet enum. En effet, err = ERR_get_error() donne 185073780 à l'execution et ERR_error_string_n(ERR_get_error(), sizeof(buf)); m'affiche "error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch"

Je ne sais pas si ceci a un sens :
PVKEY_DOES_NOT_MATCH_WITH_CERT 0B080074

ou
PVKEY_DOES_NOT_MATCH_WITH_CERT 185073780
0