src/error.c
author Tero Marttila <terom@fixme.fi>
Sun, 22 Feb 2009 10:16:28 +0200
changeset 10 9fe218576d13
parent 8 be88e543c8ff
child 30 7f8dd120933f
permissions -rw-r--r--
fix sock_stream read/write return value, move line buffer inside of line_proto, add some initial code for event-based non-blocking operation
6
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#include "error.h"
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
7
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
     4
#include <string.h>
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
     5
#include <stdio.h>
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
     6
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
     7
#include <netdb.h>
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
     8
#include <gnutls/gnutls.h>
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
     9
6
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
/*
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
 * Helper macros
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
 */
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
#define ERROR_NAME(code, name) case code: return name
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
const char *error_name (err_t code)
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
{
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
    switch (code) {
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
        ERROR_NAME( ERR_CALLOC,                         "calloc"                                        );
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
        ERROR_NAME( ERR_GETADDRINFO,                    "getaddrinfo"                                   );
8
be88e543c8ff split off line_proto, and make sock_stream_error return a const error_info
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    20
        ERROR_NAME( ERR_GETADDRINFO_EMPTY,              "getaddrinfo: no results"                       );
6
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
        ERROR_NAME( ERR_SOCKET,                         "socket"                                        );
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
        ERROR_NAME( ERR_CONNECT,                        "connect"                                       );
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
        ERROR_NAME( ERR_READ,                           "read"                                          );
8
be88e543c8ff split off line_proto, and make sock_stream_error return a const error_info
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    24
        ERROR_NAME( ERR_READ_EOF,                       "read: EOF"                                     );
6
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
        ERROR_NAME( ERR_WRITE,                          "write"                                         );
10
9fe218576d13 fix sock_stream read/write return value, move line buffer inside of line_proto, add some initial code for event-based non-blocking operation
Tero Marttila <terom@fixme.fi>
parents: 8
diff changeset
    26
        ERROR_NAME( ERR_FCNTL,                          "fcntl"                                         );
6
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
        ERROR_NAME( ERR_GNUTLS_CERT_ALLOC_CRED,         "gnutls_certificate_allocate_credentials"       );
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
        ERROR_NAME( ERR_GNUTLS_GLOBAL_INIT,             "gnutls_global_init"                            );
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
        ERROR_NAME( ERR_GNUTLS_INIT,                    "gnutls_init"                                   );
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
        ERROR_NAME( ERR_GNUTLS_SET_DEFAULT_PRIORITY,    "gnutls_set_default_priority"                   );
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
        ERROR_NAME( ERR_GNUTLS_CRED_SET,                "gnutls_credentials_set"                        );
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
        ERROR_NAME( ERR_GNUTLS_HANDSHAKE,               "gnutls_handshake"                              );
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
        default: return "[unknown]";
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
    }
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
}
240ae8482d64 add error_name function
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
8
be88e543c8ff split off line_proto, and make sock_stream_error return a const error_info
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    37
const char *error_msg (const struct error_info *err)
7
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    38
{
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    39
    static char msg[ERROR_MSG_MAXLEN];
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    40
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    41
    // intrepret .extra
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    42
    switch (err->code & _ERR_EXTRA_MASK) {
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    43
        case ERR_EXTRA_NONE:
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    44
            // no additional info
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    45
            snprintf(msg, ERROR_MSG_MAXLEN, "%s", error_name(err->code));
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    46
            break;
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    47
        
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    48
        case ERR_EXTRA_ERRNO:
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    49
            // strerror
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    50
            snprintf(msg, ERROR_MSG_MAXLEN, "%s: %s", error_name(err->code), strerror(err->extra));
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    51
            break;
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    52
        
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    53
        case ERR_EXTRA_GAI:
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    54
            // gai_strerror
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    55
            snprintf(msg, ERROR_MSG_MAXLEN, "%s: %s", error_name(err->code), gai_strerror(err->extra));
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    56
            break;
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    57
        
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    58
        case ERR_EXTRA_GNUTLS:
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    59
            // gnutls_strerror
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    60
            snprintf(msg, ERROR_MSG_MAXLEN, "%s: %s", error_name(err->code), gnutls_strerror(err->extra));
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    61
            break;
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    62
        
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    63
        default:
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    64
            // ???
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    65
            snprintf(msg, ERROR_MSG_MAXLEN, "%s(%#.8x): %#.8x", error_name(err->code), err->code, err->extra);
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    66
            break;
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    67
    }   
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    68
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    69
    // return static pointer
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    70
    return msg;
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    71
}
844f014409ff and then error_msg
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
    72