X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=lib%2Fpeer.c;h=0ac41142fc61f933dd6547f5411ecc24cc0c8ac5;hb=937144b230752ac640e611cabb57387f613997bc;hp=4fbb54f1c4bc48970ae6a3e6d9de90eb4db7c8a4;hpb=9e601f905d91f55c7a36f15fe5998d694c38444f;p=radsecproxy.git diff --git a/lib/peer.c b/lib/peer.c index 4fbb54f..0ac4114 100644 --- a/lib/peer.c +++ b/lib/peer.c @@ -1,23 +1,65 @@ -/* See the file COPYING for licensing information. */ +/* Copyright 2010, 2011 NORDUnet A/S. All rights reserved. + See LICENSE for licensing information. */ + #if defined HAVE_CONFIG_H #include #endif #include +#include +#include + #include #include +#include "err.h" +#include "peer.h" +#include "util.h" + +struct rs_peer * +peer_pick_peer (struct rs_connection *conn) +{ + assert (conn); + + if (conn->active_peer) + conn->active_peer = conn->active_peer->next; /* Next. */ + if (!conn->active_peer) + conn->active_peer = conn->peers; /* From the top. */ + + return conn->active_peer; +} + +struct rs_peer * +peer_create (struct rs_context *ctx, struct rs_peer **rootp) +{ + struct rs_peer *p; + + p = (struct rs_peer *) rs_malloc (ctx, sizeof(*p)); + if (p) + { + memset (p, 0, sizeof(struct rs_peer)); + if (*rootp) + { + p->next = (*rootp)->next; + (*rootp)->next = p; + } + else + *rootp = p; + } + return p; +} +/* Public functions. */ int rs_peer_create (struct rs_connection *conn, struct rs_peer **peer_out) { struct rs_peer *peer; - peer = _rs_peer_create (conn->ctx, &conn->peers); + peer = peer_create (conn->ctx, &conn->peers); if (peer) { peer->conn = conn; - peer->realm->timeout = 2; - peer->realm->retries = 2; + peer->realm->timeout = 2; /* FIXME: Why? */ + peer->realm->retries = 2; /* FIXME: Why? */ } else return rs_err_conn_push_fl (conn, RSE_NOMEM, __FILE__, __LINE__, NULL); @@ -28,16 +70,17 @@ rs_peer_create (struct rs_connection *conn, struct rs_peer **peer_out) int rs_peer_set_address (struct rs_peer *peer, const char *hostname, - const char *service) + const char *service) { - struct rs_error *err; - assert (peer); - assert (peer->realm); + assert (peer->conn); + assert (peer->conn->ctx); + + peer->hostname = rs_strdup (peer->conn->ctx, hostname); + peer->service = rs_strdup (peer->conn->ctx, service); + if (peer->hostname == NULL || peer->service == NULL) + return RSE_NOMEM; - err = _rs_resolv (&peer->addr, peer->realm->type, hostname, service); - if (err) - return _rs_err_conn_push_err (peer->conn, err); return RSE_OK; }