public abstract class TransportImpl extends Object implements Transport
Transport.AddressSource| Modifier and Type | Field and Description |
|---|---|
protected RouterContext |
_context |
protected static boolean |
ADJUST_COST
Do we increase the advertised cost when approaching conn limits?
|
static String |
CAP_IPV4 |
static String |
CAP_IPV4_IPV6 |
static String |
CAP_IPV6 |
protected static int |
CONGESTION_COST_ADJUSTMENT
TODO change to 2
|
protected static String |
PROP_BOOST_CONNECTION_LIMITS |
protected static String |
PROP_IPV6_FIREWALLED |
protected static String |
PROP_THROTTLE_NTCP_ATTACK |
| Constructor and Description |
|---|
TransportImpl(RouterContext context)
Initialize the new transport
|
| Modifier and Type | Method and Description |
|---|---|
protected String |
_t(String s)
Translate
|
protected String |
_t(String s,
Object o)
Translate
|
protected void |
afterSend(OutNetMessage msg,
boolean sendSuccessful)
The transport is done sending this message
|
protected void |
afterSend(OutNetMessage msg,
boolean sendSuccessful,
boolean allowRequeue)
The transport is done sending this message
|
protected void |
afterSend(OutNetMessage msg,
boolean sendSuccessful,
boolean allowRequeue,
long msToSend)
The transport is done sending this message.
|
protected void |
afterSend(OutNetMessage msg,
boolean sendSuccessful,
long msToSend)
The transport is done sending this message
|
boolean |
allowLocal()
Are we allowed to connect to local addresses?
|
(package private) static void |
clearCaches() |
abstract int |
countActivePeers()
How many peers are we currently connected to, that we have
sent a message to or received a message from in the last five minutes.
|
abstract int |
countActiveSendPeers()
How many peers are we currently connected to, that we have
sent a message to in the last minute.
|
abstract int |
countPeers()
How many peers are we connected to?
|
abstract void |
externalAddressReceived(Transport.AddressSource source,
byte[] ip,
int port)
Notify a transport of an external address change.
|
void |
externalAddressRemoved(Transport.AddressSource source,
boolean ipv6)
Notify a transport of an external address change.
|
void |
forwardPortStatus(byte[] ip,
int port,
int externalPort,
boolean success,
String reason)
Notify a transport of the results of trying to forward a port.
|
String |
getAltStyle()
An alternate supported style, or null.
|
List<Long> |
getClockSkews()
Return our peer clock skews on a transport.
|
RouterAddress |
getCurrentAddress(boolean ipv6)
What address are we currently listening to?
Replaces getCurrentAddress()
Note: An address without a host is considered IPv4.
|
List<RouterAddress> |
getCurrentAddresses()
What addresses are we currently listening to?
Replaces getCurrentAddress()
|
static byte[] |
getIP(Hash peer)
IP of the peer from the last connection (in or out, any transport).
|
TransportUtil.IPv6Config |
getIPv6Config() |
int |
getMaxConnections()
Per-transport connection limit
|
List<String> |
getMostRecentErrorMessages() |
protected OutNetMessage |
getNextMessage()
Nonblocking call to pull the next outbound message
off the queue.
|
abstract CommSystemFacade.Status |
getReachabilityStatus()
Previously returned short, now enum as of 0.9.20
|
int |
getRequestedPort()
What INTERNAL port would the transport like to have forwarded by UPnP.
|
protected Collection<InetAddress> |
getSavedLocalAddresses()
Return and then clear all saved local addresses.
|
List<RouterAddress> |
getTargetAddresses(RouterInfo target)
Get all available address we can use, shuffled and then sorted by cost/preference.
|
static int |
getTransportMaxConnections(RouterContext ctx,
String style) |
boolean |
hasCurrentAddress()
Do we have any current address?
|
boolean |
haveCapacity()
Can we initiate or accept a connection to another peer, saving some margin
|
boolean |
haveCapacity(int pct) |
boolean |
isBacklogged(Hash peer) |
boolean |
isEstablished(Hash peer) |
boolean |
isIPv4Firewalled()
This returns true if the force-firewalled setting is configured, false otherwise.
|
boolean |
isIPv6Firewalled()
This returns true if the force-firewalled setting is configured, false otherwise.
|
protected boolean |
isPubliclyRoutable(byte[] addr)
Allows IPv6 only if the transport is configured for it.
|
boolean |
isUnreachable(Hash peer) |
void |
markReachable(Hash peer,
boolean isInbound)
called when we establish a peer connection (outbound or inbound)
|
void |
markUnreachable(Hash peer)
called when we can't reach a peer
|
void |
mayDisconnect(Hash peer)
Tell the transport that we may disconnect from this peer.
|
void |
messageReceived(I2NPMessage inMsg,
RouterIdentity remoteIdent,
Hash remoteIdentHash,
long msToReceive,
int bytesReceived)
Message received from the I2NPMessageReader - send it to the listener
|
protected String |
ngettext(String s,
String p,
int n)
Translate
|
protected abstract void |
outboundMessageReady()
This message is called whenever a new message is added to the send pool,
and it should not block
Only used by NTCP.
|
protected void |
removeAddress(boolean ipv6)
Remove all existing addresses with the specified IP length (4 or 16).
|
protected void |
removeAddress(RouterAddress address)
Remove only this address.
|
void |
renderStatusHTML(Writer out)
Make this stuff pretty
|
void |
renderStatusHTML(Writer out,
String urlBase,
int sortFlags) |
protected void |
replaceAddress(RouterAddress address)
Replace any existing addresses for the current transport
with the same IP length (4 or 16) with the given one.
|
protected void |
saveLocalAddress(InetAddress address)
Save a local address we were notified about before we started.
|
void |
send(OutNetMessage msg)
Asynchronously send the message as requested in the message and, if the
send is successful, queue up any msg.getOnSendJob job, and register it
with the OutboundMessageRegistry (if it has a reply selector).
|
void |
setIP(Hash peer,
byte[] ip)
IP of the peer from the last connection (in or out, any transport).
|
void |
setListener(TransportEventListener listener)
Who to notify on message availability
|
List<RouterAddress> |
updateAddress()
Ask the transport to update its address based on current information and return it
Transports should override.
|
boolean |
wasUnreachable(Hash peer)
Was the peer Unreachable (outbound only) the last time we tried it?
This is NOT reset if the peer contacts us.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitbid, forceDisconnect, getEstablished, getPeerCounts, getStyle, startListening, stopListeningprotected final RouterContext _context
protected static final boolean ADJUST_COST
public static final String CAP_IPV4
public static final String CAP_IPV4_IPV6
public static final String CAP_IPV6
protected static final int CONGESTION_COST_ADJUSTMENT
protected static final String PROP_BOOST_CONNECTION_LIMITS
protected static final String PROP_IPV6_FIREWALLED
protected static final String PROP_THROTTLE_NTCP_ATTACK
public TransportImpl(RouterContext context)
protected void afterSend(OutNetMessage msg, boolean sendSuccessful)
msg - message in questionsendSuccessful - true if the peer received itprotected void afterSend(OutNetMessage msg, boolean sendSuccessful, boolean allowRequeue)
msg - message in questionsendSuccessful - true if the peer received itallowRequeue - true if we should try other transports if availableprotected void afterSend(OutNetMessage msg, boolean sendSuccessful, boolean allowRequeue, long msToSend)
msg - message in questionsendSuccessful - true if the peer received itmsToSend - how long it took to transfer the data to the peerallowRequeue - true if we should try other transports if availableprotected void afterSend(OutNetMessage msg, boolean sendSuccessful, long msToSend)
msg - message in questionsendSuccessful - true if the peer received itmsToSend - how long it took to transfer the data to the peerpublic boolean allowLocal()
static void clearCaches()
public abstract int countActivePeers()
countActivePeers in interface Transportpublic abstract int countActiveSendPeers()
countActiveSendPeers in interface Transportpublic abstract int countPeers()
countPeers in interface Transportpublic abstract void externalAddressReceived(Transport.AddressSource source, byte[] ip, int port)
externalAddressReceived in interface Transportsource - defined in Transport.javaip - typ. IPv4 or IPv6 non-local; may be null to indicate IPv4 failure or port info onlyport - 0 for unknown or unchangedpublic void externalAddressRemoved(Transport.AddressSource source, boolean ipv6)
externalAddressRemoved in interface Transportsource - defined in Transport.javaipv6 - true for IPv6, false for IPv4public void forwardPortStatus(byte[] ip,
int port,
int externalPort,
boolean success,
String reason)
forwardPortStatus in interface Transportip - may be nullport - the internal portexternalPort - the external port, which for now should always be the same as
the internal port if the forwarding was successful.public String getAltStyle()
public List<Long> getClockSkews()
getClockSkews in interface Transportpublic RouterAddress getCurrentAddress(boolean ipv6)
getCurrentAddress in interface Transportipv6 - true for IPv6 only; false for IPv4 onlypublic List<RouterAddress> getCurrentAddresses()
getCurrentAddresses in interface Transportpublic static byte[] getIP(Hash peer)
public TransportUtil.IPv6Config getIPv6Config()
getIPv6Config in interface Transportpublic int getMaxConnections()
public List<String> getMostRecentErrorMessages()
getMostRecentErrorMessages in interface Transportprotected OutNetMessage getNextMessage()
public abstract CommSystemFacade.Status getReachabilityStatus()
getReachabilityStatus in interface Transportpublic int getRequestedPort()
getRequestedPort in interface Transportprotected Collection<InetAddress> getSavedLocalAddresses()
public List<RouterAddress> getTargetAddresses(RouterInfo target)
public static int getTransportMaxConnections(RouterContext ctx, String style)
public boolean hasCurrentAddress()
hasCurrentAddress in interface Transportpublic boolean haveCapacity()
haveCapacity in interface Transportpublic boolean haveCapacity(int pct)
haveCapacity in interface Transportpct - are we under x% 0-100public boolean isBacklogged(Hash peer)
isBacklogged in interface Transportpublic boolean isEstablished(Hash peer)
isEstablished in interface Transportpublic boolean isIPv4Firewalled()
isIPv4Firewalled in interface Transportpublic boolean isIPv6Firewalled()
isIPv6Firewalled in interface Transportprotected boolean isPubliclyRoutable(byte[] addr)
addr - non-nullpublic boolean isUnreachable(Hash peer)
isUnreachable in interface Transportpublic void markReachable(Hash peer, boolean isInbound)
public void markUnreachable(Hash peer)
public void mayDisconnect(Hash peer)
mayDisconnect in interface Transportpeer - hash of the peer that may be disconnectedpublic void messageReceived(I2NPMessage inMsg, RouterIdentity remoteIdent, Hash remoteIdentHash, long msToReceive, int bytesReceived)
inMsg - non-nullremoteIdent - may be nullremoteIdentHash - may be null, calculated from remoteIdent if nullprotected abstract void outboundMessageReady()
protected void removeAddress(boolean ipv6)
ipv6 - true to remove all IPv6 addresses, false to remove all IPv4 addressesprotected void removeAddress(RouterAddress address)
public void renderStatusHTML(Writer out) throws IOException
IOExceptionpublic void renderStatusHTML(Writer out, String urlBase, int sortFlags) throws IOException
renderStatusHTML in interface TransportIOExceptionprotected void replaceAddress(RouterAddress address)
address - null to remove allprotected void saveLocalAddress(InetAddress address)
public void send(OutNetMessage msg)
public void setIP(Hash peer, byte[] ip)
ip - IPv4 or IPv6, non-nullpublic void setListener(TransportEventListener listener)
setListener in interface Transportlistener - the event listener to receive transport notificationspublic List<RouterAddress> updateAddress()
updateAddress in interface Transportpublic boolean wasUnreachable(Hash peer)
wasUnreachable in interface Transportpeer - hash of the peer to check reachability for