[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r10501 - in gnunet/src: include util,
gnunet <=