forked from I2P_Developers/i2p.i2p
SSU2: Post-termination handler part 2 WIP
PeerState2 implements SSU2Sender
This commit is contained in:
@@ -1410,8 +1410,11 @@ public class PeerState {
|
||||
- 16); // padding safety
|
||||
}
|
||||
|
||||
/** @return non-null */
|
||||
RemoteHostId getRemoteHostId() { return _remoteHostId; }
|
||||
/**
|
||||
* @return non-null
|
||||
* @since public since 0.9.57 for SSU2Sender interface only
|
||||
*/
|
||||
public RemoteHostId getRemoteHostId() { return _remoteHostId; }
|
||||
|
||||
/**
|
||||
* TODO should this use a queue, separate from the list of msgs pending an ack?
|
||||
|
||||
@@ -28,7 +28,6 @@ import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade;
|
||||
import net.i2p.router.transport.TransportUtil;
|
||||
import net.i2p.router.transport.udp.InboundMessageFragments.ModifiableLong;
|
||||
import net.i2p.router.transport.udp.PacketBuilder.Fragment;
|
||||
|
||||
import static net.i2p.router.transport.udp.SSU2Util.*;
|
||||
import net.i2p.util.HexDump;
|
||||
import net.i2p.util.Log;
|
||||
@@ -44,7 +43,7 @@ import net.i2p.util.SimpleTimer2;
|
||||
*
|
||||
* @since 0.9.54
|
||||
*/
|
||||
public class PeerState2 extends PeerState implements SSU2Payload.PayloadCallback, SSU2Bitfield.Callback {
|
||||
public class PeerState2 extends PeerState implements SSU2Payload.PayloadCallback, SSU2Bitfield.Callback, SSU2Sender {
|
||||
private final long _sendConnID;
|
||||
private final long _rcvConnID;
|
||||
private final AtomicInteger _packetNumber = new AtomicInteger();
|
||||
@@ -301,18 +300,40 @@ public class PeerState2 extends PeerState implements SSU2Payload.PayloadCallback
|
||||
|
||||
// SSU 2 things
|
||||
|
||||
/// begin SSU2Sender interface ///
|
||||
|
||||
/**
|
||||
* Next outbound packet number,
|
||||
* starts at 1 for Alice (0 is Session Confirmed) and 0 for Bob
|
||||
* @since public since 0.9.57 for SSU2Sender interface only
|
||||
*/
|
||||
long getNextPacketNumber() { return _packetNumber.getAndIncrement(); }
|
||||
long getSendConnID() { return _sendConnID; }
|
||||
public long getNextPacketNumber() { return _packetNumber.getAndIncrement(); }
|
||||
/**
|
||||
* @since public since 0.9.57 for SSU2Sender interface only
|
||||
*/
|
||||
public long getSendConnID() { return _sendConnID; }
|
||||
/**
|
||||
* Caller must sync on returned object when encrypting
|
||||
* @since public since 0.9.57 for SSU2Sender interface only
|
||||
*/
|
||||
public CipherState getSendCipher() { return _sendCha; }
|
||||
/**
|
||||
* @since public since 0.9.57 for SSU2Sender interface only
|
||||
*/
|
||||
public byte[] getSendHeaderEncryptKey1() { return _sendHeaderEncryptKey1; }
|
||||
/**
|
||||
* @since public since 0.9.57 for SSU2Sender interface only
|
||||
*/
|
||||
public byte[] getSendHeaderEncryptKey2() { return _sendHeaderEncryptKey2; }
|
||||
/**
|
||||
* @since 0.9.57
|
||||
*/
|
||||
public void setDestroyReason(int reason) { /* todo */ }
|
||||
|
||||
/// end SSU2Sender interface ///
|
||||
|
||||
long getRcvConnID() { return _rcvConnID; }
|
||||
/** caller must sync on returned object when encrypting */
|
||||
CipherState getSendCipher() { return _sendCha; }
|
||||
byte[] getSendHeaderEncryptKey1() { return _sendHeaderEncryptKey1; }
|
||||
byte[] getRcvHeaderEncryptKey1() { return _rcvHeaderEncryptKey1; }
|
||||
byte[] getSendHeaderEncryptKey2() { return _sendHeaderEncryptKey2; }
|
||||
byte[] getRcvHeaderEncryptKey2() { return _rcvHeaderEncryptKey2; }
|
||||
|
||||
void setOurAddress(byte[] ip, int port) {
|
||||
@@ -321,7 +342,10 @@ public class PeerState2 extends PeerState implements SSU2Payload.PayloadCallback
|
||||
byte[] getOurIP() { return _ourIP; }
|
||||
int getOurPort() { return _ourPort; }
|
||||
|
||||
SSU2Bitfield getReceivedMessages() {
|
||||
/**
|
||||
* @since public since 0.9.57 for SSU2Sender interface only
|
||||
*/
|
||||
public SSU2Bitfield getReceivedMessages() {
|
||||
// logged in PacketBuilder2
|
||||
//if (_log.shouldDebug())
|
||||
// _log.debug("Sending acks " + _receivedMessages + " on " + this);
|
||||
@@ -333,7 +357,10 @@ public class PeerState2 extends PeerState implements SSU2Payload.PayloadCallback
|
||||
return _receivedMessages;
|
||||
}
|
||||
|
||||
SSU2Bitfield getAckedMessages() { return _ackedMessages; }
|
||||
/**
|
||||
* @since public since 0.9.57 for SSU2Sender interface only
|
||||
*/
|
||||
public SSU2Bitfield getAckedMessages() { return _ackedMessages; }
|
||||
|
||||
/**
|
||||
* @param packet fully encrypted, header and body decryption will be done here
|
||||
@@ -877,9 +904,10 @@ public class PeerState2 extends PeerState implements SSU2Payload.PayloadCallback
|
||||
* so we can process acks.
|
||||
*
|
||||
* @param length including ip/udp header, for logging only
|
||||
* @since public since 0.9.57 for SSU2Sender interface only
|
||||
*
|
||||
*/
|
||||
void fragmentsSent(long pktNum, int length, List<PacketBuilder.Fragment> fragments) {
|
||||
public void fragmentsSent(long pktNum, int length, List<PacketBuilder.Fragment> fragments) {
|
||||
List<PacketBuilder.Fragment> old = _sentMessages.putIfAbsent(Long.valueOf(pktNum), fragments);
|
||||
if (old != null) {
|
||||
// shouldn't happen
|
||||
@@ -973,9 +1001,9 @@ public class PeerState2 extends PeerState implements SSU2Payload.PayloadCallback
|
||||
/**
|
||||
* Flag byte to be sent in header
|
||||
*
|
||||
* @since 0.9.56
|
||||
* @since 0.9.56, public since 0.9.57 for SSU2Sender interface
|
||||
*/
|
||||
byte getFlags() {
|
||||
public byte getFlags() {
|
||||
return shouldRequestImmediateAck() ? (byte) 0x01 : 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user