Connect to hard-coded peer and exchange route info. Buggy and incomplete.
[trust_router.git] / trp / trp_ptable.c
index 0056049..4a276d5 100644 (file)
@@ -1,3 +1,4 @@
+#include <time.h>
 #include <talloc.h>
 
 #include <trust_router/tr_name.h>
@@ -9,10 +10,11 @@ TRP_PEER *trp_peer_new(TALLOC_CTX *memctx)
 {
   TRP_PEER *peer=talloc(memctx, TRP_PEER);
   if (peer!=NULL) {
+    peer->next=NULL;
     peer->server=NULL;
     peer->port=0;
     peer->linkcost=TRP_METRIC_INFINITY;
-    peer->next=NULL;
+    peer->last_conn_attempt=(struct timespec){0,0};
   }
   return peer;
 }
@@ -68,7 +70,10 @@ void trp_peer_set_port(TRP_PEER *peer, unsigned int port)
 
 unsigned int trp_peer_get_linkcost(TRP_PEER *peer)
 {
-  return peer->linkcost;
+  if (peer!=NULL)
+    return peer->linkcost;
+  else
+    return 1;
 }
 
 void trp_peer_set_linkcost(TRP_PEER *peer, unsigned int linkcost)
@@ -82,6 +87,15 @@ void trp_peer_set_linkcost(TRP_PEER *peer, unsigned int linkcost)
   peer->linkcost=linkcost;
 }
 
+struct timespec *trp_peer_get_last_conn_attempt(TRP_PEER *peer)
+{
+  return &(peer->last_conn_attempt);
+}
+
+void trp_peer_set_last_conn_attempt(TRP_PEER *peer, struct timespec *time)
+{
+  peer->last_conn_attempt=*time;
+}
 
 TRP_PTABLE *trp_ptable_new(TALLOC_CTX *memctx)
 {
@@ -133,6 +147,14 @@ TRP_RC trp_ptable_remove(TRP_PTABLE *ptbl, TRP_PEER *peer)
   return TRP_ERROR;
 }
 
+TRP_PEER *trp_ptable_find(TRP_PTABLE *ptbl, TR_NAME *gssname)
+{
+  TRP_PEER *cur=ptbl->head;
+  while ((cur!=NULL) && (0 != tr_name_cmp(trp_peer_get_gssname(cur), gssname)))
+    cur=cur->next;
+  return cur;
+}
+
 char *trp_peer_to_str(TALLOC_CTX *memctx, TRP_PEER *peer, const char *sep)
 {
   if (sep==NULL)
@@ -162,3 +184,28 @@ char *trp_ptable_to_str(TALLOC_CTX *memctx, TRP_PTABLE *ptbl, const char *sep, c
   talloc_free(tmpctx); /* free detritus */
   return result;
 }
+
+TRP_PTABLE_ITER *trp_ptable_iter_new(TALLOC_CTX *mem_ctx)
+{
+  TRP_PTABLE_ITER *iter=talloc(mem_ctx, TRP_PTABLE_ITER);
+  *iter=NULL;
+  return iter;
+}
+
+TRP_PEER *trp_ptable_iter_first(TRP_PTABLE_ITER *iter, TRP_PTABLE *ptbl)
+{
+  *iter=ptbl->head;
+  return *iter;
+}
+
+TRP_PEER *trp_ptable_iter_next(TRP_PTABLE_ITER *iter)
+{
+  *iter=(*iter)->next;
+  return *iter;
+}
+
+void trp_ptable_iter_free(TRP_PTABLE_ITER *iter)
+{
+  talloc_free(iter);
+}
+