diff --git a/quic/QuicConstants.h b/quic/QuicConstants.h index 254db008b..ed6434804 100644 --- a/quic/QuicConstants.h +++ b/quic/QuicConstants.h @@ -36,9 +36,9 @@ using SystemClock = folly::chrono::SystemClock; namespace quic { using BufHelpers = folly::IOBuf; // For stuff like BufHelpers::create, etc. -using RawBuf = folly::IOBuf; // Used when we're not wrapping the buffer in an - // std::unique_ptr -using Buf = std::unique_ptr; +using Buf = folly::IOBuf; // Used when we're not wrapping the buffer in an + // std::unique_ptr +using BufPtr = std::unique_ptr; using Clock = std::chrono::steady_clock; using TimePoint = std::chrono::time_point; using DurationRep = std::chrono::microseconds::rep; diff --git a/quic/api/IoBufQuicBatch.cpp b/quic/api/IoBufQuicBatch.cpp index 800964e9f..9b3c2892f 100644 --- a/quic/api/IoBufQuicBatch.cpp +++ b/quic/api/IoBufQuicBatch.cpp @@ -25,7 +25,7 @@ IOBufQuicBatch::IOBufQuicBatch( happyEyeballsState_(happyEyeballsState) {} folly::Expected IOBufQuicBatch::write( - Buf&& buf, + BufPtr&& buf, size_t encodedSize) { result_.packetsSent++; result_.bytesSent += encodedSize; diff --git a/quic/api/IoBufQuicBatch.h b/quic/api/IoBufQuicBatch.h index a9d7c9aa5..cf0dccb09 100644 --- a/quic/api/IoBufQuicBatch.h +++ b/quic/api/IoBufQuicBatch.h @@ -31,7 +31,7 @@ class IOBufQuicBatch { // returns true if it succeeds and false if the loop should end [[nodiscard]] folly::Expected write( - Buf&& buf, + BufPtr&& buf, size_t encodedSize); [[nodiscard]] folly::Expected flush(); diff --git a/quic/api/QuicBatchWriter.cpp b/quic/api/QuicBatchWriter.cpp index 511ca22f7..8cc46b9e4 100644 --- a/quic/api/QuicBatchWriter.cpp +++ b/quic/api/QuicBatchWriter.cpp @@ -19,7 +19,7 @@ void SinglePacketBatchWriter::reset() { } bool SinglePacketBatchWriter::append( - Buf&& buf, + BufPtr&& buf, size_t /*unused*/, const folly::SocketAddress& /*unused*/, QuicAsyncUDPSocket* /*unused*/) { @@ -43,7 +43,7 @@ void SinglePacketInplaceBatchWriter::reset() { } bool SinglePacketInplaceBatchWriter::append( - Buf&& /* buf */, + BufPtr&& /* buf */, size_t /*unused*/, const folly::SocketAddress& /*unused*/, QuicAsyncUDPSocket* /*unused*/) { @@ -94,7 +94,7 @@ void SinglePacketBackpressureBatchWriter::reset() { } bool SinglePacketBackpressureBatchWriter::append( - Buf&& buf, + BufPtr&& buf, size_t /* unused */, const folly::SocketAddress& /*unused*/, QuicAsyncUDPSocket* /*unused*/) { @@ -134,7 +134,7 @@ void SendmmsgPacketBatchWriter::reset() { } bool SendmmsgPacketBatchWriter::append( - Buf&& buf, + BufPtr&& buf, size_t size, const folly::SocketAddress& /*unused*/, QuicAsyncUDPSocket* /*unused*/) { @@ -243,7 +243,7 @@ void SendmmsgInplacePacketBatchWriter::reset() { } bool SendmmsgInplacePacketBatchWriter::append( - Buf&& /* buf */, + BufPtr&& /* buf */, size_t size, const folly::SocketAddress& /*unused*/, QuicAsyncUDPSocket* /*unused*/) { diff --git a/quic/api/QuicBatchWriter.h b/quic/api/QuicBatchWriter.h index 75c15e0bc..ab012364d 100644 --- a/quic/api/QuicBatchWriter.h +++ b/quic/api/QuicBatchWriter.h @@ -42,7 +42,7 @@ class BatchWriter { * writer needs to be flushed */ virtual bool append( - Buf&& buf, + BufPtr&& buf, size_t bufSize, const folly::SocketAddress& addr, QuicAsyncUDPSocket* sock) = 0; @@ -65,7 +65,7 @@ class IOBufBatchWriter : public BatchWriter { } protected: - Buf buf_; + BufPtr buf_; }; class SinglePacketBatchWriter : public IOBufBatchWriter { @@ -75,7 +75,7 @@ class SinglePacketBatchWriter : public IOBufBatchWriter { void reset() override; bool append( - Buf&& buf, + BufPtr&& buf, size_t /*unused*/, const folly::SocketAddress& /*unused*/, QuicAsyncUDPSocket* /*unused*/) override; @@ -97,7 +97,7 @@ class SinglePacketInplaceBatchWriter : public IOBufBatchWriter { void reset() override; bool append( - Buf&& /* buf */, + BufPtr&& /* buf */, size_t /*unused*/, const folly::SocketAddress& /*unused*/, QuicAsyncUDPSocket* /*unused*/) override; @@ -116,7 +116,7 @@ class SinglePacketBackpressureBatchWriter : public IOBufBatchWriter { void reset() override; bool append( - Buf&& buf, + BufPtr&& buf, size_t size, const folly::SocketAddress& /*unused*/, QuicAsyncUDPSocket* /*unused*/) override; @@ -140,7 +140,7 @@ class SendmmsgPacketBatchWriter : public BatchWriter { void reset() override; bool append( - Buf&& buf, + BufPtr&& buf, size_t size, const folly::SocketAddress& /*unused*/, QuicAsyncUDPSocket* /*unused*/) override; @@ -156,7 +156,7 @@ class SendmmsgPacketBatchWriter : public BatchWriter { // size of data in all the buffers size_t currSize_{0}; // array of IOBufs - std::vector bufs_; + std::vector bufs_; }; class SendmmsgInplacePacketBatchWriter : public BatchWriter { @@ -172,7 +172,7 @@ class SendmmsgInplacePacketBatchWriter : public BatchWriter { void reset() override; bool append( - Buf&& /* buf */, + BufPtr&& /* buf */, size_t size, const folly::SocketAddress& /*unused*/, QuicAsyncUDPSocket* /*unused*/) override; diff --git a/quic/api/QuicGsoBatchWriters.cpp b/quic/api/QuicGsoBatchWriters.cpp index ad3ff30bd..910f9c439 100644 --- a/quic/api/QuicGsoBatchWriters.cpp +++ b/quic/api/QuicGsoBatchWriters.cpp @@ -35,7 +35,7 @@ bool GSOPacketBatchWriter::needsFlush(size_t size) { } bool GSOPacketBatchWriter::append( - Buf&& buf, + BufPtr&& buf, size_t size, const folly::SocketAddress& /*unused*/, QuicAsyncUDPSocket* /*unused*/) { @@ -104,7 +104,7 @@ bool GSOInplacePacketBatchWriter::needsFlush(size_t size) { } bool GSOInplacePacketBatchWriter::append( - Buf&& /*buf*/, + BufPtr&& /*buf*/, size_t size, const folly::SocketAddress& /* addr */, QuicAsyncUDPSocket* /* sock */) { @@ -235,7 +235,7 @@ void SendmmsgGSOPacketBatchWriter::reset() { } bool SendmmsgGSOPacketBatchWriter::append( - Buf&& buf, + BufPtr&& buf, size_t size, const folly::SocketAddress& addr, QuicAsyncUDPSocket* /*unused*/) { @@ -337,7 +337,7 @@ void SendmmsgGSOInplacePacketBatchWriter::reset() { } bool SendmmsgGSOInplacePacketBatchWriter::append( - Buf&& /* buf */, + BufPtr&& /* buf */, size_t size, const folly::SocketAddress& addr, QuicAsyncUDPSocket* /*unused*/) { diff --git a/quic/api/QuicGsoBatchWriters.h b/quic/api/QuicGsoBatchWriters.h index 6f6d92b0c..855b0ee2f 100644 --- a/quic/api/QuicGsoBatchWriters.h +++ b/quic/api/QuicGsoBatchWriters.h @@ -20,7 +20,7 @@ class GSOPacketBatchWriter : public IOBufBatchWriter { void reset() override; bool needsFlush(size_t size) override; bool append( - Buf&& buf, + BufPtr&& buf, size_t size, const folly::SocketAddress& /*unused*/, QuicAsyncUDPSocket* /*unused*/) override; @@ -52,7 +52,7 @@ class GSOInplacePacketBatchWriter : public BatchWriter { void reset() override; bool needsFlush(size_t size) override; bool append( - Buf&& buf, + BufPtr&& buf, size_t size, const folly::SocketAddress& addr, QuicAsyncUDPSocket* sock) override; @@ -94,7 +94,7 @@ class SendmmsgGSOPacketBatchWriter : public BatchWriter { void reset() override; bool append( - Buf&& buf, + BufPtr&& buf, size_t size, const folly::SocketAddress& address, QuicAsyncUDPSocket* sock) override; @@ -109,7 +109,7 @@ class SendmmsgGSOPacketBatchWriter : public BatchWriter { // size of data in all the buffers size_t currSize_{0}; // array of IOBufs - std::vector bufs_; + std::vector bufs_; std::vector options_; std::vector prevSize_; std::vector addrs_; @@ -147,7 +147,7 @@ class SendmmsgGSOInplacePacketBatchWriter : public BatchWriter { void reset() override; bool append( - Buf&& buf, + BufPtr&& buf, size_t size, const folly::SocketAddress& address, QuicAsyncUDPSocket* sock) override; diff --git a/quic/api/QuicSocket.h b/quic/api/QuicSocket.h index 84911d77c..39b3dc49b 100644 --- a/quic/api/QuicSocket.h +++ b/quic/api/QuicSocket.h @@ -78,9 +78,9 @@ class QuicSocket : virtual public QuicSocketLite { */ virtual void setEarlyDataAppParamsFunctions( folly::Function< - bool(const Optional& alpn, const Buf& appParams) const> - validator, - folly::Function getter) = 0; + bool(const Optional& alpn, const BufPtr& appParams) + const> validator, + folly::Function getter) = 0; virtual ~QuicSocket() override = default; @@ -402,7 +402,7 @@ class QuicSocket : virtual public QuicSocketLite { * getDatagramSizeLimit(), or if the write buffer is full, buf will simply be * dropped, and a LocalErrorCode will be returned to caller. */ - virtual WriteResult writeDatagram(Buf buf) = 0; + virtual WriteResult writeDatagram(BufPtr buf) = 0; /** * Returns the currently available received Datagrams. @@ -415,7 +415,7 @@ class QuicSocket : virtual public QuicSocketLite { * Returns the currently available received Datagram IOBufs. * Returns all datagrams if atMost is 0. */ - virtual folly::Expected, LocalErrorCode> readDatagramBufs( + virtual folly::Expected, LocalErrorCode> readDatagramBufs( size_t atMost = 0) = 0; /** diff --git a/quic/api/QuicSocketLite.h b/quic/api/QuicSocketLite.h index 328afe5a9..a8c26567a 100644 --- a/quic/api/QuicSocketLite.h +++ b/quic/api/QuicSocketLite.h @@ -225,7 +225,7 @@ class QuicSocketLite { * Invoked when we receive a KnobFrame from the peer */ virtual void - onKnob(uint64_t /*knobSpace*/, uint64_t /*knobId*/, Buf /*knobBlob*/) {} + onKnob(uint64_t /*knobSpace*/, uint64_t /*knobId*/, BufPtr /*knobBlob*/) {} }; /** @@ -348,7 +348,7 @@ class QuicSocketLite { * Calling read() when there is no data/eof to deliver will return an * EAGAIN-like error code. */ - virtual folly::Expected, LocalErrorCode> read( + virtual folly::Expected, LocalErrorCode> read( StreamId id, size_t maxLen) = 0; @@ -556,7 +556,7 @@ class QuicSocketLite { using WriteResult = folly::Expected; virtual WriteResult writeChain( StreamId id, - Buf data, + BufPtr data, bool eof, ByteEventCallback* cb = nullptr) = 0; @@ -776,7 +776,7 @@ class QuicSocketLite { * connection. */ virtual folly::Expected - setKnob(uint64_t knobSpace, uint64_t knobId, Buf knobBlob) = 0; + setKnob(uint64_t knobSpace, uint64_t knobId, BufPtr knobBlob) = 0; /** * Can Knob Frames be exchanged with the peer on this connection? diff --git a/quic/api/QuicTransportBase.cpp b/quic/api/QuicTransportBase.cpp index 29dc415cf..2b2fa81a8 100644 --- a/quic/api/QuicTransportBase.cpp +++ b/quic/api/QuicTransportBase.cpp @@ -546,9 +546,9 @@ void QuicTransportBase::setAckRxTimestampsEnabled(bool enableAckRxTimestamps) { } void QuicTransportBase::setEarlyDataAppParamsFunctions( - folly::Function&, const Buf&) const> + folly::Function&, const BufPtr&) const> validator, - folly::Function getter) { + folly::Function getter) { conn_->earlyDataAppParamsValidator = std::move(validator); conn_->earlyDataAppParamsGetter = std::move(getter); } @@ -614,7 +614,7 @@ uint16_t QuicTransportBase::getDatagramSizeLimit() const { } folly::Expected QuicTransportBase::writeDatagram( - Buf buf) { + BufPtr buf) { // TODO(lniccolini) update max datagram frame size // https://github.com/quicwg/datagram/issues/3 // For now, max_datagram_size > 0 means the peer supports datagram frames @@ -661,7 +661,7 @@ QuicTransportBase::readDatagrams(size_t atMost) { return retDatagrams; } -folly::Expected, LocalErrorCode> +folly::Expected, LocalErrorCode> QuicTransportBase::readDatagramBufs(size_t atMost) { CHECK(conn_); auto datagrams = &conn_->datagramState.readBuffer; @@ -673,7 +673,7 @@ QuicTransportBase::readDatagramBufs(size_t atMost) { } else { atMost = std::min(atMost, datagrams->size()); } - std::vector retDatagrams; + std::vector retDatagrams; retDatagrams.reserve(atMost); std::transform( datagrams->begin(), diff --git a/quic/api/QuicTransportBase.h b/quic/api/QuicTransportBase.h index ba4df03d7..32e98022f 100644 --- a/quic/api/QuicTransportBase.h +++ b/quic/api/QuicTransportBase.h @@ -130,9 +130,9 @@ class QuicTransportBase : public QuicSocket, virtual void setAckRxTimestampsEnabled(bool enableAckRxTimestamps); void setEarlyDataAppParamsFunctions( - folly::Function&, const Buf&) const> + folly::Function&, const BufPtr&) const> validator, - folly::Function getter) final; + folly::Function getter) final; bool isDetachable() override; @@ -188,7 +188,8 @@ class QuicTransportBase : public QuicSocket, * getDatagramSizeLimit(), or if the write buffer is full, buf will simply be * dropped, and a LocalErrorCode will be returned to caller. */ - folly::Expected writeDatagram(Buf buf) override; + folly::Expected writeDatagram( + BufPtr buf) override; /** * Returns the currently available received Datagrams. @@ -201,7 +202,7 @@ class QuicTransportBase : public QuicSocket, * Returns the currently available received Datagram IOBufs. * Returns all datagrams if atMost is 0. */ - folly::Expected, LocalErrorCode> readDatagramBufs( + folly::Expected, LocalErrorCode> readDatagramBufs( size_t atMost = 0) override; /** diff --git a/quic/api/QuicTransportBaseLite.cpp b/quic/api/QuicTransportBaseLite.cpp index 0e744b5f2..2e7f12506 100644 --- a/quic/api/QuicTransportBaseLite.cpp +++ b/quic/api/QuicTransportBaseLite.cpp @@ -293,7 +293,7 @@ bool QuicTransportBaseLite::isBidirectionalStream(StreamId stream) noexcept { QuicSocketLite::WriteResult QuicTransportBaseLite::writeChain( StreamId id, - Buf data, + BufPtr data, bool eof, ByteEventCallback* cb) { if (isReceivingStream(conn_->nodeType, id)) { @@ -718,7 +718,7 @@ QuicTransportBaseLite::setReadCallback( return setReadCallbackInternal(id, cb, err); } -folly::Expected, LocalErrorCode> +folly::Expected, LocalErrorCode> QuicTransportBaseLite::read(StreamId id, size_t maxLen) { if (isSendingStream(conn_->nodeType, id)) { return folly::makeUnexpected(LocalErrorCode::INVALID_OPERATION); @@ -2848,7 +2848,7 @@ void QuicTransportBaseLite::notifyAppRateLimited() { } } -void QuicTransportBaseLite::onTransportKnobs(Buf knobBlob) { +void QuicTransportBaseLite::onTransportKnobs(BufPtr knobBlob) { // Not yet implemented, VLOG(4) << "Received transport knobs: " << std::string( @@ -3067,7 +3067,7 @@ void QuicTransportBaseLite::addPacketProcessor( folly::Expected QuicTransportBaseLite::setKnob( uint64_t knobSpace, uint64_t knobId, - Buf knobBlob) { + BufPtr knobBlob) { if (isKnobSupported()) { sendSimpleFrame(*conn_, KnobFrame(knobSpace, knobId, std::move(knobBlob))); return folly::unit; diff --git a/quic/api/QuicTransportBaseLite.h b/quic/api/QuicTransportBaseLite.h index ad56a9ba8..8df89b675 100644 --- a/quic/api/QuicTransportBaseLite.h +++ b/quic/api/QuicTransportBaseLite.h @@ -66,7 +66,7 @@ class QuicTransportBaseLite : virtual public QuicSocketLite, WriteResult writeChain( StreamId id, - Buf data, + BufPtr data, bool eof, ByteEventCallback* cb = nullptr) override; @@ -166,7 +166,7 @@ class QuicTransportBaseLite : virtual public QuicSocketLite, Optional err = GenericApplicationErrorCode::NO_ERROR) override; - folly::Expected, LocalErrorCode> read( + folly::Expected, LocalErrorCode> read( StreamId id, size_t maxLen) override; @@ -207,7 +207,7 @@ class QuicTransportBaseLite : virtual public QuicSocketLite, * connection. */ folly::Expected - setKnob(uint64_t knobSpace, uint64_t knobId, Buf knobBlob) override; + setKnob(uint64_t knobSpace, uint64_t knobId, BufPtr knobBlob) override; /** * Can Knob Frames be exchanged with the peer on this connection? @@ -744,7 +744,7 @@ class QuicTransportBaseLite : virtual public QuicSocketLite, /** * Callback when we receive a transport knob */ - virtual void onTransportKnobs(Buf knobBlob); + virtual void onTransportKnobs(BufPtr knobBlob); void processCallbacksAfterWriteData(); diff --git a/quic/api/QuicTransportFunctions.cpp b/quic/api/QuicTransportFunctions.cpp index 2d5b0e79b..93dce1464 100644 --- a/quic/api/QuicTransportFunctions.cpp +++ b/quic/api/QuicTransportFunctions.cpp @@ -1447,7 +1447,7 @@ void writeCloseCommon( increaseNextPacketNum(connection, pnSpace); // best effort writing to the socket, ignore any errors. - Buf packetBufPtr = packetBuf.clone(); + BufPtr packetBufPtr = packetBuf.clone(); iovec vec[kNumIovecBufferChains]; size_t iovec_len = fillIovec(packetBufPtr, vec); auto ret = sock.write(connection.peerAddress, vec, iovec_len); diff --git a/quic/api/test/MockQuicSocket.h b/quic/api/test/MockQuicSocket.h index f004f431e..34fc1871e 100644 --- a/quic/api/test/MockQuicSocket.h +++ b/quic/api/test/MockQuicSocket.h @@ -117,7 +117,7 @@ class MockQuicSocket : public QuicSocket { (uint64_t)); folly::Expected - setKnob(uint64_t knobSpace, uint64_t knobId, Buf knobBlob) override { + setKnob(uint64_t knobSpace, uint64_t knobId, BufPtr knobBlob) override { SharedBuf sharedBlob(knobBlob.release()); return setKnob(knobSpace, knobId, sharedBlob); } @@ -153,9 +153,9 @@ class MockQuicSocket : public QuicSocket { (folly::MaybeManagedPtr)); void setEarlyDataAppParamsFunctions( - folly::Function&, const Buf&) const> + folly::Function&, const BufPtr&) const> validator, - folly::Function getter) override { + folly::Function getter) override { earlyDataAppParamsValidator_ = std::move(validator); earlyDataAppParamsGetter_ = std::move(getter); } @@ -173,14 +173,15 @@ class MockQuicSocket : public QuicSocket { stopSending, (StreamId, ApplicationErrorCode)); - folly::Expected, LocalErrorCode> read( + folly::Expected, LocalErrorCode> read( StreamId id, size_t maxRead) override { auto res = readNaked(id, maxRead); if (res.hasError()) { return folly::makeUnexpected(res.error()); } else { - return std::pair(Buf(res.value().first), res.value().second); + return std::pair( + BufPtr(res.value().first), res.value().second); } } @@ -253,8 +254,11 @@ class MockQuicSocket : public QuicSocket { (const ByteEvent::Type, const StreamId), (const)); - folly::Expected - writeChain(StreamId id, Buf data, bool eof, ByteEventCallback* cb) override { + folly::Expected writeChain( + StreamId id, + BufPtr data, + bool eof, + ByteEventCallback* cb) override { SharedBuf sharedData(data.release()); return writeChain(id, sharedData, eof, cb); } @@ -347,9 +351,9 @@ class MockQuicSocket : public QuicSocket { ConnectionSetupCallback* setupCb_{nullptr}; ConnectionCallback* connCb_{nullptr}; - folly::Function&, const Buf&)> + folly::Function&, const BufPtr&)> earlyDataAppParamsValidator_; - folly::Function earlyDataAppParamsGetter_; + folly::Function earlyDataAppParamsGetter_; MOCK_METHOD( void, @@ -363,7 +367,7 @@ class MockQuicSocket : public QuicSocket { MOCK_METHOD(uint16_t, getDatagramSizeLimit, (), (const)); folly::Expected writeDatagram( - Buf data) override { + BufPtr data) override { SharedBuf sharedData(data.release()); return writeDatagram(sharedData); } @@ -374,7 +378,7 @@ class MockQuicSocket : public QuicSocket { readDatagrams, (size_t)); MOCK_METHOD( - (folly::Expected, LocalErrorCode>), + (folly::Expected, LocalErrorCode>), readDatagramBufs, (size_t)); MOCK_METHOD( diff --git a/quic/api/test/Mocks.h b/quic/api/test/Mocks.h index 52fc4b931..0e3fdb13e 100644 --- a/quic/api/test/Mocks.h +++ b/quic/api/test/Mocks.h @@ -141,7 +141,7 @@ class MockConnectionCallback : public QuicSocket::ConnectionCallback { (uint64_t, uint64_t, folly::IOBuf*), (noexcept)); - void onKnob(uint64_t knobSpace, uint64_t knobId, Buf knobBlob) override { + void onKnob(uint64_t knobSpace, uint64_t knobId, BufPtr knobBlob) override { onKnobMock(knobSpace, knobId, knobBlob.get()); } }; diff --git a/quic/api/test/QuicBatchWriterTest.cpp b/quic/api/test/QuicBatchWriterTest.cpp index fe5fee800..23114c7a9 100644 --- a/quic/api/test/QuicBatchWriterTest.cpp +++ b/quic/api/test/QuicBatchWriterTest.cpp @@ -350,7 +350,7 @@ TEST_F(QuicBatchWriterTest, TestBatchingSendmmsgNewlyAllocatedIovecMatches) { CHECK(batchWriter->empty()); CHECK_EQ(batchWriter->size(), 0); - std::vector buffers; + std::vector buffers; size_t size = 0; for (auto& message : messages) { @@ -1188,15 +1188,15 @@ TEST_F(QuicBatchWriterTest, InplaceWriterBufResidueCheck) { conn_, gsoSupported_); auto buf = bufAccessor->obtain(); - folly::IOBuf* rawBuf = buf.get(); + folly::IOBuf* Buf = buf.get(); bufAccessor->release(std::move(buf)); - rawBuf->append(700); + Buf->append(700); ASSERT_FALSE( batchWriter->append(nullptr, 700, folly::SocketAddress(), nullptr)); // There is a check against packet 10 bytes or more larger than the size limit size_t packetSizeBig = 1009; - rawBuf->append(packetSizeBig); + Buf->append(packetSizeBig); EXPECT_TRUE(batchWriter->needsFlush(packetSizeBig)); EXPECT_CALL(sock, writeGSO(_, _, _, _)) @@ -1208,8 +1208,8 @@ TEST_F(QuicBatchWriterTest, InplaceWriterBufResidueCheck) { })); // No crash: EXPECT_EQ(700, batchWriter->write(sock, folly::SocketAddress())); - EXPECT_EQ(1009, rawBuf->length()); - EXPECT_EQ(0, rawBuf->headroom()); + EXPECT_EQ(1009, Buf->length()); + EXPECT_EQ(0, Buf->headroom()); } class SinglePacketInplaceBatchWriterTest : public ::testing::Test { @@ -1290,13 +1290,13 @@ TEST_F(SinglePacketInplaceBatchWriterTest, TestReset) { CHECK(dynamic_cast(batchWriter.get())); auto buf = bufAccessor_->obtain(); - folly::IOBuf* rawBuf = buf.get(); + folly::IOBuf* Buf = buf.get(); bufAccessor_->release(std::move(buf)); - rawBuf->append(700); + Buf->append(700); - EXPECT_EQ(rawBuf->computeChainDataLength(), 700); + EXPECT_EQ(Buf->computeChainDataLength(), 700); batchWriter->reset(); - EXPECT_EQ(rawBuf->computeChainDataLength(), 0); + EXPECT_EQ(Buf->computeChainDataLength(), 0); } TEST_F(SinglePacketInplaceBatchWriterTest, TestAppend) { @@ -1319,11 +1319,11 @@ TEST_F(SinglePacketInplaceBatchWriterTest, TestEmpty) { EXPECT_TRUE(batchWriter->empty()); auto buf = bufAccessor_->obtain(); - folly::IOBuf* rawBuf = buf.get(); + folly::IOBuf* Buf = buf.get(); bufAccessor_->release(std::move(buf)); - rawBuf->append(700); + Buf->append(700); - EXPECT_EQ(rawBuf->computeChainDataLength(), 700); + EXPECT_EQ(Buf->computeChainDataLength(), 700); EXPECT_FALSE(batchWriter->empty()); batchWriter->reset(); @@ -1339,12 +1339,12 @@ TEST_F(SinglePacketInplaceBatchWriterTest, TestWrite) { EXPECT_TRUE(batchWriter->empty()); auto buf = bufAccessor_->obtain(); - folly::IOBuf* rawBuf = buf.get(); + folly::IOBuf* Buf = buf.get(); bufAccessor_->release(std::move(buf)); const auto appendSize = conn_.udpSendPacketLen - 200; - rawBuf->append(appendSize); + Buf->append(appendSize); - EXPECT_EQ(rawBuf->computeChainDataLength(), appendSize); + EXPECT_EQ(Buf->computeChainDataLength(), appendSize); EXPECT_FALSE(batchWriter->empty()); folly::EventBase evb; diff --git a/quic/api/test/QuicPacketSchedulerTest.cpp b/quic/api/test/QuicPacketSchedulerTest.cpp index 28d223c7c..cba9e73d5 100644 --- a/quic/api/test/QuicPacketSchedulerTest.cpp +++ b/quic/api/test/QuicPacketSchedulerTest.cpp @@ -474,7 +474,7 @@ TEST_P(QuicPacketSchedulerTest, CryptoPaddingRetransmissionClientInitial) { "CryptoOnlyScheduler") .cryptoFrames()) .build(); - Buf helloBuf = folly::IOBuf::copyBuffer("chlo"); + BufPtr helloBuf = folly::IOBuf::copyBuffer("chlo"); ChainedByteRangeHead clientHelloData(helloBuf); conn.cryptoState->initialStream.lossBuffer.push_back( WriteStreamBuffer{std::move(clientHelloData), 0, false}); @@ -505,8 +505,8 @@ TEST_P(QuicPacketSchedulerTest, CryptoSchedulerOnlySingleLossFits) { CryptoStreamScheduler scheduler( conn, *getCryptoStream(*conn.cryptoState, EncryptionLevel::Handshake)); - Buf helloBuf = folly::IOBuf::copyBuffer("shlo"); - Buf certBuf = folly::IOBuf::copyBuffer( + BufPtr helloBuf = folly::IOBuf::copyBuffer("shlo"); + BufPtr certBuf = folly::IOBuf::copyBuffer( "certificatethatisverylongseriouslythisisextremelylongandcannotfitintoapacket"); conn.cryptoState->handshakeStream.lossBuffer.emplace_back( @@ -540,7 +540,7 @@ TEST_P(QuicPacketSchedulerTest, CryptoWritePartialLossBuffer) { "CryptoOnlyScheduler") .cryptoFrames()) .build(); - Buf lossBuffer = + BufPtr lossBuffer = folly::IOBuf::copyBuffer("return the special duration value max"); conn.cryptoState->initialStream.lossBuffer.emplace_back( ChainedByteRangeHead(lossBuffer), 0, false); @@ -971,7 +971,7 @@ TEST_P(QuicPacketSchedulerTest, CloneSchedulerHasHandshakeDataAndAcks) { // Add some crypto data for the outstanding packet to make it look legit. // This is so cloning scheduler can actually copy something. - Buf cryptoBuf = folly::IOBuf::copyBuffer("test"); + BufPtr cryptoBuf = folly::IOBuf::copyBuffer("test"); ChainedByteRangeHead cryptoRch(cryptoBuf); getCryptoStream(*conn.cryptoState, EncryptionLevel::Handshake) ->retransmissionBuffer.emplace( diff --git a/quic/api/test/QuicTransportBaseTest.cpp b/quic/api/test/QuicTransportBaseTest.cpp index a9040b4f0..e2c29694d 100644 --- a/quic/api/test/QuicTransportBaseTest.cpp +++ b/quic/api/test/QuicTransportBaseTest.cpp @@ -46,7 +46,7 @@ enum class TestFrameType : uint8_t { }; // A made up encoding decoding of a stream. -Buf encodeStreamBuffer( +BufPtr encodeStreamBuffer( StreamId id, StreamBuffer data, OptionalIntegral groupId = std::nullopt) { @@ -70,7 +70,7 @@ Buf encodeStreamBuffer( return buf; } -Buf encodeCryptoBuffer(StreamBuffer data) { +BufPtr encodeCryptoBuffer(StreamBuffer data) { auto buf = IOBuf::create(10); folly::io::Appender appender(buf.get(), 10); appender.writeBE(static_cast(TestFrameType::CRYPTO)); @@ -83,7 +83,7 @@ Buf encodeCryptoBuffer(StreamBuffer data) { } // A made up encoding of a MaxStreamsFrame. -Buf encodeMaxStreamsFrame(const MaxStreamsFrame& frame) { +BufPtr encodeMaxStreamsFrame(const MaxStreamsFrame& frame) { auto buf = IOBuf::create(25); folly::io::Appender appender(buf.get(), 25); appender.writeBE(static_cast(TestFrameType::MAX_STREAMS)); @@ -93,7 +93,7 @@ Buf encodeMaxStreamsFrame(const MaxStreamsFrame& frame) { } // Build a datagram frame -Buf encodeDatagramFrame(BufQueue data) { +BufPtr encodeDatagramFrame(BufQueue data) { auto buf = IOBuf::create(10); folly::io::Appender appender(buf.get(), 10); appender.writeBE(static_cast(TestFrameType::DATAGRAM)); @@ -104,15 +104,15 @@ Buf encodeDatagramFrame(BufQueue data) { return buf; } -std::pair decodeDatagramFrame(folly::io::Cursor& cursor) { - Buf outData; +std::pair decodeDatagramFrame(folly::io::Cursor& cursor) { + BufPtr outData; auto len = cursor.readBE(); cursor.clone(outData, len); return std::make_pair(std::move(outData), len); } -std::pair decodeDataBuffer(folly::io::Cursor& cursor) { - Buf outData; +std::pair decodeDataBuffer(folly::io::Cursor& cursor) { + BufPtr outData; auto len = cursor.readBE(); cursor.clone(outData, len); uint64_t offset = cursor.readBE(); @@ -470,7 +470,7 @@ class TestQuicTransport updateReadLooper(); } - void addDatagram(Buf data, TimePoint recvTime = Clock::now()) { + void addDatagram(BufPtr data, TimePoint recvTime = Clock::now()) { auto buf = encodeDatagramFrame(std::move(data)); SocketAddress addr("127.0.0.1", 1000); onNetworkData(addr, NetworkData(std::move(buf), recvTime, 0)); @@ -1345,7 +1345,7 @@ TEST_P(QuicTransportImplTestBase, ReadData) { transport->addDataToStream(stream1, StreamBuffer(readData->clone(), 0)); transport->driveReadCallbacks(); - transport->read(stream1, 10).thenOrThrow([&](std::pair data) { + transport->read(stream1, 10).thenOrThrow([&](std::pair data) { IOBufEqualTo eq; auto expected = readData->clone(); expected->trimEnd(expected->length() - 10); @@ -1354,7 +1354,7 @@ TEST_P(QuicTransportImplTestBase, ReadData) { EXPECT_CALL(readCb1, readAvailable(stream1)); transport->driveReadCallbacks(); - transport->read(stream1, 100).thenOrThrow([&](std::pair data) { + transport->read(stream1, 100).thenOrThrow([&](std::pair data) { IOBufEqualTo eq; auto expected = readData->clone(); expected->trimStart(10); @@ -1378,7 +1378,7 @@ TEST_P(QuicTransportImplTestBase, UnidirectionalReadData) { EXPECT_CALL(readCb1, readAvailable(stream1)); transport->driveReadCallbacks(); - transport->read(stream1, 10).thenOrThrow([&](std::pair data) { + transport->read(stream1, 10).thenOrThrow([&](std::pair data) { IOBufEqualTo eq; auto expected = readData->clone(); expected->trimEnd(expected->length() - 10); @@ -1387,7 +1387,7 @@ TEST_P(QuicTransportImplTestBase, UnidirectionalReadData) { EXPECT_CALL(readCb1, readAvailable(stream1)); transport->driveReadCallbacks(); - transport->read(stream1, 100).thenOrThrow([&](std::pair data) { + transport->read(stream1, 100).thenOrThrow([&](std::pair data) { IOBufEqualTo eq; auto expected = readData->clone(); expected->trimStart(10); @@ -1422,7 +1422,7 @@ TEST_P(QuicTransportImplTestBase, ReadDataNoCallback) { transport->addDataToStream(stream1, StreamBuffer(readData->clone(), 0, true)); transport->driveReadCallbacks(); - transport->read(stream1, 100).thenOrThrow([&](std::pair data) { + transport->read(stream1, 100).thenOrThrow([&](std::pair data) { IOBufEqualTo eq; EXPECT_TRUE(eq(*data.first, *readData)); EXPECT_TRUE(data.second); @@ -1458,7 +1458,7 @@ TEST_P(QuicTransportImplTestBase, ReadCallbackForClientOutOfOrderStream) { EXPECT_CALL(streamRead, readAvailable(clientOutOfOrderStream)) .WillOnce(Invoke([&](StreamId id) { - transport->read(id, 100).thenOrThrow([&](std::pair data) { + transport->read(id, 100).thenOrThrow([&](std::pair data) { IOBufEqualTo eq; EXPECT_TRUE(eq(*data.first, *readData)); EXPECT_TRUE(data.second); @@ -1480,7 +1480,7 @@ TEST_P(QuicTransportImplTestBase, ReadCallbackForClientOutOfOrderStream) { EXPECT_CALL(streamRead, readAvailable(clientOutOfOrderStream2)) .WillOnce(Invoke([&](StreamId id) { - transport->read(id, 100).thenOrThrow([&](std::pair data) { + transport->read(id, 100).thenOrThrow([&](std::pair data) { IOBufEqualTo eq; EXPECT_TRUE(eq(*data.first, *readData)); EXPECT_TRUE(data.second); @@ -3904,7 +3904,7 @@ TEST_P(QuicTransportImplTestBase, PeekConsumeReadTest) { transport->driveReadCallbacks(); // Read 10 bytes. - transport->read(stream1, 10).thenOrThrow([&](std::pair data) { + transport->read(stream1, 10).thenOrThrow([&](std::pair data) { EXPECT_EQ("l stream d", data.first->to()); }); @@ -3961,7 +3961,7 @@ TEST_P(QuicTransportImplTestBase, PeekConsumeReadTest) { transport->driveReadCallbacks(); // Read the rest of the buffer. - transport->read(stream1, 0).thenOrThrow([&](std::pair data) { + transport->read(stream1, 0).thenOrThrow([&](std::pair data) { EXPECT_EQ( " Here is my number, so call me maybe.", data.first->to()); }); @@ -4091,7 +4091,7 @@ TEST_P(QuicTransportImplTestBase, HandleKnobCallbacks) { uint64_t knobSpace = 0xfaceb00c; uint64_t knobId = 42; folly::StringPiece data = "test knob data"; - Buf buf(folly::IOBuf::create(data.size())); + BufPtr buf(folly::IOBuf::create(data.size())); memcpy(buf->writableData(), data.data(), data.size()); buf->append(data.size()); conn->pendingEvents.knobs.emplace_back( diff --git a/quic/api/test/QuicTypedTransportTestUtil.h b/quic/api/test/QuicTypedTransportTestUtil.h index 35f2e5b0e..c29d24aca 100644 --- a/quic/api/test/QuicTypedTransportTestUtil.h +++ b/quic/api/test/QuicTypedTransportTestUtil.h @@ -179,7 +179,7 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { * Deliver a single packet from the remote. */ void deliverPacket( - Buf&& buf, + BufPtr&& buf, quic::TimePoint recvTime = TimePoint::clock::now(), uint8_t tosValue = 0, bool loopForWrites = true) { @@ -191,7 +191,7 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { * Deliver a single packet from the remote, do not loop for writes. */ void deliverPacketNoWrites( - Buf&& buf, + BufPtr&& buf, quic::TimePoint recvTime = TimePoint::clock::now(), uint8_t tosValue = 0) { deliverPacket( @@ -202,7 +202,7 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { * Deliver multiple packets from the remote. */ void deliverPackets( - std::vector&& bufs, + std::vector&& bufs, quic::TimePoint recvTime = TimePoint::clock::now(), uint8_t tosValue = 0, bool loopForWrites = true) { @@ -224,7 +224,7 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { * Deliver multiple packets from the remote, do not loop for writes. */ void deliverPacketsNoWrites( - std::vector&& bufs, + std::vector&& bufs, quic::TimePoint recvTime = TimePoint::clock::now()) { deliverPackets(std::move(bufs), recvTime, false /* loopForWrites */); } @@ -232,9 +232,9 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { /** * Build a packet with stream data from peer. */ - quic::Buf buildPeerPacketWithStreamData( + quic::BufPtr buildPeerPacketWithStreamData( const quic::StreamId streamId, - Buf data, + BufPtr data, Optional shortHeaderProtectionOverride = none) { auto buf = quic::test::packetToBuf(createStreamPacket( getSrcConnectionId(), @@ -257,9 +257,9 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { /** * Build a packet with stream data from peer. */ - quic::Buf buildPeerPacketWithStreamDataAndEof( + quic::BufPtr buildPeerPacketWithStreamDataAndEof( const quic::StreamId streamId, - Buf data) { + BufPtr data) { auto buf = quic::test::packetToBuf(createStreamPacket( getSrcConnectionId(), getDstConnectionId(), @@ -278,7 +278,8 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { /** * Build a packet with a StopSendingFrame from peer. */ - quic::Buf buildPeerPacketWithStopSendingFrame(const quic::StreamId streamId) { + quic::BufPtr buildPeerPacketWithStopSendingFrame( + const quic::StreamId streamId) { ShortHeader header( ProtectionType::KeyPhaseZero, getDstConnectionId(), @@ -300,7 +301,7 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { /** * Build a packet with a RstStreamFrame from peer. */ - quic::Buf buildPeerPacketWithRstStreamFrame( + quic::BufPtr buildPeerPacketWithRstStreamFrame( const quic::StreamId streamId, const uint64_t offset) { ShortHeader header( @@ -324,7 +325,7 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { /** * Build a packet from peer with ACK frame for previously sent packets. */ - quic::Buf buildAckPacketForSentPackets( + quic::BufPtr buildAckPacketForSentPackets( quic::PacketNumberSpace pnSpace, quic::AckBlocks acks, std::chrono::microseconds ackDelay = 0us) { @@ -343,7 +344,7 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { /** * Build a packet from peer with ACK frame for previously sent packets. */ - quic::Buf buildAckPacketForSentPackets( + quic::BufPtr buildAckPacketForSentPackets( quic::PacketNumberSpace pnSpace, quic::PacketNum intervalStart, quic::PacketNum intervalEnd, @@ -355,7 +356,7 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { /** * Build a packet from peer with ACK frame for previously sent AppData pkts. */ - quic::Buf buildAckPacketForSentAppDataPackets( + quic::BufPtr buildAckPacketForSentAppDataPackets( quic::AckBlocks acks, std::chrono::microseconds ackDelay = 0us) { return buildAckPacketForSentPackets( @@ -365,7 +366,7 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { /** * Build a packet with ACK frame for previously sent AppData packet. */ - quic::Buf buildAckPacketForSentAppDataPacket( + quic::BufPtr buildAckPacketForSentAppDataPacket( quic::PacketNum packetNum, std::chrono::microseconds ackDelay = 0us) { quic::AckBlocks acks = {{packetNum, packetNum}}; @@ -375,7 +376,7 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { /** * Build a packet with ACK frame for previously sent AppData packets. */ - quic::Buf buildAckPacketForSentAppDataPackets( + quic::BufPtr buildAckPacketForSentAppDataPackets( NewOutstandingPacketInterval writeInterval, std::chrono::microseconds ackDelay = 0us) { const quic::PacketNum firstPacketNum = writeInterval.start; @@ -387,7 +388,7 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { /** * Build a packet with ACK frame for previously sent AppData packets. */ - quic::Buf buildAckPacketForSentAppDataPackets( + quic::BufPtr buildAckPacketForSentAppDataPackets( Optional maybeWriteInterval, std::chrono::microseconds ackDelay = 0us) { CHECK(maybeWriteInterval.has_value()); @@ -398,7 +399,7 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { /** * Build a packet with ACK frame for previously sent AppData packets. */ - quic::Buf buildAckPacketForSentAppDataPackets( + quic::BufPtr buildAckPacketForSentAppDataPackets( std::vector writeIntervals, std::chrono::microseconds ackDelay = 0us) { quic::AckBlocks acks; @@ -411,7 +412,7 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { /** * Build a packet with ACK frame for previously sent AppData packets. */ - quic::Buf buildAckPacketForSentAppDataPackets( + quic::BufPtr buildAckPacketForSentAppDataPackets( std::vector> maybeWriteIntervals, std::chrono::microseconds ackDelay = 0us) { std::vector writeIntervals; @@ -425,7 +426,7 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { /** * Build a packet with ACK frame for previously sent AppData packets. */ - quic::Buf buildAckPacketForSentAppDataPackets( + quic::BufPtr buildAckPacketForSentAppDataPackets( const std::vector& packetNums, std::chrono::microseconds ackDelay = 0us) { quic::AckBlocks acks; @@ -450,7 +451,7 @@ class QuicTypedTransportTestBase : protected QuicTransportTestClass { quic::PacketNum>::value, void>, class = std::enable_if_t::value, void>> - quic::Buf buildAckPacketForSentAppDataPackets(T0&& first, Ts&&... args) { + quic::BufPtr buildAckPacketForSentAppDataPackets(T0&& first, Ts&&... args) { std::vector packetNums{ std::forward(first), std::forward(args)...}; return buildAckPacketForSentAppDataPackets(packetNums); diff --git a/quic/client/QuicClientTransportLite.cpp b/quic/client/QuicClientTransportLite.cpp index 2472ce730..1bc4e92b8 100644 --- a/quic/client/QuicClientTransportLite.cpp +++ b/quic/client/QuicClientTransportLite.cpp @@ -1306,7 +1306,7 @@ folly::Expected QuicClientTransportLite::recvMsg( for (int packetNum = 0; packetNum < numPackets; ++packetNum) { // We create 1 buffer per packet so that it is not shared, this enables // us to decrypt in place. - Buf readBuffer = BufHelpers::createCombined(readBufferSize); + BufPtr readBuffer = BufHelpers::createCombined(readBufferSize); struct iovec vec; vec.iov_base = readBuffer->writableData(); vec.iov_len = readBufferSize; @@ -1484,7 +1484,7 @@ folly::Expected QuicClientTransportLite::recvFrom( // We create 1 buffer per packet so that it is not shared, this enables // us to decrypt in place. If the fizz decrypt api could decrypt in-place // even if shared, then we could allocate one giant IOBuf here. - Buf readBuffer = BufHelpers::createCombined(readBufferSize); + BufPtr readBuffer = BufHelpers::createCombined(readBufferSize); sockaddr* rawAddr{nullptr}; diff --git a/quic/client/QuicClientTransportLite.h b/quic/client/QuicClientTransportLite.h index 62e22469b..ed1107afa 100644 --- a/quic/client/QuicClientTransportLite.h +++ b/quic/client/QuicClientTransportLite.h @@ -385,7 +385,7 @@ class QuicClientTransportLite struct sockaddr_storage addr; struct iovec iovec; // Buffers we pass to recvmmsg. - Buf readBuffer; + BufPtr readBuffer; }; // Storage for the recvmmsg system call. diff --git a/quic/client/handshake/ClientHandshake.cpp b/quic/client/handshake/ClientHandshake.cpp index 7da59f931..ad77bf161 100644 --- a/quic/client/handshake/ClientHandshake.cpp +++ b/quic/client/handshake/ClientHandshake.cpp @@ -61,7 +61,7 @@ folly::Expected ClientHandshake::connect( } folly::Expected ClientHandshake::doHandshake( - Buf data, + quic::BufPtr data, EncryptionLevel encryptionLevel) { if (!data) { return folly::unit; @@ -232,7 +232,7 @@ void ClientHandshake::waitForData() { void ClientHandshake::writeDataToStream( EncryptionLevel encryptionLevel, - Buf data) { + BufPtr data) { if (encryptionLevel == EncryptionLevel::AppData) { // Don't write 1-rtt handshake data on the client. return; diff --git a/quic/client/handshake/ClientHandshake.h b/quic/client/handshake/ClientHandshake.h index 566c9b747..325766e4a 100644 --- a/quic/client/handshake/ClientHandshake.h +++ b/quic/client/handshake/ClientHandshake.h @@ -44,7 +44,7 @@ class ClientHandshake : public Handshake { * being initialized, bytes written out, or the write phase changing. */ [[nodiscard]] virtual folly::Expected doHandshake( - Buf data, + BufPtr data, EncryptionLevel encryptionLevel); /** @@ -151,7 +151,7 @@ class ClientHandshake : public Handshake { * Various utilities for concrete implementations to use. */ void waitForData(); - void writeDataToStream(EncryptionLevel encryptionLevel, Buf data); + void writeDataToStream(EncryptionLevel encryptionLevel, BufPtr data); void handshakeInitiated(); void computeZeroRttCipher(); void computeOneRttCipher(bool earlyDataAccepted); @@ -176,10 +176,10 @@ class ClientHandshake : public Handshake { * Given secret_n, returns secret_n+1 to be used for generating the next Aead * on key updates. */ - virtual Buf getNextTrafficSecret(folly::ByteRange secret) const = 0; + virtual BufPtr getNextTrafficSecret(folly::ByteRange secret) const = 0; - Buf readTrafficSecret_; - Buf writeTrafficSecret_; + BufPtr readTrafficSecret_; + BufPtr writeTrafficSecret_; Optional zeroRttRejected_; Optional canResendZeroRtt_; diff --git a/quic/client/test/Mocks.h b/quic/client/test/Mocks.h index 3cc64df83..457cfcb74 100644 --- a/quic/client/test/Mocks.h +++ b/quic/client/test/Mocks.h @@ -87,7 +87,7 @@ class MockClientHandshake : public ClientHandshake { std::unique_ptr, buildHeaderCipher, (folly::ByteRange secret)); - MOCK_METHOD(Buf, getNextTrafficSecret, (folly::ByteRange secret), (const)); + MOCK_METHOD(BufPtr, getNextTrafficSecret, (folly::ByteRange secret), (const)); MOCK_METHOD( const Optional&, getApplicationProtocol, diff --git a/quic/client/test/QuicClientTransportMock.h b/quic/client/test/QuicClientTransportMock.h index 9bbfabaa8..835ccdeaf 100644 --- a/quic/client/test/QuicClientTransportMock.h +++ b/quic/client/test/QuicClientTransportMock.h @@ -25,7 +25,7 @@ class QuicClientTransportMock : public QuicClientTransport { std::move(handshakeFactory)) {} MOCK_METHOD( - (folly::Expected, LocalErrorCode>), + (folly::Expected, LocalErrorCode>), read, (StreamId, size_t)); MOCK_METHOD( @@ -62,7 +62,7 @@ class QuicClientTransportMock : public QuicClientTransport { MOCK_METHOD( (WriteResult), writeChain, - (StreamId, Buf, bool, ByteEventCallback*)); + (StreamId, BufPtr, bool, ByteEventCallback*)); MOCK_METHOD((uint64_t), maxWritableOnConn, (), (const)); }; diff --git a/quic/codec/Decode.cpp b/quic/codec/Decode.cpp index ed95fafa3..be8b7c122 100644 --- a/quic/codec/Decode.cpp +++ b/quic/codec/Decode.cpp @@ -89,7 +89,7 @@ folly::Expected decodeKnobFrame( return folly::makeUnexpected(QuicError( quic::TransportErrorCode::FRAME_ENCODING_ERROR, "Bad knob len")); } - Buf knobBlob; + BufPtr knobBlob; cursor.cloneAtMost(knobBlob, knobLen->first); return QuicFrame( KnobFrame(knobSpace->first, knobId->first, std::move(knobBlob))); @@ -499,7 +499,7 @@ folly::Expected decodeCryptoFrame( return folly::makeUnexpected(QuicError( quic::TransportErrorCode::FRAME_ENCODING_ERROR, "Invalid length")); } - Buf data; + BufPtr data; if (cursor.totalLength() < dataLength->first) { return folly::makeUnexpected(QuicError( quic::TransportErrorCode::FRAME_ENCODING_ERROR, "Length mismatch")); @@ -522,7 +522,7 @@ folly::Expected decodeNewTokenFrame( return folly::makeUnexpected(QuicError( quic::TransportErrorCode::FRAME_ENCODING_ERROR, "Invalid length")); } - Buf token; + BufPtr token; if (cursor.totalLength() < tokenLength->first) { return folly::makeUnexpected(QuicError( quic::TransportErrorCode::FRAME_ENCODING_ERROR, "Length mismatch")); @@ -579,7 +579,7 @@ folly::Expected decodeStreamFrame( quic::TransportErrorCode::FRAME_ENCODING_ERROR, "Invalid length")); } } - Buf data; + BufPtr data; // Calculate how much to trim from the start of the queue size_t trimAmount = cursor - queue.front(); @@ -1208,7 +1208,7 @@ folly::Expected parseFrame( folly::Expected decodeRegularPacket( PacketHeader&& header, const CodecParameters& params, - Buf packetData) { + BufPtr packetData) { RegularQuicPacket packet(std::move(header)); BufQueue queue; queue.append(std::move(packetData)); @@ -1404,7 +1404,7 @@ folly::Expected parseLongHeaderVariants( return folly::makeUnexpected(TransportErrorCode::FRAME_ENCODING_ERROR); } - Buf token; + BufPtr token; cursor.clone(token, cursor.totalLength() - kRetryIntegrityTagLen); return ParsedLongHeader( @@ -1425,7 +1425,7 @@ folly::Expected parseLongHeaderVariants( return folly::makeUnexpected(TransportErrorCode::FRAME_ENCODING_ERROR); } - Buf token; + BufPtr token; if (type == LongHeader::Types::Initial) { auto tokenLen = decodeQuicInteger(cursor); if (!tokenLen) { @@ -1438,7 +1438,7 @@ folly::Expected parseLongHeaderVariants( } if (tokenLen->first > 0) { - Buf tokenBuf; + BufPtr tokenBuf; // If tokenLen > token's actual length then the cursor will throw. cursor.clone(tokenBuf, tokenLen->first); token = std::move(tokenBuf); diff --git a/quic/codec/Decode.h b/quic/codec/Decode.h index 3e31ab3af..8d443d9d2 100644 --- a/quic/codec/Decode.h +++ b/quic/codec/Decode.h @@ -71,7 +71,7 @@ Optional decodeVersionNegotiation( [[nodiscard]] folly::Expected decodeRegularPacket( PacketHeader&& header, const CodecParameters& params, - Buf packetData); + BufPtr packetData); /** * Parses a single frame from the queue. Throws a QuicException if the frame diff --git a/quic/codec/PacketNumberCipher.h b/quic/codec/PacketNumberCipher.h index e2be213e8..f9ec1daee 100644 --- a/quic/codec/PacketNumberCipher.h +++ b/quic/codec/PacketNumberCipher.h @@ -74,7 +74,7 @@ class PacketNumberCipher { /** * Get the packet protection key */ - virtual const Buf& getKey() const = 0; + virtual const BufPtr& getKey() const = 0; protected: virtual void cipherHeader( diff --git a/quic/codec/QuicConnectionId.h b/quic/codec/QuicConnectionId.h index 1b06d0cbb..81923c226 100644 --- a/quic/codec/QuicConnectionId.h +++ b/quic/codec/QuicConnectionId.h @@ -78,7 +78,7 @@ inline std::ostream& operator<<(std::ostream& os, const ConnectionId& connId) { return os; } -inline RawBuf toData(const ConnectionId& connId) { +inline Buf toData(const ConnectionId& connId) { return BufHelpers::wrapBufferAsValue(connId.data(), connId.size()); } diff --git a/quic/codec/QuicPacketBuilder.cpp b/quic/codec/QuicPacketBuilder.cpp index 609663ca7..4bb215fd7 100644 --- a/quic/codec/QuicPacketBuilder.cpp +++ b/quic/codec/QuicPacketBuilder.cpp @@ -191,13 +191,13 @@ void RegularQuicPacketBuilder::appendBytes( remainingBytes_ -= byteNumber; } -void RegularQuicPacketBuilder::insert(Buf buf) { +void RegularQuicPacketBuilder::insert(BufPtr buf) { remainingBytes_ -= buf->computeChainDataLength(); bodyAppender_.insert(std::move(buf)); } -void RegularQuicPacketBuilder::insert(Buf buf, size_t limit) { - Buf streamData; +void RegularQuicPacketBuilder::insert(BufPtr buf, size_t limit) { + BufPtr streamData; folly::io::Cursor cursor(buf.get()); cursor.clone(streamData, limit); // reminaingBytes_ update is taken care of inside this insert call: @@ -205,7 +205,7 @@ void RegularQuicPacketBuilder::insert(Buf buf, size_t limit) { } void RegularQuicPacketBuilder::insert(const BufQueue& buf, size_t limit) { - Buf streamData; + BufPtr streamData; folly::io::Cursor cursor(buf.front()); cursor.clone(streamData, limit); // reminaingBytes_ update is taken care of inside this insert call: @@ -216,7 +216,7 @@ void RegularQuicPacketBuilder::insert( const ChainedByteRangeHead& buf, size_t limit) { limit = std::min(limit, buf.chainLength()); - Buf streamData = BufHelpers::wrapBuffer( + BufPtr streamData = BufHelpers::wrapBuffer( buf.getHead()->getRange().begin(), std::min(limit, buf.getHead()->length())); limit -= std::min(limit, buf.getHead()->length()); @@ -332,7 +332,7 @@ PseudoRetryPacketBuilder::PseudoRetryPacketBuilder( ConnectionId destinationConnectionId, ConnectionId originalDestinationConnectionId, QuicVersion quicVersion, - Buf&& token) + BufPtr&& token) : initialByte_(initialByte), sourceConnectionId_(sourceConnectionId), destinationConnectionId_(destinationConnectionId), @@ -391,7 +391,7 @@ void PseudoRetryPacketBuilder::writePseudoRetryPacket() { packetBuf_->append(bufWriter.getBytesWritten()); } -Buf PseudoRetryPacketBuilder::buildPacket() && { +BufPtr PseudoRetryPacketBuilder::buildPacket() && { return std::move(packetBuf_); } @@ -410,7 +410,7 @@ StatelessResetPacketBuilder::StatelessResetPacketBuilder( appender.push(resetToken.data(), resetToken.size()); } -Buf StatelessResetPacketBuilder::buildPacket() && { +BufPtr StatelessResetPacketBuilder::buildPacket() && { return std::move(data_); } @@ -521,9 +521,9 @@ uint32_t VersionNegotiationPacketBuilder::remainingSpaceInPkt() { return remainingBytes_; } -std::pair +std::pair VersionNegotiationPacketBuilder::buildPacket() && { - return std::make_pair( + return std::make_pair( std::move(packet_), std::move(data_)); } @@ -621,7 +621,7 @@ bool RetryPacketBuilder::canBuildPacket() const noexcept { return remainingBytes_ != 0; } -Buf RetryPacketBuilder::buildPacket() && { +BufPtr RetryPacketBuilder::buildPacket() && { return std::move(packetBuf_); } @@ -683,12 +683,12 @@ void InplaceQuicPacketBuilder::appendBytes( remainingBytes_ -= byteNumber; } -void InplaceQuicPacketBuilder::insert(Buf buf) { +void InplaceQuicPacketBuilder::insert(BufPtr buf) { remainingBytes_ -= buf->computeChainDataLength(); bufWriter_.insert(buf.get()); } -void InplaceQuicPacketBuilder::insert(Buf buf, size_t limit) { +void InplaceQuicPacketBuilder::insert(BufPtr buf, size_t limit) { remainingBytes_ -= limit; bufWriter_.insert(buf.get(), limit); } @@ -771,7 +771,7 @@ PacketBuilderInterface::Packet InplaceQuicPacketBuilder::buildPacket() && { // TODO: Get rid of these two wrapBuffer when Fizz::AEAD has a new interface // for encryption. if (bodyStart_) { - RawBuf bodyBuf = BufHelpers::wrapBufferAsValue( + Buf bodyBuf = BufHelpers::wrapBufferAsValue( bodyStart_, bufWriter_.tail() - bodyStart_ + cipherOverhead_); bodyBuf.trimEnd(cipherOverhead_); @@ -784,7 +784,7 @@ PacketBuilderInterface::Packet InplaceQuicPacketBuilder::buildPacket() && { return builtPacket; } else { PacketBuilderInterface::Packet builtPacket( - std::move(packet_), RawBuf(), RawBuf()); + std::move(packet_), Buf(), Buf()); releaseOutputBufferInternal(); return builtPacket; } diff --git a/quic/codec/QuicPacketBuilder.h b/quic/codec/QuicPacketBuilder.h index fc596733d..cb5c0d7e5 100644 --- a/quic/codec/QuicPacketBuilder.h +++ b/quic/codec/QuicPacketBuilder.h @@ -74,8 +74,8 @@ class PacketBuilderInterface { appendBytes(BufAppender& appender, PacketNum value, uint8_t byteNumber) = 0; virtual void appendBytes(BufWriter& writer, PacketNum value, uint8_t byteNumber) = 0; - virtual void insert(Buf buf) = 0; - virtual void insert(Buf buf, size_t limit) = 0; + virtual void insert(BufPtr buf) = 0; + virtual void insert(BufPtr buf, size_t limit) = 0; virtual void insert(const ChainedByteRangeHead& buf, size_t limit) = 0; virtual void insert(const BufQueue& buf, size_t limit) = 0; virtual void push(const uint8_t* data, size_t len) = 0; @@ -148,8 +148,8 @@ class InplaceQuicPacketBuilder final : public PacketBuilderInterface { void appendBytes(BufWriter& writer, PacketNum value, uint8_t byteNumber) override; - void insert(Buf buf) override; - void insert(Buf buf, size_t limit) override; + void insert(BufPtr buf) override; + void insert(BufPtr buf, size_t limit) override; void insert(const ChainedByteRangeHead& buf, size_t limit) override; void insert(const BufQueue& buf, size_t limit) override; void push(const uint8_t* data, size_t len) override; @@ -176,7 +176,7 @@ class InplaceQuicPacketBuilder final : public PacketBuilderInterface { private: BufAccessor& bufAccessor_; - Buf iobuf_; + BufPtr iobuf_; BufWriter bufWriter_; uint32_t remainingBytes_; PacketNum largestAckedPacketNum_; @@ -230,8 +230,8 @@ class RegularQuicPacketBuilder final : public PacketBuilderInterface { CHECK(false) << "Invalid BufWriter"; } - void insert(Buf buf) override; - void insert(Buf buf, size_t limit) override; + void insert(BufPtr buf) override; + void insert(BufPtr buf, size_t limit) override; void insert(const BufQueue& buf, size_t limit) override; void insert(const ChainedByteRangeHead& buf, size_t limit) override; @@ -350,7 +350,7 @@ class InplaceSizeEnforcedPacketBuilder : public WrapperPacketBuilderInterface { private: BufAccessor& bufAccessor_; - Buf iobuf_; + BufPtr iobuf_; RegularQuicWritePacket packet_; folly::IOBuf header_; folly::IOBuf body_; @@ -368,7 +368,7 @@ class VersionNegotiationPacketBuilder { virtual ~VersionNegotiationPacketBuilder() = default; uint32_t remainingSpaceInPkt(); - std::pair buildPacket() &&; + std::pair buildPacket() &&; /** * Whether the packet builder is able to build a packet. This should be * checked right after the creation of a packet builder object. @@ -383,7 +383,7 @@ class VersionNegotiationPacketBuilder { private: uint32_t remainingBytes_; VersionNegotiationPacket packet_; - Buf data_; + BufPtr data_; }; /* @@ -398,21 +398,21 @@ class PseudoRetryPacketBuilder { ConnectionId destinationConnectionId, ConnectionId originalDestinationConnectionId, QuicVersion quicVersion, - Buf&& token); + BufPtr&& token); - Buf buildPacket() &&; + BufPtr buildPacket() &&; private: void writePseudoRetryPacket(); - Buf packetBuf_; + BufPtr packetBuf_; uint8_t initialByte_; ConnectionId sourceConnectionId_; ConnectionId destinationConnectionId_; ConnectionId originalDestinationConnectionId_; QuicVersion quicVersion_; - Buf token_; + BufPtr token_; }; class RetryPacketBuilder { @@ -426,7 +426,7 @@ class RetryPacketBuilder { uint32_t remainingSpaceInPkt(); - Buf buildPacket() &&; + BufPtr buildPacket() &&; /** * Whether the RetryPacketBuilder is able to build a packet. This should be @@ -437,7 +437,7 @@ class RetryPacketBuilder { private: folly::Expected writeRetryPacket(); - Buf packetBuf_; + BufPtr packetBuf_; ConnectionId sourceConnectionId_; ConnectionId destinationConnectionId_; @@ -454,10 +454,10 @@ class StatelessResetPacketBuilder { uint16_t maxPacketSize, const StatelessResetToken& resetToken); - Buf buildPacket() &&; + BufPtr buildPacket() &&; private: - Buf data_; + BufPtr data_; }; /** @@ -520,11 +520,11 @@ class PacketBuilderWrapper : public PacketBuilderInterface { builder.appendBytes(writer, value, byteNumber); } - void insert(Buf buf) override { + void insert(BufPtr buf) override { builder.insert(std::move(buf)); } - void insert(Buf buf, size_t limit) override { + void insert(BufPtr buf, size_t limit) override { builder.insert(std::move(buf), limit); } diff --git a/quic/codec/QuicReadCodec.cpp b/quic/codec/QuicReadCodec.cpp index f20d189d8..0ec3308db 100644 --- a/quic/codec/QuicReadCodec.cpp +++ b/quic/codec/QuicReadCodec.cpp @@ -241,7 +241,7 @@ CodecResult QuicReadCodec::parseLongHeaderPacket( encryptedData = BufHelpers::create(0); } - Buf decrypted; + BufPtr decrypted; auto decryptAttempt = cipher->tryDecrypt( std::move(encryptedData), headerData.get(), packetNum.first); if (!decryptAttempt) { @@ -269,7 +269,7 @@ CodecResult QuicReadCodec::parseLongHeaderPacket( } CodecResult QuicReadCodec::tryParseShortHeaderPacket( - Buf data, + BufPtr data, const AckStates& ackStates, size_t dstConnIdSize, folly::io::Cursor& cursor) { @@ -357,7 +357,7 @@ CodecResult QuicReadCodec::tryParseShortHeaderPacket( folly::IOBuf headerData = BufHelpers::wrapBufferAsValue(data->data(), aadLen); data->trimStart(aadLen); - Buf decrypted; + BufPtr decrypted; auto decryptAttempt = oneRttReadCipherToUse->tryDecrypt( std::move(data), &headerData, packetNum.first); if (!decryptAttempt) { diff --git a/quic/codec/QuicReadCodec.h b/quic/codec/QuicReadCodec.h index b14b6b6e8..2d7e68e18 100644 --- a/quic/codec/QuicReadCodec.h +++ b/quic/codec/QuicReadCodec.h @@ -25,10 +25,10 @@ namespace quic { * use this to retry later once the cipher is available. */ struct CipherUnavailable { - Buf packet; + BufPtr packet; ProtectionType protectionType; - CipherUnavailable(Buf packetIn, ProtectionType protectionTypeIn) + CipherUnavailable(BufPtr packetIn, ProtectionType protectionTypeIn) : packet(std::move(packetIn)), protectionType(protectionTypeIn) {} }; @@ -200,7 +200,7 @@ class QuicReadCodec { private: CodecResult tryParseShortHeaderPacket( - Buf data, + BufPtr data, const AckStates& ackStates, size_t dstConnIdSize, folly::io::Cursor& cursor); diff --git a/quic/codec/Types.cpp b/quic/codec/Types.cpp index 73c561834..266adf1d5 100644 --- a/quic/codec/Types.cpp +++ b/quic/codec/Types.cpp @@ -326,17 +326,17 @@ StreamTypeField StreamTypeField::Builder::build() { * Plaintext contains only the timestamp in ms. Token specific data is used as * associated data during aead encryption/decryption. */ -Buf QuicAddrValidationToken::getPlaintextToken() const { +BufPtr QuicAddrValidationToken::getPlaintextToken() const { auto ts = folly::Endian::big(timestampInMs); return BufHelpers::copyBuffer(&ts, sizeof(ts)); } -Buf RetryToken::genAeadAssocData() const { +BufPtr RetryToken::genAeadAssocData() const { return BufHelpers::copyBuffer(folly::to( toString(tokenType), originalDstConnId.hex() + clientIp.str())); } -Buf NewToken::genAeadAssocData() const { +BufPtr NewToken::genAeadAssocData() const { return BufHelpers::copyBuffer( folly::to(toString(tokenType), clientIp.str())); } diff --git a/quic/codec/Types.h b/quic/codec/Types.h index 88949baac..ff35cd389 100644 --- a/quic/codec/Types.h +++ b/quic/codec/Types.h @@ -69,7 +69,7 @@ struct PingFrame { }; struct KnobFrame { - KnobFrame(uint64_t knobSpaceIn, uint64_t idIn, Buf blobIn) + KnobFrame(uint64_t knobSpaceIn, uint64_t idIn, BufPtr blobIn) : knobSpace(knobSpaceIn), id(idIn), blob(std::move(blobIn)) { len = blob->length(); } @@ -113,7 +113,7 @@ struct KnobFrame { uint64_t knobSpace; uint64_t id; uint64_t len; - Buf blob; + BufPtr blob; }; struct AckFrequencyFrame { @@ -340,9 +340,9 @@ struct StopSendingFrame { struct ReadCryptoFrame { uint64_t offset; - Buf data; + BufPtr data; - ReadCryptoFrame(uint64_t offsetIn, Buf dataIn) + ReadCryptoFrame(uint64_t offsetIn, BufPtr dataIn) : offset(offsetIn), data(std::move(dataIn)) {} explicit ReadCryptoFrame(uint64_t offsetIn) @@ -394,9 +394,9 @@ struct WriteCryptoFrame { }; struct NewTokenFrame { - Buf token; + BufPtr token; - explicit NewTokenFrame(Buf tokenIn) : token(std::move(tokenIn)) {} + explicit NewTokenFrame(BufPtr tokenIn) : token(std::move(tokenIn)) {} NewTokenFrame(const NewTokenFrame& other) { if (other.token) { @@ -411,9 +411,9 @@ struct NewTokenFrame { }; struct ReadNewTokenFrame { - Buf token; + BufPtr token; - ReadNewTokenFrame(Buf tokenIn) : token(std::move(tokenIn)) {} + ReadNewTokenFrame(BufPtr tokenIn) : token(std::move(tokenIn)) {} // Stuff stored in a variant type needs to be copyable. ReadNewTokenFrame(const ReadNewTokenFrame& other) { @@ -493,13 +493,13 @@ struct ReadStreamFrame { StreamId streamId; OptionalIntegral streamGroupId; uint64_t offset; - Buf data; + BufPtr data; bool fin; ReadStreamFrame( StreamId streamIdIn, uint64_t offsetIn, - Buf dataIn, + BufPtr dataIn, bool finIn, OptionalIntegral streamGroupIdIn = std::nullopt) : streamId(streamIdIn), @@ -746,7 +746,7 @@ struct DatagramFrame { size_t length; BufQueue data; - explicit DatagramFrame(size_t len, Buf buf) + explicit DatagramFrame(size_t len, BufPtr buf) : length(len), data(std::move(buf)) { CHECK_EQ(length, data.chainLength()); } @@ -794,9 +794,9 @@ struct QuicAddrValidationToken { QuicAddrValidationToken& operator=(const QuicAddrValidationToken& other) = default; - [[nodiscard]] Buf getPlaintextToken() const; + [[nodiscard]] BufPtr getPlaintextToken() const; [[nodiscard]] virtual TokenType getTokenType() const = 0; - [[nodiscard]] virtual Buf genAeadAssocData() const = 0; + [[nodiscard]] virtual BufPtr genAeadAssocData() const = 0; virtual ~QuicAddrValidationToken() = default; folly::IPAddress clientIp; @@ -824,7 +824,7 @@ struct RetryToken : QuicAddrValidationToken { return tokenType; } - [[nodiscard]] Buf genAeadAssocData() const override; + [[nodiscard]] BufPtr genAeadAssocData() const override; ConnectionId originalDstConnId; uint16_t clientPort; @@ -849,7 +849,7 @@ struct NewToken : QuicAddrValidationToken { return tokenType; } - [[nodiscard]] Buf genAeadAssocData() const override; + [[nodiscard]] BufPtr genAeadAssocData() const override; bool operator==(const NewToken& other) const { return clientIp == other.clientIp && timestampInMs == other.timestampInMs; diff --git a/quic/codec/test/DecodeTest.cpp b/quic/codec/test/DecodeTest.cpp index 1a7f85057..1af13f4cb 100644 --- a/quic/codec/test/DecodeTest.cpp +++ b/quic/codec/test/DecodeTest.cpp @@ -138,7 +138,7 @@ std::unique_ptr createStreamFrame( Optional streamId, Optional offset = none, Optional dataLength = none, - Buf data = nullptr, + BufPtr data = nullptr, bool useRealValuesForStreamId = false, Optional groupId = none) { std::unique_ptr streamFrame = folly::IOBuf::create(0); @@ -169,7 +169,7 @@ std::unique_ptr createStreamFrame( std::unique_ptr createCryptoFrame( Optional offset = none, Optional dataLength = none, - Buf data = nullptr) { + BufPtr data = nullptr) { std::unique_ptr cryptoFrame = folly::IOBuf::create(0); BufAppender wcursor(cryptoFrame.get(), 10); auto appenderOp = [&](auto val) { wcursor.writeBE(val); }; @@ -825,7 +825,7 @@ TEST_F(DecodeTest, StreamIncorrectDataLength) { TEST_F(DecodeTest, StreamNoRemainingData) { // assume after parsing the frame type (stream frame), there was no remaining // data - quic::Buf buf = folly::IOBuf::copyBuffer("test"); + quic::BufPtr buf = folly::IOBuf::copyBuffer("test"); BufQueue queue(std::move(buf)); queue.trimStartAtMost(4); @@ -839,7 +839,7 @@ TEST_F(DecodeTest, StreamNoRemainingData) { TEST_F(DecodeTest, DatagramNoRemainingData) { // assume after parsing the frame type (datagram frame), there was no // remaining data - quic::Buf buf = folly::IOBuf::copyBuffer("test"); + quic::BufPtr buf = folly::IOBuf::copyBuffer("test"); BufQueue queue(std::move(buf)); queue.trimStartAtMost(4); @@ -983,7 +983,7 @@ TEST_F(DecodeTest, DecodeMultiplePaddingTest) { std::unique_ptr createNewTokenFrame( Optional tokenLength = none, - Buf token = nullptr) { + BufPtr token = nullptr) { std::unique_ptr newTokenFrame = folly::IOBuf::create(0); BufAppender wcursor(newTokenFrame.get(), 10); auto appenderOp = [&](auto val) { wcursor.writeBE(val); }; @@ -1031,7 +1031,7 @@ TEST_F(DecodeTest, ParsePlaintextNewToken) { .count(); NewToken newToken(clientIp, timestampInMs); - Buf plaintextNewToken = newToken.getPlaintextToken(); + BufPtr plaintextNewToken = newToken.getPlaintextToken(); folly::io::Cursor cursor(plaintextNewToken.get()); @@ -1052,7 +1052,7 @@ TEST_F(DecodeTest, ParsePlaintextRetryToken) { .count(); RetryToken retryToken(odcid, clientIp, clientPort, timestampInMs); - Buf plaintextRetryToken = retryToken.getPlaintextToken(); + BufPtr plaintextRetryToken = retryToken.getPlaintextToken(); folly::io::Cursor cursor(plaintextRetryToken.get()); diff --git a/quic/codec/test/Mocks.h b/quic/codec/test/Mocks.h index be3e2303e..c6e1a9c59 100644 --- a/quic/codec/test/Mocks.h +++ b/quic/codec/test/Mocks.h @@ -139,7 +139,7 @@ class MockQuicPacketBuilder : public PacketBuilderInterface { CHECK(false) << "Use buildTestPacket()"; } - std::pair buildTestPacket() && { + std::pair buildTestPacket() && { ShortHeader header( ProtectionType::KeyPhaseZero, getTestConnectionId(), 0x01); RegularQuicWritePacket regularPacket(std::move(header)); @@ -147,7 +147,7 @@ class MockQuicPacketBuilder : public PacketBuilderInterface { return std::make_pair(std::move(regularPacket), std::move(data_)); } - std::pair buildLongHeaderPacket() && { + std::pair buildLongHeaderPacket() && { ConnectionId connId = getTestConnectionId(); PacketNum packetNum = 10; LongHeader header( diff --git a/quic/codec/test/QuicPacketBuilderTest.cpp b/quic/codec/test/QuicPacketBuilderTest.cpp index b0d91b282..ef096af0c 100644 --- a/quic/codec/test/QuicPacketBuilderTest.cpp +++ b/quic/codec/test/QuicPacketBuilderTest.cpp @@ -24,7 +24,7 @@ using namespace testing; enum TestFlavor { Regular, Inplace }; -Buf packetToBuf( +BufPtr packetToBuf( RegularQuicPacketBuilder::Packet& packet, Aead* aead = nullptr) { auto buf = folly::IOBuf::create(0); @@ -605,7 +605,7 @@ TEST_F(QuicPacketBuilderTest, PseudoRetryPacket) { ConnectionId originalDestinationConnectionId( {0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51, 0x57, 0x08}); auto quicVersion = static_cast(0xff00001d); - Buf token = folly::IOBuf::copyBuffer(R"(token)"); + BufPtr token = folly::IOBuf::copyBuffer(R"(token)"); PseudoRetryPacketBuilder builder( initialByte, @@ -615,11 +615,11 @@ TEST_F(QuicPacketBuilderTest, PseudoRetryPacket) { quicVersion, std::move(token)); - Buf pseudoRetryPacketBuf = std::move(builder).buildPacket(); + BufPtr pseudoRetryPacketBuf = std::move(builder).buildPacket(); FizzRetryIntegrityTagGenerator fizzRetryIntegrityTagGenerator; auto integrityTag = fizzRetryIntegrityTagGenerator.getRetryIntegrityTag( quicVersion, pseudoRetryPacketBuf.get()); - Buf expectedIntegrityTag = folly::IOBuf::copyBuffer( + BufPtr expectedIntegrityTag = folly::IOBuf::copyBuffer( "\xd1\x69\x26\xd8\x1f\x6f\x9c\xa2\x95\x3a\x8a\xa4\x57\x5e\x1e\x49"); folly::io::Cursor cursorActual(integrityTag.get()); @@ -636,7 +636,7 @@ TEST_F(QuicPacketBuilderTest, PseudoRetryPacketLarge) { ConnectionId originalDestinationConnectionId( {0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51, 0x57, 0x08}); auto quicVersion = static_cast(0xff00001d); - Buf token = folly::IOBuf::create(500); + BufPtr token = folly::IOBuf::create(500); token->append(500); PseudoRetryPacketBuilder builder( @@ -646,7 +646,7 @@ TEST_F(QuicPacketBuilderTest, PseudoRetryPacketLarge) { originalDestinationConnectionId, quicVersion, std::move(token)); - Buf pseudoRetryPacketBuf = std::move(builder).buildPacket(); + BufPtr pseudoRetryPacketBuf = std::move(builder).buildPacket(); } TEST_F(QuicPacketBuilderTest, RetryPacketValid) { @@ -675,7 +675,7 @@ TEST_F(QuicPacketBuilderTest, RetryPacketValid) { srcConnId, dstConnId, quicVersion, std::string(retryToken), integrityTag); EXPECT_TRUE(builder.canBuildPacket()); - Buf retryPacket = std::move(builder).buildPacket(); + BufPtr retryPacket = std::move(builder).buildPacket(); uint32_t expectedPacketLen = 1 /* initial byte */ + 4 /* version */ + 1 /* dcid length */ + dstConnId.size() + 1 /* scid length */ + @@ -709,14 +709,14 @@ TEST_F(QuicPacketBuilderTest, RetryPacketValid) { EXPECT_EQ(scidObtained, srcConnId); // retry token - Buf retryTokenObtained; + BufPtr retryTokenObtained; cursor.clone( retryTokenObtained, cursor.totalLength() - kRetryIntegrityTagLen); std::string retryTokenObtainedString = retryTokenObtained->to(); EXPECT_EQ(retryTokenObtainedString, retryToken); // integrity tag - Buf integrityTagObtained; + BufPtr integrityTagObtained; cursor.clone(integrityTagObtained, kRetryIntegrityTagLen); EXPECT_TRUE(folly::IOBufEqualTo()( *integrityTagObtained, diff --git a/quic/codec/test/QuicReadCodecTest.cpp b/quic/codec/test/QuicReadCodecTest.cpp index 657f43f5e..d73121db5 100644 --- a/quic/codec/test/QuicReadCodecTest.cpp +++ b/quic/codec/test/QuicReadCodecTest.cpp @@ -110,7 +110,7 @@ TEST_F(QuicReadCodecTest, RetryPacketTest) { std::string token = "fluffydog"; std::string integrityTag = "MustBe16CharLong"; - Buf retryPacketEncoded = std::make_unique(); + BufPtr retryPacketEncoded = std::make_unique(); BufAppender appender(retryPacketEncoded.get(), 100); appender.writeBE(initialByte); diff --git a/quic/codec/test/QuicWriteCodecTest.cpp b/quic/codec/test/QuicWriteCodecTest.cpp index 782012391..f14fd7ff7 100644 --- a/quic/codec/test/QuicWriteCodecTest.cpp +++ b/quic/codec/test/QuicWriteCodecTest.cpp @@ -115,13 +115,13 @@ void setupCommonExpects(MockQuicPacketBuilder& pktBuilder) { })); EXPECT_CALL(pktBuilder, _insert(_)) - .WillRepeatedly(WithArgs<0>(Invoke([&](Buf& buf) { + .WillRepeatedly(WithArgs<0>(Invoke([&](BufPtr& buf) { pktBuilder.remaining_ -= buf->computeChainDataLength(); pktBuilder.appender_.insert(std::move(buf)); }))); EXPECT_CALL(pktBuilder, _insert(_, _)) - .WillRepeatedly(WithArgs<0, 1>(Invoke([&](Buf& buf, size_t limit) { + .WillRepeatedly(WithArgs<0, 1>(Invoke([&](BufPtr& buf, size_t limit) { pktBuilder.remaining_ -= limit; std::unique_ptr cloneBuf; folly::io::Cursor cursor(buf.get()); @@ -939,7 +939,7 @@ TEST_F(QuicWriteCodecTest, TestWriteNoDataAndFin) { StreamId streamId = 1; uint64_t offset = 0; bool fin = true; - Buf empty; + BufPtr empty; auto res = writeStreamFrameHeader( pktBuilder, streamId, offset, 0, 0, fin, none /* skipLenHint */); ASSERT_TRUE(res.hasValue()); @@ -954,7 +954,7 @@ TEST_F(QuicWriteCodecTest, TestWriteNoDataAndNoFin) { StreamId streamId = 1; uint64_t offset = 0; bool fin = false; - Buf empty; + BufPtr empty; auto res = writeStreamFrameHeader( pktBuilder, streamId, offset, 0, 0, fin, none /* skipLenHint */); EXPECT_TRUE(res.hasError()); diff --git a/quic/codec/test/TypesTest.cpp b/quic/codec/test/TypesTest.cpp index 11a68a2bd..389d165f1 100644 --- a/quic/codec/test/TypesTest.cpp +++ b/quic/codec/test/TypesTest.cpp @@ -17,13 +17,13 @@ using namespace testing; namespace quic::test { -std::pair encodeShortHeader(const ShortHeader& header) { +std::pair encodeShortHeader(const ShortHeader& header) { ShortHeader headerCopy = header; RegularQuicPacketBuilder builder( kDefaultUDPSendPacketLen, std::move(headerCopy), 0 /* largestAcked */); CHECK(!builder.encodePacketHeader().hasError()); auto packet = std::move(builder).buildPacket(); - Buf out; + BufPtr out; folly::io::Cursor cursor(&packet.header); auto initialByte = cursor.readBE(); cursor.clone(out, cursor.totalLength()); diff --git a/quic/common/BufAccessor.cpp b/quic/common/BufAccessor.cpp index ea42b00ed..94da7b52d 100644 --- a/quic/common/BufAccessor.cpp +++ b/quic/common/BufAccessor.cpp @@ -9,7 +9,7 @@ namespace quic { -BufAccessor::BufAccessor(Buf buf) +BufAccessor::BufAccessor(BufPtr buf) : buf_(std::move(buf)), capacity_(buf_->capacity()) { CHECK(!buf_->isShared() && !buf_->isChained()); } @@ -17,21 +17,21 @@ BufAccessor::BufAccessor(Buf buf) BufAccessor::BufAccessor(size_t capacity) : BufAccessor(BufHelpers::createCombined(capacity)) {} -Buf BufAccessor::obtain() { - Buf ret; +BufPtr BufAccessor::obtain() { + BufPtr ret; buf_.swap(ret); return ret; } -Buf& BufAccessor::buf() { +BufPtr& BufAccessor::buf() { return buf_; } -void BufAccessor::release(Buf buf) { +void BufAccessor::release(BufPtr buf) { CHECK(!buf_) << "Can't override existing buf"; - CHECK(buf) << "Invalid Buf being released"; + CHECK(buf) << "Invalid BufPtr being released"; CHECK_EQ(buf->capacity(), capacity_) - << "Buf has wrong capacity, capacit_=" << capacity_ + << "BufPtr has wrong capacity, capacit_=" << capacity_ << ", buf capacity=" << buf->capacity(); CHECK(!buf->isChained()) << "Reject chained buf"; buf_ = std::move(buf); diff --git a/quic/common/BufAccessor.h b/quic/common/BufAccessor.h index 01724e0ca..9cccf5519 100644 --- a/quic/common/BufAccessor.h +++ b/quic/common/BufAccessor.h @@ -19,7 +19,7 @@ namespace quic { */ class BufAccessor { public: - explicit BufAccessor(Buf buf); + explicit BufAccessor(BufPtr buf); // The result capacity could be higher than the desired capacity. explicit BufAccessor(size_t capacity); @@ -28,18 +28,18 @@ class BufAccessor { // API will be removed once we make the BufAccessor work on a uint8_t* instead // of an IOBuf. - Buf& buf(); + BufPtr& buf(); // API will be removed once we make the BufAccessor work on a uint8_t* instead // of an IOBuf. - Buf obtain(); + BufPtr obtain(); /** * Caller releases the IOBuf back to the accessor to own. The capacity has to * match the original IOBuf. API will be removed once we make the BufAccessor * work on a uint8_t* instead of an IOBuf. */ - void release(Buf buf); + void release(BufPtr buf); /** * Returns whether the BufAccessor currently owns an IOBuf. @@ -67,7 +67,7 @@ class BufAccessor { void append(std::size_t amount); private: - Buf buf_; + BufPtr buf_; size_t capacity_; }; } // namespace quic diff --git a/quic/common/BufUtil.cpp b/quic/common/BufUtil.cpp index f8dc89f9a..dd0b50a16 100644 --- a/quic/common/BufUtil.cpp +++ b/quic/common/BufUtil.cpp @@ -9,7 +9,7 @@ namespace quic { -size_t fillIovec(Buf& buf, iovec (&vec)[16]) { +size_t fillIovec(BufPtr& buf, iovec (&vec)[16]) { size_t iovec_len = buf->fillIov(vec, sizeof(vec) / sizeof(vec[0])).numIovecs; if (FOLLY_UNLIKELY(iovec_len == 0)) { buf->coalesce(); @@ -20,8 +20,8 @@ size_t fillIovec(Buf& buf, iovec (&vec)[16]) { return iovec_len; } -Buf BufQueue::splitAtMost(size_t len) { - RawBuf* current = chain_.get(); +BufPtr BufQueue::splitAtMost(size_t len) { + Buf* current = chain_.get(); // empty queue / requested 0 bytes if (current == nullptr || len == 0) { return BufHelpers::create(0); @@ -32,7 +32,7 @@ Buf BufQueue::splitAtMost(size_t len) { } chainLength_ -= len; - Buf result; + BufPtr result; /** * Find the last IOBuf containing range requested. This will definitively * terminate without looping back to chain_ since we know chainLength_ > len. @@ -59,18 +59,18 @@ Buf BufQueue::splitAtMost(size_t len) { if (current != chain_.get()) { result->appendToChain( current->separateChain(chain_.get(), current->prev())); - result = Buf(result.release()->next()); + result = BufPtr(result.release()->next()); } } // update chain_ (void)chain_.release(); - chain_ = Buf(current); + chain_ = BufPtr(current); DCHECK_EQ(chainLength_, chain_ ? chain_->computeChainDataLength() : 0); return result; } size_t BufQueue::trimStartAtMost(size_t amount) { - RawBuf* current = chain_.get(); + Buf* current = chain_.get(); // empty queue / requested 0 bytes if (current == nullptr || amount == 0) { return 0; @@ -117,7 +117,7 @@ void BufQueue::trimStart(size_t amount) { } } -void BufQueue::append(Buf&& buf) { +void BufQueue::append(BufPtr&& buf) { if (!buf || buf->empty()) { return; } @@ -125,7 +125,7 @@ void BufQueue::append(Buf&& buf) { appendToChain(chain_, std::move(buf)); } -void BufQueue::appendToChain(Buf& dst, Buf&& src) { +void BufQueue::appendToChain(BufPtr& dst, BufPtr&& src) { if (dst == nullptr) { dst = std::move(src); } else { @@ -133,13 +133,13 @@ void BufQueue::appendToChain(Buf& dst, Buf&& src) { } } -BufAppender::BufAppender(RawBuf* data, size_t appendLen) +BufAppender::BufAppender(Buf* data, size_t appendLen) : crtBuf_(CHECK_NOTNULL(data)), head_(data), appendLen_(appendLen) {} void BufAppender::push(const uint8_t* data, size_t len) { if (crtBuf_->tailroom() < len || lastBufShared_) { auto newBuf = BufHelpers::createCombined(std::max(appendLen_, len)); - RawBuf* newBufPtr = newBuf.get(); + Buf* newBufPtr = newBuf.get(); head_->prependChain(std::move(newBuf)); crtBuf_ = newBufPtr; } @@ -148,10 +148,10 @@ void BufAppender::push(const uint8_t* data, size_t len) { lastBufShared_ = false; } -void BufAppender::insert(Buf data) { +void BufAppender::insert(BufPtr data) { // just skip the current buffer and append it to the end of the current // buffer. - RawBuf* dataPtr = data.get(); + Buf* dataPtr = data.get(); // If the buffer is shared we do not want to overrwrite the tail of the // buffer. lastBufShared_ = data->isShared(); @@ -168,12 +168,12 @@ void BufWriter::push(const uint8_t* data, size_t len) { append(len); } -void BufWriter::insert(const RawBuf* data) { +void BufWriter::insert(const Buf* data) { auto totalLength = data->computeChainDataLength(); insert(data, totalLength); } -void BufWriter::insert(const RawBuf* data, size_t limit) { +void BufWriter::insert(const Buf* data, size_t limit) { copy(data, limit); } @@ -191,13 +191,13 @@ void BufWriter::append(size_t len) { appendCount_ += len; } -void BufWriter::copy(const RawBuf* data, size_t limit) { +void BufWriter::copy(const Buf* data, size_t limit) { if (!limit) { return; } sizeCheck(limit); size_t totalInserted = 0; - const RawBuf* curBuf = data; + const Buf* curBuf = data; auto remaining = limit; do { auto lenToCopy = std::min(curBuf->length(), remaining); diff --git a/quic/common/BufUtil.h b/quic/common/BufUtil.h index 1690c772d..a474a9f25 100644 --- a/quic/common/BufUtil.h +++ b/quic/common/BufUtil.h @@ -13,13 +13,13 @@ namespace quic { -size_t fillIovec(Buf& buf, iovec (&vec)[16]); +size_t fillIovec(BufPtr& buf, iovec (&vec)[16]); class BufQueue { public: BufQueue() = default; - BufQueue(Buf chain) : chain_(std::move(chain)) { + BufQueue(BufPtr chain) : chain_(std::move(chain)) { if (chain_) { chainLength_ = chain_->computeChainDataLength(); } @@ -50,36 +50,36 @@ class BufQueue { return chainLength_ == 0; } - Buf move() { + BufPtr move() { chainLength_ = 0; return std::move(chain_); } - Buf clone() const { + BufPtr clone() const { return chain_ ? chain_->clone() : nullptr; } - const RawBuf* front() const { + const Buf* front() const { return chain_.get(); } - Buf splitAtMost(size_t n); + BufPtr splitAtMost(size_t n); size_t trimStartAtMost(size_t amount); void trimStart(size_t amount); - void append(Buf&& buf); + void append(BufPtr&& buf); private: - void appendToChain(Buf& dst, Buf&& src); - Buf chain_; + void appendToChain(BufPtr& dst, BufPtr&& src); + BufPtr chain_; size_t chainLength_{0}; }; class BufAppender { public: - BufAppender(RawBuf* data, size_t appendLen); + BufAppender(Buf* data, size_t appendLen); template void writeBE(T data) { @@ -89,11 +89,11 @@ class BufAppender { void push(const uint8_t* data, size_t len); - void insert(Buf data); + void insert(BufPtr data); private: - RawBuf* crtBuf_; - RawBuf* head_; + Buf* crtBuf_; + Buf* head_; size_t appendLen_; bool lastBufShared_{false}; }; @@ -122,8 +122,8 @@ class BufWriter { // TODO: OK, "insert" is a lie. Inside, we copy. But I'd like the BufWriter // to have the same interface as BufAppender during the transition period. - void insert(const RawBuf* data); - void insert(const RawBuf* data, size_t limit); + void insert(const Buf* data); + void insert(const Buf* data, size_t limit); void insert(const ChainedByteRangeHead* data); void insert(const ChainedByteRangeHead* data, size_t limit); @@ -148,7 +148,7 @@ class BufWriter { << " written=" << written_ << " limit=" << most_; } - void copy(const RawBuf* data, size_t limit); + void copy(const Buf* data, size_t limit); void copy(const ChainedByteRangeHead* data, size_t limit); private: diff --git a/quic/common/ChainedByteRange.cpp b/quic/common/ChainedByteRange.cpp index df031f6ec..992baebd4 100644 --- a/quic/common/ChainedByteRange.cpp +++ b/quic/common/ChainedByteRange.cpp @@ -19,7 +19,7 @@ namespace quic { return result; } -ChainedByteRangeHead::ChainedByteRangeHead(const Buf& buf) { +ChainedByteRangeHead::ChainedByteRangeHead(const BufPtr& buf) { if (!buf || buf->empty()) { return; } @@ -59,7 +59,7 @@ ChainedByteRangeHead::~ChainedByteRangeHead() { resetChain(); } -void ChainedByteRangeHead::append(const Buf& buf) { +void ChainedByteRangeHead::append(const BufPtr& buf) { if (!buf || buf->empty()) { return; } diff --git a/quic/common/ChainedByteRange.h b/quic/common/ChainedByteRange.h index 23c7450ff..ce17a9d95 100644 --- a/quic/common/ChainedByteRange.h +++ b/quic/common/ChainedByteRange.h @@ -62,7 +62,7 @@ class ChainedByteRangeHead { }; public: - explicit ChainedByteRangeHead(const Buf& buf); + explicit ChainedByteRangeHead(const BufPtr& buf); ChainedByteRangeHead() = default; @@ -93,7 +93,7 @@ class ChainedByteRangeHead { size_t trimStartAtMost(size_t len); - void append(const Buf& buf); + void append(const BufPtr& buf); void append(ChainedByteRangeHead&& chainHead); diff --git a/quic/common/NetworkData.h b/quic/common/NetworkData.h index baf8e45e2..5d0c24d13 100644 --- a/quic/common/NetworkData.h +++ b/quic/common/NetworkData.h @@ -56,9 +56,9 @@ struct ReceivedUdpPacket { ReceivedUdpPacket() = default; - explicit ReceivedUdpPacket(Buf&& bufIn) : buf(std::move(bufIn)) {} + explicit ReceivedUdpPacket(BufPtr&& bufIn) : buf(std::move(bufIn)) {} - ReceivedUdpPacket(Buf&& bufIn, Timings timingsIn, uint8_t tosValueIn) + ReceivedUdpPacket(BufPtr&& bufIn, Timings timingsIn, uint8_t tosValueIn) : buf(std::move(bufIn)), timings(std::move(timingsIn)), tosValue(tosValueIn) {} @@ -74,7 +74,7 @@ struct NetworkData { NetworkData() = default; NetworkData( - Buf&& buf, + BufPtr&& buf, const TimePoint& receiveTimePointIn, uint8_t tosValueIn) : receiveTimePoint_(receiveTimePointIn) { @@ -93,7 +93,7 @@ struct NetworkData { } NetworkData( - std::vector&& packetBufs, + std::vector&& packetBufs, const TimePoint& receiveTimePointIn) : receiveTimePoint_(receiveTimePointIn), packets_([&packetBufs, &receiveTimePointIn]() { @@ -148,8 +148,8 @@ struct NetworkData { return totalData_; } - Buf moveAllData() && { - Buf buf; + BufPtr moveAllData() && { + BufPtr buf; for (auto& packet : packets_) { if (buf) { buf->prependChain(packet.buf.move()); diff --git a/quic/common/test/TestPacketBuilders.h b/quic/common/test/TestPacketBuilders.h index 5c00d76e7..bd2bbf157 100644 --- a/quic/common/test/TestPacketBuilders.h +++ b/quic/common/test/TestPacketBuilders.h @@ -45,7 +45,7 @@ struct AckPacketBuilder : public AckPacketBuilderFields { Builder&& setAead(const Aead* aeadIn); Builder&& setShortHeaderProtectionType(ProtectionType protectionTypeIn); RegularQuicPacketBuilder::Packet build() &&; - quic::Buf buildBuf() &&; + quic::BufPtr buildBuf() &&; explicit AckPacketBuilder() = default; }; diff --git a/quic/common/test/TestUtils.cpp b/quic/common/test/TestUtils.cpp index 546e064e6..71f15efa3 100644 --- a/quic/common/test/TestUtils.cpp +++ b/quic/common/test/TestUtils.cpp @@ -95,7 +95,7 @@ PacketNum rstStreamAndSendPacket( void writeStreamFrameData( PacketBuilderInterface& builder, - Buf writeBuffer, + BufPtr writeBuffer, uint64_t dataLen) { ChainedByteRangeHead dataHead(writeBuffer); writeStreamFrameData(builder, dataHead, dataLen); @@ -403,7 +403,7 @@ RegularQuicPacketBuilder::Packet createCryptoPacket( return std::move(builder).buildPacket(); } -Buf packetToBuf(const RegularQuicPacketBuilder::Packet& packet) { +BufPtr packetToBuf(const RegularQuicPacketBuilder::Packet& packet) { auto packetBuf = packet.header.clone(); if (!packet.body.empty()) { packetBuf->prependChain(packet.body.clone()); @@ -417,7 +417,7 @@ ReceivedUdpPacket packetToReceivedUdpPacket( return packet; } -Buf packetToBufCleartext( +BufPtr packetToBufCleartext( RegularQuicPacketBuilder::Packet& packet, const Aead& cleartextCipher, const PacketNumberCipher& headerCipher, @@ -425,7 +425,7 @@ Buf packetToBufCleartext( VLOG(10) << __func__ << " packet header: " << folly::hexlify(packet.header.clone()->moveToFbString()); auto packetBuf = packet.header.clone(); - Buf body; + BufPtr body; if (!packet.body.empty()) { packet.body.coalesce(); body = packet.body.clone(); @@ -453,7 +453,7 @@ Buf packetToBufCleartext( return packetBuf; } -Buf packetToBufCleartext( +BufPtr packetToBufCleartext( RegularQuicPacketBuilder::Packet&& packet, const Aead& cleartextCipher, const PacketNumberCipher& headerCipher, @@ -606,7 +606,7 @@ CongestionController::AckEvent makeAck( return ack; } -BufQueue bufToQueue(Buf buf) { +BufQueue bufToQueue(BufPtr buf) { BufQueue queue; buf->coalesce(); queue.append(std::move(buf)); @@ -846,12 +846,14 @@ size_t getTotalIovecLen(const struct iovec* vec, size_t iovec_len) { return result; } -Buf copyChain(Buf&& input) { +BufPtr copyChain(BufPtr&& input) { folly::IOBuf* current = input.get(); - Buf headCopy = folly::IOBuf::copyBuffer(current->data(), current->length()); + BufPtr headCopy = + folly::IOBuf::copyBuffer(current->data(), current->length()); current = current->next(); while (current != input.get()) { - Buf currCopy = folly::IOBuf::copyBuffer(current->data(), current->length()); + BufPtr currCopy = + folly::IOBuf::copyBuffer(current->data(), current->length()); headCopy->appendToChain(std::move(currCopy)); current = current->next(); } diff --git a/quic/common/test/TestUtils.h b/quic/common/test/TestUtils.h index fd5074029..774ebe407 100644 --- a/quic/common/test/TestUtils.h +++ b/quic/common/test/TestUtils.h @@ -71,7 +71,7 @@ PacketNum rstStreamAndSendPacket( void writeStreamFrameData( PacketBuilderInterface& builder, - Buf writeBuffer, + BufPtr writeBuffer, uint64_t dataLen); // TODO: this is a really horrible API. User can easily pass srcConnId and @@ -119,18 +119,18 @@ RegularQuicPacketBuilder::Packet createCryptoPacket( uint64_t offset = 0, uint64_t packetSizeLimit = kDefaultUDPSendPacketLen); -Buf packetToBuf(const RegularQuicPacketBuilder::Packet& packet); +BufPtr packetToBuf(const RegularQuicPacketBuilder::Packet& packet); ReceivedUdpPacket packetToReceivedUdpPacket( const RegularQuicPacketBuilder::Packet& packetIn); -Buf packetToBufCleartext( +BufPtr packetToBufCleartext( RegularQuicPacketBuilder::Packet& packet, const Aead& cleartextCipher, const PacketNumberCipher& headerCipher, PacketNum packetNum); -Buf packetToBufCleartext( +BufPtr packetToBufCleartext( RegularQuicPacketBuilder::Packet&& packet, const Aead& cleartextCipher, const PacketNumberCipher& headerCipher, @@ -263,7 +263,7 @@ CongestionController::AckEvent makeAck( TimePoint ackedTime, TimePoint sendTime); -BufQueue bufToQueue(Buf buf); +BufQueue bufToQueue(BufPtr buf); StatelessResetToken generateStatelessResetToken(); @@ -318,9 +318,11 @@ auto findFrameInPacketFunc() { CongestionController::AckEvent::AckPacket makeAckPacketFromOutstandingPacket( OutstandingPacketWrapper outstandingPacket); -// A Buf based overload of writeCryptoFrame for test only -Optional -writeCryptoFrame(uint64_t offsetIn, Buf data, PacketBuilderInterface& builder); +// A BufPtr based overload of writeCryptoFrame for test only +Optional writeCryptoFrame( + uint64_t offsetIn, + BufPtr data, + PacketBuilderInterface& builder); void overridePacketWithToken( PacketBuilderInterface::Packet& packet, @@ -555,7 +557,7 @@ class FakeServerHandshake : public FizzServerHandshake { return createNoOpAead(); } - Buf getNextTrafficSecret(folly::ByteRange /*secret*/) const override { + BufPtr getNextTrafficSecret(folly::ByteRange /*secret*/) const override { return folly::IOBuf::copyBuffer(getRandSecret()); } @@ -593,6 +595,6 @@ class FakeServerHandshake : public FizzServerHandshake { size_t getTotalIovecLen(const struct iovec* vec, size_t iovec_len); -Buf copyChain(Buf&& input); +BufPtr copyChain(BufPtr&& input); } // namespace quic::test diff --git a/quic/common/udpsocket/FollyQuicAsyncUDPSocket.cpp b/quic/common/udpsocket/FollyQuicAsyncUDPSocket.cpp index f3efe5691..ce3c0e5fd 100644 --- a/quic/common/udpsocket/FollyQuicAsyncUDPSocket.cpp +++ b/quic/common/udpsocket/FollyQuicAsyncUDPSocket.cpp @@ -181,7 +181,7 @@ ssize_t FollyQuicAsyncUDPSocket::writeGSO( int FollyQuicAsyncUDPSocket::writemGSO( folly::Range addrs, - const Buf* bufs, + const BufPtr* bufs, size_t count, const WriteOptions* options) { try { diff --git a/quic/common/udpsocket/FollyQuicAsyncUDPSocket.h b/quic/common/udpsocket/FollyQuicAsyncUDPSocket.h index dfa8e58c9..4d519b2bb 100644 --- a/quic/common/udpsocket/FollyQuicAsyncUDPSocket.h +++ b/quic/common/udpsocket/FollyQuicAsyncUDPSocket.h @@ -94,7 +94,7 @@ class FollyQuicAsyncUDPSocket : public QuicAsyncUDPSocketImpl { /** * Send the data in buffers to destination. Returns the return code from * ::sendmmsg. - * bufs is an array of Buf + * bufs is an array of BufPtr * of size num * options is an array of WriteOptions or nullptr * Before calling writeGSO with a positive value @@ -102,7 +102,7 @@ class FollyQuicAsyncUDPSocket : public QuicAsyncUDPSocketImpl { */ int writemGSO( folly::Range addrs, - const Buf* bufs, + const BufPtr* bufs, size_t count, const WriteOptions* options) override; diff --git a/quic/common/udpsocket/LibevQuicAsyncUDPSocket.h b/quic/common/udpsocket/LibevQuicAsyncUDPSocket.h index f215ab422..6d471054f 100644 --- a/quic/common/udpsocket/LibevQuicAsyncUDPSocket.h +++ b/quic/common/udpsocket/LibevQuicAsyncUDPSocket.h @@ -63,7 +63,7 @@ class LibevQuicAsyncUDPSocket : public QuicAsyncUDPSocketImpl { /** * Send the data in buffers to destination. Returns the return code from * ::sendmmsg. - * bufs is an array of Buf + * bufs is an array of BufPtr * of size num * options is an array of WriteOptions or nullptr * Before calling writeGSO with a positive value @@ -71,7 +71,7 @@ class LibevQuicAsyncUDPSocket : public QuicAsyncUDPSocketImpl { */ int writemGSO( folly::Range /*addrs*/, - const Buf* /*bufs*/, + const BufPtr* /*bufs*/, size_t /*count*/, const WriteOptions* /*options*/) override { LOG(FATAL) << __func__ << " not supported in LibevQuicAsyncUDPSocket"; diff --git a/quic/common/udpsocket/QuicAsyncUDPSocket.h b/quic/common/udpsocket/QuicAsyncUDPSocket.h index 91b0860ff..ad7337273 100644 --- a/quic/common/udpsocket/QuicAsyncUDPSocket.h +++ b/quic/common/udpsocket/QuicAsyncUDPSocket.h @@ -221,7 +221,7 @@ class QuicAsyncUDPSocket { /** * Send the data in buffers to destination. Returns the return code from * ::sendmmsg. - * bufs is an array of Buf + * bufs is an array of BufPtr * of size num * options is an array of WriteOptions or nullptr * Before calling writeGSO with a positive value @@ -229,7 +229,7 @@ class QuicAsyncUDPSocket { */ virtual int writemGSO( folly::Range addrs, - const Buf* bufs, + const BufPtr* bufs, size_t count, const WriteOptions* options) = 0; diff --git a/quic/common/udpsocket/QuicAsyncUDPSocketImpl.h b/quic/common/udpsocket/QuicAsyncUDPSocketImpl.h index 358ed64a4..f906f84cb 100644 --- a/quic/common/udpsocket/QuicAsyncUDPSocketImpl.h +++ b/quic/common/udpsocket/QuicAsyncUDPSocketImpl.h @@ -27,7 +27,7 @@ class QuicAsyncUDPSocketImpl : public QuicAsyncUDPSocket { struct sockaddr_storage addr; struct iovec iovec; // Buffers we pass to recvmmsg. - Buf readBuffer; + BufPtr readBuffer; }; // Storage for the recvmmsg system call. diff --git a/quic/dsr/backend/DSRPacketizer.cpp b/quic/dsr/backend/DSRPacketizer.cpp index 68c8b984d..d5dd3989e 100644 --- a/quic/dsr/backend/DSRPacketizer.cpp +++ b/quic/dsr/backend/DSRPacketizer.cpp @@ -22,7 +22,7 @@ bool PacketGroupWriter::writeSingleQuicPacket( size_t offset, size_t length, bool eof, - Buf buf) { + BufPtr buf) { if (buf->computeChainDataLength() < length) { LOG(ERROR) << "Insufficient data buffer"; return false; @@ -113,7 +113,7 @@ bool PacketGroupWriter::writeSingleQuicPacket( BufQuicBatchResult PacketGroupWriter::writePacketsGroup( RequestGroup& reqGroup, - const std::function& bufProvider) { + const std::function& bufProvider) { if (reqGroup.requests.empty()) { LOG(ERROR) << "Empty packetization request"; return {}; diff --git a/quic/dsr/backend/DSRPacketizer.h b/quic/dsr/backend/DSRPacketizer.h index adf347af7..84f44c9c7 100644 --- a/quic/dsr/backend/DSRPacketizer.h +++ b/quic/dsr/backend/DSRPacketizer.h @@ -57,7 +57,7 @@ class CipherBuilder { CipherPair buildCiphers( fizz::TrafficKey&& trafficKey, fizz::CipherSuite cipherSuite, - Buf packetProtectionKey) { + BufPtr packetProtectionKey) { auto aead = FizzAead::wrap(deriveRecordAeadWithLabel( *quicFizzCryptoFactory_.getFizzFactory(), std::move(trafficKey), @@ -86,7 +86,7 @@ class QuicPacketizer { public: virtual ~QuicPacketizer() = default; - virtual Buf sendQuicPacket( + virtual BufPtr sendQuicPacket( ConnectionId dcid, const folly::SocketAddress& clientAddr, PacketNum packetNum, @@ -143,7 +143,8 @@ class PacketGroupWriter { BufQuicBatchResult writePacketsGroup( RequestGroup& reqGroup, - const std::function& bufProvider); + const std::function& + bufProvider); bool writeSingleQuicPacket( BufAccessor& accessor, @@ -156,7 +157,7 @@ class PacketGroupWriter { size_t offset, size_t length, bool eof, - Buf buf); + BufPtr buf); protected: uint32_t prevSize_{0}; diff --git a/quic/dsr/backend/test/DSRPacketizerTest.cpp b/quic/dsr/backend/test/DSRPacketizerTest.cpp index 8e3bf3820..e1344eec5 100644 --- a/quic/dsr/backend/test/DSRPacketizerTest.cpp +++ b/quic/dsr/backend/test/DSRPacketizerTest.cpp @@ -168,7 +168,7 @@ TEST_F(DSRMultiWriteTest, TwoRequestsWithLoss) { EXPECT_EQ(expectedFirstFrame, *packet1.frames[0].asWriteStreamFrame()); EXPECT_EQ(expectedSecondFrame, *packet2.frames[0].asWriteStreamFrame()); - std::vector sentData; + std::vector sentData; auto sock = std::make_unique>(qEvb_); EXPECT_CALL(*sock, writeGSO(conn_.peerAddress, _, _, _)) .WillRepeatedly(Invoke([&](const folly::SocketAddress&, diff --git a/quic/dsr/test/TestCommon.h b/quic/dsr/test/TestCommon.h index 71fa7ed0a..def14ede4 100644 --- a/quic/dsr/test/TestCommon.h +++ b/quic/dsr/test/TestCommon.h @@ -126,7 +126,7 @@ class DSRCommonTestFixture : public testing::Test { std::unique_ptr aead_; std::unordered_map instructionCounter_; std::vector pendingInstructions_; - Buf packetProtectionKey_; + BufPtr packetProtectionKey_; std::unique_ptr serverHandshake_; }; } // namespace quic::test diff --git a/quic/fizz/client/handshake/FizzClientHandshake.cpp b/quic/fizz/client/handshake/FizzClientHandshake.cpp index 658b08e21..3ab20a75b 100644 --- a/quic/fizz/client/handshake/FizzClientHandshake.cpp +++ b/quic/fizz/client/handshake/FizzClientHandshake.cpp @@ -122,7 +122,7 @@ bool FizzClientHandshake::verifyRetryIntegrityTag( retryPacket.header.getVersion(), BufHelpers::copyBuffer(retryPacket.header.getToken())); - Buf pseudoRetryPacket = std::move(pseudoRetryPacketBuilder).buildPacket(); + BufPtr pseudoRetryPacket = std::move(pseudoRetryPacketBuilder).buildPacket(); FizzRetryIntegrityTagGenerator retryIntegrityTagGenerator; auto expectedIntegrityTag = retryIntegrityTagGenerator.getRetryIntegrityTag( @@ -202,7 +202,8 @@ std::unique_ptr FizzClientHandshake::buildHeaderCipher( return cryptoFactory_->makePacketNumberCipher(secret); } -Buf FizzClientHandshake::getNextTrafficSecret(folly::ByteRange secret) const { +BufPtr FizzClientHandshake::getNextTrafficSecret( + folly::ByteRange secret) const { auto deriver = state_.context()->getFactory()->makeKeyDeriver(*state_.cipher()); auto nextSecret = deriver->expandLabel( diff --git a/quic/fizz/client/handshake/FizzClientHandshake.h b/quic/fizz/client/handshake/FizzClientHandshake.h index 8ba66dbb0..f1e05cf82 100644 --- a/quic/fizz/client/handshake/FizzClientHandshake.h +++ b/quic/fizz/client/handshake/FizzClientHandshake.h @@ -79,7 +79,7 @@ class FizzClientHandshake : public ClientHandshake { override; std::unique_ptr buildHeaderCipher( folly::ByteRange secret) override; - Buf getNextTrafficSecret(folly::ByteRange secret) const override; + BufPtr getNextTrafficSecret(folly::ByteRange secret) const override; class ActionMoveVisitor; void processActions(fizz::client::Actions actions); diff --git a/quic/fizz/client/handshake/test/FizzClientHandshakeTest.cpp b/quic/fizz/client/handshake/test/FizzClientHandshakeTest.cpp index 1aabcb453..57b2ef599 100644 --- a/quic/fizz/client/handshake/test/FizzClientHandshakeTest.cpp +++ b/quic/fizz/client/handshake/test/FizzClientHandshakeTest.cpp @@ -213,7 +213,7 @@ class ClientHandshakeTest : public Test, public boost::static_visitor<> { expectOneRttCipher(expectOneRtt, true); } - Buf getHandshakeWriteBytes() { + BufPtr getHandshakeWriteBytes() { auto buf = folly::IOBuf::create(0); if (!cryptoState->initialStream.writeBuffer.empty()) { buf->prependChain(cryptoState->initialStream.writeBuffer.move()); @@ -463,7 +463,7 @@ TEST_F(ClientHandshakeCallbackTest, TestHandshakeSuccess) { clientServerRound(); bool gotEarlyDataParams = false; - conn->earlyDataAppParamsGetter = [&]() -> Buf { + conn->earlyDataAppParamsGetter = [&]() -> BufPtr { gotEarlyDataParams = true; return {}; }; diff --git a/quic/fizz/client/test/QuicClientTransportTest.cpp b/quic/fizz/client/test/QuicClientTransportTest.cpp index 03207d5d0..b9535265b 100644 --- a/quic/fizz/client/test/QuicClientTransportTest.cpp +++ b/quic/fizz/client/test/QuicClientTransportTest.cpp @@ -488,12 +488,12 @@ TEST_P(QuicClientTransportIntegrationTest, TestZeroRttSuccess) { Optional alpn = std::string("h3"); bool performedValidation = false; client->setEarlyDataAppParamsFunctions( - [&](const Optional& alpnToValidate, const Buf&) { + [&](const Optional& alpnToValidate, const BufPtr&) { performedValidation = true; EXPECT_EQ(alpnToValidate, alpn); return true; }, - []() -> Buf { return nullptr; }); + []() -> BufPtr { return nullptr; }); client->start(&clientConnSetupCallback, &clientConnCallback); EXPECT_TRUE(performedValidation); CHECK(client->getConn().zeroRttWriteCipher); @@ -566,12 +566,12 @@ TEST_P(QuicClientTransportIntegrationTest, ZeroRttRetryPacketTest) { Optional alpn = std::string("h3"); bool performedValidation = false; client->setEarlyDataAppParamsFunctions( - [&](const Optional& alpnToValidate, const Buf&) { + [&](const Optional& alpnToValidate, const BufPtr&) { performedValidation = true; EXPECT_EQ(alpnToValidate, alpn); return true; }, - []() -> Buf { return nullptr; }); + []() -> BufPtr { return nullptr; }); client->start(&clientConnSetupCallback, &clientConnCallback); EXPECT_TRUE(performedValidation); CHECK(client->getConn().zeroRttWriteCipher); @@ -707,11 +707,11 @@ TEST_P(QuicClientTransportIntegrationTest, TestZeroRttRejection) { server_->setFizzContext(serverCtx); bool performedValidation = false; client->setEarlyDataAppParamsFunctions( - [&](const Optional&, const Buf&) { + [&](const Optional&, const BufPtr&) { performedValidation = true; return true; }, - []() -> Buf { return nullptr; }); + []() -> BufPtr { return nullptr; }); client->start(&clientConnSetupCallback, &clientConnCallback); EXPECT_TRUE(performedValidation); CHECK(client->getConn().zeroRttWriteCipher); @@ -774,11 +774,11 @@ TEST_P(QuicClientTransportIntegrationTest, TestZeroRttNotAttempted) { server_->setFizzContext(serverCtx); client->getNonConstConn().transportSettings.attemptEarlyData = false; client->setEarlyDataAppParamsFunctions( - [&](const Optional&, const Buf&) { + [&](const Optional&, const BufPtr&) { EXPECT_TRUE(false); return true; }, - []() -> Buf { return nullptr; }); + []() -> BufPtr { return nullptr; }); client->start(&clientConnSetupCallback, &clientConnCallback); EXPECT_CALL(clientConnSetupCallback, onTransportReady()).WillOnce(Invoke([&] { @@ -816,11 +816,11 @@ TEST_P(QuicClientTransportIntegrationTest, TestZeroRttInvalidAppParams) { server_->setFizzContext(serverCtx); bool performedValidation = false; client->setEarlyDataAppParamsFunctions( - [&](const Optional&, const Buf&) { + [&](const Optional&, const BufPtr&) { performedValidation = true; return false; }, - []() -> Buf { return nullptr; }); + []() -> BufPtr { return nullptr; }); client->start(&clientConnSetupCallback, &clientConnCallback); EXPECT_TRUE(performedValidation); @@ -2730,7 +2730,7 @@ TEST_F(QuicClientTransportAfterStartTest, ShortHeaderPacketWithNoFrames) { 0 /* largestAcked */); ASSERT_FALSE(builder.encodePacketHeader().hasError()); ASSERT_TRUE(builder.canBuildPacket()); - Buf buf = packetToBuf(std::move(builder).buildPacket()); + BufPtr buf = packetToBuf(std::move(builder).buildPacket()); buf->coalesce(); buf->reserve(0, 200); buf->append(20); @@ -4274,7 +4274,7 @@ TEST_F(QuicClientTransportVersionAndRetryTest, UnencryptedPing) { EXPECT_NO_THROW(deliverData(packet->coalesce())); } -Buf getHandshakePacketWithFrame( +BufPtr getHandshakePacketWithFrame( QuicWriteFrame frame, ConnectionId srcConnId, ConnectionId destConnId, @@ -5073,8 +5073,8 @@ class QuicClientTransportPskCacheTest TEST_F(QuicClientTransportPskCacheTest, TestOnNewCachedPsk) { std::string appParams = "APP params"; client->setEarlyDataAppParamsFunctions( - [](const Optional&, const Buf&) { return true; }, - [=]() -> Buf { return folly::IOBuf::copyBuffer(appParams); }); + [](const Optional&, const BufPtr&) { return true; }, + [=]() -> BufPtr { return folly::IOBuf::copyBuffer(appParams); }); EXPECT_CALL(*mockPskCache_, putPsk(hostname_, _)) .WillOnce(Invoke([=](const std::string&, QuicCachedPsk psk) { EXPECT_EQ(psk.appParams, appParams); @@ -5085,8 +5085,8 @@ TEST_F(QuicClientTransportPskCacheTest, TestOnNewCachedPsk) { TEST_F(QuicClientTransportPskCacheTest, TestTwoOnNewCachedPsk) { std::string appParams1 = "APP params1"; client->setEarlyDataAppParamsFunctions( - [](const Optional&, const Buf&) { return true; }, - [=]() -> Buf { return folly::IOBuf::copyBuffer(appParams1); }); + [](const Optional&, const BufPtr&) { return true; }, + [=]() -> BufPtr { return folly::IOBuf::copyBuffer(appParams1); }); EXPECT_CALL(*mockPskCache_, putPsk(hostname_, _)) .WillOnce(Invoke([=](const std::string&, QuicCachedPsk psk) { auto& params = psk.transportParams; @@ -5113,8 +5113,8 @@ TEST_F(QuicClientTransportPskCacheTest, TestTwoOnNewCachedPsk) { std::string appParams2 = "APP params2"; client->setEarlyDataAppParamsFunctions( - [](const Optional&, const Buf&) { return true; }, - [=]() -> Buf { return folly::IOBuf::copyBuffer(appParams2); }); + [](const Optional&, const BufPtr&) { return true; }, + [=]() -> BufPtr { return folly::IOBuf::copyBuffer(appParams2); }); EXPECT_CALL(*mockPskCache_, putPsk(hostname_, _)) .WillOnce(Invoke([=](const std::string&, QuicCachedPsk psk) { auto& params = psk.transportParams; @@ -5223,11 +5223,11 @@ TEST_F(QuicZeroRttClientTest, TestReplaySafeCallback) { })); bool performedValidation = false; client->setEarlyDataAppParamsFunctions( - [&](const Optional&, const Buf&) { + [&](const Optional&, const BufPtr&) { performedValidation = true; return true; }, - []() -> Buf { return nullptr; }); + []() -> BufPtr { return nullptr; }); startClient(); EXPECT_TRUE(performedValidation); @@ -5301,11 +5301,11 @@ TEST_F(QuicZeroRttClientTest, TestEarlyRetransmit0Rtt) { client->setTransportSettings(tp); bool performedValidation = false; client->setEarlyDataAppParamsFunctions( - [&](const Optional&, const Buf&) { + [&](const Optional&, const BufPtr&) { performedValidation = true; return true; }, - []() -> Buf { return nullptr; }); + []() -> BufPtr { return nullptr; }); startClient(); EXPECT_TRUE(performedValidation); @@ -5381,11 +5381,11 @@ TEST_F(QuicZeroRttClientTest, TestZeroRttRejection) { })); bool performedValidation = false; client->setEarlyDataAppParamsFunctions( - [&](const Optional&, const Buf&) { + [&](const Optional&, const BufPtr&) { performedValidation = true; return true; }, - []() -> Buf { return nullptr; }); + []() -> BufPtr { return nullptr; }); startClient(); EXPECT_TRUE(performedValidation); @@ -5433,11 +5433,11 @@ TEST_F(QuicZeroRttClientTest, TestZeroRttRejectionWithSmallerFlowControl) { })); bool performedValidation = false; client->setEarlyDataAppParamsFunctions( - [&](const Optional&, const Buf&) { + [&](const Optional&, const BufPtr&) { performedValidation = true; return true; }, - []() -> Buf { return nullptr; }); + []() -> BufPtr { return nullptr; }); startClient(); EXPECT_TRUE(performedValidation); @@ -5476,11 +5476,11 @@ TEST_F(QuicZeroRttClientTest, TestZeroRttRejectionCannotResendZeroRttData) { })); bool performedValidation = false; client->setEarlyDataAppParamsFunctions( - [&](const Optional&, const Buf&) { + [&](const Optional&, const BufPtr&) { performedValidation = true; return true; }, - []() -> Buf { return nullptr; }); + []() -> BufPtr { return nullptr; }); startClient(); EXPECT_TRUE(performedValidation); @@ -5598,8 +5598,8 @@ TEST_F( return quicCachedPsk; })); client->setEarlyDataAppParamsFunctions( - [&](const Optional&, const Buf&) { return true; }, - []() -> Buf { return nullptr; }); + [&](const Optional&, const BufPtr&) { return true; }, + []() -> BufPtr { return nullptr; }); EXPECT_CALL(*sock, write(firstAddress, _, _)) .WillRepeatedly(Invoke( @@ -5691,8 +5691,8 @@ TEST_F( return quicCachedPsk; })); client->setEarlyDataAppParamsFunctions( - [&](const Optional&, const Buf&) { return true; }, - []() -> Buf { return nullptr; }); + [&](const Optional&, const BufPtr&) { return true; }, + []() -> BufPtr { return nullptr; }); EXPECT_CALL(*sock, write(firstAddress, _, _)) .WillOnce(Invoke( diff --git a/quic/fizz/client/test/QuicClientTransportTestUtil.h b/quic/fizz/client/test/QuicClientTransportTestUtil.h index c5fecd78b..011a9c66a 100644 --- a/quic/fizz/client/test/QuicClientTransportTestUtil.h +++ b/quic/fizz/client/test/QuicClientTransportTestUtil.h @@ -329,7 +329,7 @@ class FakeOneRttHandshakeLayer : public FizzClientHandshake { return params_; } - Buf getNextTrafficSecret(folly::ByteRange /*secret*/) const override { + BufPtr getNextTrafficSecret(folly::ByteRange /*secret*/) const override { return folly::IOBuf::copyBuffer(getRandSecret()); } diff --git a/quic/fizz/handshake/FizzCryptoFactory.cpp b/quic/fizz/handshake/FizzCryptoFactory.cpp index 18c9fefd1..4fddc56d6 100644 --- a/quic/fizz/handshake/FizzCryptoFactory.cpp +++ b/quic/fizz/handshake/FizzCryptoFactory.cpp @@ -14,7 +14,7 @@ namespace quic { -Buf FizzCryptoFactory::makeInitialTrafficSecret( +BufPtr FizzCryptoFactory::makeInitialTrafficSecret( folly::StringPiece label, const ConnectionId& clientDestinationConnId, QuicVersion version) const { diff --git a/quic/fizz/handshake/FizzCryptoFactory.h b/quic/fizz/handshake/FizzCryptoFactory.h index f22bb29a2..479fd629b 100644 --- a/quic/fizz/handshake/FizzCryptoFactory.h +++ b/quic/fizz/handshake/FizzCryptoFactory.h @@ -16,7 +16,7 @@ class FizzCryptoFactory : public CryptoFactory { public: FizzCryptoFactory() : fizzFactory_{std::make_shared()} {} - Buf makeInitialTrafficSecret( + BufPtr makeInitialTrafficSecret( folly::StringPiece label, const ConnectionId& clientDestinationConnId, QuicVersion version) const override; diff --git a/quic/fizz/handshake/FizzPacketNumberCipher.cpp b/quic/fizz/handshake/FizzPacketNumberCipher.cpp index df335c000..bce19f7c0 100644 --- a/quic/fizz/handshake/FizzPacketNumberCipher.cpp +++ b/quic/fizz/handshake/FizzPacketNumberCipher.cpp @@ -52,11 +52,11 @@ void Aes256PacketNumberCipher::setKey(folly::ByteRange key) { return setKeyImpl(encryptCtx_, EVP_aes_256_ecb(), key); } -const Buf& Aes128PacketNumberCipher::getKey() const { +const BufPtr& Aes128PacketNumberCipher::getKey() const { return pnKey_; } -const Buf& Aes256PacketNumberCipher::getKey() const { +const BufPtr& Aes256PacketNumberCipher::getKey() const { return pnKey_; } diff --git a/quic/fizz/handshake/FizzPacketNumberCipher.h b/quic/fizz/handshake/FizzPacketNumberCipher.h index 099146e1e..a7424a1df 100644 --- a/quic/fizz/handshake/FizzPacketNumberCipher.h +++ b/quic/fizz/handshake/FizzPacketNumberCipher.h @@ -19,7 +19,7 @@ class Aes128PacketNumberCipher : public PacketNumberCipher { void setKey(folly::ByteRange key) override; - const Buf& getKey() const override; + const BufPtr& getKey() const override; HeaderProtectionMask mask(folly::ByteRange sample) const override; @@ -28,7 +28,7 @@ class Aes128PacketNumberCipher : public PacketNumberCipher { private: folly::ssl::EvpCipherCtxUniquePtr encryptCtx_; - Buf pnKey_; + BufPtr pnKey_; }; class Aes256PacketNumberCipher : public PacketNumberCipher { @@ -37,7 +37,7 @@ class Aes256PacketNumberCipher : public PacketNumberCipher { void setKey(folly::ByteRange key) override; - const Buf& getKey() const override; + const BufPtr& getKey() const override; HeaderProtectionMask mask(folly::ByteRange sample) const override; @@ -46,7 +46,7 @@ class Aes256PacketNumberCipher : public PacketNumberCipher { private: folly::ssl::EvpCipherCtxUniquePtr encryptCtx_; - Buf pnKey_; + BufPtr pnKey_; }; } // namespace quic diff --git a/quic/fizz/handshake/FizzTransportParameters.h b/quic/fizz/handshake/FizzTransportParameters.h index c051942a5..9c7d4a7e5 100644 --- a/quic/fizz/handshake/FizzTransportParameters.h +++ b/quic/fizz/handshake/FizzTransportParameters.h @@ -14,7 +14,7 @@ namespace { -inline quic::Buf encodeVarintParams( +inline quic::BufPtr encodeVarintParams( const std::vector& parameters) { // chain all encodings quic::BufQueue queue; @@ -76,7 +76,7 @@ inline void decodeVarintParams( if (!len) { throw std::runtime_error("Could not parse transport parameter length."); } - Buf val; + BufPtr val; cursor.clone(val, len.value().first); parameters.emplace_back( static_cast(id.value().first), std::move(val)); diff --git a/quic/fizz/handshake/test/FizzTransportParametersTest.cpp b/quic/fizz/handshake/test/FizzTransportParametersTest.cpp index 1e1465a70..458ff3803 100644 --- a/quic/fizz/handshake/test/FizzTransportParametersTest.cpp +++ b/quic/fizz/handshake/test/FizzTransportParametersTest.cpp @@ -19,7 +19,7 @@ namespace quic::test { class QuicExtensionsTest : public testing::Test { protected: - Buf getBuf(folly::StringPiece hex) { + BufPtr getBuf(folly::StringPiece hex) { auto data = unhexlify(hex); return folly::IOBuf::copyBuffer(data.data(), data.size()); } diff --git a/quic/fizz/server/handshake/FizzServerHandshake.cpp b/quic/fizz/server/handshake/FizzServerHandshake.cpp index fb3b62780..2cddeccd6 100644 --- a/quic/fizz/server/handshake/FizzServerHandshake.cpp +++ b/quic/fizz/server/handshake/FizzServerHandshake.cpp @@ -102,7 +102,8 @@ std::unique_ptr FizzServerHandshake::buildHeaderCipher( return cryptoFactory_->makePacketNumberCipher(secret); } -Buf FizzServerHandshake::getNextTrafficSecret(folly::ByteRange secret) const { +BufPtr FizzServerHandshake::getNextTrafficSecret( + folly::ByteRange secret) const { auto deriver = state_.context()->getFactory()->makeKeyDeriver(*state_.cipher()); auto nextSecret = deriver->expandLabel( diff --git a/quic/fizz/server/handshake/FizzServerHandshake.h b/quic/fizz/server/handshake/FizzServerHandshake.h index 6cf5f6494..0fe2a80be 100644 --- a/quic/fizz/server/handshake/FizzServerHandshake.h +++ b/quic/fizz/server/handshake/FizzServerHandshake.h @@ -42,7 +42,7 @@ class FizzServerHandshake : public ServerHandshake { std::unique_ptr buildAead(folly::ByteRange secret) override; std::unique_ptr buildHeaderCipher( folly::ByteRange secret) override; - Buf getNextTrafficSecret(folly::ByteRange secret) const override; + BufPtr getNextTrafficSecret(folly::ByteRange secret) const override; void processAccept() override; bool processPendingCryptoEvent() override; diff --git a/quic/handshake/CryptoFactory.cpp b/quic/handshake/CryptoFactory.cpp index 943bbda5b..765690275 100644 --- a/quic/handshake/CryptoFactory.cpp +++ b/quic/handshake/CryptoFactory.cpp @@ -23,14 +23,14 @@ std::unique_ptr CryptoFactory::getServerInitialCipher( return makeInitialAead(kServerInitialLabel, clientDestinationConnId, version); } -Buf CryptoFactory::makeServerInitialTrafficSecret( +BufPtr CryptoFactory::makeServerInitialTrafficSecret( const ConnectionId& clientDestinationConnId, QuicVersion version) const { return makeInitialTrafficSecret( kServerInitialLabel, clientDestinationConnId, version); } -Buf CryptoFactory::makeClientInitialTrafficSecret( +BufPtr CryptoFactory::makeClientInitialTrafficSecret( const ConnectionId& clientDestinationConnId, QuicVersion version) const { return makeInitialTrafficSecret( diff --git a/quic/handshake/CryptoFactory.h b/quic/handshake/CryptoFactory.h index 3ae574667..6ee46f8f0 100644 --- a/quic/handshake/CryptoFactory.h +++ b/quic/handshake/CryptoFactory.h @@ -27,10 +27,10 @@ class CryptoFactory { const ConnectionId& clientDestinationConnId, QuicVersion version) const; - Buf makeServerInitialTrafficSecret( + BufPtr makeServerInitialTrafficSecret( const ConnectionId& clientDestinationConnId, QuicVersion version) const; - Buf makeClientInitialTrafficSecret( + BufPtr makeClientInitialTrafficSecret( const ConnectionId& clientDestinationConnId, QuicVersion version) const; @@ -51,7 +51,7 @@ class CryptoFactory { /** * Crypto layer specific methods. */ - virtual Buf makeInitialTrafficSecret( + virtual BufPtr makeInitialTrafficSecret( folly::StringPiece label, const ConnectionId& clientDestinationConnId, QuicVersion version) const = 0; diff --git a/quic/handshake/TransportParameters.cpp b/quic/handshake/TransportParameters.cpp index 1e0028696..d15f241b4 100644 --- a/quic/handshake/TransportParameters.cpp +++ b/quic/handshake/TransportParameters.cpp @@ -67,7 +67,7 @@ Optional getStatelessResetTokenParameter( TransportParameter encodeIntegerParameter( TransportParameterId id, uint64_t value) { - Buf data = BufHelpers::create(8); + BufPtr data = BufHelpers::create(8); BufAppender appender(data.get(), 8); auto encoded = encodeQuicInteger( value, [appender = std::move(appender)](auto val) mutable { diff --git a/quic/handshake/TransportParameters.h b/quic/handshake/TransportParameters.h index 6ddc60bd5..7bd233f5c 100644 --- a/quic/handshake/TransportParameters.h +++ b/quic/handshake/TransportParameters.h @@ -48,11 +48,11 @@ enum class TransportParameterId : uint64_t { struct TransportParameter { TransportParameterId parameter; - Buf value; + BufPtr value; TransportParameter() = default; - TransportParameter(TransportParameterId p, Buf v) + TransportParameter(TransportParameterId p, BufPtr v) : parameter(p), value(v ? std::move(v) : nullptr) {} TransportParameter(const TransportParameter& other) @@ -86,7 +86,7 @@ struct TransportParameter { } // Encodes TransportParameter as shown above (avoids reallocations) - Buf encode() const { + BufPtr encode() const { // reserve the exact size needed auto res = BufHelpers::createCombined(static_cast(getEncodedSize())); diff --git a/quic/handshake/test/Mocks.h b/quic/handshake/test/Mocks.h index d6ca922c1..e29a06def 100644 --- a/quic/handshake/test/Mocks.h +++ b/quic/handshake/test/Mocks.h @@ -26,7 +26,7 @@ class MockPacketNumberCipher : public PacketNumberCipher { MOCK_METHOD(void, setKey, (folly::ByteRange key)); MOCK_METHOD(HeaderProtectionMask, mask, (folly::ByteRange), (const)); MOCK_METHOD(size_t, keyLength, (), (const)); - MOCK_METHOD(const Buf&, getKey, (), (const)); + MOCK_METHOD(const BufPtr&, getKey, (), (const)); void setDefaultKey() { packetProtectionKey_ = getProtectionKey(); @@ -35,7 +35,7 @@ class MockPacketNumberCipher : public PacketNumberCipher { } private: - Buf packetProtectionKey_; + BufPtr packetProtectionKey_; }; class MockAead : public Aead { diff --git a/quic/samples/echo/EchoHandler.h b/quic/samples/echo/EchoHandler.h index 0be6fc8a3..730e88ca8 100644 --- a/quic/samples/echo/EchoHandler.h +++ b/quic/samples/echo/EchoHandler.h @@ -110,7 +110,7 @@ class EchoHandler : public quic::QuicSocket::ConnectionSetupCallback, if (input_.find(id) == input_.end()) { input_.emplace(id, std::make_pair(BufQueue(), false)); } - quic::Buf data = std::move(res.value().first); + quic::BufPtr data = std::move(res.value().first); bool eof = res.value().second; auto dataLen = (data ? data->computeChainDataLength() : 0); LOG(INFO) << "Got len=" << dataLen << " eof=" << uint32_t(eof) @@ -146,7 +146,7 @@ class EchoHandler : public quic::QuicSocket::ConnectionSetupCallback, streamData.emplace(id, std::make_pair(BufQueue(), false)); } - quic::Buf data = std::move(res.value().first); + quic::BufPtr data = std::move(res.value().first); bool eof = res.value().second; auto dataLen = (data ? data->computeChainDataLength() : 0); LOG(INFO) << "Got len=" << dataLen << " eof=" << uint32_t(eof) diff --git a/quic/server/QuicServerPacketRouter.cpp b/quic/server/QuicServerPacketRouter.cpp index 65fe95a36..891164fd2 100644 --- a/quic/server/QuicServerPacketRouter.cpp +++ b/quic/server/QuicServerPacketRouter.cpp @@ -93,7 +93,7 @@ void TakeoverHandlerCallback::onDataAvailable( // Move readBuffer_ first so that we can get rid // of it immediately so that if we return early, // we've flushed it. - Buf data = std::move(readBuffer_); + BufPtr data = std::move(readBuffer_); QUIC_STATS(worker_->getStatsCallback(), onForwardedPacketReceived); if (truncated) { // This is an error, drop the packet. @@ -131,13 +131,13 @@ void TakeoverPacketHandler::forwardPacketToAnotherServer( const folly::SocketAddress& peerAddress, NetworkData&& networkData) { const TimePoint receiveTimePoint = networkData.getReceiveTimePoint(); - Buf buf = std::move(networkData).moveAllData(); + BufPtr buf = std::move(networkData).moveAllData(); // create buffer for the peerAddress address and receiveTimePoint // Serialize: version (4B), socket(2 + 16)B and time of ack (8B) auto bufSize = sizeof(TakeoverProtocolVersion) + sizeof(uint16_t) + peerAddress.getActualSize() + sizeof(uint64_t); - Buf writeBuffer = BufHelpers::create(bufSize); + BufPtr writeBuffer = BufHelpers::create(bufSize); BufWriter bufWriter(writeBuffer->writableData(), bufSize); bufWriter.writeBE(folly::to_underlying(takeoverProtocol_)); sockaddr_storage addrStorage; @@ -163,7 +163,7 @@ void TakeoverPacketHandler::setSocketFactory(QuicUDPSocketFactory* factory) { socketFactory_ = factory; } -void TakeoverPacketHandler::forwardPacket(Buf writeBuffer) { +void TakeoverPacketHandler::forwardPacket(BufPtr writeBuffer) { if (!pktForwardingSocket_) { CHECK(socketFactory_); pktForwardingSocket_ = socketFactory_->make(worker_->getEventBase(), -1); @@ -181,7 +181,7 @@ std::unique_ptr TakeoverPacketHandler::makeSocket( void TakeoverPacketHandler::processForwardedPacket( const folly::SocketAddress& /*client*/, - Buf data) { + BufPtr data) { // The 'client' here is the local server that is taking over the port // First we decode the actual client and time from the packet // and send it to the worker_ to handle it properly diff --git a/quic/server/QuicServerPacketRouter.h b/quic/server/QuicServerPacketRouter.h index e72b2880b..732fa8f53 100644 --- a/quic/server/QuicServerPacketRouter.h +++ b/quic/server/QuicServerPacketRouter.h @@ -82,7 +82,7 @@ class TakeoverPacketHandler { const folly::SocketAddress& peerAddress, NetworkData&& networkData); - void processForwardedPacket(const folly::SocketAddress& client, Buf data); + void processForwardedPacket(const folly::SocketAddress& client, BufPtr data); void stop(); @@ -94,7 +94,7 @@ class TakeoverPacketHandler { private: std::unique_ptr makeSocket(folly::EventBase* evb); - void forwardPacket(Buf packet); + void forwardPacket(BufPtr packet); // prevent copying TakeoverPacketHandler(const TakeoverPacketHandler&); TakeoverPacketHandler& operator=(const TakeoverPacketHandler&); @@ -161,6 +161,6 @@ class TakeoverHandlerCallback : public FollyAsyncUDPSocketAlias::ReadCallback, const TransportSettings& transportSettings_; folly::SocketAddress address_; std::unique_ptr socket_; - Buf readBuffer_; + BufPtr readBuffer_; }; } // namespace quic diff --git a/quic/server/QuicServerTransport.cpp b/quic/server/QuicServerTransport.cpp index 2eeab3b73..e5fc96163 100644 --- a/quic/server/QuicServerTransport.cpp +++ b/quic/server/QuicServerTransport.cpp @@ -741,7 +741,7 @@ QuicServerTransport::getSelfCertificate() const { return nullptr; } -void QuicServerTransport::onTransportKnobs(Buf knobBlob) { +void QuicServerTransport::onTransportKnobs(BufPtr knobBlob) { if (knobBlob->length() > 0) { std::string serializedKnobs = std::string( reinterpret_cast(knobBlob->data()), knobBlob->length()); diff --git a/quic/server/QuicServerTransport.h b/quic/server/QuicServerTransport.h index 9b7b89f4f..ab02ce97d 100644 --- a/quic/server/QuicServerTransport.h +++ b/quic/server/QuicServerTransport.h @@ -30,7 +30,7 @@ namespace quic { struct CipherInfo { TrafficKey trafficKey; fizz::CipherSuite cipherSuite; - Buf packetProtectionKey; + BufPtr packetProtectionKey; }; class QuicServerTransport @@ -206,7 +206,7 @@ class QuicServerTransport // From ServerHandshake::HandshakeCallback virtual void onCryptoEventAvailable() noexcept override; - void onTransportKnobs(Buf knobBlob) override; + void onTransportKnobs(BufPtr knobBlob) override; void handleTransportKnobParams(const TransportKnobParams& params); diff --git a/quic/server/QuicServerWorker.cpp b/quic/server/QuicServerWorker.cpp index 157f05cf6..45ce22cc7 100644 --- a/quic/server/QuicServerWorker.cpp +++ b/quic/server/QuicServerWorker.cpp @@ -260,7 +260,8 @@ bool QuicServerWorker::maybeSendVersionNegotiationPacketOrDrop( bool isInitial, LongHeaderInvariant& invariant, size_t datagramLen) { - Optional> versionNegotiationPacket; + Optional> + versionNegotiationPacket; if (isInitial && datagramLen < kMinInitialPacketSize) { VLOG(3) << "Dropping initial packet due to invalid size"; QUIC_STATS( @@ -361,7 +362,7 @@ void QuicServerWorker::onDataAvailable( // Move readBuffer_ first so that we can get rid // of it immediately so that if we return early, // we've flushed it. - Buf data = std::move(readBuffer_); + BufPtr data = std::move(readBuffer_); folly::Optional maybeSockTsExt; @@ -536,7 +537,7 @@ void QuicServerWorker::handleNetworkData( void QuicServerWorker::recvmsgMultishotCallback( MultishotHdr* hdr, int res, - Buf io_buf) { + BufPtr io_buf) { if (res < 0) { return; } @@ -1141,7 +1142,7 @@ void QuicServerWorker::sendRetryPacket( dstConnId, /* original dst conn id */ QuicVersion::MVFST_INVALID, BufHelpers::copyBuffer(encryptedTokenStr)); - Buf pseudoRetryPacketBuf = std::move(pseudoBuilder).buildPacket(); + BufPtr pseudoRetryPacketBuf = std::move(pseudoBuilder).buildPacket(); FizzRetryIntegrityTagGenerator fizzRetryIntegrityTagGenerator; auto integrityTagBuf = fizzRetryIntegrityTagGenerator.getRetryIntegrityTag( QuicVersion::MVFST_INVALID, pseudoRetryPacketBuf.get()); diff --git a/quic/server/QuicServerWorker.h b/quic/server/QuicServerWorker.h index 383e32e9a..62b9a3bbb 100644 --- a/quic/server/QuicServerWorker.h +++ b/quic/server/QuicServerWorker.h @@ -106,7 +106,7 @@ class QuicServerWorker : public FollyAsyncUDPSocketAlias::ReadCallback, } // data - Buf ioBuf_; + BufPtr ioBuf_; struct iovec iov_; size_t len_{0}; // addr @@ -144,7 +144,7 @@ class QuicServerWorker : public FollyAsyncUDPSocketAlias::ReadCallback, } static void - cb(folly::EventRecvmsgMultishotCallback::Hdr* h, int res, Buf io_buf) { + cb(folly::EventRecvmsgMultishotCallback::Hdr* h, int res, BufPtr io_buf) { reinterpret_cast(h->arg_)->recvmsgMultishotCallback( reinterpret_cast(h), res, std::move(io_buf)); } @@ -582,7 +582,7 @@ class QuicServerWorker : public FollyAsyncUDPSocketAlias::ReadCallback, std::string logRoutingInfo(const ConnectionId& connId) const; void eventRecvmsgCallback(MsgHdr* msgHdr, int res); - void recvmsgMultishotCallback(MultishotHdr* msgHdr, int res, Buf io_buf); + void recvmsgMultishotCallback(MultishotHdr* msgHdr, int res, BufPtr io_buf); bool hasTimestamping() { return (socket_ && (socket_->getTimestamping() > 0)); @@ -640,7 +640,7 @@ class QuicServerWorker : public FollyAsyncUDPSocketAlias::ReadCallback, folly::F14FastMap> boundServerTransports_; - Buf readBuffer_; + BufPtr readBuffer_; bool shutdown_{false}; std::vector supportedVersions_; std::shared_ptr ctx_; @@ -648,7 +648,7 @@ class QuicServerWorker : public FollyAsyncUDPSocketAlias::ReadCallback, // Same value as transportSettings_.numGROBuffers_ if the kernel // supports GRO. otherwise 1 uint32_t numGROBuffers_{kDefaultNumGROBuffers}; - Optional healthCheckToken_; + Optional healthCheckToken_; std::function rejectNewConnections_{[]() { return false; }}; std::function isBlockListedSrcPort_{ [](uint16_t) { return false; }}; diff --git a/quic/server/handshake/ServerHandshake.cpp b/quic/server/handshake/ServerHandshake.cpp index a330a8401..6202b2fde 100644 --- a/quic/server/handshake/ServerHandshake.cpp +++ b/quic/server/handshake/ServerHandshake.cpp @@ -34,7 +34,7 @@ void ServerHandshake::initialize( } folly::Expected ServerHandshake::doHandshake( - Buf data, + BufPtr data, EncryptionLevel encryptionLevel) { SCOPE_EXIT { inHandshakeStack_ = false; @@ -321,7 +321,7 @@ void ServerHandshake::processPendingEvents() { } } -const Optional& ServerHandshake::getAppToken() const { +const Optional& ServerHandshake::getAppToken() const { return state_.appToken(); } diff --git a/quic/server/handshake/ServerHandshake.h b/quic/server/handshake/ServerHandshake.h index 4c6123282..5e40d364a 100644 --- a/quic/server/handshake/ServerHandshake.h +++ b/quic/server/handshake/ServerHandshake.h @@ -92,7 +92,7 @@ class ServerHandshake : public Handshake { * not an event is available. */ [[nodiscard]] virtual folly::Expected doHandshake( - Buf data, + BufPtr data, EncryptionLevel encryptionLevel); /** @@ -219,7 +219,7 @@ class ServerHandshake : public Handshake { * Given secret_n, returns secret_n+1 to be used for generating the next Aead * on key updates. */ - virtual Buf getNextTrafficSecret(folly::ByteRange secret) const = 0; + virtual BufPtr getNextTrafficSecret(folly::ByteRange secret) const = 0; ~ServerHandshake() override = default; @@ -255,7 +255,7 @@ class ServerHandshake : public Handshake { /** * Returns the AppToken seen in session ticket if the session was resumed. */ - const Optional& getAppToken() const; + const Optional& getAppToken() const; TLSSummary getTLSSummary() const override; @@ -294,8 +294,8 @@ class ServerHandshake : public Handshake { std::unique_ptr oneRttWriteCipher_; std::unique_ptr zeroRttReadCipher_; - Buf readTrafficSecret_; - Buf writeTrafficSecret_; + BufPtr readTrafficSecret_; + BufPtr writeTrafficSecret_; // This variable is incremented every time a read traffic secret is rotated, // and decremented for the write secret. Its value should be diff --git a/quic/server/handshake/TokenGenerator.cpp b/quic/server/handshake/TokenGenerator.cpp index 7cf543e19..8a443463d 100644 --- a/quic/server/handshake/TokenGenerator.cpp +++ b/quic/server/handshake/TokenGenerator.cpp @@ -25,7 +25,7 @@ TokenGenerator::TokenGenerator(TokenSecret secret) : cipher_(kCipherContexts) { cipher_.setSecrets(secrets); } -Optional TokenGenerator::encryptToken( +Optional TokenGenerator::encryptToken( const QuicAddrValidationToken& token) { // Generate the retry token in plaintext auto plainTextToken = token.getPlaintextToken(); @@ -42,7 +42,9 @@ Optional TokenGenerator::encryptToken( return maybeEncryptedToken; } -uint64_t TokenGenerator::decryptToken(Buf encryptedToken, Buf aeadAssocData) { +uint64_t TokenGenerator::decryptToken( + BufPtr encryptedToken, + BufPtr aeadAssocData) { auto maybeDecryptedToken = cipher_.decrypt(std::move(encryptedToken), aeadAssocData.get()); diff --git a/quic/server/handshake/TokenGenerator.h b/quic/server/handshake/TokenGenerator.h index 66196002d..b90c7ed47 100644 --- a/quic/server/handshake/TokenGenerator.h +++ b/quic/server/handshake/TokenGenerator.h @@ -22,9 +22,9 @@ class TokenGenerator { public: explicit TokenGenerator(TokenSecret secret); - Optional encryptToken(const QuicAddrValidationToken& token); + Optional encryptToken(const QuicAddrValidationToken& token); - uint64_t decryptToken(Buf encryptedToken, Buf aeadAssocData); + uint64_t decryptToken(BufPtr encryptedToken, BufPtr aeadAssocData); private: fizz::server::Aead128GCMTokenCipher cipher_; diff --git a/quic/server/handshake/test/AppTokenTest.cpp b/quic/server/handshake/test/AppTokenTest.cpp index fb1d0241d..e391d79bf 100644 --- a/quic/server/handshake/test/AppTokenTest.cpp +++ b/quic/server/handshake/test/AppTokenTest.cpp @@ -115,7 +115,7 @@ TEST(AppTokenTest, TestEncodeAndDecodeNoSourceAddresses) { std::numeric_limits::max(), 2 /* extendedAckSupport */); appToken.version = QuicVersion::MVFST; - Buf buf = encodeAppToken(appToken); + BufPtr buf = encodeAppToken(appToken); expectAppTokenEqual(decodeAppToken(*buf), appToken); } @@ -135,7 +135,7 @@ TEST(AppTokenTest, TestEncodeAndDecodeSingleIPv6Address) { appToken.sourceAddresses = { folly::IPAddress("2401:db00:2111:7283:face::46:0")}; appToken.version = QuicVersion::MVFST; - Buf buf = encodeAppToken(appToken); + BufPtr buf = encodeAppToken(appToken); expectAppTokenEqual(decodeAppToken(*buf), appToken); } @@ -157,7 +157,7 @@ TEST(AppTokenTest, TestEncodeAndDecodeThreeIPv6Addresses) { folly::IPAddress("2401:db00:2111:7283:face::46:1"), folly::IPAddress("2401:db00:2111:7283:face::46:2")}; appToken.version = QuicVersion::MVFST; - Buf buf = encodeAppToken(appToken); + BufPtr buf = encodeAppToken(appToken); expectAppTokenEqual(decodeAppToken(*buf), appToken); } @@ -176,7 +176,7 @@ TEST(AppTokenTest, TestEncodeAndDecodeSingleIPv4Address) { 2 /* extendedAckSupport */); appToken.sourceAddresses = {folly::IPAddress("1.2.3.4")}; appToken.version = QuicVersion::MVFST; - Buf buf = encodeAppToken(appToken); + BufPtr buf = encodeAppToken(appToken); expectAppTokenEqual(decodeAppToken(*buf), appToken); } @@ -198,7 +198,7 @@ TEST(AppTokenTest, TestEncodeAndDecodeThreeIPv4Addresses) { folly::IPAddress("1.2.3.5"), folly::IPAddress("1.2.3.6")}; appToken.version = QuicVersion::MVFST; - Buf buf = encodeAppToken(appToken); + BufPtr buf = encodeAppToken(appToken); expectAppTokenEqual(decodeAppToken(*buf), appToken); } @@ -220,7 +220,7 @@ TEST(AppTokenTest, TestEncodeAndDecodeIPv6AndIPv4Addresses) { folly::IPAddress("1.2.3.4"), folly::IPAddress("2401:db00:2111:7283:face::46:2")}; appToken.version = QuicVersion::MVFST; - Buf buf = encodeAppToken(appToken); + BufPtr buf = encodeAppToken(appToken); expectAppTokenEqual(decodeAppToken(*buf), appToken); } @@ -239,7 +239,7 @@ TEST(AppTokenTest, TestEncodeAndDecodeWithAppToken) { 2 /* extendedAckSupport */); appToken.appParams = folly::IOBuf::copyBuffer("QPACK Params"); appToken.version = QuicVersion::MVFST; - Buf buf = encodeAppToken(appToken); + BufPtr buf = encodeAppToken(appToken); expectAppTokenEqual(decodeAppToken(*buf), appToken); } @@ -262,7 +262,7 @@ TEST(AppTokenTest, TestEncodeAndDecodeIPv6AndIPv4AddressesWithAppToken) { folly::IPAddress("2401:db00:2111:7283:face::46:2")}; appToken.appParams = folly::IOBuf::copyBuffer("QPACK Params"); appToken.version = QuicVersion::MVFST; - Buf buf = encodeAppToken(appToken); + BufPtr buf = encodeAppToken(appToken); expectAppTokenEqual(decodeAppToken(*buf), appToken); } @@ -282,7 +282,7 @@ TEST(AppTokenTest, TestEncodeAndDecodeCwndHint) { appToken.sourceAddresses = { folly::IPAddress("2401:db00:2111:7283:face::46:2")}; appToken.version = QuicVersion::MVFST; - Buf buf = encodeAppToken(appToken); + BufPtr buf = encodeAppToken(appToken); expectAppTokenEqual(decodeAppToken(*buf), appToken); } diff --git a/quic/server/handshake/test/DefaultAppTokenValidatorTest.cpp b/quic/server/handshake/test/DefaultAppTokenValidatorTest.cpp index 154f6cc42..88407c58d 100644 --- a/quic/server/handshake/test/DefaultAppTokenValidatorTest.cpp +++ b/quic/server/handshake/test/DefaultAppTokenValidatorTest.cpp @@ -50,7 +50,7 @@ TEST(DefaultAppTokenValidatorTest, TestValidParams) { resState.appToken = encodeAppToken(appToken); conn.earlyDataAppParamsValidator = [](const Optional&, - const Buf&) { return true; }; + const BufPtr&) { return true; }; DefaultAppTokenValidator validator(&conn); EXPECT_CALL(*quicStats, onZeroRttAccepted()); EXPECT_CALL(*quicStats, onZeroRttRejected()).Times(0); @@ -84,7 +84,7 @@ TEST(DefaultAppTokenValidatorTest, TestValidOptionalParameter) { resState.appToken = encodeAppToken(appToken); conn.earlyDataAppParamsValidator = [](const Optional&, - const Buf&) { return true; }; + const BufPtr&) { return true; }; DefaultAppTokenValidator validator(&conn); EXPECT_CALL(*quicStats, onZeroRttAccepted()).Times(1); EXPECT_CALL(*quicStats, onZeroRttRejected()).Times(0); @@ -120,7 +120,7 @@ TEST( resState.appToken = encodeAppToken(appToken); conn.earlyDataAppParamsValidator = [](const Optional&, - const Buf&) { return true; }; + const BufPtr&) { return true; }; DefaultAppTokenValidator validator(&conn); EXPECT_CALL(*quicStats, onZeroRttRejected()).Times(0); EXPECT_CALL(*quicStats, onZeroRttAccepted()); @@ -142,7 +142,7 @@ TEST(DefaultAppTokenValidatorTest, TestInvalidNullAppToken) { ResumptionState resState; conn.earlyDataAppParamsValidator = [](const Optional&, - const Buf&) { + const BufPtr&) { EXPECT_TRUE(false); return true; }; @@ -163,7 +163,7 @@ TEST(DefaultAppTokenValidatorTest, TestInvalidEmptyTransportParams) { resState.appToken = encodeAppToken(appToken); conn.earlyDataAppParamsValidator = [](const Optional&, - const Buf&) { + const BufPtr&) { EXPECT_TRUE(false); return true; }; @@ -205,7 +205,7 @@ TEST(DefaultAppTokenValidatorTest, TestInvalidMissingParams) { resState.appToken = encodeAppToken(appToken); conn.earlyDataAppParamsValidator = [](const Optional&, - const Buf&) { + const BufPtr&) { EXPECT_TRUE(false); return true; }; @@ -245,7 +245,7 @@ TEST(DefaultAppTokenValidatorTest, TestInvalidMissingParams) { // resState.appToken = encodeAppToken(appToken); // conn.earlyDataAppParamsValidator = [](const Optional&, -// const Buf&) { +// const BufPtr&) { // EXPECT_TRUE(false); // return true; // }; @@ -282,7 +282,7 @@ TEST(DefaultAppTokenValidatorTest, TestInvalidDecreasedInitialMaxStreamData) { resState.appToken = encodeAppToken(appToken); conn.earlyDataAppParamsValidator = [](const Optional&, - const Buf&) { + const BufPtr&) { EXPECT_TRUE(false); return true; }; @@ -314,7 +314,7 @@ TEST(DefaultAppTokenValidatorTest, TestChangedIdleTimeout) { resState.appToken = encodeAppToken(appToken); conn.earlyDataAppParamsValidator = [](const Optional&, - const Buf&) { + const BufPtr&) { EXPECT_TRUE(false); return true; }; @@ -348,7 +348,7 @@ TEST(DefaultAppTokenValidatorTest, TestDecreasedInitialMaxStreams) { resState.appToken = encodeAppToken(appToken); conn.earlyDataAppParamsValidator = [](const Optional&, - const Buf&) { + const BufPtr&) { EXPECT_TRUE(false); return true; }; @@ -382,7 +382,7 @@ TEST(DefaultAppTokenValidatorTest, TestInvalidExtendedAckSupportChanged) { resState.appToken = encodeAppToken(appToken); conn.earlyDataAppParamsValidator = [](const Optional&, - const Buf&) { + const BufPtr&) { EXPECT_TRUE(false); return true; }; @@ -417,7 +417,7 @@ TEST(DefaultAppTokenValidatorTest, TestInvalidAppParams) { resState.appToken = encodeAppToken(appToken); conn.earlyDataAppParamsValidator = [](const Optional&, - const Buf&) { return false; }; + const BufPtr&) { return false; }; DefaultAppTokenValidator validator(&conn); EXPECT_FALSE(validator.validate(resState)); } @@ -449,8 +449,10 @@ class SourceAddressTokenTest : public Test { ResumptionState resState; resState.appToken = encodeAppToken(appToken_); - conn_.earlyDataAppParamsValidator = - [=](const Optional&, const Buf&) { return acceptZeroRtt; }; + conn_.earlyDataAppParamsValidator = [=](const Optional&, + const BufPtr&) { + return acceptZeroRtt; + }; DefaultAppTokenValidator validator(&conn_); EXPECT_EQ(validator.validate(resState), acceptZeroRtt); } diff --git a/quic/server/handshake/test/ServerHandshakeTest.cpp b/quic/server/handshake/test/ServerHandshakeTest.cpp index 7bf3073c0..3927ebcfc 100644 --- a/quic/server/handshake/test/ServerHandshakeTest.cpp +++ b/quic/server/handshake/test/ServerHandshakeTest.cpp @@ -282,7 +282,7 @@ class ServerHandshakeTest : public Test { } } - Buf getHandshakeWriteBytes() { + BufPtr getHandshakeWriteBytes() { auto buf = folly::IOBuf::create(0); switch (clientState.readRecordLayer()->getEncryptionLevel()) { case fizz::EncryptionLevel::Plaintext: diff --git a/quic/server/state/ServerStateMachine.cpp b/quic/server/state/ServerStateMachine.cpp index 44b6e2645..48547df00 100644 --- a/quic/server/state/ServerStateMachine.cpp +++ b/quic/server/state/ServerStateMachine.cpp @@ -624,7 +624,7 @@ void updateWritableByteLimitOnRecvPacket(QuicServerConnectionState& conn) { void maybeUpdateTransportFromAppToken( QuicServerConnectionState& conn, - const Optional& tokenBuf) { + const Optional& tokenBuf) { if (!tokenBuf) { return; } diff --git a/quic/server/state/ServerStateMachine.h b/quic/server/state/ServerStateMachine.h index 361d74766..0a36893a2 100644 --- a/quic/server/state/ServerStateMachine.h +++ b/quic/server/state/ServerStateMachine.h @@ -227,7 +227,7 @@ void updateWritableByteLimitOnRecvPacket(QuicServerConnectionState& conn); void maybeUpdateTransportFromAppToken( QuicServerConnectionState& conn, - const Optional& appToken); + const Optional& appToken); [[nodiscard]] folly::Expected onConnectionMigration( QuicServerConnectionState& conn, diff --git a/quic/server/test/QuicServerTest.cpp b/quic/server/test/QuicServerTest.cpp index 5e1f61a08..2b3a77608 100644 --- a/quic/server/test/QuicServerTest.cpp +++ b/quic/server/test/QuicServerTest.cpp @@ -212,7 +212,7 @@ class QuicServerWorkerTest : public Test { MockQuicTransport::Ptr transportOverride = nullptr); void testSendReset( - Buf packet, + BufPtr packet, ConnectionId connId, ShortHeader shortHeader, PacketDropReason dropReason); @@ -325,7 +325,7 @@ void QuicServerWorkerTest::createQuicConnection( } void QuicServerWorkerTest::testSendReset( - Buf packet, + BufPtr packet, ConnectionId, ShortHeader shortHeader, PacketDropReason dropReason) { @@ -1757,9 +1757,9 @@ class QuicServerWorkerTakeoverTest : public Test { takeoverWorker_->allowBeingTakenOver(std::move(takeoverSock), takeoverAddr); } - void testPacketForwarding(Buf data, size_t len, ConnectionId connId); + void testPacketForwarding(BufPtr data, size_t len, ConnectionId connId); - void testNoPacketForwarding(Buf data, size_t len, ConnectionId connId); + void testNoPacketForwarding(BufPtr data, size_t len, ConnectionId connId); protected: std::shared_ptr takeoverWorkerCb_; @@ -1841,7 +1841,7 @@ TEST_F(QuicServerWorkerTakeoverTest, QuicServerTakeoverNoForwarding) { } void QuicServerWorkerTakeoverTest::testNoPacketForwarding( - Buf /* data */, + BufPtr /* data */, size_t len, ConnectionId /* connId */) { auto cb = [&](const folly::SocketAddress& addr, @@ -1897,7 +1897,7 @@ TEST_F(QuicServerWorkerTakeoverTest, QuicServerTakeoverForwarding) { } void QuicServerWorkerTakeoverTest::testPacketForwarding( - Buf data, + BufPtr data, size_t len, ConnectionId connId) { auto writeSock = std::make_unique>(&evb_); @@ -2278,7 +2278,7 @@ class QuicServerTest : public Test { [&] { transport.reset(); }); } - void testReset(Buf packet); + void testReset(BufPtr packet); protected: folly::ScopedEventBaseThread evbThread_; @@ -2460,7 +2460,7 @@ class QuicServerTakeoverTest : public Test { std::shared_ptr initTransport( MockQuicServerTransportFactory* factory, ConnectionId& clientConnId, - Buf& data, + BufPtr& data, folly::Baton<>& baton) { std::shared_ptr transport; NiceMock connSetupCb; @@ -2925,7 +2925,7 @@ TEST_F(QuicServerTest, NetworkTestHealthCheck) { EXPECT_THROW(reader->readOne().get(200ms), folly::FutureTimeout); } -void QuicServerTest::testReset(Buf packet) { +void QuicServerTest::testReset(BufPtr packet) { folly::SocketAddress addr("::1", 0); server_->start(addr, 2); server_->waitUntilInitialized(); @@ -3146,7 +3146,7 @@ TEST_F(QuicServerTest, ZeroRttBeforeInitial) { clientConnId, serverConnId, id, *initialBuf, QuicVersion::MVFST); auto initialData = std::move(initialPacket); - std::vector receivedData; + std::vector receivedData; auto makeTransport = [&](folly::EventBase* eventBase, std::unique_ptr& socket, diff --git a/quic/server/test/QuicServerTransportTest.cpp b/quic/server/test/QuicServerTransportTest.cpp index 4cc736585..78207c782 100644 --- a/quic/server/test/QuicServerTransportTest.cpp +++ b/quic/server/test/QuicServerTransportTest.cpp @@ -1846,7 +1846,7 @@ TEST_F(QuicServerTransportTest, ShortHeaderPacketWithNoFrames) { 0 /* largestAcked */); ASSERT_FALSE(builder.encodePacketHeader().hasError()); ASSERT_TRUE(builder.canBuildPacket()); - Buf buf = packetToBuf(std::move(builder).buildPacket()); + BufPtr buf = packetToBuf(std::move(builder).buildPacket()); buf->coalesce(); buf->reserve(0, 200); @@ -1897,7 +1897,7 @@ TEST_F(QuicServerTransportTest, ShortHeaderPacketWithNoFramesAfterClose) { 0 /* largestAcked */); ASSERT_FALSE(builder.encodePacketHeader().hasError()); ASSERT_TRUE(builder.canBuildPacket()); - Buf buf = packetToBuf(std::move(builder).buildPacket()); + BufPtr buf = packetToBuf(std::move(builder).buildPacket()); buf->coalesce(); buf->reserve(0, 200); buf->append(dummyDataLen); @@ -4671,7 +4671,7 @@ TEST_F(QuicUnencryptedServerTransportTest, TestGarbageData) { EXPECT_EQ(event->packetSize, 10); } -Buf getHandshakePacketWithFrame( +BufPtr getHandshakePacketWithFrame( QuicWriteFrame frame, ConnectionId connId, Aead& clientWriteCipher, @@ -4953,8 +4953,8 @@ class QuicServerTransportHandshakeTest void expectWriteNewSessionTicket() override { std::string appParams("APP params"); server->setEarlyDataAppParamsFunctions( - [](const Optional&, const Buf&) { return false; }, - [=]() -> Buf { return folly::IOBuf::copyBuffer(appParams); }); + [](const Optional&, const BufPtr&) { return false; }, + [=]() -> BufPtr { return folly::IOBuf::copyBuffer(appParams); }); EXPECT_CALL(*getFakeHandshakeLayer(), writeNewSessionTicket(_)) .WillOnce(Invoke([=](const AppToken& appToken) { auto& params = appToken.transportParams.parameters; diff --git a/quic/server/test/QuicServerTransportTestUtil.h b/quic/server/test/QuicServerTransportTestUtil.h index d8b8fd384..2bb1e41dd 100644 --- a/quic/server/test/QuicServerTransportTestUtil.h +++ b/quic/server/test/QuicServerTransportTestUtil.h @@ -315,7 +315,7 @@ class QuicServerTransportTestBase : public virtual testing::Test { *initialDestinationConnectionId, version); } - Buf recvEncryptedStream( + BufPtr recvEncryptedStream( StreamId streamId, folly::IOBuf& data, uint64_t offset = 0, @@ -406,8 +406,8 @@ class QuicServerTransportTestBase : public virtual testing::Test { virtual void expectWriteNewSessionTicket() { server->setEarlyDataAppParamsFunctions( - [](const Optional&, const Buf&) { return false; }, - []() -> Buf { return nullptr; }); + [](const Optional&, const BufPtr&) { return false; }, + []() -> BufPtr { return nullptr; }); EXPECT_CALL(*getFakeHandshakeLayer(), writeNewSessionTicket(testing::_)) .Times(1); } @@ -539,7 +539,7 @@ class QuicServerTransportTestBase : public virtual testing::Test { } void deliverDataWithoutErrorCheck( - Buf data, + BufPtr data, bool writes = true, folly::SocketAddress* peer = nullptr) { data->coalesce(); @@ -567,7 +567,7 @@ class QuicServerTransportTestBase : public virtual testing::Test { } void deliverData( - Buf data, + BufPtr data, bool writes = true, folly::SocketAddress* peer = nullptr) { data->coalesce(); @@ -578,7 +578,7 @@ class QuicServerTransportTestBase : public virtual testing::Test { evb.loopOnce(EVLOOP_NONBLOCK); } - Buf getCryptoStreamData() { + BufPtr getCryptoStreamData() { CHECK(!serverWrites.empty()); auto cryptoBuf = folly::IOBuf::create(0); AckStates ackStates; @@ -645,7 +645,7 @@ class QuicServerTransportTestBase : public virtual testing::Test { Optional initialDestinationConnectionId; Optional serverConnectionId; std::unique_ptr clientReadCodec; - std::vector serverWrites; + std::vector serverWrites; std::shared_ptr serverCtx; std::vector supportedVersions; diff --git a/quic/state/QuicStreamFunctions.cpp b/quic/state/QuicStreamFunctions.cpp index e9e19f77e..40b13dd49 100644 --- a/quic/state/QuicStreamFunctions.cpp +++ b/quic/state/QuicStreamFunctions.cpp @@ -13,7 +13,7 @@ #include namespace { -void prependToBuf(quic::Buf& buf, quic::Buf toAppend) { +void prependToBuf(quic::BufPtr& buf, quic::BufPtr toAppend) { if (buf) { buf->prependChain(std::move(toAppend)); } else { @@ -24,7 +24,7 @@ void prependToBuf(quic::Buf& buf, quic::Buf toAppend) { namespace quic { folly::Expected -writeDataToQuicStream(QuicStreamState& stream, Buf data, bool eof) { +writeDataToQuicStream(QuicStreamState& stream, BufPtr data, bool eof) { auto neverWrittenBufMeta = (0 == stream.writeBufMeta.offset); uint64_t len = 0; if (data) { @@ -87,7 +87,7 @@ folly::Expected writeBufMetaToQuicStream( return folly::unit; } -void writeDataToQuicStream(QuicCryptoStream& stream, Buf data) { +void writeDataToQuicStream(QuicCryptoStream& stream, BufPtr data) { stream.pendingWrites.append(data); stream.writeBuffer.append(std::move(data)); } @@ -96,7 +96,7 @@ void writeDataToQuicStream(QuicCryptoStream& stream, Buf data) { // a logic IOBuf chain, buf. The function will pack data into the available // tail agressively, and allocate in terms of appendLen until the push is // complete. -static void pushToTail(folly::IOBuf* dst, Buf src, size_t allocSize) { +static void pushToTail(folly::IOBuf* dst, BufPtr src, size_t allocSize) { size_t appended = 0; auto len = src->length(); auto data = src->data(); @@ -106,7 +106,7 @@ static void pushToTail(folly::IOBuf* dst, Buf src, size_t allocSize) { if (dst->tailroom() == 0 || dst->isSharedOne()) { // If the buffer we are pushing has tail room, just use that one. // Otherwise, we have to allocate one. - Buf newBuf; + BufPtr newBuf; if (src->tailroom() > 0 && !src->isSharedOne()) { src->trimStart(appended); dst->appendChain(std::move(src)); @@ -316,13 +316,13 @@ folly::Expected appendDataToReadBuffer( stream, std::move(buffer), 0, [](uint64_t, uint64_t) {}); } -std::pair readDataInOrderFromReadBuffer( +std::pair readDataInOrderFromReadBuffer( QuicStreamLike& stream, uint64_t amount, bool sinkData) { auto remaining = amount; bool eof = false; - Buf data; + BufPtr data; while ((amount == 0 || remaining != 0) && !stream.readBuffer.empty()) { auto curr = stream.readBuffer.begin(); if (curr->offset > stream.currentReadOffset) { @@ -363,11 +363,11 @@ std::pair readDataInOrderFromReadBuffer( return std::make_pair(std::move(data), eof); } -Buf readDataFromCryptoStream(QuicCryptoStream& stream, uint64_t amount) { +BufPtr readDataFromCryptoStream(QuicCryptoStream& stream, uint64_t amount) { return readDataInOrderFromReadBuffer(stream, amount).first; } -folly::Expected, QuicError> readDataFromQuicStream( +folly::Expected, QuicError> readDataFromQuicStream( QuicStreamState& stream, uint64_t amount) { auto eof = stream.finalReadOffset && @@ -383,7 +383,7 @@ folly::Expected, QuicError> readDataFromQuicStream( uint64_t lastReadOffset = stream.currentReadOffset; - Buf data; + BufPtr data; std::tie(data, eof) = readDataInOrderFromReadBuffer(stream, amount); // Update flow control before handling eof as eof is not subject to flow // control diff --git a/quic/state/QuicStreamFunctions.h b/quic/state/QuicStreamFunctions.h index a37ec20a6..6a610edd4 100644 --- a/quic/state/QuicStreamFunctions.h +++ b/quic/state/QuicStreamFunctions.h @@ -18,7 +18,7 @@ namespace quic { * @throws QuicTransportException on error. */ [[nodiscard]] folly::Expected -writeDataToQuicStream(QuicStreamState& stream, Buf data, bool eof); +writeDataToQuicStream(QuicStreamState& stream, BufPtr data, bool eof); /** * Adds data represented in the form of BufferMeta to the end of the Buffer @@ -35,7 +35,7 @@ writeDataToQuicStream(QuicStreamState& stream, Buf data, bool eof); * Adds data to the end of the write buffer of the QUIC crypto stream. This * data will be written onto the socket. */ -void writeDataToQuicStream(QuicCryptoStream& stream, Buf data); +void writeDataToQuicStream(QuicCryptoStream& stream, BufPtr data); /** * Process data received from the network to add it to the QUIC stream. @@ -62,7 +62,7 @@ void writeDataToQuicStream(QuicCryptoStream& stream, Buf data); * Returns a pair of data and whether or not EOF was reached on the stream. * amount == 0 reads all the pending data in the stream. */ -folly::Expected, QuicError> readDataFromQuicStream( +folly::Expected, QuicError> readDataFromQuicStream( QuicStreamState& state, uint64_t amount = 0); @@ -70,7 +70,7 @@ folly::Expected, QuicError> readDataFromQuicStream( * Reads data from the QUIC crypto data if data exists. * amount == 0 reads all the pending data in the stream. */ -Buf readDataFromCryptoStream(QuicCryptoStream& stream, uint64_t amount = 0); +BufPtr readDataFromCryptoStream(QuicCryptoStream& stream, uint64_t amount = 0); /** * Peeks data from the QUIC stream if data exists. @@ -152,7 +152,7 @@ appendDataToReadBufferCommon( * the buffer that was read and whether or not the FIN for the stream was read. * sinkData == true discards data instead of returning it. */ -std::pair readDataInOrderFromReadBuffer( +std::pair readDataInOrderFromReadBuffer( QuicStreamLike& stream, uint64_t amount, bool sinkData = false); diff --git a/quic/state/StateData.h b/quic/state/StateData.h index 313d86c8b..0386ca855 100644 --- a/quic/state/StateData.h +++ b/quic/state/StateData.h @@ -616,9 +616,9 @@ struct QuicConnectionStateBase : public folly::DelayedDestruction { /** * Eerie data app params functions. */ - folly::Function&, const Buf&) const> + folly::Function&, const BufPtr&) const> earlyDataAppParamsValidator; - folly::Function earlyDataAppParamsGetter; + folly::Function earlyDataAppParamsGetter; /** * Selects a previously unused peer-issued connection id to use. diff --git a/quic/state/StreamData.h b/quic/state/StreamData.h index 681504877..066e04c89 100644 --- a/quic/state/StreamData.h +++ b/quic/state/StreamData.h @@ -87,7 +87,7 @@ struct StreamBuffer { uint64_t offset; bool eof{false}; - StreamBuffer(Buf dataIn, uint64_t offsetIn, bool eofIn = false) noexcept + StreamBuffer(BufPtr dataIn, uint64_t offsetIn, bool eofIn = false) noexcept : data(std::move(dataIn)), offset(offsetIn), eof(eofIn) {} StreamBuffer(StreamBuffer&& other) = default; diff --git a/quic/state/stream/test/StreamStateFunctionsTest.cpp b/quic/state/stream/test/StreamStateFunctionsTest.cpp index 99abb8cb4..86996c8ea 100644 --- a/quic/state/stream/test/StreamStateFunctionsTest.cpp +++ b/quic/state/stream/test/StreamStateFunctionsTest.cpp @@ -42,7 +42,7 @@ TEST_F(StreamStateFunctionsTests, BasicResetTest) { .hasError()); std::string retxBufData = "How would I know?"; - Buf retxBuf = folly::IOBuf::copyBuffer(retxBufData); + BufPtr retxBuf = folly::IOBuf::copyBuffer(retxBufData); stream.retransmissionBuffer.emplace( 34, std::make_unique(ChainedByteRangeHead(retxBuf), 34)); @@ -84,7 +84,7 @@ TEST_F(StreamStateFunctionsTests, BasicReliableResetTest) { .hasError()); std::string retxBufData = "How would I know?"; - Buf retxBuf = folly::IOBuf::copyBuffer(retxBufData); + BufPtr retxBuf = folly::IOBuf::copyBuffer(retxBufData); stream.retransmissionBuffer.emplace( 34, std::make_unique(ChainedByteRangeHead(retxBuf), 34)); diff --git a/quic/state/test/AckHandlersTest.cpp b/quic/state/test/AckHandlersTest.cpp index 452aa9e65..da158d8aa 100644 --- a/quic/state/test/AckHandlersTest.cpp +++ b/quic/state/test/AckHandlersTest.cpp @@ -4463,7 +4463,7 @@ class AckEventForAppDataTest : public Test { auto writeDataToQuicStreamAndGetFrame( QuicStreamState& stream, - Buf&& data, + BufPtr&& data, const bool eof) { const auto offset = getLargestWriteOffsetSeen(stream); const auto len = data->computeChainDataLength(); @@ -4473,7 +4473,7 @@ class AckEventForAppDataTest : public Test { auto writeDataToQuicStreamAndGetFrame( const StreamId streamId, - Buf&& data, + BufPtr&& data, const bool eof) { auto stream = conn_->streamManager->findStream(streamId); CHECK_NOTNULL(stream); diff --git a/quic/state/test/QuicStreamManagerTest.cpp b/quic/state/test/QuicStreamManagerTest.cpp index 44c5fc5af..fe8e65715 100644 --- a/quic/state/test/QuicStreamManagerTest.cpp +++ b/quic/state/test/QuicStreamManagerTest.cpp @@ -771,7 +771,7 @@ TEST_P(QuicStreamManagerTest, RemoveResetsUponClosure) { EXPECT_FALSE(conn.pendingEvents.resets.contains(stream->id)); } -Buf createBuffer(uint32_t len) { +BufPtr createBuffer(uint32_t len) { auto buf = folly::IOBuf::create(len); buf->append(len); return buf; diff --git a/quic/state/test/StreamDataTest.cpp b/quic/state/test/StreamDataTest.cpp index 89bb85e8c..6a799b6a8 100644 --- a/quic/state/test/StreamDataTest.cpp +++ b/quic/state/test/StreamDataTest.cpp @@ -15,14 +15,14 @@ using namespace testing; namespace quic::test { -Buf createBuffer(uint32_t len) { +BufPtr createBuffer(uint32_t len) { auto buf = folly::IOBuf::create(len); buf->append(len); return buf; } std::unique_ptr -createWriteStreamBuffer(uint32_t offset, Buf& buf, bool eof) { +createWriteStreamBuffer(uint32_t offset, BufPtr& buf, bool eof) { ChainedByteRangeHead cbrh(buf); return std::make_unique(std::move(cbrh), offset, eof); } @@ -239,9 +239,9 @@ TEST(StreamDataTest, PendingWritesRemovalAll) { state.currentWriteOffset = 5; // [5, 12] - Buf buf1 = folly::IOBuf::create(3); + BufPtr buf1 = folly::IOBuf::create(3); buf1->append(3); - Buf buf2 = folly::IOBuf::create(5); + BufPtr buf2 = folly::IOBuf::create(5); buf2->append(5); buf1->appendChain(std::move(buf2)); @@ -255,9 +255,9 @@ TEST(StreamDataTest, PendingWritesRemoval) { state.currentWriteOffset = 5; // [5, 12] - Buf buf1 = folly::IOBuf::create(3); + BufPtr buf1 = folly::IOBuf::create(3); buf1->append(3); - Buf buf2 = folly::IOBuf::create(5); + BufPtr buf2 = folly::IOBuf::create(5); buf2->append(5); buf1->appendChain(std::move(buf2)); @@ -271,9 +271,9 @@ TEST(StreamDataTest, PendingWritesRemovalNoChange) { state.currentWriteOffset = 5; // [5, 12] - Buf buf1 = folly::IOBuf::create(3); + BufPtr buf1 = folly::IOBuf::create(3); buf1->append(3); - Buf buf2 = folly::IOBuf::create(5); + BufPtr buf2 = folly::IOBuf::create(5); buf2->append(5); buf1->appendChain(std::move(buf2)); @@ -550,15 +550,15 @@ TEST(StreamDataTest, ReadBufferRemovalAll) { QuicStreamState state(0, qcsb); // [1, 2] [5, 12] [17, 19] - Buf buf1 = folly::IOBuf::create(2); + BufPtr buf1 = folly::IOBuf::create(2); buf1->append(2); state.readBuffer.emplace_back(std::move(buf1), 1); - Buf buf2 = folly::IOBuf::create(8); + BufPtr buf2 = folly::IOBuf::create(8); buf2->append(8); state.readBuffer.emplace_back(std::move(buf2), 5); - Buf buf3 = folly::IOBuf::create(3); + BufPtr buf3 = folly::IOBuf::create(3); buf3->append(3); state.readBuffer.emplace_back(std::move(buf3), 17); @@ -571,15 +571,15 @@ TEST(StreamDataTest, ReadBufferRemovalExactMatch) { QuicStreamState state(0, qcsb); // [1, 2] [5, 12] [17, 19] - Buf buf1 = folly::IOBuf::create(2); + BufPtr buf1 = folly::IOBuf::create(2); buf1->append(2); state.readBuffer.emplace_back(std::move(buf1), 1); - Buf buf2 = folly::IOBuf::create(8); + BufPtr buf2 = folly::IOBuf::create(8); buf2->append(8); state.readBuffer.emplace_back(std::move(buf2), 5); - Buf buf3 = folly::IOBuf::create(3); + BufPtr buf3 = folly::IOBuf::create(3); buf3->append(3); state.readBuffer.emplace_back(std::move(buf3), 17); @@ -598,15 +598,15 @@ TEST(StreamDataTest, ReadBufferRemovalPartialMatch) { QuicStreamState state(0, qcsb); // [1, 2] [5, 12] [17, 19] - Buf buf1 = folly::IOBuf::create(2); + BufPtr buf1 = folly::IOBuf::create(2); buf1->append(2); state.readBuffer.emplace_back(std::move(buf1), 1); - Buf buf2 = folly::IOBuf::create(8); + BufPtr buf2 = folly::IOBuf::create(8); buf2->append(8); state.readBuffer.emplace_back(std::move(buf2), 5); - Buf buf3 = folly::IOBuf::create(3); + BufPtr buf3 = folly::IOBuf::create(3); buf3->append(3); state.readBuffer.emplace_back(std::move(buf3), 17); @@ -625,15 +625,15 @@ TEST(StreamDataTest, ReadBufferRemovalNoMatch) { QuicStreamState state(0, qcsb); // [1, 2] [5, 12] [17, 19] - Buf buf1 = folly::IOBuf::create(2); + BufPtr buf1 = folly::IOBuf::create(2); buf1->append(2); state.readBuffer.emplace_back(std::move(buf1), 1); - Buf buf2 = folly::IOBuf::create(8); + BufPtr buf2 = folly::IOBuf::create(8); buf2->append(8); state.readBuffer.emplace_back(std::move(buf2), 5); - Buf buf3 = folly::IOBuf::create(3); + BufPtr buf3 = folly::IOBuf::create(3); buf3->append(3); state.readBuffer.emplace_back(std::move(buf3), 17); diff --git a/quic/tools/tperf/TperfDSRSender.cpp b/quic/tools/tperf/TperfDSRSender.cpp index b5ba2047e..33453ea2a 100644 --- a/quic/tools/tperf/TperfDSRSender.cpp +++ b/quic/tools/tperf/TperfDSRSender.cpp @@ -10,7 +10,7 @@ namespace quic { -TperfDSRSender::TperfDSRSender(Buf sendBuf, QuicAsyncUDPSocket& sock) +TperfDSRSender::TperfDSRSender(BufPtr sendBuf, QuicAsyncUDPSocket& sock) : sock_(sock), buf_(std::move(sendBuf)) {} bool TperfDSRSender::addSendInstruction(const SendInstruction& instruction) { @@ -43,7 +43,7 @@ bool TperfDSRSender::flush() { quic::UdpSocketPacketGroupWriter packetGroupWriter(sock_, prs.clientAddress); auto written = packetGroupWriter.writePacketsGroup( prs, [=](const PacketizationRequest& req) { - Buf buf; + BufPtr buf; uint64_t remainingLen = req.len; do { buf = buf_->clone(); diff --git a/quic/tools/tperf/TperfDSRSender.h b/quic/tools/tperf/TperfDSRSender.h index c0d2620be..9e1774b46 100644 --- a/quic/tools/tperf/TperfDSRSender.h +++ b/quic/tools/tperf/TperfDSRSender.h @@ -29,7 +29,7 @@ namespace quic { */ class TperfDSRSender : public DSRPacketizationRequestSender { public: - TperfDSRSender(Buf sendBuf, QuicAsyncUDPSocket& sock); + TperfDSRSender(BufPtr sendBuf, QuicAsyncUDPSocket& sock); bool addSendInstruction(const SendInstruction&) override; @@ -43,7 +43,7 @@ class TperfDSRSender : public DSRPacketizationRequestSender { std::vector instructions_; QuicAsyncUDPSocket& sock_; CipherPair cipherPair_; - Buf buf_; + BufPtr buf_; }; } // namespace quic