/* See the file COPYING for licensing information. */
+#if defined HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <radsec/radsec.h>
#include <radsec/radsec-impl.h>
-const char *_errtxt[] = {
+static const char *_errtxt[] = {
"SUCCESS", /* 0 RSE_OK */
- "NOMEM", /* 1 RSE_NOMEM */
- "NYI -- not yet implemented", /* 2 RSE_NOSYS */
- "invalid handle" /* 3 RSE_INVALID_CTX */
- "invalid connection" /* 4 RSE_INVALID_CONN */
- "connection type mismatch" /* 5 RSE_CONN_TYPE_MISMATCH */
- "FreeRadius error" /* 6 RSE_FR */
- "bad hostname or port" /* 7 RSE_BADADDR */
- "no peer configured" /* 8 RSE_NOPEER */
- "libevent error" /* 9 RSE_EVENT */
- "connection error" /* 10 RSE_CONNERR */
- "ERR 11" /* RSE_ */
- "ERR 12" /* RSE_ */
- "ERR 13" /* RSE_ */
- "ERR " /* RSE_ */
- "ERR " /* RSE_ */
- "ERR " /* RSE_ */
- "ERR " /* RSE_ */
- "ERR " /* RSE_ */
- "ERR " /* RSE_ */
- "ERR " /* RSE_ */
- "some error" /* 21 RSE_SOME_ERROR */
+ "out of memory", /* 1 RSE_NOMEM */
+ "not yet implemented", /* 2 RSE_NOSYS */
+ "invalid handle", /* 3 RSE_INVALID_CTX */
+ "invalid connection", /* 4 RSE_INVALID_CONN */
+ "connection type mismatch", /* 5 RSE_CONN_TYPE_MISMATCH */
+ "FreeRadius error", /* 6 RSE_FR */
+ "bad hostname or port", /* 7 RSE_BADADDR */
+ "no peer configured", /* 8 RSE_NOPEER */
+ "libevent error", /* 9 RSE_EVENT */
+ "socket error", /* 10 RSE_SOCKERR */
+ "invalid configuration file", /* 11 RSE_CONFIG */
+ "authentication failed", /* 12 RSE_BADAUTH */
+ "internal error", /* 13 RSE_INTERNAL */
+ "SSL error", /* 14 RSE_SSLERR */
+ "invalid packet", /* 15 RSE_INVALID_PKT */
+ "ERR 16", /* RSE_ */
+ "ERR 17", /* RSE_ */
+ "ERR 18", /* RSE_ */
+ "ERR 19", /* RSE_ */
+ "ERR 20", /* RSE_ */
+ "some error", /* 21 RSE_SOME_ERROR */
};
#define ERRTXT_SIZE (sizeof(_errtxt) / sizeof(*_errtxt))
static struct rs_error *
-_err_new (unsigned int code, const char *file, int line, const char *fmt, va_list args)
+_err_vcreate (unsigned int code, const char *file, int line, const char *fmt,
+ va_list args)
{
struct rs_error *err;
char *sep = strrchr (file, '/');
if (sep)
file = sep + 1;
- snprintf (err->buf + n, sizeof(err->buf) - n, " (%s: %d)", file,
+ snprintf (err->buf + n, sizeof(err->buf) - n, " (%s:%d)", file,
line);
}
}
return err;
}
+struct rs_error *
+_rs_err_create (unsigned int code, const char *file, int line, const char *fmt,
+ ...)
+{
+ struct rs_error *err;
+
+ va_list args;
+ va_start (args, fmt);
+ err = _err_vcreate (code, file, line, fmt, args);
+ va_end (args);
+ return err;
+}
+
static int
-_ctx_err_vpush_fl (struct rs_handle *ctx, int code, const char *file, int line, const char *fmt, va_list args)
+_ctx_err_vpush_fl (struct rs_context *ctx, int code, const char *file,
+ int line, const char *fmt, va_list args)
{
- struct rs_error *err = _err_new (code, file, line, fmt, args);
+ struct rs_error *err = _err_vcreate (code, file, line, fmt, args);
if (err)
ctx->err = err;
}
int
-rs_err_ctx_push (struct rs_handle *ctx, int code, const char *fmt, ...)
+rs_err_ctx_push (struct rs_context *ctx, int code, const char *fmt, ...)
{
va_list args;
va_start (args, fmt);
}
int
-rs_err_ctx_push_fl (struct rs_handle *ctx, int code, const char *file, int line, const char *fmt, ...)
+rs_err_ctx_push_fl (struct rs_context *ctx, int code, const char *file,
+ int line, const char *fmt, ...)
{
va_list args;
va_start (args, fmt);
return code;
}
+int
+_rs_err_conn_push_err (struct rs_connection *conn, struct rs_error *err)
+{
+ conn->err = err; /* FIXME: use a stack */
+ return err->code;
+}
+
static int
-_conn_err_vpush_fl (struct rs_connection *conn, int code, const char *file, int line, const char *fmt, va_list args)
+_conn_err_vpush_fl (struct rs_connection *conn, int code, const char *file,
+ int line, const char *fmt, va_list args)
{
- struct rs_error *err = _err_new (code, file, line, fmt, args);
+ struct rs_error *err = _err_vcreate (code, file, line, fmt, args);
if (err)
- conn->err = err;
+ _rs_err_conn_push_err (conn, err);
return code;
}
}
int
-rs_err_conn_push_fl (struct rs_connection *conn, int code, const char *file, int line, const char *fmt, ...)
+rs_err_conn_push_fl (struct rs_connection *conn, int code, const char *file,
+ int line, const char *fmt, ...)
{
va_list args;
va_start (args, fmt);
}
struct rs_error *
-rs_err_ctx_pop (struct rs_handle *ctx)
+rs_err_ctx_pop (struct rs_context *ctx)
{
struct rs_error *err;