Smallers steps to keep plugin running
[oweals/gnunet.git] / src / include / gnunet_core_service.h
index 47b8d6f98293f333c9ae2b23f9055c48e7b37cd1..caa02c6b299c7b38e2c59ac36bf8737163dde6cc 100644 (file)
@@ -4,7 +4,7 @@
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 2, or (at your
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
@@ -51,7 +51,7 @@ struct GNUNET_CORE_Handle;
 
 
 /**
- * Method called whenever a given peer either connects.
+ * Method called whenever a given peer connects.
  *
  * @param cls closure
  * @param peer peer identity this notification is about
@@ -64,10 +64,30 @@ typedef void (*GNUNET_CORE_ConnectEventHandler) (void *cls,
                                                 struct GNUNET_TIME_Relative latency,
                                                 uint32_t distance);
 
+/**
+ * Method called whenever a given peer has a status change.
+ *
+ * @param cls closure
+ * @param peer peer identity this notification is about
+ * @param latency reported latency of the connection with 'other'
+ * @param distance reported distance (DV) to 'other' 
+ * @param bandwidth_in available amount of inbound bandwidth
+ * @param bandwidth_out available amount of outbound bandwidth
+ * @param timeout absolute time when this peer will time out
+ *        unless we see some further activity from it
+ */
+typedef void (*GNUNET_CORE_PeerStatusEventHandler) (void *cls,
+                                                   const struct
+                                                   GNUNET_PeerIdentity * peer,
+                                                   struct GNUNET_TIME_Relative latency,
+                                                   uint32_t distance,
+                                                   struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in,
+                                                   struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
+                                                   struct GNUNET_TIME_Absolute timeout);
 
 
 /**
- * Method called whenever a given peer either disconnects.
+ * Method called whenever a peer disconnects.
  *
  * @param cls closure
  * @param peer peer identity this notification is about
@@ -164,9 +184,9 @@ typedef void
  * @param cls closure for the various callbacks that follow (including handlers in the handlers array)
  * @param init callback to call on timeout or once we have successfully
  *        connected to the core service; note that timeout is only meaningful if init is not NULL
- * @param pre_connects function to call on peer pre-connect (no session key yet), can be NULL
  * @param connects function to call on peer connect, can be NULL
  * @param disconnects function to call on peer disconnect / timeout, can be NULL
+ * @param status_events function to call on peer status changes, can be NULL
  * @param inbound_notify function to call for all inbound messages, can be NULL
  *                note that the core is allowed to drop notifications about inbound
  *                messages if the client does not process them fast enough (for this
@@ -200,9 +220,9 @@ GNUNET_CORE_connect (struct GNUNET_SCHEDULER_Handle *sched,
                      struct GNUNET_TIME_Relative timeout,
                      void *cls,
                      GNUNET_CORE_StartupCallback init,
-                    GNUNET_CORE_ConnectEventHandler pre_connects,
                      GNUNET_CORE_ConnectEventHandler connects,
                      GNUNET_CORE_DisconnectEventHandler disconnects,
+                    GNUNET_CORE_PeerStatusEventHandler status_events,
                      GNUNET_CORE_MessageCallback inbound_notify,
                      int inbound_hdr_only,
                      GNUNET_CORE_MessageCallback outbound_notify,
@@ -339,6 +359,20 @@ GNUNET_CORE_peer_change_preference (struct GNUNET_SCHEDULER_Handle *sched,
 void
 GNUNET_CORE_peer_change_preference_cancel (struct GNUNET_CORE_InformationRequestContext *irc);
 
+/**
+ * Obtain statistics and/or change preferences for the given peer.
+ *
+ * @param sched scheduler to use
+ * @param cfg configuration to use
+ * @param peer_cb function to call with the peer information
+ * @param cb_cls closure for peer_cb
+ * @return GNUNET_OK if iterating, GNUNET_SYSERR on error
+ */
+int
+GNUNET_CORE_iterate_peers (struct GNUNET_SCHEDULER_Handle *sched,
+                           const struct GNUNET_CONFIGURATION_Handle *cfg,
+                           GNUNET_CORE_ConnectEventHandler peer_cb,
+                           void *cb_cls);
 
 /**
  * Handle for a transmission request.
@@ -387,11 +421,11 @@ GNUNET_CORE_notify_transmit_ready (struct
 /**
  * Cancel the specified transmission-ready notification.
  *
- * @param h handle that was returned by "notify_transmit_ready".
+ * @param th handle that was returned by "notify_transmit_ready".
  */
 void
 GNUNET_CORE_notify_transmit_ready_cancel (struct GNUNET_CORE_TransmitHandle
-                                          *h);
+                                          *th);
 
 
 #if 0                           /* keep Emacsens' auto-indent happy */