Class EstablishBase

    • Field Detail

      • VERIFIED

        public static final net.i2p.router.transport.ntcp.EstablishBase.VerifiedEstablishState VERIFIED
      • FAILED

        public static final net.i2p.router.transport.ntcp.EstablishBase.FailedEstablishState FAILED
      • _log

        protected final Log _log
      • _X

        protected final byte[] _X
      • _hX_xor_bobIdentHash

        protected final byte[] _hX_xor_bobIdentHash
      • _Y

        protected final byte[] _Y
      • _e_hXY_tsB

        protected final byte[] _e_hXY_tsB
      • _tsB

        protected transient long _tsB
        Bob's timestamp in seconds, this is in message #2, *before* _tsA
      • _tsA

        protected transient long _tsA
        Alice's timestamp in seconds, this is in message #3, *after* _tsB Only saved for outbound. For inbound, see verifyInbound().
      • _peerSkew

        protected transient long _peerSkew
        OUR clock minus HIS clock, in seconds Inbound: tsB - tsA - rtt/2 Outbound: tsA - tsB - rtt/2
      • _e_bobSig

        protected transient byte[] _e_bobSig
      • _prevEncrypted

        protected byte[] _prevEncrypted
        previously received encrypted block (or the IV)
      • _curDecrypted

        protected final byte[] _curDecrypted
        decryption buffer
      • _received

        protected int _received
        bytes received so far
      • _stateLock

        protected final Object _stateLock
    • Method Detail

      • receive

        public void receive​(ByteBuffer src)
        Parse the contents of the buffer as part of the handshake. All data must be copied out of the buffer as Reader.processRead() will return it to the pool. If there are additional data in the buffer after the handshake is complete, the EstablishState is responsible for passing it to NTCPConnection.
        Specified by:
        receive in interface EstablishState
      • prepareOutbound

        public void prepareOutbound()
        Does nothing. Outbound (Alice) must override. We are establishing an outbound connection, so prepare ourselves by queueing up the write of the first part of the handshake
        Specified by:
        prepareOutbound in interface EstablishState
      • isCorrupt

        public boolean isCorrupt()
        did the handshake fail for some reason?
        Specified by:
        isCorrupt in interface EstablishState
      • isComplete

        public boolean isComplete()
        If synchronized on this, fails with deadlocks from all over via CSFI.isEstablished(). Also CSFI.getFramedAveragePeerClockSkew().
        Specified by:
        isComplete in interface EstablishState
        is the handshake complete and valid?
      • getVersion

        public abstract int getVersion()
        Get the NTCP version
        Specified by:
        getVersion in interface EstablishState
        1, 2, or 0 if unknown
      • close

        public void close​(String reason,
                          Exception e)
        Release resources on timeout.
        Specified by:
        close in interface EstablishState
        e - may be null
      • fail

        protected void fail​(String reason)
        Caller must synch.
      • fail

        protected void fail​(String reason,
                            Exception e)
        Caller must synch.
      • fail

        protected void fail​(String reason,
                            Exception e,
                            boolean bySkew)
        Caller must synch.
      • releaseBufs

        protected void releaseBufs​(boolean isVerified)
        Only call once. Caller must synch.
      • xor32

        protected static void xor32​(byte[] a,
                                    byte[] b)
        XOR a into b. Modifies b. a is unmodified.
        a - 32 bytes
        b - 32 bytes
      • prefix

        protected String prefix()
      • _x

        protected static final String _x​(String s)
        Mark a string for extraction by xgettext and translation. Use this only in static initializers. It does not translate!