Source:
<code>protected Handshaker(boolean isClient, int initialMessageSeq, DTLSSession session, RecordLayer recordLayer, Connection connection, DtlsConnectorConfig config, int maxTransmissionUnit) { if (session == null) { throw new NullPointerException("DTLS Session must not be null"); } else if (recordLayer == null) { throw new NullPointerException("Record layer must not be null"); } else if (connection == null) { throw new NullPointerException("Connection must not be null"); } else if (config == null) { throw new NullPointerException("Dtls Connector Config must not be null"); } else if (initialMessageSeq < 0) { throw new IllegalArgumentException("Initial message sequence number must not be negative"); } this.isClient = isClient; this.sendMessageSequence = initialMessageSeq; this.nextReceiveMessageSequence = initialMessageSeq; this.session = session; this.recordLayer = recordLayer; this.connection = connection; this.connectionIdGenerator = config.getConnectionIdGenerator(); this.maxFragmentedHandshakeMessageLength = config.getMaxFragmentedHandshakeMessageLength(); this.maxDeferredProcessedOutgoingApplicationDataMessages = config.getMaxDeferredProcessedOutgoingApplicationDataMessages(); this.maxDeferredProcessedIncomingRecordsSize = config.getMaxDeferredProcessedIncomingRecordsSize(); this.sniEnabled = config.isSniEnabled(); this.useStateValidation = config.useHandshakeStateValidation(); this.privateKey = config.getPrivateKey(); this.publicKey = config.getPublicKey(); this.certificateChain = config.getCertificateChain(); this.certificateVerifier = config.getCertificateVerifier(); this.rpkStore = config.getRpkTrustStore(); this.pskStore = config.getPskStore(); this.session.setMaxTransmissionUnit(maxTransmissionUnit); this.applicationLevelInfoSupplier = config.getApplicationLevelInfoSupplier(); this.inboundMessageBuffer = new InboundMessageBuffer(); long timeout = config.getRetransmissionTimeout(); <START> this.expiresNanosTimeout = TimeUnit.MILLISECONDS.toNanos(timeout << (config.getMaxRetransmissions() + 1)); <END> addSessionListener(connection.getSessionListener()); }</code><technical_language>chance write this <<</technical_language>

Target:
protected Handshaker(boolean isClient, int initialMessageSeq, DTLSSession session, RecordLayer recordLayer, Connection connection, DtlsConnectorConfig config, int maxTransmissionUnit) { if (session == null) { throw new NullPointerException("DTLS Session must not be null"); } else if (recordLayer == null) { throw new NullPointerException("Record layer must not be null"); } else if (connection == null) { throw new NullPointerException("Connection must not be null"); } else if (config == null) { throw new NullPointerException("Dtls Connector Config must not be null"); } else if (initialMessageSeq < 0) { throw new IllegalArgumentException("Initial message sequence number must not be negative"); } this.isClient = isClient; this.sendMessageSequence = initialMessageSeq; this.nextReceiveMessageSequence = initialMessageSeq; this.session = session; this.recordLayer = recordLayer; this.connection = connection; this.connectionIdGenerator = config.getConnectionIdGenerator(); this.maxFragmentedHandshakeMessageLength = config.getMaxFragmentedHandshakeMessageLength(); this.maxDeferredProcessedOutgoingApplicationDataMessages = config.getMaxDeferredProcessedOutgoingApplicationDataMessages(); this.maxDeferredProcessedIncomingRecordsSize = config.getMaxDeferredProcessedIncomingRecordsSize(); this.sniEnabled = config.isSniEnabled(); this.useStateValidation = config.useHandshakeStateValidation(); this.useKeyUsageVerification = config.useKeyUsageVerification(); this.useTruncatedCertificatePathForVerification = config.useTruncatedCertificatePathForValidation(); this.privateKey = config.getPrivateKey(); this.publicKey = config.getPublicKey(); this.certificateChain = config.getCertificateChain(); this.certificateVerifier = config.getCertificateVerifier(); this.rpkStore = config.getRpkTrustStore(); this.pskStore = config.getPskStore(); this.session.setMaxTransmissionUnit(maxTransmissionUnit); this.applicationLevelInfoSupplier = config.getApplicationLevelInfoSupplier(); this.inboundMessageBuffer = new InboundMessageBuffer(); int max = config.getMaxRetransmissions(); int timeoutMillis = config.getRetransmissionTimeout(); int expireTimeoutMillis = timeoutMillis * 2; for (int retry = 0; retry < max; ++retry) { timeoutMillis = DTLSFlight.incrementTimeout(timeoutMillis); expireTimeoutMillis += timeoutMillis; } this.nanosExpireTimeout = TimeUnit.MILLISECONDS.toNanos(expireTimeoutMillis); addSessionListener(connection.getSessionListener()); }