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

Unified Diff: net/quic/quic_framer.cc

Issue 18307003: Implement the variable length changes necessary to easily accommodate (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merging with TOT Created 7 years, 6 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_framer.h ('k') | net/quic/quic_packet_creator.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/quic/quic_framer.cc
diff --git a/net/quic/quic_framer.cc b/net/quic/quic_framer.cc
index 5099838c9928346ce76e452a88a70818bd173472..1df3590585027850c8652c008a43bc09dcaba7f1 100644
--- a/net/quic/quic_framer.cc
+++ b/net/quic/quic_framer.cc
@@ -87,6 +87,16 @@ size_t QuicFramer::GetMinStreamFrameSize() {
}
// static
+size_t QuicFramer::GetMinStreamFrameSize(QuicStreamId stream_id,
+ QuicStreamOffset offset,
+ bool last_frame) {
+ // TODO(ianswett): Remove kQuicStreamFinSize for the next STREAM framing.
+ return kQuicFrameTypeSize + GetStreamIdSize(stream_id) +
+ GetStreamOffsetSize(offset) + kQuicStreamFinSize +
+ kQuicStreamPayloadLengthSize;
+}
+
+// static
size_t QuicFramer::GetMinAckFrameSize() {
return kQuicFrameTypeSize + kQuicEntropyHashSize +
PACKET_6BYTE_SEQUENCE_NUMBER + kQuicEntropyHashSize +
@@ -122,6 +132,16 @@ size_t QuicFramer::GetMaxUnackedPackets(QuicPacketHeader header) {
GetMinAckFrameSize() - 16) / PACKET_6BYTE_SEQUENCE_NUMBER;
}
+// static
+size_t QuicFramer::GetStreamIdSize(QuicStreamId stream_id) {
+ return 4;
+}
+
+// static
+size_t QuicFramer::GetStreamOffsetSize(QuicStreamOffset offset) {
+ return 8;
+}
+
bool QuicFramer::IsSupportedVersion(QuicTag version) {
return version == kQuicVersion1;
}
@@ -137,7 +157,8 @@ size_t QuicFramer::GetSerializedFrameLength(
// PADDING implies end of packet.
return free_bytes;
}
- size_t frame_len = ComputeFrameLength(frame);
+ // See if it fits as the non-last frame.
+ size_t frame_len = ComputeFrameLength(frame, false);
if (frame_len > free_bytes) {
// Only truncate the first frame in a packet, so if subsequent ones go
// over, stop including more frames.
@@ -194,6 +215,7 @@ SerializedPacket QuicFramer::ConstructFrameDataPacket(
for (size_t i = 0; i < frames.size(); ++i) {
const QuicFrame& frame = frames[i];
+
if (!writer.WriteUInt8(frame.type)) {
return kNoPacket;
}
@@ -203,7 +225,8 @@ SerializedPacket QuicFramer::ConstructFrameDataPacket(
writer.WritePadding();
break;
case STREAM_FRAME:
- if (!AppendStreamFramePayload(*frame.stream_frame, &writer)) {
+ if (!AppendStreamFramePayload(
+ *frame.stream_frame, &writer)) {
return kNoPacket;
}
break;
@@ -1328,10 +1351,13 @@ bool QuicFramer::DecryptPayload(const QuicPacketHeader& header,
return true;
}
-size_t QuicFramer::ComputeFrameLength(const QuicFrame& frame) {
+size_t QuicFramer::ComputeFrameLength(const QuicFrame& frame, bool last_frame) {
switch (frame.type) {
case STREAM_FRAME:
- return GetMinStreamFrameSize() + frame.stream_frame->data.size();
+ return GetMinStreamFrameSize(frame.stream_frame->stream_id,
+ frame.stream_frame->offset,
+ last_frame) +
+ frame.stream_frame->data.size();
case ACK_FRAME: {
const QuicAckFrame& ack = *frame.ack_frame;
return GetMinAckFrameSize() + PACKET_6BYTE_SEQUENCE_NUMBER *
« no previous file with comments | « net/quic/quic_framer.h ('k') | net/quic/quic_packet_creator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698