gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r10501 - in gnunet/src: include util


From: gnunet
Subject: [GNUnet-SVN] r10501 - in gnunet/src: include util
Date: Fri, 5 Mar 2010 20:04:38 +0100

Author: grothoff
Date: 2010-03-05 20:04:38 +0100 (Fri, 05 Mar 2010)
New Revision: 10501

Modified:
   gnunet/src/include/gnunet_bandwidth_lib.h
   gnunet/src/util/bandwidth.c
Log:
update-api

Modified: gnunet/src/include/gnunet_bandwidth_lib.h
===================================================================
--- gnunet/src/include/gnunet_bandwidth_lib.h   2010-03-05 18:16:56 UTC (rev 
10500)
+++ gnunet/src/include/gnunet_bandwidth_lib.h   2010-03-05 19:04:38 UTC (rev 
10501)
@@ -21,7 +21,6 @@
 /**
  * @file include/gnunet_bandwidth_lib.h
  * @brief functions related to bandwidth (unit)
- *
  * @author Christian Grothoff
  */
 
@@ -95,6 +94,33 @@
 
 
 /**
+ * At the given bandwidth, calculate how much traffic will be
+ * available until the given deadline.
+ *
+ * @param bps bandwidth
+ * @param deadline when is the deadline
+ * @return number of bytes available at bps until deadline
+ */
+uint64_t 
+GNUNET_BANDWIDTH_value_get_available_until (struct GNUNET_BANDWIDTH_Value32NBO 
bps,
+                                           struct GNUNET_TIME_Relative 
deadline);
+
+
+/**
+ * At the given bandwidth, calculate how long it would take for
+ * 'size' bytes to be transmitted.
+ *
+ * @param bps bandwidth
+ * @param size number of bytes we want to have available
+ * @return how long it would take
+ */
+struct GNUNET_TIME_Relative
+GNUNET_BANDWIDTH_value_get_delay_for (struct GNUNET_BANDWIDTH_Value32NBO bps,
+                                     uint64_t size);
+
+
+
+/**
  * Compute the MIN of two bandwidth values.
  *
  * @param b1 first value
@@ -135,10 +161,11 @@
  *
  * @param av tracker to update
  * @param size number of bytes consumed
+ * @return GNUNET_YES if this consumption is above the limit
  */
-void
+int
 GNUNET_BANDWIDTH_tracker_consume (struct GNUNET_BANDWIDTH_Tracker *av,
-                                 size_t size);
+                                 ssize_t size);
 
 
 /**
@@ -156,6 +183,17 @@
 
 
 /**
+ * Compute how many bytes are available for consumption right now.
+ * quota.
+ *
+ * @param av tracker to query
+ * @return number of bytes available for consumption right now
+ */
+int64_t 
+GNUNET_BANDWIDTH_tracker_get_available (struct GNUNET_BANDWIDTH_Tracker *av);
+
+
+/**
  * Update quota of bandwidth tracker.
  *
  * @param av tracker to initialize

Modified: gnunet/src/util/bandwidth.c
===================================================================
--- gnunet/src/util/bandwidth.c 2010-03-05 18:16:56 UTC (rev 10500)
+++ gnunet/src/util/bandwidth.c 2010-03-05 19:04:38 UTC (rev 10501)
@@ -60,6 +60,48 @@
 
 
 /**
+ * At the given bandwidth, calculate how much traffic will be
+ * available until the given deadline.
+ *
+ * @param bps bandwidth
+ * @param deadline when is the deadline
+ * @return number of bytes available at bps until deadline
+ */
+uint64_t 
+GNUNET_BANDWIDTH_value_get_available_until (struct GNUNET_BANDWIDTH_Value32NBO 
bps,
+                                           struct GNUNET_TIME_Relative 
deadline)
+{
+  uint64_t b;
+
+  b = ntohl (bps.value__);
+  return b * deadline.value / 1000LL;
+}
+
+
+/**
+ * At the given bandwidth, calculate how long it would take for
+ * 'size' bytes to be transmitted.
+ *
+ * @param bps bandwidth
+ * @param size number of bytes we want to have available
+ * @return how long it would take
+ */
+struct GNUNET_TIME_Relative
+GNUNET_BANDWIDTH_value_get_delay_for (struct GNUNET_BANDWIDTH_Value32NBO bps,
+                                     uint64_t size)
+{
+  uint64_t b;
+  struct GNUNET_TIME_Relative ret;
+
+  b = ntohl (bps.value__);
+  if (b == 0)
+    return GNUNET_TIME_UNIT_FOREVER_REL;
+  ret.value = size * 1000LL / b;
+  return ret;
+}
+
+
+/**
  * Initialize bandwidth tracker.  Note that in addition to the
  * 'max_carry_s' limit, we also always allow at least
  * GNUNET_SERVER_MAX_MESSAGE_SIZE to accumulate.  So if the
@@ -135,7 +177,6 @@
 }
 
 
-
 /**
  * Notify the tracker that a certain number of bytes of bandwidth have
  * been consumed.  Note that it is legal to consume bytes even if not
@@ -145,21 +186,33 @@
  *
  * @param av tracker to update
  * @param size number of bytes consumed
+ * @return GNUNET_YES if this consumption is above the limit
  */
-void
+int
 GNUNET_BANDWIDTH_tracker_consume (struct GNUNET_BANDWIDTH_Tracker *av,
-                                 size_t size)
+                                 ssize_t size)
 {
   uint64_t nc;
 
-  nc = av->consumption_since_last_update__ + size;
-  if (nc < av->consumption_since_last_update__)
+  if (size > 0)
     {
-      GNUNET_break (0);
-      return;
+      nc = av->consumption_since_last_update__ + size;
+      if (nc < av->consumption_since_last_update__) 
+       {
+         GNUNET_break (0);
+         return GNUNET_SYSERR;
+       }
+      av->consumption_since_last_update__ = nc;
+      update_tracker (av);
+      if (av->consumption_since_last_update__ > 0)
+       return GNUNET_YES;
     }
-  av->consumption_since_last_update__ += size;
-  update_tracker (av);
+  else
+    {
+      av->last_update__.value -= (size * av->available_bytes_per_s__) / 1000LL;
+      update_tracker (av);
+    }
+  return GNUNET_NO;
 }
 
 
@@ -197,6 +250,29 @@
 
 
 /**
+ * Compute how many bytes are available for consumption right now.
+ * quota.
+ *
+ * @param av tracker to query
+ * @return number of bytes available for consumption right now
+ */
+int64_t 
+GNUNET_BANDWIDTH_tracker_get_available (struct GNUNET_BANDWIDTH_Tracker *av)
+{
+  struct GNUNET_BANDWIDTH_Value32NBO bps;
+  uint64_t avail;
+  uint64_t used;
+
+  update_tracker (av);
+  bps = GNUNET_BANDWIDTH_value_init (av->available_bytes_per_s__);
+  avail = GNUNET_BANDWIDTH_value_get_available_until (bps,
+                                                     
GNUNET_TIME_absolute_get_duration (av->last_update__));
+  used = av->consumption_since_last_update__;
+  return (int64_t) (avail - used);
+}
+
+
+/**
  * Update quota of bandwidth tracker.
  *
  * @param av tracker to initialize





reply via email to

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