Class 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 Detail

      • 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
    • Constructor Detail

      • CommSystemFacade

        public CommSystemFacade()
    • Method Detail

      • processMessage

        public abstract void processMessage​(OutNetMessage msg)
      • 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)
      • 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
      • 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
      • 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