equal
deleted
inserted
replaced
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 |