Serve as the gatekeeper for a tunnel, accepting messages, coallescing and/or
fragmenting them before wrapping them up for tunnel delivery. The flow here
add an I2NPMessage (and a target tunnel/router, if necessary)
that message is queued up into a TunnelGateway.Pending and offered to the
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 coallesce them).
when the QueueProcessor accepts a TunnelGateway.Pending, it preprocesses
it into fragments, forwarding each preprocessed fragment group through
the Sender then encrypts the preprocessed data and delivers it to the
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.
Add a message to be sent down the tunnel, either sending it now (perhaps
coallesced 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
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)