Package net.i2p.router
Class CommSystemFacade
- java.lang.Object
-
- net.i2p.router.CommSystemFacade
-
- All Implemented Interfaces:
Service
- Direct Known Subclasses:
CommSystemFacadeImpl
,VMCommSystem
public abstract class CommSystemFacade extends Object implements Service
Manages the communication subsystem between peers, including connections, listeners, transports, connection keys, etc.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
CommSystemFacade.Status
Since the codes may change.
-
Field Summary
Fields Modifier and Type Field Description protected static String
ROUTER_BUNDLE_NAME
static short
STATUS_DIFFERENT
We are behind a symmetric NAT which will make our 'from' address look differently when we talk to multiple peoplestatic short
STATUS_DISCONNECTED
We have no network interface at all enabled transportsstatic short
STATUS_HOSED
Our detection system is broken (SSU bind port failed)static short
STATUS_IPV4_DISABLED_IPV6_FIREWALLED
We have an IPv6 transport enabled and a public IPv6 address.static short
STATUS_IPV4_DISABLED_IPV6_OK
We have an IPv6 transport enabled and a public IPv6 address.static short
STATUS_IPV4_DISABLED_IPV6_UNKNOWN
We have an IPv6 transport enabled and a public IPv6 address.static short
STATUS_IPV4_FIREWALLED_IPV6_OK
We have an IPv6 transport enabled and a public IPv6 address.static short
STATUS_IPV4_FIREWALLED_IPV6_UNKNOWN
We have an IPv6 transport enabled and a public IPv6 address.static short
STATUS_IPV4_OK_IPV6_FIREWALLED
We have an IPv6 transport enabled and a public IPv6 address.static short
STATUS_IPV4_OK_IPV6_UNKNOWN
We have an IPv6 transport enabled and a public IPv6 address.static short
STATUS_IPV4_SNAT_IPV6_OK
We are behind a symmetric NAT which will make our 'from' address look differently when we talk to multiple people We can receive unsolicited connections on IPv6.static short
STATUS_IPV4_SNAT_IPV6_UNKNOWN
We are behind a symmetric NAT which will make our 'from' address look differently when we talk to multiple people We might be able to receive unsolicited connections on IPv6.static short
STATUS_IPV4_UNKNOWN_IPV6_FIREWALLED
We have an IPv6 transport enabled and a public IPv6 address.static short
STATUS_IPV4_UNKNOWN_IPV6_OK
We have an IPv6 transport enabled and a public IPv6 address.static short
STATUS_OK
These must be increasing in "badness" (see TransportManager.java), but UNKNOWN must be last.static short
STATUS_REJECT_UNSOLICITED
We are able to talk to peers that we initiate communication with, but cannot receive unsolicited connections, i.e.static short
STATUS_UNKNOWN
Our reachability is unknown on all
-
Constructor Summary
Constructors Constructor Description CommSystemFacade()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description 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.List<RouterAddress>
createAddresses()
Create the list of RouterAddress structures based on the router's configvoid
forceDisconnect(Hash peer)
Tell the comm system to disconnect from this peer.String
getCountry(Hash peer)
String
getCountryName(String code)
DHSessionKeyBuilder.Factory
getDHFactory()
Hook for pluggable transport creation.abstract Set<Hash>
getEstablished()
Get all the peers we are connected to.long
getFramedAveragePeerClockSkew(int percentToInclude)
Return framed average clock skew of connected peers in seconds, or null if we cannot answer.byte[]
getIP(Hash dest)
String
getLocalizedStatusString()
getStatus().toStatusString(), translated if available.Long
getMedianPeerClockSkew()
Median clock skew of connected peers in seconds, or null if we cannot answer.List<String>
getMostRecentErrorMessages()
String
getOurCountry()
short
getReachabilityStatus()
Deprecated.use getStatus()CommSystemFacade.Status
getStatus()
Determine under what conditions we are remotely reachable.SortedMap<String,Transport>
getTransports()
X25519KeyFactory
getXDHFactory()
Factory for making X25519 key pairs.boolean
haveHighOutboundCapacity()
boolean
haveInboundCapacity(int pct)
boolean
haveOutboundCapacity(int pct)
void
initGeoIP()
Router must call after netdb is initializedboolean
isBacklogged(Hash peer)
boolean
isDummy()
abstract boolean
isEstablished(Hash peer)
boolean
isInStrictCountry()
boolean
isInStrictCountry(Hash peer)
boolean
isInStrictCountry(RouterInfo ri)
void
mayDisconnect(Hash peer)
Tell the comm system that we may disconnect from this peer.void
notifyRemoveAddress(boolean ipv6)
Tell other transports our address changedvoid
notifyRemoveAddress(RouterAddress address)
Tell other transports our address changedvoid
notifyReplaceAddress(RouterAddress address)
Tell other transports our address changedabstract void
processMessage(OutNetMessage msg)
void
queueLookup(byte[] ip)
void
recheckReachability()
Deprecated.unusedvoid
registerTransport(Transport t)
Pluggable transportString
renderPeerHTML(Hash peer)
void
renderStatusHTML(Writer out)
void
renderStatusHTML(Writer out, String urlBase, int sortFlags)
void
unregisterTransport(Transport t)
Pluggable transportboolean
wasUnreachable(Hash peer)
-
-
-
Field Detail
-
ROUTER_BUNDLE_NAME
protected static final String ROUTER_BUNDLE_NAME
- Since:
- 0.9.45
- See Also:
- Constant Field Values
-
STATUS_OK
public static final short STATUS_OK
These must be increasing in "badness" (see TransportManager.java), but UNKNOWN must be last. We are able to receive unsolicited connections on all enabled transports- See Also:
- Constant Field Values
-
STATUS_IPV4_OK_IPV6_UNKNOWN
public static final short STATUS_IPV4_OK_IPV6_UNKNOWN
We have an IPv6 transport enabled and a public IPv6 address. We can receive unsolicited connections on IPv4. We might be able to receive unsolicited connections on IPv6.- Since:
- 0.9.20
- See Also:
- Constant Field Values
-
STATUS_IPV4_OK_IPV6_FIREWALLED
public static final short STATUS_IPV4_OK_IPV6_FIREWALLED
We have an IPv6 transport enabled and a public IPv6 address. We can receive unsolicited connections on IPv4. We cannot receive unsolicited connections on IPv6.- Since:
- 0.9.20
- See Also:
- Constant Field Values
-
STATUS_IPV4_UNKNOWN_IPV6_OK
public static final short STATUS_IPV4_UNKNOWN_IPV6_OK
We have an IPv6 transport enabled and a public IPv6 address. We may be able to receive unsolicited connections on IPv4. We can receive unsolicited connections on IPv6.- Since:
- 0.9.20
- See Also:
- Constant Field Values
-
STATUS_IPV4_FIREWALLED_IPV6_OK
public static final short STATUS_IPV4_FIREWALLED_IPV6_OK
We have an IPv6 transport enabled and a public IPv6 address. We cannot receive unsolicited connections on IPv4. We can receive unsolicited connections on IPv6.- Since:
- 0.9.20
- See Also:
- Constant Field Values
-
STATUS_IPV4_DISABLED_IPV6_OK
public static final short STATUS_IPV4_DISABLED_IPV6_OK
We have an IPv6 transport enabled and a public IPv6 address. IPv4 is disabled. We can receive unsolicited connections on IPv6.- Since:
- 0.9.20
- See Also:
- Constant Field Values
-
STATUS_IPV4_SNAT_IPV6_OK
public static final short STATUS_IPV4_SNAT_IPV6_OK
We are behind a symmetric NAT which will make our 'from' address look differently when we talk to multiple people We can receive unsolicited connections on IPv6.- Since:
- 0.9.20
- See Also:
- Constant Field Values
-
STATUS_DIFFERENT
public static final short STATUS_DIFFERENT
We are behind a symmetric NAT which will make our 'from' address look differently when we talk to multiple people- See Also:
- Constant Field Values
-
STATUS_IPV4_SNAT_IPV6_UNKNOWN
public static final short STATUS_IPV4_SNAT_IPV6_UNKNOWN
We are behind a symmetric NAT which will make our 'from' address look differently when we talk to multiple people We might be able to receive unsolicited connections on IPv6.- Since:
- 0.9.20
- See Also:
- Constant Field Values
-
STATUS_IPV4_FIREWALLED_IPV6_UNKNOWN
public static final short STATUS_IPV4_FIREWALLED_IPV6_UNKNOWN
We have an IPv6 transport enabled and a public IPv6 address. We cannot receive unsolicited connections on IPv4. We might be able to receive unsolicited connections on IPv6.- Since:
- 0.9.20
- See Also:
- Constant Field Values
-
STATUS_REJECT_UNSOLICITED
public static final short STATUS_REJECT_UNSOLICITED
We are able to talk to peers that we initiate communication with, but cannot receive unsolicited connections, i.e. Firewalled, on all enabled transports.- See Also:
- Constant Field Values
-
STATUS_IPV4_UNKNOWN_IPV6_FIREWALLED
public static final short STATUS_IPV4_UNKNOWN_IPV6_FIREWALLED
We have an IPv6 transport enabled and a public IPv6 address. We may be able to receive unsolicited connections on IPv4. We cannot receive unsolicited connections on IPv6.- Since:
- 0.9.20
- See Also:
- Constant Field Values
-
STATUS_IPV4_DISABLED_IPV6_UNKNOWN
public static final short STATUS_IPV4_DISABLED_IPV6_UNKNOWN
We have an IPv6 transport enabled and a public IPv6 address. IPv4 is disabled. We might be able to receive unsolicited connections on IPv6.- Since:
- 0.9.20
- See Also:
- Constant Field Values
-
STATUS_IPV4_DISABLED_IPV6_FIREWALLED
public static final short STATUS_IPV4_DISABLED_IPV6_FIREWALLED
We have an IPv6 transport enabled and a public IPv6 address. IPv4 is disabled. We can receive unsolicited connections on IPv6.- Since:
- 0.9.20
- See Also:
- Constant Field Values
-
STATUS_DISCONNECTED
public static final short STATUS_DISCONNECTED
We have no network interface at all enabled transports- Since:
- 0.9.4
- See Also:
- Constant Field Values
-
STATUS_HOSED
public static final short STATUS_HOSED
Our detection system is broken (SSU bind port failed)- See Also:
- Constant Field Values
-
STATUS_UNKNOWN
public static final short STATUS_UNKNOWN
Our reachability is unknown on all- See Also:
- Constant Field Values
-
-
Method Detail
-
processMessage
public abstract void processMessage(OutNetMessage msg)
-
renderStatusHTML
public void renderStatusHTML(Writer out, String urlBase, int sortFlags) throws IOException
- Throws:
IOException
-
renderStatusHTML
public void renderStatusHTML(Writer out) throws IOException
- Specified by:
renderStatusHTML
in interfaceService
- Throws:
IOException
-
createAddresses
public List<RouterAddress> createAddresses()
Create the list of RouterAddress structures based on the router's config
-
countActivePeers
public 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.
-
countActiveSendPeers
public abstract int countActiveSendPeers()
How many peers are we currently connected to, that we have sent a message to in the last minute. Unused for anything, to be removed.
-
haveInboundCapacity
public boolean haveInboundCapacity(int pct)
-
haveOutboundCapacity
public boolean haveOutboundCapacity(int pct)
-
haveHighOutboundCapacity
public boolean haveHighOutboundCapacity()
-
getMedianPeerClockSkew
public Long getMedianPeerClockSkew()
Median clock skew of connected peers in seconds, or null if we cannot answer. CommSystemFacadeImpl overrides this.
-
getFramedAveragePeerClockSkew
public long getFramedAveragePeerClockSkew(int percentToInclude)
Return framed average clock skew of connected peers in seconds, or null if we cannot answer. CommSystemFacadeImpl overrides this.
-
getReachabilityStatus
@Deprecated public short getReachabilityStatus()
Deprecated.use getStatus()Determine under what conditions we are remotely reachable. For internal use only. Not recommended for plugins or embedded applications, as the integer codes may change. Use getStatus() instead.
-
getStatus
public CommSystemFacade.Status getStatus()
Determine under what conditions we are remotely reachable.- Since:
- 0.9.20
-
getLocalizedStatusString
public String getLocalizedStatusString()
getStatus().toStatusString(), translated if available.- Since:
- 0.9.45
-
recheckReachability
@Deprecated public void recheckReachability()
Deprecated.unused
-
isBacklogged
public boolean isBacklogged(Hash peer)
-
wasUnreachable
public boolean wasUnreachable(Hash peer)
-
isEstablished
public abstract boolean isEstablished(Hash peer)
-
getIP
public byte[] getIP(Hash dest)
-
queueLookup
public void queueLookup(byte[] ip)
-
mayDisconnect
public void mayDisconnect(Hash peer)
Tell the comm system that we may disconnect from this peer. This is advisory only.- Since:
- 0.9.24
-
forceDisconnect
public void forceDisconnect(Hash peer)
Tell the comm system to disconnect from this peer.- Since:
- 0.9.38
-
getOurCountry
public String getOurCountry()
- Since:
- 0.8.11
-
isInStrictCountry
public boolean isInStrictCountry()
- Since:
- 0.8.13
-
isInStrictCountry
public boolean isInStrictCountry(Hash peer)
- Since:
- 0.9.16
-
isInStrictCountry
public boolean isInStrictCountry(RouterInfo ri)
- Since:
- 0.9.16
-
getTransports
public SortedMap<String,Transport> getTransports()
- Returns:
- SortedMap of style to Transport (a copy)
- Since:
- 0.9.31
-
getEstablished
public abstract Set<Hash> getEstablished()
Get all the peers we are connected to. This should be more efficient than repeated calls to isEstablished() if you have to check a lot.- Returns:
- the hashes of all the routers we are connected to, non-null
- Since:
- 0.9.34
-
isDummy
public boolean isDummy()
- Since:
- 0.8.13
-
notifyReplaceAddress
public void notifyReplaceAddress(RouterAddress address)
Tell other transports our address changed
-
notifyRemoveAddress
public void notifyRemoveAddress(RouterAddress address)
Tell other transports our address changed- Since:
- 0.9.20
-
notifyRemoveAddress
public void notifyRemoveAddress(boolean ipv6)
Tell other transports our address changed- Since:
- 0.9.20
-
registerTransport
public void registerTransport(Transport t)
Pluggable transport- Since:
- 0.9.16
-
unregisterTransport
public void unregisterTransport(Transport t)
Pluggable transport- Since:
- 0.9.16
-
getDHFactory
public DHSessionKeyBuilder.Factory getDHFactory()
Hook for pluggable transport creation.- Since:
- 0.9.16
-
getXDHFactory
public X25519KeyFactory getXDHFactory()
Factory for making X25519 key pairs.- Since:
- 0.9.46
-
initGeoIP
public void initGeoIP()
Router must call after netdb is initialized- Since:
- 0.9.41
-
-