It depends on libradius from FreeRADIUS freeradius-server and
libevent2.
-The parts of it thathas been tested has been so on Linux (Ubuntu
-10.04) with libfreeradius2 (2.1.8+dfsg-1ubuntu1) and
-libevent-2.0.7-rc-dev.
+Those parts of the library which has been tested has been so on Linux
+(Ubuntu 10.04) with libfreeradius2 (2.1.8+dfsg-1ubuntu1) and
+libevent-2.0.7-rc-dev (http://monkey.org/~provos/).
The file HACKING contains more detailed info on the state of the
various parts of the library.
*attr = NULL;
a = (struct rs_attr *) malloc (sizeof(struct rs_attr));
if (!a)
- return rs_conn_err_push_fl (conn, RSE_NOMEM, __FILE__, __LINE__, NULL);
+ return rs_err_conn_push_fl (conn, RSE_NOMEM, __FILE__, __LINE__, NULL);
memset (a, 0, sizeof(struct rs_attr));
vp = pairmake (type, val, T_OP_EQ);
if (!vp)
{
rs_attr_destroy (a);
- return rs_conn_err_push_fl (conn, RSE_FR, __FILE__, __LINE__,
+ return rs_err_conn_push_fl (conn, RSE_FR, __FILE__, __LINE__,
"pairmake: %s", fr_strerror());
}
}
int
-rs_ctx_err_push (struct rs_handle *ctx, int code, const char *fmt, ...)
+rs_err_ctx_push (struct rs_handle *ctx, int code, const char *fmt, ...)
{
va_list args;
va_start (args, fmt);
}
int
-rs_ctx_err_push_fl (struct rs_handle *ctx, int code, const char *file, int line, const char *fmt, ...)
+rs_err_ctx_push_fl (struct rs_handle *ctx, int code, const char *file, int line, const char *fmt, ...)
{
va_list args;
va_start (args, fmt);
}
int
-rs_conn_err_push (struct rs_connection *conn, int code, const char *fmt, ...)
+rs_err_conn_push (struct rs_connection *conn, int code, const char *fmt, ...)
{
va_list args;
va_start (args, fmt);
}
int
-rs_conn_err_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_ctx_err_pop (struct rs_handle *ctx)
+rs_err_ctx_pop (struct rs_handle *ctx)
{
struct rs_error *err;
}
struct rs_error *
-rs_conn_err_pop (struct rs_connection *conn)
+rs_err_conn_pop (struct rs_connection *conn)
{
struct rs_error *err;
#define USER_PW "hemligt"
struct rs_error *
-rsx_client (const char *srvname, int srvport)
+blocking_client (const char *srvname, int srvport)
{
struct rs_handle *h;
struct rs_connection *conn;
return NULL;
if (rs_conn_create (h, &conn))
- return rs_conn_err_pop (conn);
+ return rs_err_conn_pop (conn);
if (rs_conn_add_server (conn, &server, RS_CONN_TYPE_UDP, srvname, srvport))
- return rs_conn_err_pop (conn);
+ return rs_err_conn_pop (conn);
rs_server_set_timeout (server, 1);
rs_server_set_tries (server, 3);
rs_server_set_secret (server, SECRET);
if (rs_packet_create_acc_request (conn, &req, USER_NAME, USER_PW))
- return rs_conn_err_pop (conn);
+ return rs_err_conn_pop (conn);
#if !defined(USE_REQUEST_OBJECT)
if (rs_packet_send (req, NULL))
- return rs_conn_err_pop (conn);
+ return rs_err_conn_pop (conn);
req = NULL;
if (rs_conn_receive_packet (conn, &resp))
- return rs_conn_err_pop (conn);
+ return rs_err_conn_pop (conn);
#else
{
struct rs_request *request;
if (rs_request_new (conn, &request))
- return rs_conn_err_pop (conn);
+ return rs_err_conn_pop (conn);
if (rs_req_send (request, req, &resp))
- return rs_conn_err_pop (conn);
+ return rs_err_conn_pop (conn);
rs_request_destroy (request);
}
#endif /* !defined(USE_REQUEST_OBJECT) */
host = strsep (argv + 1, ":");
port = atoi (argv[1]);
- err = rsx_client (host, port);
+ err = blocking_client (host, port);
if (err)
{
fprintf (stderr, "%s\n", rs_err_msg (err, 0));
void rs_attr_destroy(struct rs_attr *attr);
/* Error. */
-int rs_ctx_err_push(struct rs_handle *ctx, int code, const char *fmt, ...);
-int rs_ctx_err_push_fl(struct rs_handle *ctx, int code, const char *file, int line, const char *fmt, ...);
-struct rs_error *rs_ctx_err_pop (struct rs_handle *ctx);
-int rs_conn_err_push(struct rs_connection *conn, int code, const char *fmt, ...);
-int rs_conn_err_push_fl(struct rs_connection *conn, int code, const char *file, int line, const char *fmt, ...);
-struct rs_error *rs_conn_err_pop (struct rs_connection *conn);
+int rs_err_ctx_push(struct rs_handle *ctx, int code, const char *fmt, ...);
+int rs_err_ctx_push_fl(struct rs_handle *ctx, int code, const char *file, int line, const char *fmt, ...);
+struct rs_error *rs_err_ctx_pop (struct rs_handle *ctx);
+int rs_err_conn_push(struct rs_connection *conn, int code, const char *fmt, ...);
+int rs_err_conn_push_fl(struct rs_connection *conn, int code, const char *file, int line, const char *fmt, ...);
+struct rs_error *rs_err_conn_pop (struct rs_connection *conn);
void rs_err_free(struct rs_error *err);
char *rs_err_msg(struct rs_error *err, int dofree_flag);
int rs_err_code(struct rs_error *err, int dofree_flag);
rpkt = rad_alloc (1);
if (!rpkt)
- return rs_conn_err_push (conn, RSE_NOMEM, __func__);
+ return rs_err_conn_push (conn, RSE_NOMEM, __func__);
rpkt->id = -1;
p = (struct rs_packet *) malloc (sizeof (struct rs_packet));
if (!p)
{
rad_free (&rpkt);
- return rs_conn_err_push (conn, RSE_NOMEM, __func__);
+ return rs_err_conn_push (conn, RSE_NOMEM, __func__);
}
memset (p, 0, sizeof (struct rs_packet));
p->conn = conn;
err = bufferevent_write (pkt->conn->bev, pkt->rpkt->data,
pkt->rpkt->data_len);
if (err < 0)
- rs_conn_err_push_fl (pkt->conn, RSE_EVENT, __FILE__, __LINE__,
+ rs_err_conn_push_fl (pkt->conn, RSE_EVENT, __FILE__, __LINE__,
"bufferevent_write: %s", evutil_gai_strerror(err));
}
/* Packet will be freed in write callback. */
}
else if (events & BEV_EVENT_ERROR)
- rs_conn_err_push_fl (pkt->conn, RSE_CONNERR, __FILE__, __LINE__, NULL);
+ rs_err_conn_push_fl (pkt->conn, RSE_CONNERR, __FILE__, __LINE__, NULL);
}
static void
pkt->rpkt->data = rs_malloc (pkt->conn->ctx, pkt->rpkt->data_len);
if (!pkt->rpkt->data)
{
- rs_conn_err_push_fl (pkt->conn, RSE_NOMEM, __FILE__, __LINE__,
+ rs_err_conn_push_fl (pkt->conn, RSE_NOMEM, __FILE__, __LINE__,
NULL);
abort (); /* FIXME: Read and discard packet. */
}
#endif
conn->evb = event_base_new ();
if (!conn->evb)
- return rs_conn_err_push_fl (conn, RSE_EVENT, __FILE__, __LINE__,
+ return rs_err_conn_push_fl (conn, RSE_EVENT, __FILE__, __LINE__,
"event_base_new");
}
return RSE_OK;
p->fd = socket (p->addr->ai_family, p->addr->ai_socktype,
p->addr->ai_protocol);
if (p->fd < 0)
- return rs_conn_err_push_fl (conn, RSE_SOME_ERROR, __FILE__, __LINE__,
+ return rs_err_conn_push_fl (conn, RSE_SOME_ERROR, __FILE__, __LINE__,
strerror (errno));
if (evutil_make_socket_nonblocking (p->fd) < 0)
{
evutil_closesocket (p->fd);
- return rs_conn_err_push_fl (conn, RSE_SOME_ERROR, __FILE__, __LINE__,
+ return rs_err_conn_push_fl (conn, RSE_SOME_ERROR, __FILE__, __LINE__,
strerror (errno));
}
return RSE_OK;
{
conn->bev = bufferevent_socket_new (conn->evb, peer->fd, 0);
if (!conn->bev)
- return rs_conn_err_push_fl (conn, RSE_EVENT, __FILE__, __LINE__,
+ return rs_err_conn_push_fl (conn, RSE_EVENT, __FILE__, __LINE__,
"bufferevent_socket_new");
}
return RSE_OK;
err = bufferevent_socket_connect (p->conn->bev, p->addr->ai_addr,
p->addr->ai_addrlen);
if (err < 0)
- rs_conn_err_push_fl (p->conn, RSE_EVENT, __FILE__, __LINE__,
+ rs_err_conn_push_fl (p->conn, RSE_EVENT, __FILE__, __LINE__,
"bufferevent_socket_connect: %s",
evutil_gai_strerror(err));
else
p = _pick_peer (conn);
if (!p)
- return rs_conn_err_push_fl (conn, RSE_NOPEER, __FILE__, __LINE__, NULL);
+ return rs_err_conn_push_fl (conn, RSE_NOPEER, __FILE__, __LINE__, NULL);
if (_init_socket (conn, p))
return -1;
int rs_context_set_alloc_scheme(struct rs_handle *ctx, struct rs_alloc_scheme *scheme)
{
- return rs_ctx_err_push_fl (ctx, RSE_NOSYS, __FILE__, __LINE__,
+ return rs_err_ctx_push_fl (ctx, RSE_NOSYS, __FILE__, __LINE__,
"%s: NYI", __func__);
}
int rs_context_config_read(struct rs_handle *ctx, const char *config_file)
{
- return rs_ctx_err_push_fl (ctx, RSE_NOSYS, __FILE__, __LINE__,
+ return rs_err_ctx_push_fl (ctx, RSE_NOSYS, __FILE__, __LINE__,
"%s: NYI", __func__);
}
}
if (conn)
*conn = c;
- return c ? RSE_OK : rs_ctx_err_push (ctx, RSE_NOMEM, NULL);
+ return c ? RSE_OK : rs_err_ctx_push (ctx, RSE_NOMEM, NULL);
}
struct addrinfo *
switch (conn->type)
{
case RS_CONN_TYPE_NONE:
- rs_conn_err_push_fl (conn, RSE_INVALID_CONN, __FILE__, __LINE__, NULL);
+ rs_err_conn_push_fl (conn, RSE_INVALID_CONN, __FILE__, __LINE__, NULL);
return NULL;
case RS_CONN_TYPE_TCP:
/* Fall through. */
}
err = evutil_getaddrinfo (hostname, portstr, &hints, &res);
if (err)
- rs_conn_err_push_fl (conn, RSE_BADADDR, __FILE__, __LINE__,
+ rs_err_conn_push_fl (conn, RSE_BADADDR, __FILE__, __LINE__,
"%s:%d: bad host name or port (%s)",
hostname, port, evutil_gai_strerror(err));
return res; /* Simply use first result. */
else
{
evutil_freeaddrinfo (addr);
- rs_conn_err_push_fl (conn, RSE_NOMEM, __FILE__, __LINE__, NULL);
+ rs_err_conn_push_fl (conn, RSE_NOMEM, __FILE__, __LINE__, NULL);
}
return p;
}
if (conn->type == RS_CONN_TYPE_NONE)
conn->type = type;
else if (conn->type != type)
- return rs_conn_err_push (conn, RSE_CONN_TYPE_MISMATCH, NULL);
+ return rs_err_conn_push (conn, RSE_CONN_TYPE_MISMATCH, NULL);
srv = _peer_new (conn, hostname, port);
if (srv)
free (server->secret);
server->secret = (char *) malloc (strlen(secret) + 1);
if (!server->secret)
- return rs_conn_err_push (server->conn, RSE_NOMEM, NULL);
+ return rs_err_conn_push (server->conn, RSE_NOMEM, NULL);
strcpy (server->secret, secret);
return RSE_OK;
}
int rs_conn_add_listener(struct rs_connection *conn, rs_conn_type_t type, const char *hostname, int port)
{
- return rs_conn_err_push_fl (conn, RSE_NOSYS, __FILE__, __LINE__,
+ return rs_err_conn_push_fl (conn, RSE_NOSYS, __FILE__, __LINE__,
"%s: NYI", __func__);
}
int rs_conn_set_eventbase(struct rs_connection *conn, struct event_base *eb)
{
- return rs_conn_err_push_fl (conn, RSE_NOSYS, __FILE__, __LINE__,
+ return rs_err_conn_push_fl (conn, RSE_NOSYS, __FILE__, __LINE__,
"%s: NYI", __func__);
}
int rs_conn_set_callbacks(struct rs_connection *conn, struct rs_conn_callbacks *cb)
{
- return rs_conn_err_push_fl (conn, RSE_NOSYS, __FILE__, __LINE__,
+ return rs_err_conn_push_fl (conn, RSE_NOSYS, __FILE__, __LINE__,
"%s: NYI", __func__);
}
int rs_conn_set_server(struct rs_connection *conn, const char *name)
{
- return rs_conn_err_push_fl (conn, RSE_NOSYS, __FILE__, __LINE__,
+ return rs_err_conn_push_fl (conn, RSE_NOSYS, __FILE__, __LINE__,
"%s: NYI", __func__);
}
int rs_conn_get_current_server(struct rs_connection *conn, const char *name, size_t buflen)
{
- return rs_conn_err_push_fl (conn, RSE_NOSYS, __FILE__, __LINE__,
+ return rs_err_conn_push_fl (conn, RSE_NOSYS, __FILE__, __LINE__,
"%s: NYI", __func__);
}
{
struct rs_request *req = rs_malloc (conn->ctx, sizeof(*req));
if (!req)
- return rs_conn_err_push_fl (conn, RSE_NOMEM, __FILE__, __LINE__, NULL);
+ return rs_err_conn_push_fl (conn, RSE_NOMEM, __FILE__, __LINE__, NULL);
memset (req, 0, sizeof(*req));
req->conn = conn;
*req_out = req;