gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r24515 - gnunet/src/ats


From: gnunet
Subject: [GNUnet-SVN] r24515 - gnunet/src/ats
Date: Wed, 24 Oct 2012 16:37:19 +0200

Author: wachs
Date: 2012-10-24 16:37:18 +0200 (Wed, 24 Oct 2012)
New Revision: 24515

Modified:
   gnunet/src/ats/gnunet-service-ats_addresses.c
   gnunet/src/ats/gnunet-service-ats_addresses.h
   gnunet/src/ats/gnunet-service-ats_performance.c
Log:
- changes but not complete

Modified: gnunet/src/ats/gnunet-service-ats_addresses.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.c       2012-10-24 14:17:24 UTC 
(rev 24514)
+++ gnunet/src/ats/gnunet-service-ats_addresses.c       2012-10-24 14:37:18 UTC 
(rev 24515)
@@ -1051,8 +1051,90 @@
     GAS_mlp_done (mlp);
   }
 #endif
+}
 
+struct PeerIteratorContext
+{
+  GNUNET_ATS_Peer_Iterator it;
+  void *it_cls;
+  struct GNUNET_CONTAINER_MultiHashMap *peers_returned;
+};
+
+static int
+peer_it (void *cls,
+         const struct GNUNET_HashCode * key,
+         void *value)
+{
+  struct PeerIteratorContext *ip_ctx = cls;
+  struct GNUNET_PeerIdentity tmp;
+
+  if (GNUNET_NO == 
GNUNET_CONTAINER_multihashmap_contains(ip_ctx->peers_returned, key))
+  {
+      GNUNET_CONTAINER_multihashmap_put(ip_ctx->peers_returned, key, NULL, 
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
+      tmp.hashPubKey = (*key);
+      ip_ctx->it (ip_ctx, &tmp);
+  }
+
+  return GNUNET_OK;
 }
 
 
+void
+GAS_addresses_iterate_peers (GNUNET_ATS_Peer_Iterator it, void *it_cls)
+{
+  struct PeerIteratorContext ip_ctx;
+  unsigned int size;
+
+  if (NULL == it)
+      return;
+  GNUNET_assert (NULL != addresses);
+
+  size = GNUNET_CONTAINER_multihashmap_size(addresses);
+  if (0 != size)
+  {
+    ip_ctx.it = it;
+    ip_ctx.it_cls = it_cls;
+    ip_ctx.peers_returned = GNUNET_CONTAINER_multihashmap_create (size, 
GNUNET_NO);
+    GNUNET_CONTAINER_multihashmap_iterate (addresses, &peer_it, &ip_ctx);
+    GNUNET_CONTAINER_multihashmap_destroy (ip_ctx.peers_returned);
+  }
+  it (it_cls, NULL);
+}
+
+struct PeerInfoIteratorContext
+{
+  GNUNET_ATS_PeerInfo_Iterator it;
+  void *it_cls;
+};
+
+int peerinfo_it (void *cls,
+                 const struct GNUNET_HashCode * key,
+                 void *value)
+{
+  struct PeerInfoIteratorContext *pi_ctx = cls;
+  struct ATS_Address *addr = (struct ATS_Address *)  value;
+
+  if (NULL != pi_ctx->it)
+    pi_ctx->it (pi_ctx->it_cls, &addr->peer, addr->plugin);
+  return GNUNET_YES;
+}
+
+void
+GAS_addresses_get_peer_info (const struct GNUNET_PeerIdentity *peer, 
GNUNET_ATS_PeerInfo_Iterator pi_it, void *pi_it_cls)
+{
+  struct PeerInfoIteratorContext pi_ctx;
+  GNUNET_assert (NULL != peer);
+  GNUNET_assert (NULL != addresses);
+
+  pi_ctx.it = pi_it;
+  pi_ctx.it_cls = pi_it_cls;
+
+  GNUNET_CONTAINER_multihashmap_get_multiple (addresses, &peer->hashPubKey, 
&peerinfo_it, &pi_ctx);
+
+  if (NULL != pi_it)
+    pi_it (pi_it_cls, NULL, NULL);
+
+}
+
+
 /* end of gnunet-service-ats_addresses.c */

Modified: gnunet/src/ats/gnunet-service-ats_addresses.h
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.h       2012-10-24 14:17:24 UTC 
(rev 24514)
+++ gnunet/src/ats/gnunet-service-ats_addresses.h       2012-10-24 14:37:18 UTC 
(rev 24515)
@@ -165,6 +165,19 @@
 
 /* FIXME: add performance request API */
 
+typedef void (*GNUNET_ATS_Peer_Iterator) (void *cls,
+                                          const struct GNUNET_PeerIdentity 
*id);
+
+void
+GAS_addresses_iterate_peers (GNUNET_ATS_Peer_Iterator p_it, void *cls);
+
+typedef void (*GNUNET_ATS_PeerInfo_Iterator) (void *cls,
+                                              const struct GNUNET_PeerIdentity 
*id,
+                                              const char *plugin);
+
+void
+GAS_addresses_get_peer_info (const struct GNUNET_PeerIdentity *peer, 
GNUNET_ATS_PeerInfo_Iterator pi_it, void *pi_it_cls);
+
 #endif
 
 /* end of gnunet-service-ats_addresses.h */

Modified: gnunet/src/ats/gnunet-service-ats_performance.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_performance.c     2012-10-24 14:17:24 UTC 
(rev 24514)
+++ gnunet/src/ats/gnunet-service-ats_performance.c     2012-10-24 14:37:18 UTC 
(rev 24515)
@@ -94,6 +94,33 @@
 }
 
 
+static void
+peerinfo_it (void *cls,
+             const struct GNUNET_PeerIdentity *id,
+             const char *plugin)
+{
+  struct PerformanceClient *pc = cls;
+  GNUNET_assert (NULL != pc);
+  if (NULL != id)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Callback for peer `%s' plugin 
`%s'\n", GNUNET_i2s (id), plugin);
+    /* TODO: Notify client here! */
+    //GNUNET_break (0);
+  }
+
+}
+
+static void
+peer_it (void *cls,
+         const struct GNUNET_PeerIdentity *id)
+{
+  if (NULL != id)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Callback for peer `%s'\n", 
GNUNET_i2s (id));
+    GAS_addresses_get_peer_info (id, &peerinfo_it, cls);
+  }
+}
+
 /**
  * Register a new performance client.
  *
@@ -113,6 +140,9 @@
   GNUNET_SERVER_notification_context_add (nc, client);
   GNUNET_SERVER_client_keep (client);
   GNUNET_CONTAINER_DLL_insert (pc_head, pc_tail, pc);
+
+  /* Send information about clients */
+  GAS_addresses_iterate_peers (&peer_it, pc);
 }
 
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]