Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(562)

Unified Diff: net/quic/quic_packet_creator.h

Issue 2193073003: Move shared files in net/quic/ into net/quic/core/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: io_thread_unittest.cc Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/quic/quic_one_block_arena_test.cc ('k') | net/quic/quic_packet_creator.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_packet_creator.h
diff --git a/net/quic/quic_packet_creator.h b/net/quic/quic_packet_creator.h
deleted file mode 100644
index 14cf69e5711d968cb332db35bfd84aca15736b50..0000000000000000000000000000000000000000
--- a/net/quic/quic_packet_creator.h
+++ /dev/null
@@ -1,354 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// Accumulates frames for the next packet until more frames no longer fit or
-// it's time to create a packet from them. If multipath enabled, only creates
-// packets on one path at the same time. Currently, next packet number is
-// tracked per-path.
-
-#ifndef NET_QUIC_QUIC_PACKET_CREATOR_H_
-#define NET_QUIC_QUIC_PACKET_CREATOR_H_
-
-#include <stddef.h>
-
-#include <memory>
-#include <string>
-#include <unordered_map>
-#include <utility>
-#include <vector>
-
-#include "base/macros.h"
-#include "base/strings/string_piece.h"
-#include "net/quic/quic_framer.h"
-#include "net/quic/quic_protocol.h"
-
-namespace net {
-namespace test {
-class QuicPacketCreatorPeer;
-}
-
-class QuicRandom;
-
-class NET_EXPORT_PRIVATE QuicPacketCreator {
- public:
- // A delegate interface for further processing serialized packet.
- class NET_EXPORT_PRIVATE DelegateInterface
- : public QuicConnectionCloseDelegateInterface {
- public:
- ~DelegateInterface() override {}
- // Called when a packet is serialized. Delegate does not take the ownership
- // of |serialized_packet|, but takes ownership of any frames it removes
- // from |packet.retransmittable_frames|.
- virtual void OnSerializedPacket(SerializedPacket* serialized_packet) = 0;
- };
-
- // Interface which gets callbacks from the QuicPacketCreator at interesting
- // points. Implementations must not mutate the state of the creator
- // as a result of these callbacks.
- class NET_EXPORT_PRIVATE DebugDelegate {
- public:
- virtual ~DebugDelegate() {}
-
- // Called when a frame has been added to the current packet.
- virtual void OnFrameAddedToPacket(const QuicFrame& frame) {}
- };
-
- // QuicRandom* required for packet entropy.
- QuicPacketCreator(QuicConnectionId connection_id,
- QuicFramer* framer,
- QuicRandom* random_generator,
- QuicBufferAllocator* buffer_allocator,
- DelegateInterface* delegate);
-
- ~QuicPacketCreator();
-
- // Makes the framer not serialize the protocol version in sent packets.
- void StopSendingVersion();
-
- // SetDiversificationNonce sets the nonce that will be sent in each public
- // header of packets encrypted at the initial encryption level. Should only
- // be called by servers.
- void SetDiversificationNonce(const DiversificationNonce nonce);
-
- // Update the packet number length to use in future packets as soon as it
- // can be safely changed.
- // TODO(fayang): Directly set packet number length instead of compute it in
- // creator.
- void UpdatePacketNumberLength(QuicPacketNumber least_packet_awaited_by_peer,
- QuicPacketCount max_packets_in_flight);
-
- // The overhead the framing will add for a packet with one frame.
- static size_t StreamFramePacketOverhead(
- QuicVersion version,
- QuicConnectionIdLength connection_id_length,
- bool include_version,
- bool include_path_id,
- bool include_diversification_nonce,
- QuicPacketNumberLength packet_number_length,
- QuicStreamOffset offset);
-
- // Returns false and flushes all pending frames if current open packet is
- // full.
- // If current packet is not full, converts a raw payload into a stream frame
- // that fits into the open packet and adds it to the packet.
- // The payload begins at |iov_offset| into the |iov|.
- bool ConsumeData(QuicStreamId id,
- QuicIOVector iov,
- size_t iov_offset,
- QuicStreamOffset offset,
- bool fin,
- bool needs_full_padding,
- QuicFrame* frame);
-
- // Returns true if current open packet can accommodate more stream frames of
- // stream |id| at |offset|, false otherwise.
- bool HasRoomForStreamFrame(QuicStreamId id, QuicStreamOffset offset);
-
- // Re-serializes frames with the original packet's packet number length.
- // Used for retransmitting packets to ensure they aren't too long.
- void ReserializeAllFrames(const PendingRetransmission& retransmission,
- char* buffer,
- size_t buffer_len);
-
- // Serializes all added frames into a single packet and invokes the delegate_
- // to further process the SerializedPacket.
- void Flush();
-
- // Optimized method to create a QuicStreamFrame, serialize it, and encrypt it
- // into |encrypted_buffer|. Adds the QuicStreamFrame to the returned
- // SerializedPacket. Sets |num_bytes_consumed| to the number of bytes
- // consumed to create the QuicStreamFrame.
- void CreateAndSerializeStreamFrame(QuicStreamId id,
- const QuicIOVector& iov,
- QuicStreamOffset iov_offset,
- QuicStreamOffset stream_offset,
- bool fin,
- QuicAckListenerInterface* listener,
- char* encrypted_buffer,
- size_t encrypted_buffer_len,
- size_t* num_bytes_consumed);
-
- // Returns true if there are frames pending to be serialized.
- bool HasPendingFrames() const;
-
- // Returns true if there are retransmittable frames pending to be serialized.
- bool HasPendingRetransmittableFrames() const;
-
- // Returns the number of bytes which are available to be used by additional
- // frames in the packet. Since stream frames are slightly smaller when they
- // are the last frame in a packet, this method will return a different
- // value than max_packet_size - PacketSize(), in this case.
- size_t BytesFree();
-
- // Returns the number of bytes that the packet will expand by if a new frame
- // is added to the packet. If the last frame was a stream frame, it will
- // expand slightly when a new frame is added, and this method returns the
- // amount of expected expansion.
- size_t ExpansionOnNewFrame() const;
-
- // Returns the number of bytes in the current packet, including the header,
- // if serialized with the current frames. Adding a frame to the packet
- // may change the serialized length of existing frames, as per the comment
- // in BytesFree.
- size_t PacketSize();
-
- // Tries to add |frame| to the packet creator's list of frames to be
- // serialized. If the frame does not fit into the current packet, flushes the
- // packet and returns false.
- bool AddSavedFrame(const QuicFrame& frame);
-
- // Identical to AddSavedFrame, but allows the frame to be padded.
- bool AddPaddedSavedFrame(const QuicFrame& frame);
-
- // Adds |listener| to the next serialized packet and notifies the
- // std::listener with |length| as the number of acked bytes.
- void AddAckListener(QuicAckListenerInterface* listener,
- QuicPacketLength length);
-
- // Creates a version negotiation packet which supports |supported_versions|.
- // Caller owns the created packet. Also, sets the entropy hash of the
- // serialized packet to a random bool and returns that value as a member of
- // SerializedPacket.
- QuicEncryptedPacket* SerializeVersionNegotiationPacket(
- const QuicVersionVector& supported_versions);
-
- // Returns a dummy packet that is valid but contains no useful information.
- static SerializedPacket NoPacket();
-
- // Sets the encryption level that will be applied to new packets.
- void set_encryption_level(EncryptionLevel level) {
- packet_.encryption_level = level;
- }
-
- // packet number of the last created packet, or 0 if no packets have been
- // created.
- QuicPacketNumber packet_number() const { return packet_.packet_number; }
-
- QuicConnectionIdLength connection_id_length() const {
- return connection_id_length_;
- }
-
- void set_connection_id_length(QuicConnectionIdLength length) {
- connection_id_length_ = length;
- }
-
- QuicByteCount max_packet_length() const { return max_packet_length_; }
-
- bool has_ack() const { return packet_.has_ack; }
-
- bool has_stop_waiting() const { return packet_.has_stop_waiting; }
-
- // Sets the encrypter to use for the encryption level and updates the max
- // plaintext size.
- void SetEncrypter(EncryptionLevel level, QuicEncrypter* encrypter);
-
- // Indicates whether the packet creator is in a state where it can change
- // current maximum packet length.
- bool CanSetMaxPacketLength() const;
-
- // Sets the maximum packet length.
- void SetMaxPacketLength(QuicByteCount length);
-
- // Sets the path on which subsequent packets will be created. It is the
- // caller's responsibility to guarantee no packet is under construction before
- // calling this function. If |path_id| is different from current_path_,
- // next_packet_number_length_ is recalculated.
- void SetCurrentPath(QuicPathId path_id,
- QuicPacketNumber least_packet_awaited_by_peer,
- QuicPacketCount max_packets_in_flight);
-
- void set_debug_delegate(DebugDelegate* debug_delegate) {
- debug_delegate_ = debug_delegate;
- }
-
- private:
- friend class test::QuicPacketCreatorPeer;
-
- // A QuicRandom wrapper that gets a bucket of entropy and distributes it
- // bit-by-bit. Replenishes the bucket as needed. Not thread-safe. Expose this
- // class if single bit randomness is needed elsewhere.
- class QuicRandomBoolSource {
- public:
- // random: Source of entropy. Not owned.
- explicit QuicRandomBoolSource(QuicRandom* random);
-
- ~QuicRandomBoolSource();
-
- // Returns the next random bit from the bucket.
- bool RandBool();
-
- private:
- // Source of entropy.
- QuicRandom* random_;
- // Stored random bits.
- uint64_t bit_bucket_;
- // The next available bit has "1" in the mask. Zero means empty bucket.
- uint64_t bit_mask_;
-
- DISALLOW_COPY_AND_ASSIGN(QuicRandomBoolSource);
- };
-
- static bool ShouldRetransmit(const QuicFrame& frame);
-
- // Converts a raw payload to a frame which fits into the current open
- // packet. The payload begins at |iov_offset| into the |iov|.
- // If data is empty and fin is true, the expected behavior is to consume the
- // fin but return 0. If any data is consumed, it will be copied into a
- // new buffer that |frame| will point to and own.
- void CreateStreamFrame(QuicStreamId id,
- QuicIOVector iov,
- size_t iov_offset,
- QuicStreamOffset offset,
- bool fin,
- QuicFrame* frame);
-
- // Copies |length| bytes from iov starting at offset |iov_offset| into buffer.
- // |iov| must be at least iov_offset+length total length and buffer must be
- // at least |length| long.
- static void CopyToBuffer(QuicIOVector iov,
- size_t iov_offset,
- size_t length,
- char* buffer);
-
- // Updates packet number length on packet boundary.
- void MaybeUpdatePacketNumberLength();
-
- void FillPacketHeader(QuicPacketHeader* header);
-
- // Adds a |frame| if there is space and returns false and flushes all pending
- // frames if there isn't room. If |save_retransmittable_frames| is true,
- // saves the |frame| in the next SerializedPacket.
- bool AddFrame(const QuicFrame& frame, bool save_retransmittable_frames);
-
- // Adds a padding frame to the current packet only if the current packet
- // contains a handshake message, and there is sufficient room to fit a
- // padding frame.
- void MaybeAddPadding();
-
- // Serializes all frames which have been added and adds any which should be
- // retransmitted to packet_.retransmittable_frames. All frames must fit into
- // a single packet. Sets the entropy hash of the serialized packet to a
- // random bool.
- // Fails if |buffer_len| isn't long enough for the encrypted packet.
- void SerializePacket(char* encrypted_buffer, size_t buffer_len);
-
- // Called after a new SerialiedPacket is created to call the delegate's
- // OnSerializedPacket and reset state.
- void OnSerializedPacket();
-
- // Clears all fields of packet_ that should be cleared between serializations.
- void ClearPacket();
-
- // Returns true if a diversification nonce should be included in the current
- // packet's public header.
- bool IncludeNonceInPublicHeader();
-
- // Does not own these delegates or the framer.
- DelegateInterface* delegate_;
- DebugDelegate* debug_delegate_;
- QuicFramer* framer_;
-
- QuicRandomBoolSource random_bool_source_;
- QuicBufferAllocator* const buffer_allocator_;
-
- // Controls whether version should be included while serializing the packet.
- bool send_version_in_packet_;
- // Controls whether path id should be included while serializing the packet.
- bool send_path_id_in_packet_;
- // Staging variable to hold next packet number length. When sequence
- // number length is to be changed, this variable holds the new length until
- // a packet boundary, when the creator's packet_number_length_ can be changed
- // to this new value.
- QuicPacketNumberLength next_packet_number_length_;
- // If true, then |nonce_for_public_header_| will be included in the public
- // header of all packets created at the initial encryption level.
- bool have_diversification_nonce_;
- DiversificationNonce diversification_nonce_;
- // Maximum length including headers and encryption (UDP payload length.)
- QuicByteCount max_packet_length_;
- size_t max_plaintext_size_;
- // Length of connection_id to send over the wire.
- QuicConnectionIdLength connection_id_length_;
-
- // Frames to be added to the next SerializedPacket
- QuicFrames queued_frames_;
-
- // packet_size should never be read directly, use PacketSize() instead.
- // TODO(ianswett): Move packet_size_ into SerializedPacket once
- // QuicEncryptedPacket has been flattened into SerializedPacket.
- size_t packet_size_;
- QuicConnectionId connection_id_;
-
- // Packet used to invoke OnSerializedPacket.
- SerializedPacket packet_;
-
- // Map mapping path_id to last sent packet number on the path.
- std::unordered_map<QuicPathId, QuicPacketNumber> multipath_packet_number_;
-
- DISALLOW_COPY_AND_ASSIGN(QuicPacketCreator);
-};
-
-} // namespace net
-
-#endif // NET_QUIC_QUIC_PACKET_CREATOR_H_
« no previous file with comments | « net/quic/quic_one_block_arena_test.cc ('k') | net/quic/quic_packet_creator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698