| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 // | 4 // |
| 5 // Responsible for generating packets on behalf of a QuicConnection. | 5 // Responsible for generating packets on behalf of a QuicConnection. |
| 6 // Packets are serialized just-in-time. Control frames are queued. | 6 // Packets are serialized just-in-time. Control frames are queued. |
| 7 // Ack and Feedback frames will be requested from the Connection | 7 // Ack and Feedback frames will be requested from the Connection |
| 8 // just-in-time. When a packet needs to be sent, the Generator | 8 // just-in-time. When a packet needs to be sent, the Generator |
| 9 // will serialize a packet and pass it to QuicConnection::SendOrQueuePacket() | 9 // will serialize a packet and pass it to QuicConnection::SendOrQueuePacket() |
| 10 // | 10 // |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 } // namespace test | 68 } // namespace test |
| 69 | 69 |
| 70 class NET_EXPORT_PRIVATE QuicPacketGenerator { | 70 class NET_EXPORT_PRIVATE QuicPacketGenerator { |
| 71 public: | 71 public: |
| 72 class NET_EXPORT_PRIVATE DelegateInterface { | 72 class NET_EXPORT_PRIVATE DelegateInterface { |
| 73 public: | 73 public: |
| 74 virtual ~DelegateInterface() {} | 74 virtual ~DelegateInterface() {} |
| 75 virtual bool ShouldGeneratePacket(TransmissionType transmission_type, | 75 virtual bool ShouldGeneratePacket(TransmissionType transmission_type, |
| 76 HasRetransmittableData retransmittable, | 76 HasRetransmittableData retransmittable, |
| 77 IsHandshake handshake) = 0; | 77 IsHandshake handshake) = 0; |
| 78 virtual QuicAckFrame* CreateAckFrame() = 0; | 78 virtual void PopulateAckFrame(QuicAckFrame* ack) = 0; |
| 79 virtual QuicStopWaitingFrame* CreateStopWaitingFrame() = 0; | 79 virtual void PopulateStopWaitingFrame( |
| 80 QuicStopWaitingFrame* stop_waiting) = 0; |
| 80 // Takes ownership of |packet.packet| and |packet.retransmittable_frames|. | 81 // Takes ownership of |packet.packet| and |packet.retransmittable_frames|. |
| 81 virtual void OnSerializedPacket(const SerializedPacket& packet) = 0; | 82 virtual void OnSerializedPacket(const SerializedPacket& packet) = 0; |
| 82 virtual void CloseConnection(QuicErrorCode error, bool from_peer) = 0; | 83 virtual void CloseConnection(QuicErrorCode error, bool from_peer) = 0; |
| 83 }; | 84 }; |
| 84 | 85 |
| 85 // Interface which gets callbacks from the QuicPacketGenerator at interesting | 86 // Interface which gets callbacks from the QuicPacketGenerator at interesting |
| 86 // points. Implementations must not mutate the state of the generator | 87 // points. Implementations must not mutate the state of the generator |
| 87 // as a result of these callbacks. | 88 // as a result of these callbacks. |
| 88 class NET_EXPORT_PRIVATE DebugDelegate { | 89 class NET_EXPORT_PRIVATE DebugDelegate { |
| 89 public: | 90 public: |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 // SerializedPacket. | 152 // SerializedPacket. |
| 152 QuicEncryptedPacket* SerializeVersionNegotiationPacket( | 153 QuicEncryptedPacket* SerializeVersionNegotiationPacket( |
| 153 const QuicVersionVector& supported_versions); | 154 const QuicVersionVector& supported_versions); |
| 154 | 155 |
| 155 | 156 |
| 156 // Re-serializes frames with the original packet's sequence number length. | 157 // Re-serializes frames with the original packet's sequence number length. |
| 157 // Used for retransmitting packets to ensure they aren't too long. | 158 // Used for retransmitting packets to ensure they aren't too long. |
| 158 // Caller must ensure that any open FEC group is closed before calling this | 159 // Caller must ensure that any open FEC group is closed before calling this |
| 159 // method. | 160 // method. |
| 160 SerializedPacket ReserializeAllFrames( | 161 SerializedPacket ReserializeAllFrames( |
| 161 const QuicFrames& frames, | 162 const RetransmittableFrames& frames, |
| 162 QuicSequenceNumberLength original_length); | 163 QuicSequenceNumberLength original_length); |
| 163 | 164 |
| 164 // Update the sequence number length to use in future packets as soon as it | 165 // Update the sequence number length to use in future packets as soon as it |
| 165 // can be safely changed. | 166 // can be safely changed. |
| 166 void UpdateSequenceNumberLength( | 167 void UpdateSequenceNumberLength( |
| 167 QuicPacketSequenceNumber least_packet_awaited_by_peer, | 168 QuicPacketSequenceNumber least_packet_awaited_by_peer, |
| 168 QuicPacketCount max_packets_in_flight); | 169 QuicPacketCount max_packets_in_flight); |
| 169 | 170 |
| 170 // Set the minimum number of bytes for the connection id length; | 171 // Set the minimum number of bytes for the connection id length; |
| 171 void SetConnectionIdLength(uint32 length); | 172 void SetConnectionIdLength(uint32 length); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 // if this variable is false. | 248 // if this variable is false. |
| 248 bool should_fec_protect_; | 249 bool should_fec_protect_; |
| 249 | 250 |
| 250 // Flags to indicate the need for just-in-time construction of a frame. | 251 // Flags to indicate the need for just-in-time construction of a frame. |
| 251 bool should_send_ack_; | 252 bool should_send_ack_; |
| 252 bool should_send_stop_waiting_; | 253 bool should_send_stop_waiting_; |
| 253 // If we put a non-retransmittable frame (ack frame) in this packet, then we | 254 // If we put a non-retransmittable frame (ack frame) in this packet, then we |
| 254 // have to hold a reference to it until we flush (and serialize it). | 255 // have to hold a reference to it until we flush (and serialize it). |
| 255 // Retransmittable frames are referenced elsewhere so that they | 256 // Retransmittable frames are referenced elsewhere so that they |
| 256 // can later be (optionally) retransmitted. | 257 // can later be (optionally) retransmitted. |
| 257 scoped_ptr<QuicAckFrame> pending_ack_frame_; | 258 QuicAckFrame pending_ack_frame_; |
| 258 scoped_ptr<QuicStopWaitingFrame> pending_stop_waiting_frame_; | 259 QuicStopWaitingFrame pending_stop_waiting_frame_; |
| 260 // True if an ack or stop waiting frame is already queued, and should not be |
| 261 // re-added. |
| 262 bool ack_queued_; |
| 263 bool stop_waiting_queued_; |
| 259 | 264 |
| 260 // Stores notifiers that should be attached to the next serialized packet. | 265 // Stores notifiers that should be attached to the next serialized packet. |
| 261 std::list<QuicAckNotifier*> ack_notifiers_; | 266 std::list<QuicAckNotifier*> ack_notifiers_; |
| 262 | 267 |
| 263 DISALLOW_COPY_AND_ASSIGN(QuicPacketGenerator); | 268 DISALLOW_COPY_AND_ASSIGN(QuicPacketGenerator); |
| 264 }; | 269 }; |
| 265 | 270 |
| 266 } // namespace net | 271 } // namespace net |
| 267 | 272 |
| 268 #endif // NET_QUIC_QUIC_PACKET_GENERATOR_H_ | 273 #endif // NET_QUIC_QUIC_PACKET_GENERATOR_H_ |
| OLD | NEW |