Rename COPYING -> LICENSE.
[libradsec.git] / lib / peer.c
index 0a1d2ec..0ac4114 100644 (file)
@@ -1,14 +1,19 @@
 /* Copyright 2010, 2011 NORDUnet A/S. All rights reserved.
-   See the file COPYING for licensing information.  */
+   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)
@@ -23,18 +28,38 @@ peer_pick_peer (struct rs_connection *conn)
   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);
@@ -45,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;
 }