Add (disabled) linkage to libefence.
[libradsec.git] / lib / peer.c
1 /* Copyright 2010, 2011 NORDUnet A/S. All rights reserved.
2    See the file COPYING for licensing information.  */
3
4 #if defined HAVE_CONFIG_H
5 #include <config.h>
6 #endif
7
8 #include <assert.h>
9 #include <radsec/radsec.h>
10 #include <radsec/radsec-impl.h>
11 #include "peer.h"
12
13 struct rs_peer *
14 peer_pick_peer (struct rs_connection *conn)
15 {
16   assert (conn);
17
18   if (conn->active_peer)
19     conn->active_peer = conn->active_peer->next; /* Next.  */
20   if (!conn->active_peer)
21     conn->active_peer = conn->peers; /* From the top.  */
22
23   return conn->active_peer;
24 }
25
26 /* Public functions.  */
27 int
28 rs_peer_create (struct rs_connection *conn, struct rs_peer **peer_out)
29 {
30   struct rs_peer *peer;
31
32   peer = _rs_peer_create (conn->ctx, &conn->peers);
33   if (peer)
34     {
35       peer->conn = conn;
36       peer->realm->timeout = 2;
37       peer->realm->retries = 2;
38     }
39   else
40     return rs_err_conn_push_fl (conn, RSE_NOMEM, __FILE__, __LINE__, NULL);
41   if (*peer_out)
42     *peer_out = peer;
43   return RSE_OK;
44 }
45
46 int
47 rs_peer_set_address (struct rs_peer *peer, const char *hostname,
48                        const char *service)
49 {
50   struct rs_error *err;
51
52   assert (peer);
53   assert (peer->realm);
54
55   err = _rs_resolv (&peer->addr, peer->realm->type, hostname, service);
56   if (err)
57     return _rs_err_conn_push_err (peer->conn, err);
58   return RSE_OK;
59 }
60
61 void
62 rs_peer_set_timeout (struct rs_peer *peer, int timeout)
63 {
64   assert (peer);
65   assert (peer->realm);
66   peer->realm->timeout = timeout;
67 }
68 void
69 rs_peer_set_retries (struct rs_peer *peer, int retries)
70 {
71   assert (peer);
72   assert (peer->realm);
73   peer->realm->retries = retries;
74 }
75
76 int
77 rs_peer_set_secret (struct rs_peer *peer, const char *secret)
78 {
79   if (peer->secret)
80     free (peer->secret);
81   peer->secret = (char *) malloc (strlen(secret) + 1);
82   if (!peer->secret)
83     return rs_err_conn_push (peer->conn, RSE_NOMEM, NULL);
84   strcpy (peer->secret, secret);
85   return RSE_OK;
86 }
87