Class OutboundEstablishState

java.lang.Object
net.i2p.router.transport.udp.OutboundEstablishState
Direct Known Subclasses:
OutboundEstablishState2

class OutboundEstablishState extends Object
Data for a new connection being established, where we initiated the connection with a remote peer. In other words, we are Alice and they are Bob.
  • Field Details

    • _context

      protected final RouterContext _context
    • _log

      protected final Log _log
    • _bobIP

      protected byte[] _bobIP
    • _bobPort

      protected int _bobPort
    • _aliceIP

      protected byte[] _aliceIP
    • _alicePort

      protected int _alicePort
    • _receivedRelayTag

      protected long _receivedRelayTag
    • _establishBegin

      protected final long _establishBegin
    • _lastSend

      protected long _lastSend
    • _nextSend

      protected long _nextSend
    • _remoteHostId

      protected RemoteHostId _remoteHostId
    • _remotePeer

      protected final RouterIdentity _remotePeer
    • _currentState

      protected OutboundEstablishState.OutboundState _currentState
    • _requestSentCount

      protected int _requestSentCount
    • _requestSentTime

      protected long _requestSentTime
    • _rtt

      protected int _rtt
    • RETRANSMIT_DELAY

      protected static final long RETRANSMIT_DELAY
      basic delay before backoff Transmissions at 0, 1.25, 3.75, 8.75 sec This should be a little longer than for inbound.
      See Also:
  • Constructor Details

  • Method Details

    • getVersion

      public int getVersion()
      Since:
      0.9.54
    • getState

    • complete

      public boolean complete()
      Returns:
      if previously complete
    • getRemoteAddress

      public UDPAddress getRemoteAddress()
      Returns:
      non-null
    • setIntroNonce

      public void setIntroNonce(long nonce)
    • getIntroNonce

      public long getIntroNonce()
      Returns:
      -1 if unset
    • isExtendedOptionsAllowed

      public boolean isExtendedOptionsAllowed()
      Are we allowed to send extended options to this peer?
      Since:
      0.9.24
    • needIntroduction

      public boolean needIntroduction()
      Should we ask this peer to be an introducer for us? Ignored unless allowExtendedOptions is true
      Since:
      0.9.24
    • getRTT

      int getRTT()
    • addMessage

      public void addMessage(OutNetMessage msg)
      Queue a message to be sent after the session is established.
    • isFirstMessageOurDSM

      public boolean isFirstMessageOurDSM()
      Is the first message queued our own DatabaseStoreMessage?
      Since:
      0.9.12
    • getNextQueuedMessage

      public OutNetMessage getNextQueuedMessage()
      Returns:
      null if none
    • getRemoteIdentity

      public RouterIdentity getRemoteIdentity()
    • getIntroKey

      public SessionKey getIntroKey()
      Bob's introduction key, as published in the netdb
    • getSentIP

      public byte[] getSentIP()
      The remote side (Bob) - note that in some places he's called Charlie. Warning - may change after introduction. May be null before introduction.
    • getSentPort

      public int getSentPort()
      The remote side (Bob) - note that in some places he's called Charlie. Warning - may change after introduction. May be -1 before introduction.
    • validateSessionCreated

      public boolean validateSessionCreated()
      Blocking call (run in the establisher thread) to determine if the session was created properly. If it wasn't, all the SessionCreated remnants are dropped (perhaps they were spoofed, etc) so that we can receive another one Generates session key and mac key.
      Returns:
      true if valid
    • fail

      public void fail()
      The SessionCreated validation failed
    • getReceivedRelayTag

      public long getReceivedRelayTag()
    • getSentSignedOnTime

      public long getSentSignedOnTime()
    • getReceivedSignedOnTime

      public long getReceivedSignedOnTime()
    • getReceivedIP

      public byte[] getReceivedIP()
    • getReceivedPort

      public int getReceivedPort()
    • confirmedPacketsSent

      public void confirmedPacketsSent()
      note that we just sent the SessionConfirmed packet
    • getConfirmedSentTime

      public long getConfirmedSentTime()
      Returns:
      when we sent the first SessionConfirmed packet, or 0
      Since:
      0.9.2
    • requestSent

      public void requestSent()
      note that we just sent the SessionRequest packet
    • getRequestSentTime

      public long getRequestSentTime()
      Returns:
      when we sent the first SessionRequest packet, or 0
      Since:
      0.9.2
    • introSent

      public void introSent()
      note that we just sent the RelayRequest packet
    • getIntroSentTime

      public long getIntroSentTime()
      Returns:
      when we sent the first RelayRequest packet, or 0
      Since:
      0.9.2
    • introductionFailed

      public void introductionFailed()
    • introduced

      public void introduced(byte[] bobIP, int bobPort)
      This changes the remoteHostId from a hash-based one or possibly incorrect IP/port to what the introducer told us. All params are for the remote end (NOT the introducer) and must have been validated already.
    • receiveHolePunch

      boolean receiveHolePunch()
      Accelerate response to RelayResponse if we haven't sent it yet.
      Returns:
      true if we should send the SessionRequest now
      Since:
      0.9.15
    • getLifetime

      public long getLifetime()
      how long have we been trying to establish this session?
    • getLifetime

      public long getLifetime(long now)
      how long have we been trying to establish this session?
      Since:
      0.9.57
    • getEstablishBeginTime

      public long getEstablishBeginTime()
    • getNextSendTime

      public long getNextSendTime()
      Returns:
      0 at initialization (to force sending session request), rcv time after receiving a packet, send time + delay after sending a packet (including session request)
    • getRemoteHostId

      RemoteHostId getRemoteHostId()
      This should be what the state is currently indexed by in the _outboundStates table. Beware - During introduction, this is a router hash. After introduced() is called, this is set to the IP/port the introducer told us.
      Returns:
      non-null
    • getClaimedAddress

      RemoteHostId getClaimedAddress()
      This will never be a hash-based address. This is the 'claimed' (unverified) address from the netdb, or null. It is not changed after introduction. Use getRemoteHostId() for the verified address.
      Returns:
      may be null
    • dataReceived

      public void dataReceived()
      we have received a real data packet, so we're done establishing
    • packetReceived

      protected void packetReceived()
      Call from synchronized method only
    • toString

      public String toString()
      Overrides:
      toString in class Object
      Since:
      0.8.9