summaryrefslogtreecommitdiff
path: root/peer.c
diff options
context:
space:
mode:
authorSam Hartman <hartmans@debian.org>2014-08-24 13:23:12 -0400
committerSam Hartman <hartmans@debian.org>2014-08-24 13:23:12 -0400
commit25541859118c92a6497b52bba46c6bc4e582fcb2 (patch)
tree6eb7faaa084ef9251b7c9805fc391b46e1aa8bf1 /peer.c
Import libradsec_0.0.5.orig.tar.gz
[dgit import orig libradsec_0.0.5.orig.tar.gz]
Diffstat (limited to 'peer.c')
-rw-r--r--peer.c113
1 files changed, 113 insertions, 0 deletions
diff --git a/peer.c b/peer.c
new file mode 100644
index 0000000..decc64b
--- /dev/null
+++ b/peer.c
@@ -0,0 +1,113 @@
+/* Copyright 2010-2012 NORDUnet A/S. All rights reserved.
+ See LICENSE for licensing information. */
+
+#if defined HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <assert.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <radsec/radsec.h>
+#include <radsec/radsec-impl.h>
+#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 = peer_create (conn->ctx, &conn->peers);
+ if (peer)
+ {
+ peer->conn = conn;
+ 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);
+ if (*peer_out)
+ *peer_out = peer;
+ return RSE_OK;
+}
+
+int
+rs_peer_set_address (struct rs_peer *peer, const char *hostname,
+ const char *service)
+{
+ assert (peer);
+ 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;
+
+ return RSE_OK;
+}
+
+void
+rs_peer_set_timeout (struct rs_peer *peer, int timeout)
+{
+ assert (peer);
+ assert (peer->realm);
+ peer->realm->timeout = timeout;
+}
+void
+rs_peer_set_retries (struct rs_peer *peer, int retries)
+{
+ assert (peer);
+ assert (peer->realm);
+ peer->realm->retries = retries;
+}
+
+int
+rs_peer_set_secret (struct rs_peer *peer, const char *secret)
+{
+ if (peer->secret)
+ free (peer->secret);
+ peer->secret = (char *) malloc (strlen(secret) + 1);
+ if (!peer->secret)
+ return rs_err_conn_push (peer->conn, RSE_NOMEM, NULL);
+ strcpy (peer->secret, secret);
+ return RSE_OK;
+}
+