net.i2p.router.transport

## Class FIFOBandwidthLimiter

- java.lang.Object
- - net.i2p.router.transport.FIFOBandwidthLimiter

-     public class FIFOBandwidthLimiter
      extends Object

  Concurrent plan: It's difficult to get rid of the locks on _pendingInboundRequests since locked_satisyInboundAvailable() leaves Requests on the head of the queue. When we go to Java 6, we can convert from a locked ArrayList to a LinkedBlockingDeque, where locked_sIA will poll() from the head of the queue, and if the request is not fully satisfied, offerFirst() (i.e. push) it back on the head. Ditto outbound of course. In the meantime, for Java 5, we have lockless 'shortcut' methods for the common case where we are under the bandwidth limits. And the volatile counters are now AtomicIntegers / AtomicLongs.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static interface` | `FIFOBandwidthLimiter.CompleteListener`
    `static interface` | `FIFOBandwidthLimiter.Request` This is somewhat complicated by having both inbound and outbound in a single request.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `FIFOBandwidthLimiter(I2PAppContext context)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `FIFOBandwidthLimiter.Request` | `createRequest()`
    `int` | `getInboundBurstBytes()`
    `int` | `getInboundBurstKBytesPerSecond()`
    `int` | `getInboundKBytesPerSecond()`
    `boolean` | `getInboundUnlimited()`
    `int` | `getOutboundBurstBytes()`
    `int` | `getOutboundBurstKBytesPerSecond()`
    `int` | `getOutboundKBytesPerSecond()` These are the configured maximums, not the current rate
    `boolean` | `getOutboundUnlimited()`
    `float` | `getReceiveBps()`
    `float` | `getReceiveBps15s()`
    `float` | `getSendBps()`
    `float` | `getSendBps15s()`
    `(package private) StringBuilder` | `getStatus()`
    `long` | `getTotalAllocatedInboundBytes()`
    `long` | `getTotalAllocatedOutboundBytes()`
    `long` | `getTotalWastedInboundBytes()`
    `long` | `getTotalWastedOutboundBytes()`
    `long` | `now()`
    `(package private) void` | `refillBandwidthQueues(List<FIFOBandwidthLimiter.Request> buf, long bytesInbound, long bytesOutbound, long maxBurstIn, long maxBurstOut)` More bytes are available - add them to the queue and satisfy any requests we can
    `void` | `reinitialize()`
    `void` | `renderStatusHTML(Writer out)` Deprecated. not worth translating
    `FIFOBandwidthLimiter.Request` | `requestInbound(int bytesIn, String purpose)` Request some bytes.
    `FIFOBandwidthLimiter.Request` | `requestInbound(int bytesIn, String purpose, FIFOBandwidthLimiter.CompleteListener lsnr, Object attachment)`
    `FIFOBandwidthLimiter.Request` | `requestOutbound(int bytesOut, String purpose)` Request some bytes.
    `FIFOBandwidthLimiter.Request` | `requestOutbound(int bytesOut, String purpose, FIFOBandwidthLimiter.CompleteListener lsnr, Object attachment)`
    `(package private) void` | `setInboundBurstBytes(int bytes)`
    `(package private) void` | `setInboundBurstKBps(int kbytesPerSecond)`
    `void` | `setInboundUnlimited(boolean isUnlimited)`
    `(package private) void` | `setOutboundBurstBytes(int bytes)`
    `(package private) void` | `setOutboundBurstKBps(int kbytesPerSecond)`
    `void` | `setOutboundUnlimited(boolean isUnlimited)`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### FIFOBandwidthLimiter

          public FIFOBandwidthLimiter(I2PAppContext context)

  - ### Method Detail

    - #### now

          public long now()

    - #### getTotalAllocatedInboundBytes

          public long getTotalAllocatedInboundBytes()

    - #### getTotalAllocatedOutboundBytes

          public long getTotalAllocatedOutboundBytes()

    - #### getTotalWastedInboundBytes

          public long getTotalWastedInboundBytes()

    - #### getTotalWastedOutboundBytes

          public long getTotalWastedOutboundBytes()

    - #### getInboundUnlimited

          public boolean getInboundUnlimited()

    - #### setInboundUnlimited

          public void setInboundUnlimited(boolean isUnlimited)

    - #### getOutboundUnlimited

          public boolean getOutboundUnlimited()

    - #### setOutboundUnlimited

          public void setOutboundUnlimited(boolean isUnlimited)

    - #### getSendBps

          public float getSendBps()

    - #### getReceiveBps

          public float getReceiveBps()

    - #### getSendBps15s

          public float getSendBps15s()

    - #### getReceiveBps15s

          public float getReceiveBps15s()

    - #### getOutboundKBytesPerSecond

          public int getOutboundKBytesPerSecond()

      These are the configured maximums, not the current rate

    - #### getInboundKBytesPerSecond

          public int getInboundKBytesPerSecond()

    - #### getOutboundBurstKBytesPerSecond

          public int getOutboundBurstKBytesPerSecond()

    - #### getInboundBurstKBytesPerSecond

          public int getInboundBurstKBytesPerSecond()

    - #### reinitialize

          public void reinitialize()

    - #### createRequest

          public FIFOBandwidthLimiter.Request createRequest()

    - #### requestInbound

          public FIFOBandwidthLimiter.Request requestInbound(int bytesIn,
                                                    String purpose)

      Request some bytes. Does not block.

    - #### requestInbound

          public FIFOBandwidthLimiter.Request requestInbound(int bytesIn,
                                                    String purpose,
                                                    FIFOBandwidthLimiter.CompleteListener lsnr,
                                                    Object attachment)

    - #### requestOutbound

          public FIFOBandwidthLimiter.Request requestOutbound(int bytesOut,
                                                     String purpose)

      Request some bytes. Does not block.

    - #### requestOutbound

          public FIFOBandwidthLimiter.Request requestOutbound(int bytesOut,
                                                     String purpose,
                                                     FIFOBandwidthLimiter.CompleteListener lsnr,
                                                     Object attachment)

    - #### setInboundBurstKBps

          void setInboundBurstKBps(int kbytesPerSecond)

    - #### setOutboundBurstKBps

          void setOutboundBurstKBps(int kbytesPerSecond)

    - #### getInboundBurstBytes

          public int getInboundBurstBytes()

    - #### getOutboundBurstBytes

          public int getOutboundBurstBytes()

    - #### setInboundBurstBytes

          void setInboundBurstBytes(int bytes)

    - #### setOutboundBurstBytes

          void setOutboundBurstBytes(int bytes)

    - #### getStatus

          StringBuilder getStatus()

    - #### refillBandwidthQueues

          final void refillBandwidthQueues(List<FIFOBandwidthLimiter.Request> buf,
                                   long bytesInbound,
                                   long bytesOutbound,
                                   long maxBurstIn,
                                   long maxBurstOut)

      More bytes are available - add them to the queue and satisfy any requests we can
      Parameters:
        `maxBurstIn` - allow up to this many bytes in from the burst section for this time period (may be negative)
        `maxBurstOut` - allow up to this many bytes in from the burst section for this time period (may be negative)

    - #### renderStatusHTML

          public void renderStatusHTML(Writer out)
                                throws IOException

      Deprecated. not worth translating
      Throws:
        `IOException`