5 #include "libradsec-impl.h"
7 const char *_errtxt[] = {
8 "SUCCESS", /* 0 RSE_OK */
9 "NOMEM", /* 1 RSE_NOMEM */
10 "NYI -- not yet implemented", /* 2 RSE_NOSYS */
11 "invalid handle" /* 3 RSE_INVALID_CTX */
12 "invalid connection" /* 4 RSE_INVALID_CONN */
13 "connection type mismatch" /* 5 RSE_CONN_TYPE_MISMATCH */
14 "FreeRadius error" /* 6 RSE_FR */
15 "bad hostname or port" /* 7 RSE_BADADDR */
16 "no peer configured" /* 8 RSE_NOPEER */
17 "libevent error" /* 9 RSE_EVENT */
18 "connection error" /* 10 RSE_CONNERR */
29 "some error" /* 21 RSE_SOME_ERROR */
31 #define ERRTXT_SIZE (sizeof(_errtxt) / sizeof(*_errtxt))
33 static struct rs_error *
34 _err_new (unsigned int code, const char *file, int line, const char *fmt, va_list args)
38 err = malloc (sizeof(struct rs_error));
42 memset (err, 0, sizeof(struct rs_error));
45 n = vsnprintf (err->buf, sizeof(err->buf), fmt, args);
49 err->code < ERRTXT_SIZE ? _errtxt[err->code] : "",
51 n = strlen (err->buf);
55 char *sep = strrchr (file, '/');
58 snprintf (err->buf + n, sizeof(err->buf) - n, " (%s: %d)", file,
66 _ctx_err_vpush_fl (struct rs_handle *ctx, int code, const char *file, int line, const char *fmt, va_list args)
68 struct rs_error *err = _err_new (code, file, line, fmt, args);
76 rs_ctx_err_push (struct rs_handle *ctx, int code, const char *fmt, ...)
80 _ctx_err_vpush_fl (ctx, code, NULL, 0, fmt, args);
86 rs_ctx_err_push_fl (struct rs_handle *ctx, int code, const char *file, int line, const char *fmt, ...)
90 _ctx_err_vpush_fl (ctx, code, file, line, fmt, args);
96 _conn_err_vpush_fl (struct rs_connection *conn, int code, const char *file, int line, const char *fmt, va_list args)
98 struct rs_error *err = _err_new (code, file, line, fmt, args);
106 rs_conn_err_push (struct rs_connection *conn, int code, const char *fmt, ...)
109 va_start (args, fmt);
110 _conn_err_vpush_fl (conn, code, NULL, 0, fmt, args);
116 rs_conn_err_push_fl (struct rs_connection *conn, int code, const char *file, int line, const char *fmt, ...)
119 va_start (args, fmt);
120 _conn_err_vpush_fl (conn, code, file, line, fmt, args);
126 rs_ctx_err_pop (struct rs_handle *ctx)
128 struct rs_error *err;
131 return NULL; /* FIXME: RSE_INVALID_CTX. */
138 rs_conn_err_pop (struct rs_connection *conn)
140 struct rs_error *err;
143 return NULL; /* FIXME: RSE_INVALID_CONN */
150 rs_err_free (struct rs_error *err)
159 rs_err_msg (struct rs_error *err, int dofree_flag)
168 msg = strdup (err->buf);
176 rs_err_code (struct rs_error *err, int dofree_flag)