src/error.c
changeset 7 844f014409ff
parent 6 240ae8482d64
child 8 be88e543c8ff
equal deleted inserted replaced
6:240ae8482d64 7:844f014409ff
     1 
     1 
     2 #include "error.h"
     2 #include "error.h"
       
     3 
       
     4 #include <string.h>
       
     5 #include <stdio.h>
       
     6 
       
     7 #include <netdb.h>
       
     8 #include <gnutls/gnutls.h>
     3 
     9 
     4 /*
    10 /*
     5  * Helper macros
    11  * Helper macros
     6  */
    12  */
     7 #define ERROR_NAME(code, name) case code: return name
    13 #define ERROR_NAME(code, name) case code: return name
    24         ERROR_NAME( ERR_GNUTLS_HANDSHAKE,               "gnutls_handshake"                              );
    30         ERROR_NAME( ERR_GNUTLS_HANDSHAKE,               "gnutls_handshake"                              );
    25         default: return "[unknown]";
    31         default: return "[unknown]";
    26     }
    32     }
    27 }
    33 }
    28 
    34 
       
    35 const char *error_msg (struct error_info *err)
       
    36 {
       
    37     static char msg[ERROR_MSG_MAXLEN];
       
    38 
       
    39     // intrepret .extra
       
    40     switch (err->code & _ERR_EXTRA_MASK) {
       
    41         case ERR_EXTRA_NONE:
       
    42             // no additional info
       
    43             snprintf(msg, ERROR_MSG_MAXLEN, "%s", error_name(err->code));
       
    44             break;
       
    45         
       
    46         case ERR_EXTRA_ERRNO:
       
    47             // strerror
       
    48             snprintf(msg, ERROR_MSG_MAXLEN, "%s: %s", error_name(err->code), strerror(err->extra));
       
    49             break;
       
    50         
       
    51         case ERR_EXTRA_GAI:
       
    52             // gai_strerror
       
    53             snprintf(msg, ERROR_MSG_MAXLEN, "%s: %s", error_name(err->code), gai_strerror(err->extra));
       
    54             break;
       
    55         
       
    56         case ERR_EXTRA_GNUTLS:
       
    57             // gnutls_strerror
       
    58             snprintf(msg, ERROR_MSG_MAXLEN, "%s: %s", error_name(err->code), gnutls_strerror(err->extra));
       
    59             break;
       
    60         
       
    61         default:
       
    62             // ???
       
    63             snprintf(msg, ERROR_MSG_MAXLEN, "%s(%#.8x): %#.8x", error_name(err->code), err->code, err->extra);
       
    64             break;
       
    65     }   
       
    66 
       
    67     // return static pointer
       
    68     return msg;
       
    69 }
       
    70