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.
  • Field Details

    • ROUTER_BUNDLE_NAME

      protected static final String ROUTER_BUNDLE_NAME
      Since:
      0.9.45
      See Also:
    • 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:
    • 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:
    • 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:
    • 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:
    • 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:
    • 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:
    • 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:
    • 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:
    • 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:
    • 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:
    • 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:
    • 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:
    • 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:
    • 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:
    • STATUS_DISCONNECTED

      public static final short STATUS_DISCONNECTED
      We have no network interface at all enabled transports
      Since:
      0.9.4
      See Also:
    • STATUS_HOSED

      public static final short STATUS_HOSED
      Our detection system is broken (SSU bind port failed)
      See Also:
    • STATUS_UNKNOWN

      public static final short STATUS_UNKNOWN
      Our reachability is unknown on all
      See Also:
  • Constructor Details

    • CommSystemFacade

      public CommSystemFacade()
  • Method Details

    • 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 interface Service
      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()
    • getMostRecentErrorMessages

      public List<String> getMostRecentErrorMessages()
    • 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
    • getCountry

      public String getCountry(Hash peer)
    • getCountryName

      public String getCountryName(String code)
    • getCountries

      public Map<String,String> getCountries()
      Get the country code map
      Returns:
      Map of two-letter lower case code to untranslated country name, unmodifiable
      Since:
      0.9.53
    • renderPeerHTML

      public String renderPeerHTML(Hash peer)
    • 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
    • isRunning

      public boolean isRunning()
      Since:
      0.9.53
    • 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