diff --git a/quic/api/QuicTransportFunctions.cpp b/quic/api/QuicTransportFunctions.cpp index a78cf2a70..4b5884af5 100644 --- a/quic/api/QuicTransportFunctions.cpp +++ b/quic/api/QuicTransportFunctions.cpp @@ -25,6 +25,21 @@ namespace { +/* + * Check whether crypto has pending data. + */ +bool cryptoHasWritableData(const quic::QuicConnectionStateBase& conn) { + return (conn.initialWriteCipher && + (!conn.cryptoState->initialStream.writeBuffer.empty() || + !conn.cryptoState->initialStream.lossBuffer.empty())) || + (conn.handshakeWriteCipher && + (!conn.cryptoState->handshakeStream.writeBuffer.empty() || + !conn.cryptoState->handshakeStream.lossBuffer.empty())) || + (conn.oneRttWriteCipher && + (!conn.cryptoState->oneRttStream.writeBuffer.empty() || + !conn.cryptoState->oneRttStream.lossBuffer.empty())); +} + std::string optionalToString( const folly::Optional& packetNum) { if (!packetNum) { diff --git a/quic/api/test/QuicTransportFunctionsTest.cpp b/quic/api/test/QuicTransportFunctionsTest.cpp index 429ec38a3..1db346c0f 100644 --- a/quic/api/test/QuicTransportFunctionsTest.cpp +++ b/quic/api/test/QuicTransportFunctionsTest.cpp @@ -1856,6 +1856,8 @@ TEST_F(QuicTransportFunctionsTest, HasCryptoDataToWrite) { conn->cryptoState->initialStream.lossBuffer.emplace_back( folly::IOBuf::copyBuffer("Grab your coat and get your hat"), 0, false); EXPECT_EQ(WriteDataReason::CRYPTO_STREAM, hasNonAckDataToWrite(*conn)); + conn->initialWriteCipher.reset(); + EXPECT_EQ(WriteDataReason::NO_WRITE, hasNonAckDataToWrite(*conn)); } TEST_F(QuicTransportFunctionsTest, HasControlFramesToWrite) { diff --git a/quic/flowcontrol/QuicFlowController.cpp b/quic/flowcontrol/QuicFlowController.cpp index 4152c71c4..01e9608b9 100644 --- a/quic/flowcontrol/QuicFlowController.cpp +++ b/quic/flowcontrol/QuicFlowController.cpp @@ -295,15 +295,6 @@ void handleStreamBlocked(QuicStreamState& stream) { VLOG(4) << "Blocked triggered stream window update stream=" << stream.id; } -bool cryptoHasWritableData(const QuicConnectionStateBase& conn) { - return !conn.cryptoState->initialStream.writeBuffer.empty() || - !conn.cryptoState->initialStream.lossBuffer.empty() || - !conn.cryptoState->handshakeStream.writeBuffer.empty() || - !conn.cryptoState->handshakeStream.lossBuffer.empty() || - !conn.cryptoState->oneRttStream.writeBuffer.empty() || - !conn.cryptoState->oneRttStream.lossBuffer.empty(); -} - uint64_t getSendStreamFlowControlBytesWire(const QuicStreamState& stream) { DCHECK_GE( stream.flowControlState.peerAdvertisedMaxOffset, diff --git a/quic/flowcontrol/QuicFlowController.h b/quic/flowcontrol/QuicFlowController.h index a813f7c97..742fab99a 100644 --- a/quic/flowcontrol/QuicFlowController.h +++ b/quic/flowcontrol/QuicFlowController.h @@ -74,11 +74,6 @@ void onConnWindowUpdateLost(QuicConnectionStateBase& conn); void onBlockedLost(QuicStreamState& stream); -/* - * Check whether crypto has pending data. - */ -bool cryptoHasWritableData(const QuicConnectionStateBase& conn); - /** * Returns the number of bytes that the peer is willing to receive from * us at this point on the stream.