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

Side by Side Diff: net/quic/quic_framer.cc

Issue 1466693002: Cleanup: clang-formatting gfe/quic/quic_framer* to comply with Chromium style guide. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@107509393
Patch Set: Created 5 years 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 unified diff | Download patch
« no previous file with comments | « net/quic/quic_framer.h ('k') | net/quic/quic_framer_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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_framer.h" 5 #include "net/quic/quic_framer.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 encrypter_[ENCRYPTION_NONE].reset(QuicEncrypter::Create(kNULL)); 153 encrypter_[ENCRYPTION_NONE].reset(QuicEncrypter::Create(kNULL));
154 } 154 }
155 155
156 QuicFramer::~QuicFramer() {} 156 QuicFramer::~QuicFramer() {}
157 157
158 // static 158 // static
159 size_t QuicFramer::GetMinStreamFrameSize(QuicStreamId stream_id, 159 size_t QuicFramer::GetMinStreamFrameSize(QuicStreamId stream_id,
160 QuicStreamOffset offset, 160 QuicStreamOffset offset,
161 bool last_frame_in_packet, 161 bool last_frame_in_packet,
162 InFecGroup is_in_fec_group) { 162 InFecGroup is_in_fec_group) {
163 bool no_stream_frame_length = last_frame_in_packet && 163 bool no_stream_frame_length =
164 is_in_fec_group == NOT_IN_FEC_GROUP; 164 last_frame_in_packet && is_in_fec_group == NOT_IN_FEC_GROUP;
165 return kQuicFrameTypeSize + GetStreamIdSize(stream_id) + 165 return kQuicFrameTypeSize + GetStreamIdSize(stream_id) +
166 GetStreamOffsetSize(offset) + 166 GetStreamOffsetSize(offset) +
167 (no_stream_frame_length ? 0 : kQuicStreamPayloadLengthSize); 167 (no_stream_frame_length ? 0 : kQuicStreamPayloadLengthSize);
168 } 168 }
169 169
170 // static 170 // static
171 size_t QuicFramer::GetMinAckFrameSize( 171 size_t QuicFramer::GetMinAckFrameSize(
172 QuicPacketNumberLength largest_observed_length) { 172 QuicPacketNumberLength largest_observed_length) {
173 return kQuicFrameTypeSize + kQuicEntropyHashSize + 173 return kQuicFrameTypeSize + kQuicEntropyHashSize + largest_observed_length +
174 largest_observed_length + kQuicDeltaTimeLargestObservedSize; 174 kQuicDeltaTimeLargestObservedSize;
175 } 175 }
176 176
177 // static 177 // static
178 size_t QuicFramer::GetStopWaitingFrameSize( 178 size_t QuicFramer::GetStopWaitingFrameSize(
179 QuicPacketNumberLength packet_number_length) { 179 QuicPacketNumberLength packet_number_length) {
180 return kQuicFrameTypeSize + kQuicEntropyHashSize + packet_number_length; 180 return kQuicFrameTypeSize + kQuicEntropyHashSize + packet_number_length;
181 } 181 }
182 182
183 // static 183 // static
184 size_t QuicFramer::GetMinRstStreamFrameSize() { 184 size_t QuicFramer::GetMinRstStreamFrameSize() {
185 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + 185 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize +
186 kQuicMaxStreamOffsetSize + kQuicErrorCodeSize + 186 kQuicErrorCodeSize + kQuicErrorDetailsLengthSize;
187 kQuicErrorDetailsLengthSize;
188 } 187 }
189 188
190 // static 189 // static
191 size_t QuicFramer::GetRstStreamFrameSize() { 190 size_t QuicFramer::GetRstStreamFrameSize() {
192 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize + 191 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize +
193 kQuicErrorCodeSize; 192 kQuicErrorCodeSize;
194 } 193 }
195 194
196 // static 195 // static
197 size_t QuicFramer::GetMinConnectionCloseFrameSize() { 196 size_t QuicFramer::GetMinConnectionCloseFrameSize() {
198 return kQuicFrameTypeSize + kQuicErrorCodeSize + kQuicErrorDetailsLengthSize; 197 return kQuicFrameTypeSize + kQuicErrorCodeSize + kQuicErrorDetailsLengthSize;
199 } 198 }
200 199
201 // static 200 // static
202 size_t QuicFramer::GetMinGoAwayFrameSize() { 201 size_t QuicFramer::GetMinGoAwayFrameSize() {
203 return kQuicFrameTypeSize + kQuicErrorCodeSize + kQuicErrorDetailsLengthSize + 202 return kQuicFrameTypeSize + kQuicErrorCodeSize + kQuicErrorDetailsLengthSize +
204 kQuicMaxStreamIdSize; 203 kQuicMaxStreamIdSize;
205 } 204 }
206 205
207 // static 206 // static
208 size_t QuicFramer::GetWindowUpdateFrameSize() { 207 size_t QuicFramer::GetWindowUpdateFrameSize() {
209 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize; 208 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize;
210 } 209 }
211 210
212 // static 211 // static
213 size_t QuicFramer::GetBlockedFrameSize() { 212 size_t QuicFramer::GetBlockedFrameSize() {
214 return kQuicFrameTypeSize + kQuicMaxStreamIdSize; 213 return kQuicFrameTypeSize + kQuicMaxStreamIdSize;
(...skipping 26 matching lines...) Expand all
241 return i; 240 return i;
242 } 241 }
243 } 242 }
244 LOG(DFATAL) << "Failed to determine StreamOffsetSize."; 243 LOG(DFATAL) << "Failed to determine StreamOffsetSize.";
245 return 8; 244 return 8;
246 } 245 }
247 246
248 // static 247 // static
249 size_t QuicFramer::GetVersionNegotiationPacketSize(size_t number_versions) { 248 size_t QuicFramer::GetVersionNegotiationPacketSize(size_t number_versions) {
250 return kPublicFlagsSize + PACKET_8BYTE_CONNECTION_ID + 249 return kPublicFlagsSize + PACKET_8BYTE_CONNECTION_ID +
251 number_versions * kQuicVersionSize; 250 number_versions * kQuicVersionSize;
252 } 251 }
253 252
254 bool QuicFramer::IsSupportedVersion(const QuicVersion version) const { 253 bool QuicFramer::IsSupportedVersion(const QuicVersion version) const {
255 for (size_t i = 0; i < supported_versions_.size(); ++i) { 254 for (size_t i = 0; i < supported_versions_.size(); ++i) {
256 if (version == supported_versions_[i]) { 255 if (version == supported_versions_[i]) {
257 return true; 256 return true;
258 } 257 }
259 } 258 }
260 return false; 259 return false;
261 } 260 }
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 if (!AppendTypeByte(frame, no_stream_frame_length, &writer)) { 335 if (!AppendTypeByte(frame, no_stream_frame_length, &writer)) {
337 LOG(DFATAL) << "AppendTypeByte failed"; 336 LOG(DFATAL) << "AppendTypeByte failed";
338 return 0; 337 return 0;
339 } 338 }
340 339
341 switch (frame.type) { 340 switch (frame.type) {
342 case PADDING_FRAME: 341 case PADDING_FRAME:
343 writer.WritePadding(); 342 writer.WritePadding();
344 break; 343 break;
345 case STREAM_FRAME: 344 case STREAM_FRAME:
346 if (!AppendStreamFrame( 345 if (!AppendStreamFrame(*frame.stream_frame, no_stream_frame_length,
347 *frame.stream_frame, no_stream_frame_length, &writer)) { 346 &writer)) {
348 LOG(DFATAL) << "AppendStreamFrame failed"; 347 LOG(DFATAL) << "AppendStreamFrame failed";
349 return 0; 348 return 0;
350 } 349 }
351 break; 350 break;
352 case ACK_FRAME: 351 case ACK_FRAME:
353 if (!AppendAckFrameAndTypeByte( 352 if (!AppendAckFrameAndTypeByte(header, *frame.ack_frame, &writer)) {
354 header, *frame.ack_frame, &writer)) {
355 LOG(DFATAL) << "AppendAckFrameAndTypeByte failed"; 353 LOG(DFATAL) << "AppendAckFrameAndTypeByte failed";
356 return 0; 354 return 0;
357 } 355 }
358 break; 356 break;
359 case STOP_WAITING_FRAME: 357 case STOP_WAITING_FRAME:
360 if (!AppendStopWaitingFrame( 358 if (!AppendStopWaitingFrame(header, *frame.stop_waiting_frame,
361 header, *frame.stop_waiting_frame, &writer)) { 359 &writer)) {
362 LOG(DFATAL) << "AppendStopWaitingFrame failed"; 360 LOG(DFATAL) << "AppendStopWaitingFrame failed";
363 return 0; 361 return 0;
364 } 362 }
365 break; 363 break;
366 case MTU_DISCOVERY_FRAME: 364 case MTU_DISCOVERY_FRAME:
367 // MTU discovery frames are serialized as ping frames. 365 // MTU discovery frames are serialized as ping frames.
368 case PING_FRAME: 366 case PING_FRAME:
369 // Ping has no payload. 367 // Ping has no payload.
370 break; 368 break;
371 case RST_STREAM_FRAME: 369 case RST_STREAM_FRAME:
372 if (!AppendRstStreamFrame(*frame.rst_stream_frame, &writer)) { 370 if (!AppendRstStreamFrame(*frame.rst_stream_frame, &writer)) {
373 LOG(DFATAL) << "AppendRstStreamFrame failed"; 371 LOG(DFATAL) << "AppendRstStreamFrame failed";
374 return 0; 372 return 0;
375 } 373 }
376 break; 374 break;
377 case CONNECTION_CLOSE_FRAME: 375 case CONNECTION_CLOSE_FRAME:
378 if (!AppendConnectionCloseFrame( 376 if (!AppendConnectionCloseFrame(*frame.connection_close_frame,
379 *frame.connection_close_frame, &writer)) { 377 &writer)) {
380 LOG(DFATAL) << "AppendConnectionCloseFrame failed"; 378 LOG(DFATAL) << "AppendConnectionCloseFrame failed";
381 return 0; 379 return 0;
382 } 380 }
383 break; 381 break;
384 case GOAWAY_FRAME: 382 case GOAWAY_FRAME:
385 if (!AppendGoAwayFrame(*frame.goaway_frame, &writer)) { 383 if (!AppendGoAwayFrame(*frame.goaway_frame, &writer)) {
386 LOG(DFATAL) << "AppendGoAwayFrame failed"; 384 LOG(DFATAL) << "AppendGoAwayFrame failed";
387 return 0; 385 return 0;
388 } 386 }
389 break; 387 break;
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 if (reset->GetUint64(kRSEQ, &packet.rejected_packet_number) != 650 if (reset->GetUint64(kRSEQ, &packet.rejected_packet_number) !=
653 QUIC_NO_ERROR) { 651 QUIC_NO_ERROR) {
654 set_detailed_error("Unable to read rejected packet number."); 652 set_detailed_error("Unable to read rejected packet number.");
655 return RaiseError(QUIC_INVALID_PUBLIC_RST_PACKET); 653 return RaiseError(QUIC_INVALID_PUBLIC_RST_PACKET);
656 } 654 }
657 655
658 StringPiece address; 656 StringPiece address;
659 if (reset->GetStringPiece(kCADR, &address)) { 657 if (reset->GetStringPiece(kCADR, &address)) {
660 QuicSocketAddressCoder address_coder; 658 QuicSocketAddressCoder address_coder;
661 if (address_coder.Decode(address.data(), address.length())) { 659 if (address_coder.Decode(address.data(), address.length())) {
662 packet.client_address = IPEndPoint(address_coder.ip(), 660 packet.client_address =
663 address_coder.port()); 661 IPEndPoint(address_coder.ip(), address_coder.port());
664 } 662 }
665 } 663 }
666 664
667 visitor_->OnPublicResetPacket(packet); 665 visitor_->OnPublicResetPacket(packet);
668 return true; 666 return true;
669 } 667 }
670 668
671 bool QuicFramer::ProcessRevivedPacket(QuicPacketHeader* header, 669 bool QuicFramer::ProcessRevivedPacket(QuicPacketHeader* header,
672 StringPiece payload) { 670 StringPiece payload) {
673 visitor_->OnRevivedPacket(); 671 visitor_->OnRevivedPacket();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 if (header.public_header.version_flag) { 703 if (header.public_header.version_flag) {
706 public_flags |= PACKET_PUBLIC_FLAGS_VERSION; 704 public_flags |= PACKET_PUBLIC_FLAGS_VERSION;
707 } 705 }
708 706
709 public_flags |= 707 public_flags |=
710 GetSequenceNumberFlags(header.public_header.packet_number_length) 708 GetSequenceNumberFlags(header.public_header.packet_number_length)
711 << kPublicHeaderSequenceNumberShift; 709 << kPublicHeaderSequenceNumberShift;
712 710
713 switch (header.public_header.connection_id_length) { 711 switch (header.public_header.connection_id_length) {
714 case PACKET_0BYTE_CONNECTION_ID: 712 case PACKET_0BYTE_CONNECTION_ID:
715 if (!writer->WriteUInt8( 713 if (!writer->WriteUInt8(public_flags |
716 public_flags | PACKET_PUBLIC_FLAGS_0BYTE_CONNECTION_ID)) { 714 PACKET_PUBLIC_FLAGS_0BYTE_CONNECTION_ID)) {
717 return false; 715 return false;
718 } 716 }
719 break; 717 break;
720 case PACKET_1BYTE_CONNECTION_ID: 718 case PACKET_1BYTE_CONNECTION_ID:
721 if (!writer->WriteUInt8( 719 if (!writer->WriteUInt8(public_flags |
722 public_flags | PACKET_PUBLIC_FLAGS_1BYTE_CONNECTION_ID)) { 720 PACKET_PUBLIC_FLAGS_1BYTE_CONNECTION_ID)) {
723 return false; 721 return false;
724 } 722 }
725 if (!writer->WriteUInt8( 723 if (!writer->WriteUInt8(header.public_header.connection_id &
726 header.public_header.connection_id & k1ByteConnectionIdMask)) { 724 k1ByteConnectionIdMask)) {
727 return false; 725 return false;
728 } 726 }
729 break; 727 break;
730 case PACKET_4BYTE_CONNECTION_ID: 728 case PACKET_4BYTE_CONNECTION_ID:
731 if (!writer->WriteUInt8( 729 if (!writer->WriteUInt8(public_flags |
732 public_flags | PACKET_PUBLIC_FLAGS_4BYTE_CONNECTION_ID)) { 730 PACKET_PUBLIC_FLAGS_4BYTE_CONNECTION_ID)) {
733 return false; 731 return false;
734 } 732 }
735 if (!writer->WriteUInt32( 733 if (!writer->WriteUInt32(header.public_header.connection_id &
736 header.public_header.connection_id & k4ByteConnectionIdMask)) { 734 k4ByteConnectionIdMask)) {
737 return false; 735 return false;
738 } 736 }
739 break; 737 break;
740 case PACKET_8BYTE_CONNECTION_ID: 738 case PACKET_8BYTE_CONNECTION_ID:
741 if (!writer->WriteUInt8( 739 if (!writer->WriteUInt8(public_flags |
742 public_flags | PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID)) { 740 PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID)) {
743 return false; 741 return false;
744 } 742 }
745 if (!writer->WriteUInt64(header.public_header.connection_id)) { 743 if (!writer->WriteUInt64(header.public_header.connection_id)) {
746 return false; 744 return false;
747 } 745 }
748 break; 746 break;
749 } 747 }
750 last_serialized_connection_id_ = header.public_header.connection_id; 748 last_serialized_connection_id_ = header.public_header.connection_id;
751 749
752 if (header.public_header.version_flag) { 750 if (header.public_header.version_flag) {
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
801 // time. 799 // time.
802 // 800 //
803 // epoch_delta is the delta between epochs. A delta is 4 bytes of 801 // epoch_delta is the delta between epochs. A delta is 4 bytes of
804 // microseconds. 802 // microseconds.
805 const uint64 epoch_delta = UINT64_C(1) << 32; 803 const uint64 epoch_delta = UINT64_C(1) << 32;
806 uint64 epoch = last_timestamp_.ToMicroseconds() & ~(epoch_delta - 1); 804 uint64 epoch = last_timestamp_.ToMicroseconds() & ~(epoch_delta - 1);
807 // Wrapping is safe here because a wrapped value will not be ClosestTo below. 805 // Wrapping is safe here because a wrapped value will not be ClosestTo below.
808 uint64 prev_epoch = epoch - epoch_delta; 806 uint64 prev_epoch = epoch - epoch_delta;
809 uint64 next_epoch = epoch + epoch_delta; 807 uint64 next_epoch = epoch + epoch_delta;
810 808
811 uint64 time = ClosestTo(last_timestamp_.ToMicroseconds(), 809 uint64 time = ClosestTo(
812 epoch + time_delta_us, 810 last_timestamp_.ToMicroseconds(), epoch + time_delta_us,
813 ClosestTo(last_timestamp_.ToMicroseconds(), 811 ClosestTo(last_timestamp_.ToMicroseconds(), prev_epoch + time_delta_us,
814 prev_epoch + time_delta_us, 812 next_epoch + time_delta_us));
815 next_epoch + time_delta_us));
816 813
817 return QuicTime::Delta::FromMicroseconds(time); 814 return QuicTime::Delta::FromMicroseconds(time);
818 } 815 }
819 816
820 QuicPacketNumber QuicFramer::CalculatePacketNumberFromWire( 817 QuicPacketNumber QuicFramer::CalculatePacketNumberFromWire(
821 QuicPacketNumberLength packet_number_length, 818 QuicPacketNumberLength packet_number_length,
822 QuicPacketNumber packet_number) const { 819 QuicPacketNumber packet_number) const {
823 // The new packet number might have wrapped to the next epoch, or 820 // The new packet number might have wrapped to the next epoch, or
824 // it might have reverse wrapped to the previous epoch, or it might 821 // it might have reverse wrapped to the previous epoch, or it might
825 // remain in the same epoch. Select the packet number closest to the 822 // remain in the same epoch. Select the packet number closest to the
(...skipping 19 matching lines...) Expand all
845 uint8 public_flags; 842 uint8 public_flags;
846 if (!reader->ReadBytes(&public_flags, 1)) { 843 if (!reader->ReadBytes(&public_flags, 1)) {
847 set_detailed_error("Unable to read public flags."); 844 set_detailed_error("Unable to read public flags.");
848 return false; 845 return false;
849 } 846 }
850 847
851 public_header->reset_flag = (public_flags & PACKET_PUBLIC_FLAGS_RST) != 0; 848 public_header->reset_flag = (public_flags & PACKET_PUBLIC_FLAGS_RST) != 0;
852 public_header->version_flag = 849 public_header->version_flag =
853 (public_flags & PACKET_PUBLIC_FLAGS_VERSION) != 0; 850 (public_flags & PACKET_PUBLIC_FLAGS_VERSION) != 0;
854 851
855 if (validate_flags_ && 852 if (validate_flags_ && !public_header->version_flag &&
856 !public_header->version_flag && public_flags > PACKET_PUBLIC_FLAGS_MAX) { 853 public_flags > PACKET_PUBLIC_FLAGS_MAX) {
857 set_detailed_error("Illegal public flags value."); 854 set_detailed_error("Illegal public flags value.");
858 return false; 855 return false;
859 } 856 }
860 857
861 if (public_header->reset_flag && public_header->version_flag) { 858 if (public_header->reset_flag && public_header->version_flag) {
862 set_detailed_error("Got version flag in reset packet"); 859 set_detailed_error("Got version flag in reset packet");
863 return false; 860 return false;
864 } 861 }
865 862
866 switch (public_flags & PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID) { 863 switch (public_flags & PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID) {
867 case PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID: 864 case PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID:
868 if (!reader->ReadUInt64(&public_header->connection_id)) { 865 if (!reader->ReadUInt64(&public_header->connection_id)) {
869 set_detailed_error("Unable to read ConnectionId."); 866 set_detailed_error("Unable to read ConnectionId.");
870 return false; 867 return false;
871 } 868 }
872 public_header->connection_id_length = PACKET_8BYTE_CONNECTION_ID; 869 public_header->connection_id_length = PACKET_8BYTE_CONNECTION_ID;
873 break; 870 break;
874 case PACKET_PUBLIC_FLAGS_4BYTE_CONNECTION_ID: 871 case PACKET_PUBLIC_FLAGS_4BYTE_CONNECTION_ID:
875 // If the connection_id is truncated, expect to read the last serialized 872 // If the connection_id is truncated, expect to read the last serialized
876 // connection_id. 873 // connection_id.
877 if (!reader->ReadBytes(&public_header->connection_id, 874 if (!reader->ReadBytes(&public_header->connection_id,
878 PACKET_4BYTE_CONNECTION_ID)) { 875 PACKET_4BYTE_CONNECTION_ID)) {
879 set_detailed_error("Unable to read ConnectionId."); 876 set_detailed_error("Unable to read ConnectionId.");
880 return false; 877 return false;
881 } 878 }
882 if (last_serialized_connection_id_ && 879 if (last_serialized_connection_id_ &&
883 (public_header->connection_id & k4ByteConnectionIdMask) != 880 (public_header->connection_id & k4ByteConnectionIdMask) !=
884 (last_serialized_connection_id_ & k4ByteConnectionIdMask)) { 881 (last_serialized_connection_id_ & k4ByteConnectionIdMask)) {
885 set_detailed_error("Truncated 4 byte ConnectionId does not match " 882 set_detailed_error(
886 "previous connection_id."); 883 "Truncated 4 byte ConnectionId does not match "
884 "previous connection_id.");
887 return false; 885 return false;
888 } 886 }
889 public_header->connection_id_length = PACKET_4BYTE_CONNECTION_ID; 887 public_header->connection_id_length = PACKET_4BYTE_CONNECTION_ID;
890 public_header->connection_id = last_serialized_connection_id_; 888 public_header->connection_id = last_serialized_connection_id_;
891 break; 889 break;
892 case PACKET_PUBLIC_FLAGS_1BYTE_CONNECTION_ID: 890 case PACKET_PUBLIC_FLAGS_1BYTE_CONNECTION_ID:
893 if (!reader->ReadBytes(&public_header->connection_id, 891 if (!reader->ReadBytes(&public_header->connection_id,
894 PACKET_1BYTE_CONNECTION_ID)) { 892 PACKET_1BYTE_CONNECTION_ID)) {
895 set_detailed_error("Unable to read ConnectionId."); 893 set_detailed_error("Unable to read ConnectionId.");
896 return false; 894 return false;
897 } 895 }
898 if (last_serialized_connection_id_ && 896 if (last_serialized_connection_id_ &&
899 (public_header->connection_id & k1ByteConnectionIdMask) != 897 (public_header->connection_id & k1ByteConnectionIdMask) !=
900 (last_serialized_connection_id_ & k1ByteConnectionIdMask)) { 898 (last_serialized_connection_id_ & k1ByteConnectionIdMask)) {
901 set_detailed_error("Truncated 1 byte ConnectionId does not match " 899 set_detailed_error(
902 "previous connection_id."); 900 "Truncated 1 byte ConnectionId does not match "
901 "previous connection_id.");
903 return false; 902 return false;
904 } 903 }
905 public_header->connection_id_length = PACKET_1BYTE_CONNECTION_ID; 904 public_header->connection_id_length = PACKET_1BYTE_CONNECTION_ID;
906 public_header->connection_id = last_serialized_connection_id_; 905 public_header->connection_id = last_serialized_connection_id_;
907 break; 906 break;
908 case PACKET_PUBLIC_FLAGS_0BYTE_CONNECTION_ID: 907 case PACKET_PUBLIC_FLAGS_0BYTE_CONNECTION_ID:
909 public_header->connection_id_length = PACKET_0BYTE_CONNECTION_ID; 908 public_header->connection_id_length = PACKET_0BYTE_CONNECTION_ID;
910 public_header->connection_id = last_serialized_connection_id_; 909 public_header->connection_id = last_serialized_connection_id_;
911 break; 910 break;
912 } 911 }
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
1117 DVLOG(1) << "Visitor asked to stop further processing."; 1116 DVLOG(1) << "Visitor asked to stop further processing.";
1118 // Returning true since there was no parsing error. 1117 // Returning true since there was no parsing error.
1119 return true; 1118 return true;
1120 } 1119 }
1121 continue; 1120 continue;
1122 } 1121 }
1123 1122
1124 // This was a special frame type that did not match any 1123 // This was a special frame type that did not match any
1125 // of the known ones. Error. 1124 // of the known ones. Error.
1126 set_detailed_error("Illegal frame type."); 1125 set_detailed_error("Illegal frame type.");
1127 DLOG(WARNING) << "Illegal frame type: " 1126 DLOG(WARNING) << "Illegal frame type: " << static_cast<int>(frame_type);
1128 << static_cast<int>(frame_type);
1129 return RaiseError(QUIC_INVALID_FRAME_DATA); 1127 return RaiseError(QUIC_INVALID_FRAME_DATA);
1130 } 1128 }
1131 1129
1132 switch (frame_type) { 1130 switch (frame_type) {
1133 case PADDING_FRAME: 1131 case PADDING_FRAME:
1134 // We're done with the packet. 1132 // We're done with the packet.
1135 return true; 1133 return true;
1136 1134
1137 case RST_STREAM_FRAME: { 1135 case RST_STREAM_FRAME: {
1138 QuicRstStreamFrame frame; 1136 QuicRstStreamFrame frame;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
1218 if (!visitor_->OnPingFrame(ping_frame)) { 1216 if (!visitor_->OnPingFrame(ping_frame)) {
1219 DVLOG(1) << "Visitor asked to stop further processing."; 1217 DVLOG(1) << "Visitor asked to stop further processing.";
1220 // Returning true since there was no parsing error. 1218 // Returning true since there was no parsing error.
1221 return true; 1219 return true;
1222 } 1220 }
1223 continue; 1221 continue;
1224 } 1222 }
1225 1223
1226 default: 1224 default:
1227 set_detailed_error("Illegal frame type."); 1225 set_detailed_error("Illegal frame type.");
1228 DLOG(WARNING) << "Illegal frame type: " 1226 DLOG(WARNING) << "Illegal frame type: " << static_cast<int>(frame_type);
1229 << static_cast<int>(frame_type);
1230 return RaiseError(QUIC_INVALID_FRAME_DATA); 1227 return RaiseError(QUIC_INVALID_FRAME_DATA);
1231 } 1228 }
1232 } 1229 }
1233 1230
1234 return true; 1231 return true;
1235 } 1232 }
1236 1233
1237 bool QuicFramer::ProcessStreamFrame(QuicDataReader* reader, 1234 bool QuicFramer::ProcessStreamFrame(QuicDataReader* reader,
1238 uint8 frame_type, 1235 uint8 frame_type,
1239 QuicStreamFrame* frame) { 1236 QuicStreamFrame* frame) {
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
1597 } 1594 }
1598 1595
1599 const QuicDecrypter* QuicFramer::decrypter() const { 1596 const QuicDecrypter* QuicFramer::decrypter() const {
1600 return decrypter_.get(); 1597 return decrypter_.get();
1601 } 1598 }
1602 1599
1603 const QuicDecrypter* QuicFramer::alternative_decrypter() const { 1600 const QuicDecrypter* QuicFramer::alternative_decrypter() const {
1604 return alternative_decrypter_.get(); 1601 return alternative_decrypter_.get();
1605 } 1602 }
1606 1603
1607 void QuicFramer::SetEncrypter(EncryptionLevel level, 1604 void QuicFramer::SetEncrypter(EncryptionLevel level, QuicEncrypter* encrypter) {
1608 QuicEncrypter* encrypter) {
1609 DCHECK_GE(level, 0); 1605 DCHECK_GE(level, 0);
1610 DCHECK_LT(level, NUM_ENCRYPTION_LEVELS); 1606 DCHECK_LT(level, NUM_ENCRYPTION_LEVELS);
1611 encrypter_[level].reset(encrypter); 1607 encrypter_[level].reset(encrypter);
1612 } 1608 }
1613 1609
1614 size_t QuicFramer::EncryptPayload(EncryptionLevel level, 1610 size_t QuicFramer::EncryptPayload(EncryptionLevel level,
1615 QuicPacketNumber packet_number, 1611 QuicPacketNumber packet_number,
1616 const QuicPacket& packet, 1612 const QuicPacket& packet,
1617 char* buffer, 1613 char* buffer,
1618 size_t buffer_len) { 1614 size_t buffer_len) {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1704 const QuicAckFrame& ack, 1700 const QuicAckFrame& ack,
1705 QuicPacketNumberLength packet_number_length) { 1701 QuicPacketNumberLength packet_number_length) {
1706 AckFrameInfo ack_info = GetAckFrameInfo(ack); 1702 AckFrameInfo ack_info = GetAckFrameInfo(ack);
1707 QuicPacketNumberLength largest_observed_length = 1703 QuicPacketNumberLength largest_observed_length =
1708 GetMinSequenceNumberLength(ack.largest_observed); 1704 GetMinSequenceNumberLength(ack.largest_observed);
1709 QuicPacketNumberLength missing_packet_number_length = 1705 QuicPacketNumberLength missing_packet_number_length =
1710 GetMinSequenceNumberLength(ack_info.max_delta); 1706 GetMinSequenceNumberLength(ack_info.max_delta);
1711 1707
1712 size_t ack_size = GetMinAckFrameSize(largest_observed_length); 1708 size_t ack_size = GetMinAckFrameSize(largest_observed_length);
1713 if (!ack_info.nack_ranges.empty()) { 1709 if (!ack_info.nack_ranges.empty()) {
1714 ack_size += kNumberOfNackRangesSize + kNumberOfRevivedPacketsSize; 1710 ack_size += kNumberOfNackRangesSize + kNumberOfRevivedPacketsSize;
1715 ack_size += min(ack_info.nack_ranges.size(), kMaxNackRanges) * 1711 ack_size += min(ack_info.nack_ranges.size(), kMaxNackRanges) *
1716 (missing_packet_number_length + PACKET_1BYTE_PACKET_NUMBER); 1712 (missing_packet_number_length + PACKET_1BYTE_PACKET_NUMBER);
1717 if (ack.latest_revived_packet != 0) { 1713 if (ack.latest_revived_packet != 0) {
1718 ack_size += largest_observed_length; 1714 ack_size += largest_observed_length;
1719 } 1715 }
1720 } 1716 }
1721 1717
1722 // In version 23, if the ack will be truncated due to too many nack ranges, 1718 // In version 23, if the ack will be truncated due to too many nack ranges,
1723 // then do not include the number of timestamps (1 byte). 1719 // then do not include the number of timestamps (1 byte).
1724 if (ack_info.nack_ranges.size() <= kMaxNackRanges) { 1720 if (ack_info.nack_ranges.size() <= kMaxNackRanges) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1756 return GetStopWaitingFrameSize(packet_number_length); 1752 return GetStopWaitingFrameSize(packet_number_length);
1757 case MTU_DISCOVERY_FRAME: 1753 case MTU_DISCOVERY_FRAME:
1758 // MTU discovery frames are serialized as ping frames. 1754 // MTU discovery frames are serialized as ping frames.
1759 case PING_FRAME: 1755 case PING_FRAME:
1760 // Ping has no payload. 1756 // Ping has no payload.
1761 return kQuicFrameTypeSize; 1757 return kQuicFrameTypeSize;
1762 case RST_STREAM_FRAME: 1758 case RST_STREAM_FRAME:
1763 return GetRstStreamFrameSize(); 1759 return GetRstStreamFrameSize();
1764 case CONNECTION_CLOSE_FRAME: 1760 case CONNECTION_CLOSE_FRAME:
1765 return GetMinConnectionCloseFrameSize() + 1761 return GetMinConnectionCloseFrameSize() +
1766 frame.connection_close_frame->error_details.size(); 1762 frame.connection_close_frame->error_details.size();
1767 case GOAWAY_FRAME: 1763 case GOAWAY_FRAME:
1768 return GetMinGoAwayFrameSize() + frame.goaway_frame->reason_phrase.size(); 1764 return GetMinGoAwayFrameSize() + frame.goaway_frame->reason_phrase.size();
1769 case WINDOW_UPDATE_FRAME: 1765 case WINDOW_UPDATE_FRAME:
1770 return GetWindowUpdateFrameSize(); 1766 return GetWindowUpdateFrameSize();
1771 case BLOCKED_FRAME: 1767 case BLOCKED_FRAME:
1772 return GetBlockedFrameSize(); 1768 return GetBlockedFrameSize();
1773 case PADDING_FRAME: 1769 case PADDING_FRAME:
1774 DCHECK(false); 1770 DCHECK(false);
1775 return 0; 1771 return 0;
1776 case NUM_FRAME_TYPES: 1772 case NUM_FRAME_TYPES:
(...skipping 13 matching lines...) Expand all
1790 switch (frame.type) { 1786 switch (frame.type) {
1791 case STREAM_FRAME: { 1787 case STREAM_FRAME: {
1792 if (frame.stream_frame == nullptr) { 1788 if (frame.stream_frame == nullptr) {
1793 LOG(DFATAL) << "Failed to append STREAM frame with no stream_frame."; 1789 LOG(DFATAL) << "Failed to append STREAM frame with no stream_frame.";
1794 } 1790 }
1795 // Fin bit. 1791 // Fin bit.
1796 type_byte |= frame.stream_frame->fin ? kQuicStreamFinMask : 0; 1792 type_byte |= frame.stream_frame->fin ? kQuicStreamFinMask : 0;
1797 1793
1798 // Data Length bit. 1794 // Data Length bit.
1799 type_byte <<= kQuicStreamDataLengthShift; 1795 type_byte <<= kQuicStreamDataLengthShift;
1800 type_byte |= no_stream_frame_length ? 0: kQuicStreamDataLengthMask; 1796 type_byte |= no_stream_frame_length ? 0 : kQuicStreamDataLengthMask;
1801 1797
1802 // Offset 3 bits. 1798 // Offset 3 bits.
1803 type_byte <<= kQuicStreamOffsetShift; 1799 type_byte <<= kQuicStreamOffsetShift;
1804 const size_t offset_len = GetStreamOffsetSize(frame.stream_frame->offset); 1800 const size_t offset_len = GetStreamOffsetSize(frame.stream_frame->offset);
1805 if (offset_len > 0) { 1801 if (offset_len > 0) {
1806 type_byte |= offset_len - 1; 1802 type_byte |= offset_len - 1;
1807 } 1803 }
1808 1804
1809 // stream id 2 bits. 1805 // stream id 2 bits.
1810 type_byte <<= kQuicStreamIdShift; 1806 type_byte <<= kQuicStreamIdShift;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1847 break; 1843 break;
1848 case PACKET_6BYTE_PACKET_NUMBER: 1844 case PACKET_6BYTE_PACKET_NUMBER:
1849 return writer->WriteUInt48(packet_number & k6ByteSequenceNumberMask); 1845 return writer->WriteUInt48(packet_number & k6ByteSequenceNumberMask);
1850 break; 1846 break;
1851 default: 1847 default:
1852 DCHECK(false) << "packet_number_length: " << packet_number_length; 1848 DCHECK(false) << "packet_number_length: " << packet_number_length;
1853 return false; 1849 return false;
1854 } 1850 }
1855 } 1851 }
1856 1852
1857 bool QuicFramer::AppendStreamFrame( 1853 bool QuicFramer::AppendStreamFrame(const QuicStreamFrame& frame,
1858 const QuicStreamFrame& frame, 1854 bool no_stream_frame_length,
1859 bool no_stream_frame_length, 1855 QuicDataWriter* writer) {
1860 QuicDataWriter* writer) {
1861 if (!writer->WriteBytes(&frame.stream_id, GetStreamIdSize(frame.stream_id))) { 1856 if (!writer->WriteBytes(&frame.stream_id, GetStreamIdSize(frame.stream_id))) {
1862 LOG(DFATAL) << "Writing stream id size failed."; 1857 LOG(DFATAL) << "Writing stream id size failed.";
1863 return false; 1858 return false;
1864 } 1859 }
1865 if (!writer->WriteBytes(&frame.offset, GetStreamOffsetSize(frame.offset))) { 1860 if (!writer->WriteBytes(&frame.offset, GetStreamOffsetSize(frame.offset))) {
1866 LOG(DFATAL) << "Writing offset size failed."; 1861 LOG(DFATAL) << "Writing offset size failed.";
1867 return false; 1862 return false;
1868 } 1863 }
1869 if (!no_stream_frame_length) { 1864 if (!no_stream_frame_length) {
1870 if ((frame.data.size() > numeric_limits<uint16>::max()) || 1865 if ((frame.data.size() > numeric_limits<uint16>::max()) ||
1871 !writer->WriteUInt16(static_cast<uint16>(frame.data.size()))) { 1866 !writer->WriteUInt16(static_cast<uint16>(frame.data.size()))) {
1872 LOG(DFATAL) << "Writing stream frame length failed"; 1867 LOG(DFATAL) << "Writing stream frame length failed";
1873 return false; 1868 return false;
1874 } 1869 }
1875 } 1870 }
1876 1871
1877 if (!writer->WriteBytes(frame.data.data(), frame.data.size())) { 1872 if (!writer->WriteBytes(frame.data.data(), frame.data.size())) {
1878 LOG(DFATAL) << "Writing frame data failed."; 1873 LOG(DFATAL) << "Writing frame data failed.";
1879 return false; 1874 return false;
1880 } 1875 }
1881 return true; 1876 return true;
1882 } 1877 }
1883 1878
1884 void QuicFramer::set_version(const QuicVersion version) { 1879 void QuicFramer::set_version(const QuicVersion version) {
1885 DCHECK(IsSupportedVersion(version)) << QuicVersionToString(version); 1880 DCHECK(IsSupportedVersion(version)) << QuicVersionToString(version);
1886 quic_version_ = version; 1881 quic_version_ = version;
1887 } 1882 }
1888 1883
1889 bool QuicFramer::AppendAckFrameAndTypeByte( 1884 bool QuicFramer::AppendAckFrameAndTypeByte(const QuicPacketHeader& header,
1890 const QuicPacketHeader& header, 1885 const QuicAckFrame& frame,
1891 const QuicAckFrame& frame, 1886 QuicDataWriter* writer) {
1892 QuicDataWriter* writer) {
1893 AckFrameInfo ack_info = GetAckFrameInfo(frame); 1887 AckFrameInfo ack_info = GetAckFrameInfo(frame);
1894 QuicPacketNumber ack_largest_observed = frame.largest_observed; 1888 QuicPacketNumber ack_largest_observed = frame.largest_observed;
1895 QuicPacketNumberLength largest_observed_length = 1889 QuicPacketNumberLength largest_observed_length =
1896 GetMinSequenceNumberLength(ack_largest_observed); 1890 GetMinSequenceNumberLength(ack_largest_observed);
1897 QuicPacketNumberLength missing_packet_number_length = 1891 QuicPacketNumberLength missing_packet_number_length =
1898 GetMinSequenceNumberLength(ack_info.max_delta); 1892 GetMinSequenceNumberLength(ack_info.max_delta);
1899 // Determine whether we need to truncate ranges. 1893 // Determine whether we need to truncate ranges.
1900 size_t available_range_bytes = 1894 size_t available_range_bytes =
1901 writer->capacity() - writer->length() - kNumberOfRevivedPacketsSize - 1895 writer->capacity() - writer->length() - kNumberOfRevivedPacketsSize -
1902 kNumberOfNackRangesSize - GetMinAckFrameSize(largest_observed_length); 1896 kNumberOfNackRangesSize - GetMinAckFrameSize(largest_observed_length);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1946 ack_largest_observed = ack_iter->first - 1; 1940 ack_largest_observed = ack_iter->first - 1;
1947 // Also update the entropy so it matches the largest observed. 1941 // Also update the entropy so it matches the largest observed.
1948 ack_entropy_hash = entropy_calculator_->EntropyHash(ack_largest_observed); 1942 ack_entropy_hash = entropy_calculator_->EntropyHash(ack_largest_observed);
1949 ++ack_iter; 1943 ++ack_iter;
1950 } 1944 }
1951 1945
1952 if (!writer->WriteUInt8(ack_entropy_hash)) { 1946 if (!writer->WriteUInt8(ack_entropy_hash)) {
1953 return false; 1947 return false;
1954 } 1948 }
1955 1949
1956 if (!AppendPacketSequenceNumber(largest_observed_length, 1950 if (!AppendPacketSequenceNumber(largest_observed_length, ack_largest_observed,
1957 ack_largest_observed, writer)) { 1951 writer)) {
1958 return false; 1952 return false;
1959 } 1953 }
1960 1954
1961 uint64 delta_time_largest_observed_us = kUFloat16MaxValue; 1955 uint64 delta_time_largest_observed_us = kUFloat16MaxValue;
1962 if (!frame.delta_time_largest_observed.IsInfinite()) { 1956 if (!frame.delta_time_largest_observed.IsInfinite()) {
1963 DCHECK_LE(0u, frame.delta_time_largest_observed.ToMicroseconds()); 1957 DCHECK_LE(0u, frame.delta_time_largest_observed.ToMicroseconds());
1964 delta_time_largest_observed_us = 1958 delta_time_largest_observed_us =
1965 frame.delta_time_largest_observed.ToMicroseconds(); 1959 frame.delta_time_largest_observed.ToMicroseconds();
1966 } 1960 }
1967 1961
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
2048 PacketTimeVector::const_iterator it = frame.received_packet_times.begin(); 2042 PacketTimeVector::const_iterator it = frame.received_packet_times.begin();
2049 QuicPacketNumber packet_number = it->first; 2043 QuicPacketNumber packet_number = it->first;
2050 QuicPacketNumber delta_from_largest_observed = 2044 QuicPacketNumber delta_from_largest_observed =
2051 frame.largest_observed - packet_number; 2045 frame.largest_observed - packet_number;
2052 2046
2053 DCHECK_GE(numeric_limits<uint8>::max(), delta_from_largest_observed); 2047 DCHECK_GE(numeric_limits<uint8>::max(), delta_from_largest_observed);
2054 if (delta_from_largest_observed > numeric_limits<uint8>::max()) { 2048 if (delta_from_largest_observed > numeric_limits<uint8>::max()) {
2055 return false; 2049 return false;
2056 } 2050 }
2057 2051
2058 if (!writer->WriteUInt8( 2052 if (!writer->WriteUInt8(delta_from_largest_observed &
2059 delta_from_largest_observed & k1ByteSequenceNumberMask)) { 2053 k1ByteSequenceNumberMask)) {
2060 return false; 2054 return false;
2061 } 2055 }
2062 2056
2063 // Use the lowest 4 bytes of the time delta from the creation_time_. 2057 // Use the lowest 4 bytes of the time delta from the creation_time_.
2064 const uint64 time_epoch_delta_us = UINT64_C(1) << 32; 2058 const uint64 time_epoch_delta_us = UINT64_C(1) << 32;
2065 uint32 time_delta_us = 2059 uint32 time_delta_us =
2066 static_cast<uint32>(it->second.Subtract(creation_time_).ToMicroseconds() 2060 static_cast<uint32>(it->second.Subtract(creation_time_).ToMicroseconds() &
2067 & (time_epoch_delta_us - 1)); 2061 (time_epoch_delta_us - 1));
2068 if (!writer->WriteBytes(&time_delta_us, sizeof(time_delta_us))) { 2062 if (!writer->WriteBytes(&time_delta_us, sizeof(time_delta_us))) {
2069 return false; 2063 return false;
2070 } 2064 }
2071 2065
2072 QuicTime prev_time = it->second; 2066 QuicTime prev_time = it->second;
2073 2067
2074 for (++it; it != frame.received_packet_times.end(); ++it) { 2068 for (++it; it != frame.received_packet_times.end(); ++it) {
2075 packet_number = it->first; 2069 packet_number = it->first;
2076 delta_from_largest_observed = frame.largest_observed - packet_number; 2070 delta_from_largest_observed = frame.largest_observed - packet_number;
2077 2071
2078 if (delta_from_largest_observed > numeric_limits<uint8>::max()) { 2072 if (delta_from_largest_observed > numeric_limits<uint8>::max()) {
2079 return false; 2073 return false;
2080 } 2074 }
2081 2075
2082 if (!writer->WriteUInt8( 2076 if (!writer->WriteUInt8(delta_from_largest_observed &
2083 delta_from_largest_observed & k1ByteSequenceNumberMask)) { 2077 k1ByteSequenceNumberMask)) {
2084 return false; 2078 return false;
2085 } 2079 }
2086 2080
2087 uint64 frame_time_delta_us = 2081 uint64 frame_time_delta_us =
2088 it->second.Subtract(prev_time).ToMicroseconds(); 2082 it->second.Subtract(prev_time).ToMicroseconds();
2089 prev_time = it->second; 2083 prev_time = it->second;
2090 if (!writer->WriteUFloat16(frame_time_delta_us)) { 2084 if (!writer->WriteUFloat16(frame_time_delta_us)) {
2091 return false; 2085 return false;
2092 } 2086 }
2093 } 2087 }
2094 return true; 2088 return true;
2095 } 2089 }
2096 2090
2097 bool QuicFramer::AppendStopWaitingFrame( 2091 bool QuicFramer::AppendStopWaitingFrame(const QuicPacketHeader& header,
2098 const QuicPacketHeader& header, 2092 const QuicStopWaitingFrame& frame,
2099 const QuicStopWaitingFrame& frame, 2093 QuicDataWriter* writer) {
2100 QuicDataWriter* writer) {
2101 DCHECK_GE(header.packet_number, frame.least_unacked); 2094 DCHECK_GE(header.packet_number, frame.least_unacked);
2102 const QuicPacketNumber least_unacked_delta = 2095 const QuicPacketNumber least_unacked_delta =
2103 header.packet_number - frame.least_unacked; 2096 header.packet_number - frame.least_unacked;
2104 const QuicPacketNumber length_shift = 2097 const QuicPacketNumber length_shift =
2105 header.public_header.packet_number_length * 8; 2098 header.public_header.packet_number_length * 8;
2106 if (!writer->WriteUInt8(frame.entropy_hash)) { 2099 if (!writer->WriteUInt8(frame.entropy_hash)) {
2107 LOG(DFATAL) << " hash failed"; 2100 LOG(DFATAL) << " hash failed";
2108 return false; 2101 return false;
2109 } 2102 }
2110 2103
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
2194 2187
2195 bool QuicFramer::RaiseError(QuicErrorCode error) { 2188 bool QuicFramer::RaiseError(QuicErrorCode error) {
2196 DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error) 2189 DVLOG(1) << "Error: " << QuicUtils::ErrorToString(error)
2197 << " detail: " << detailed_error_; 2190 << " detail: " << detailed_error_;
2198 set_error(error); 2191 set_error(error);
2199 visitor_->OnError(this); 2192 visitor_->OnError(this);
2200 return false; 2193 return false;
2201 } 2194 }
2202 2195
2203 } // namespace net 2196 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_framer.h ('k') | net/quic/quic_framer_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698