- now = GNUNET_TIME_absolute_get ();
- delta_time = now.value - av->last_update__.value;
- delta_avail = (delta_time * ((unsigned long long) av->available_bytes_per_s__) + 500LL) / 1000LL;
- if (delta_avail >= size)
- {
-#if DEBUG_BANDWIDTH
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Tracker %p delay for %u bytes is zero\n",
- av,
- (unsigned int) size);
-#endif
- return GNUNET_TIME_UNIT_ZERO;
- }
- bytes_needed = size - delta_avail;
- ret.value = 1000LL * bytes_needed / (unsigned long long) av->available_bytes_per_s__;
-#if DEBUG_BANDWIDTH
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "Tracker %p delay for %u bytes is %llu ms\n",
- av,
- (unsigned int) size,
- (unsigned long long) ret.value);
-#endif
+ bytes_needed = size + av->consumption_since_last_update__;
+ if (bytes_needed <= 0)
+ {
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "Tracker %p delay for %u bytes is zero\n", av,
+ (unsigned int) size);
+ return GNUNET_TIME_UNIT_ZERO;
+ }
+ ret.rel_value =
+ (1000LL * bytes_needed) /
+ (unsigned long long) av->available_bytes_per_s__;
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "Tracker %p delay for %u bytes is %llu ms\n",
+ av, (unsigned int) size, (unsigned long long) ret.rel_value);