| 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 // Accumulates frames for the next packet until more frames no longer fit or | 5 // Accumulates frames for the next packet until more frames no longer fit or |
| 6 // it's time to create a packet from them. Also provides packet creation of | 6 // it's time to create a packet from them. Also provides packet creation of |
| 7 // FEC packets based on previously created packets. | 7 // FEC packets based on previously created packets. |
| 8 | 8 |
| 9 #ifndef NET_QUIC_QUIC_PACKET_CREATOR_H_ | 9 #ifndef NET_QUIC_QUIC_PACKET_CREATOR_H_ |
| 10 #define NET_QUIC_QUIC_PACKET_CREATOR_H_ | 10 #define NET_QUIC_QUIC_PACKET_CREATOR_H_ |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 82 // Returns the number of bytes consumed from data. | 82 // Returns the number of bytes consumed from data. |
| 83 // If data is empty and fin is true, the expected behavior is to consume the | 83 // If data is empty and fin is true, the expected behavior is to consume the |
| 84 // fin but return 0. If any data is consumed, it will be copied into a | 84 // fin but return 0. If any data is consumed, it will be copied into a |
| 85 // new buffer that |frame| will point to and will be stored in |buffer|. | 85 // new buffer that |frame| will point to and will be stored in |buffer|. |
| 86 size_t CreateStreamFrame(QuicStreamId id, | 86 size_t CreateStreamFrame(QuicStreamId id, |
| 87 const QuicIOVector& iov, | 87 const QuicIOVector& iov, |
| 88 size_t iov_offset, | 88 size_t iov_offset, |
| 89 QuicStreamOffset offset, | 89 QuicStreamOffset offset, |
| 90 bool fin, | 90 bool fin, |
| 91 QuicFrame* frame, | 91 QuicFrame* frame, |
| 92 scoped_ptr<char[]>* buffer); | 92 UniqueStreamBuffer* buffer); |
| 93 | 93 |
| 94 // Serializes all frames into a single packet. All frames must fit into a | 94 // Serializes all frames into a single packet. All frames must fit into a |
| 95 // single packet. Also, sets the entropy hash of the serialized packet to a | 95 // single packet. Also, sets the entropy hash of the serialized packet to a |
| 96 // random bool and returns that value as a member of SerializedPacket. | 96 // random bool and returns that value as a member of SerializedPacket. |
| 97 // Never returns a RetransmittableFrames in SerializedPacket. | 97 // Never returns a RetransmittableFrames in SerializedPacket. |
| 98 SerializedPacket SerializeAllFrames(const QuicFrames& frames, | 98 SerializedPacket SerializeAllFrames(const QuicFrames& frames, |
| 99 char* buffer, | 99 char* buffer, |
| 100 size_t buffer_len); | 100 size_t buffer_len); |
| 101 | 101 |
| 102 // Re-serializes frames with the original packet's packet number length. | 102 // Re-serializes frames with the original packet's packet number length. |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 144 // in BytesFree. | 144 // in BytesFree. |
| 145 size_t PacketSize() const; | 145 size_t PacketSize() const; |
| 146 | 146 |
| 147 // TODO(jri): AddSavedFrame calls AddFrame, which only saves the frame | 147 // TODO(jri): AddSavedFrame calls AddFrame, which only saves the frame |
| 148 // if it is a stream frame, not other types of frames. Fix this API; | 148 // if it is a stream frame, not other types of frames. Fix this API; |
| 149 // add a AddNonSavedFrame method. | 149 // add a AddNonSavedFrame method. |
| 150 // Adds |frame| to the packet creator's list of frames to be serialized. | 150 // Adds |frame| to the packet creator's list of frames to be serialized. |
| 151 // Returns false if the frame doesn't fit into the current packet. | 151 // Returns false if the frame doesn't fit into the current packet. |
| 152 bool AddSavedFrame(const QuicFrame& frame); | 152 bool AddSavedFrame(const QuicFrame& frame); |
| 153 | 153 |
| 154 // Identical to AddSavedFrame, but takes ownership of the buffer if it returns | 154 // Identical to AddSavedFrame, but takes ownership of the buffer. |
| 155 // true. | 155 bool AddSavedFrame(const QuicFrame& frame, UniqueStreamBuffer buffer); |
| 156 bool AddSavedFrame(const QuicFrame& frame, char* buffer); | |
| 157 | 156 |
| 158 // Identical to AddSavedFrame, but takes ownership of the buffer if it returns | 157 // Identical to AddSavedFrame, but takes ownership of the buffer, and allows |
| 159 // true, and allows to cause the packet to be padded. | 158 // to cause the packet to be padded. |
| 160 bool AddPaddedSavedFrame(const QuicFrame& frame, char* buffer); | 159 bool AddPaddedSavedFrame(const QuicFrame& frame, UniqueStreamBuffer buffer); |
| 161 | 160 |
| 162 // Serializes all frames which have been added and adds any which should be | 161 // Serializes all frames which have been added and adds any which should be |
| 163 // retransmitted to |retransmittable_frames| if it's not nullptr. All frames | 162 // retransmitted to |retransmittable_frames| if it's not nullptr. All frames |
| 164 // must fit into a single packet. Sets the entropy hash of the serialized | 163 // must fit into a single packet. Sets the entropy hash of the serialized |
| 165 // packet to a random bool and returns that value as a member of | 164 // packet to a random bool and returns that value as a member of |
| 166 // SerializedPacket. Also, sets |serialized_frames| in the SerializedPacket to | 165 // SerializedPacket. Also, sets |serialized_frames| in the SerializedPacket to |
| 167 // the corresponding RetransmittableFrames if any frames are to be | 166 // the corresponding RetransmittableFrames if any frames are to be |
| 168 // retransmitted. | 167 // retransmitted. |
| 169 // Fails if |buffer_len| isn't long enough for the encrypted packet. | 168 // Fails if |buffer_len| isn't long enough for the encrypted packet. |
| 170 SerializedPacket SerializePacket(char* encrypted_buffer, size_t buffer_len); | 169 SerializedPacket SerializePacket(char* encrypted_buffer, size_t buffer_len); |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 | 256 |
| 258 void FillPacketHeader(QuicFecGroupNumber fec_group, | 257 void FillPacketHeader(QuicFecGroupNumber fec_group, |
| 259 bool fec_flag, | 258 bool fec_flag, |
| 260 QuicPacketHeader* header); | 259 QuicPacketHeader* header); |
| 261 | 260 |
| 262 // Allows a frame to be added without creating retransmittable frames. | 261 // Allows a frame to be added without creating retransmittable frames. |
| 263 // Particularly useful for retransmits using SerializeAllFrames(). | 262 // Particularly useful for retransmits using SerializeAllFrames(). |
| 264 bool AddFrame(const QuicFrame& frame, | 263 bool AddFrame(const QuicFrame& frame, |
| 265 bool save_retransmittable_frames, | 264 bool save_retransmittable_frames, |
| 266 bool needs_padding, | 265 bool needs_padding, |
| 267 char* buffer); | 266 UniqueStreamBuffer buffer); |
| 268 | 267 |
| 269 // Adds a padding frame to the current packet only if the current packet | 268 // Adds a padding frame to the current packet only if the current packet |
| 270 // contains a handshake message, and there is sufficient room to fit a | 269 // contains a handshake message, and there is sufficient room to fit a |
| 271 // padding frame. | 270 // padding frame. |
| 272 void MaybeAddPadding(); | 271 void MaybeAddPadding(); |
| 273 | 272 |
| 274 QuicConnectionId connection_id_; | 273 QuicConnectionId connection_id_; |
| 275 EncryptionLevel encryption_level_; | 274 EncryptionLevel encryption_level_; |
| 276 QuicFramer* framer_; | 275 QuicFramer* framer_; |
| 277 scoped_ptr<QuicRandomBoolSource> random_bool_source_; | 276 scoped_ptr<QuicRandomBoolSource> random_bool_source_; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 306 scoped_ptr<RetransmittableFrames> queued_retransmittable_frames_; | 305 scoped_ptr<RetransmittableFrames> queued_retransmittable_frames_; |
| 307 // If true, the packet will be padded up to |max_packet_length_|. | 306 // If true, the packet will be padded up to |max_packet_length_|. |
| 308 bool needs_padding_; | 307 bool needs_padding_; |
| 309 | 308 |
| 310 DISALLOW_COPY_AND_ASSIGN(QuicPacketCreator); | 309 DISALLOW_COPY_AND_ASSIGN(QuicPacketCreator); |
| 311 }; | 310 }; |
| 312 | 311 |
| 313 } // namespace net | 312 } // namespace net |
| 314 | 313 |
| 315 #endif // NET_QUIC_QUIC_PACKET_CREATOR_H_ | 314 #endif // NET_QUIC_QUIC_PACKET_CREATOR_H_ |
| OLD | NEW |