java.lang.Object
net.i2p.router.tunnel.TunnelGateway
Direct Known Subclasses:
PumpedTunnelGateway, TunnelGatewayZeroHop

abstract class TunnelGatewayextends Object
Serve as the gatekeeper for a tunnel, accepting messages, coalescing and/or fragmenting them before wrapping them up for tunnel delivery. The flow here. is:
  1. add an I2NPMessage (and a target tunnel/router, if necessary)
  2. that message is queued up into a TunnelGateway.Pending and offered to the assigned QueuePreprocessor.
  3. that QueuePreprocessor may then take off any of the TunnelGateway.Pending messages or instruct the TunnelGateway to offer it the messages again in a short while (in an attempt to coalesce them).
  4. when the QueueProcessor accepts a TunnelGateway.Pending, it preprocesses it into fragments, forwarding each preprocessed fragment group through the Sender.
  5. the Sender then encrypts the preprocessed data and delivers it to the Receiver.
  6. the Receiver now has the encrypted message and may do with it as it pleases (e.g. wrap it as necessary and enqueue it onto the OutNetMessagePool, or if debugging, verify that it can be decrypted properly)

Unused directly - see PumpedTunnelGateway, ThrottledPumpedTunnelGateway, and TunnelGatewayZeroHop overrides.

  • Field Details

    • _context

      protected final RouterContext _context
      The router context.
    • _log

      protected final Log _log
      The log instance.
    • _queue

      protected final List<PendingGatewayMessage> _queue
      The message queue.
    • _preprocessor

      protected final TunnelGateway.QueuePreprocessor _preprocessor
      The queue preprocessor.
    • _sender

      protected final TunnelGateway.Sender _sender
      The message sender, encrypting and forwarding preprocessed messages.
    • _receiver

      protected final TunnelGateway.Receiver _receiver
      The message receiver, consuming encrypted messages for forwarding.
    • _lastFlush

      protected long _lastFlush
      The last flush time.
    • _delayedFlush

      protected final TunnelGateway.DelayedFlush _delayedFlush
      The delayed flush timer.
    • _messagesSent

      protected int _messagesSent
      The messages sent count.
  • Constructor Details

    • TunnelGateway

      protected TunnelGateway(RouterContext context, TunnelGateway.QueuePreprocessor preprocessor, TunnelGateway.Sender sender, TunnelGateway.Receiver receiver)
      Creates a new TunnelGateway.
      Parameters:
      context - the router context
      preprocessor - this pulls Pending messages off a list, builds some full preprocessed messages, and pumps those into the sender
      sender - this takes a preprocessed message, encrypts it, and sends it to the receiver
      receiver - this receives the encrypted message and forwards it off to the first hop
  • Method Details

    • add

      public boolean add(TunnelGatewayMessage msg)
      Add a message to be sent down the tunnel, where we are the inbound gateway.
      Parameters:
      msg - message received to be sent through the tunnel
      Returns:
      true if the message was accepted, false if dropped
    • add

      public boolean add(I2NPMessage msg, Hash toRouter, TunnelId toTunnel)
      Add a message to be sent down the tunnel, either sending it now (perhaps coalesced with other pending messages) or after a brief pause (_flushFrequency). If it is queued up past its expiration, it is silently dropped.

      UNUSED - see overrides.

      Parameters:
      msg - message to be sent through the tunnel
      toRouter - router to send to after the endpoint (or null for endpoint processing)
      toTunnel - tunnel to send to after the endpoint (or null for endpoint or router processing)
      Returns:
      true if the message was accepted, false if dropped
    • getMessagesSent

      public int getMessagesSent()
      The number of messages sent.
      Returns:
      the number of messages sent