| 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 #include "net/quic/quic_packet_creator.h" | 5 #include "net/quic/quic_packet_creator.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "net/quic/quic_utils.h" | 8 #include "net/quic/quic_utils.h" |
| 9 //#include "util/random/acmrandom.h" | 9 //#include "util/random/acmrandom.h" |
| 10 | 10 |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 StringPiece data_frame(data.data() + data.size() - data_to_send, | 74 StringPiece data_frame(data.data() + data.size() - data_to_send, |
| 75 frame_len); | 75 frame_len); |
| 76 | 76 |
| 77 QuicStreamFrame frame(id, set_fin, offset, data_frame); | 77 QuicStreamFrame frame(id, set_fin, offset, data_frame); |
| 78 frames.push_back(QuicFrame(&frame)); | 78 frames.push_back(QuicFrame(&frame)); |
| 79 FillPacketHeader(current_fec_group, PACKET_FLAGS_NONE, &header); | 79 FillPacketHeader(current_fec_group, PACKET_FLAGS_NONE, &header); |
| 80 offset += frame_len; | 80 offset += frame_len; |
| 81 data_to_send -= frame_len; | 81 data_to_send -= frame_len; |
| 82 | 82 |
| 83 // Produce the data packet (which might fin the stream). | 83 // Produce the data packet (which might fin the stream). |
| 84 framer_->ConstructFragementDataPacket(header, frames, &packet); | 84 framer_->ConstructFrameDataPacket(header, frames, &packet); |
| 85 DCHECK_GE(options_.max_packet_length, packet->length()); | 85 DCHECK_GE(options_.max_packet_length, packet->length()); |
| 86 packets->push_back(make_pair(header.packet_sequence_number, packet)); | 86 packets->push_back(make_pair(header.packet_sequence_number, packet)); |
| 87 frames.clear(); | 87 frames.clear(); |
| 88 } | 88 } |
| 89 } | 89 } |
| 90 | 90 |
| 91 // Create a new packet for the fin, if necessary. | 91 // Create a new packet for the fin, if necessary. |
| 92 if (fin && (options_.separate_fin_packet || data.size() == 0)) { | 92 if (fin && (options_.separate_fin_packet || data.size() == 0)) { |
| 93 FillPacketHeader(current_fec_group, PACKET_FLAGS_NONE, &header); | 93 FillPacketHeader(current_fec_group, PACKET_FLAGS_NONE, &header); |
| 94 QuicStreamFrame frame(id, true, offset, ""); | 94 QuicStreamFrame frame(id, true, offset, ""); |
| 95 frames.push_back(QuicFrame(&frame)); | 95 frames.push_back(QuicFrame(&frame)); |
| 96 framer_->ConstructFragementDataPacket(header, frames, &packet); | 96 framer_->ConstructFrameDataPacket(header, frames, &packet); |
| 97 packets->push_back(make_pair(header.packet_sequence_number, packet)); | 97 packets->push_back(make_pair(header.packet_sequence_number, packet)); |
| 98 frames.clear(); | 98 frames.clear(); |
| 99 } | 99 } |
| 100 | 100 |
| 101 // Create a new FEC packet, if necessary | 101 // Create a new FEC packet, if necessary |
| 102 if (current_fec_group != 0) { | 102 if (current_fec_group != 0) { |
| 103 FillPacketHeader(current_fec_group, PACKET_FLAGS_FEC, &header); | 103 FillPacketHeader(current_fec_group, PACKET_FLAGS_FEC, &header); |
| 104 fec_data.redundancy = fec_group_->parity(); | 104 fec_data.redundancy = fec_group_->parity(); |
| 105 QuicPacket* fec_packet; | 105 QuicPacket* fec_packet; |
| 106 framer_->ConstructFecPacket(header, fec_data, &fec_packet); | 106 framer_->ConstructFecPacket(header, fec_data, &fec_packet); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 131 QuicStreamOffset offset, | 131 QuicStreamOffset offset, |
| 132 QuicErrorCode error) { | 132 QuicErrorCode error) { |
| 133 QuicPacketHeader header; | 133 QuicPacketHeader header; |
| 134 FillPacketHeader(0, PACKET_FLAGS_NONE, &header); | 134 FillPacketHeader(0, PACKET_FLAGS_NONE, &header); |
| 135 | 135 |
| 136 QuicRstStreamFrame close_frame(id, offset, error); | 136 QuicRstStreamFrame close_frame(id, offset, error); |
| 137 | 137 |
| 138 QuicPacket* packet; | 138 QuicPacket* packet; |
| 139 QuicFrames frames; | 139 QuicFrames frames; |
| 140 frames.push_back(QuicFrame(&close_frame)); | 140 frames.push_back(QuicFrame(&close_frame)); |
| 141 framer_->ConstructFragementDataPacket(header, frames, &packet); | 141 framer_->ConstructFrameDataPacket(header, frames, &packet); |
| 142 return make_pair(header.packet_sequence_number, packet); | 142 return make_pair(header.packet_sequence_number, packet); |
| 143 } | 143 } |
| 144 | 144 |
| 145 QuicPacketCreator::PacketPair QuicPacketCreator::CloseConnection( | 145 QuicPacketCreator::PacketPair QuicPacketCreator::CloseConnection( |
| 146 QuicConnectionCloseFrame* close_frame) { | 146 QuicConnectionCloseFrame* close_frame) { |
| 147 | 147 |
| 148 QuicPacketHeader header; | 148 QuicPacketHeader header; |
| 149 FillPacketHeader(0, PACKET_FLAGS_NONE, &header); | 149 FillPacketHeader(0, PACKET_FLAGS_NONE, &header); |
| 150 | 150 |
| 151 QuicPacket* packet; | 151 QuicPacket* packet; |
| 152 QuicFrames frames; | 152 QuicFrames frames; |
| 153 frames.push_back(QuicFrame(close_frame)); | 153 frames.push_back(QuicFrame(close_frame)); |
| 154 framer_->ConstructFragementDataPacket(header, frames, &packet); | 154 framer_->ConstructFrameDataPacket(header, frames, &packet); |
| 155 return make_pair(header.packet_sequence_number, packet); | 155 return make_pair(header.packet_sequence_number, packet); |
| 156 } | 156 } |
| 157 | 157 |
| 158 QuicPacketCreator::PacketPair QuicPacketCreator::AckPacket( | 158 QuicPacketCreator::PacketPair QuicPacketCreator::AckPacket( |
| 159 QuicAckFrame* ack_frame) { | 159 QuicAckFrame* ack_frame) { |
| 160 | 160 |
| 161 QuicPacketHeader header; | 161 QuicPacketHeader header; |
| 162 FillPacketHeader(0, PACKET_FLAGS_NONE, &header); | 162 FillPacketHeader(0, PACKET_FLAGS_NONE, &header); |
| 163 | 163 |
| 164 QuicPacket* packet; | 164 QuicPacket* packet; |
| 165 QuicFrames frames; | 165 QuicFrames frames; |
| 166 frames.push_back(QuicFrame(ack_frame)); | 166 frames.push_back(QuicFrame(ack_frame)); |
| 167 framer_->ConstructFragementDataPacket(header, frames, &packet); | 167 framer_->ConstructFrameDataPacket(header, frames, &packet); |
| 168 return make_pair(header.packet_sequence_number, packet); | 168 return make_pair(header.packet_sequence_number, packet); |
| 169 } | 169 } |
| 170 | 170 |
| 171 QuicPacketSequenceNumber QuicPacketCreator::SetNewSequenceNumber( |
| 172 QuicPacket* packet) { |
| 173 ++sequence_number_; |
| 174 framer_->WriteSequenceNumber(sequence_number_, packet); |
| 175 return sequence_number_; |
| 176 } |
| 177 |
| 171 void QuicPacketCreator::FillPacketHeader(QuicFecGroupNumber fec_group, | 178 void QuicPacketCreator::FillPacketHeader(QuicFecGroupNumber fec_group, |
| 172 QuicPacketFlags flags, | 179 QuicPacketFlags flags, |
| 173 QuicPacketHeader* header) { | 180 QuicPacketHeader* header) { |
| 174 header->guid = guid_; | 181 header->guid = guid_; |
| 175 header->flags = flags; | 182 header->flags = flags; |
| 176 header->packet_sequence_number = ++sequence_number_; | 183 header->packet_sequence_number = ++sequence_number_; |
| 177 header->fec_group = fec_group; | 184 header->fec_group = fec_group; |
| 178 | 185 |
| 179 // Default to zero - the sender should increment this as packets are | |
| 180 // retransmitted. | |
| 181 header->retransmission_count = 0; | |
| 182 header->transmission_time = 0; | 186 header->transmission_time = 0; |
| 183 } | 187 } |
| 184 | 188 |
| 185 } // namespace net | 189 } // namespace net |
| OLD | NEW |