Change SendOrQueueMessage to take a QuicMemSliceSpan.

QuicMemSliceSpan now has a `ConsumeAll` method in its API, which allows us to
move the mem slices into a queue of messages to send.  This is now the same
mechanism used to store mem slice spans in a stream or message's send buffer.
It ensures that mem slices are properly ref-counted so that the contents are not
deleted after storing them.

This should enable zero-copy writes down the line.  However, currently, we still
have two copies:
 - One in the application layer, where we create mem slices by copying data
 - One in the session, when converting mem slices back into a mem slice span

Nothing stops us from fixing the former, but it requires a bit of refactoring at
the application layer.

The latter requires an API for building a QuicMemSliceSpan out of QuicMemSlices
without copying them.  This should be possible, but doesn't seem to exist today.

gfe-relnote: n/a (Quartc only)
PiperOrigin-RevId: 247442584
Change-Id: Ie1bc1ad2f878ee312a5e13b048fd2233864c3d18
7 files changed
tree: 9a978ffafca6fa3e22472c23f0af98b30441e72d
  1. common/
  2. epoll_server/
  3. http2/
  4. quic/
  5. spdy/
  6. CONTRIBUTING.md
  7. LICENSE
  8. README.md
README.md

QUICHE

QUICHE (QUIC, Http/2, Etc) is Google‘s implementation of QUIC and related protocols. It powers Chromium as well as Google’s QUIC servers and some other projects.

The code is currently in process of being moved from https://cs.chromium.org/chromium/src/net/third_party/ into this repository. Please excuse our appearance while we're under construction.