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/core/quic_framer.h" | 5 #include "net/quic/core/quic_framer.h" |
6 | 6 |
7 #include <cstdint> | 7 #include <cstdint> |
8 #include <memory> | 8 #include <memory> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 17 matching lines...) Expand all Loading... |
28 using base::StringPiece; | 28 using base::StringPiece; |
29 using std::max; | 29 using std::max; |
30 using std::min; | 30 using std::min; |
31 using std::string; | 31 using std::string; |
32 #define PREDICT_FALSE(x) (x) | 32 #define PREDICT_FALSE(x) (x) |
33 | 33 |
34 namespace net { | 34 namespace net { |
35 | 35 |
36 namespace { | 36 namespace { |
37 | 37 |
| 38 #define ENDPOINT \ |
| 39 (perspective_ == Perspective::IS_SERVER ? "Server: " : "Client: ") |
| 40 |
38 // Mask to select the lowest 48 bits of a packet number. | 41 // Mask to select the lowest 48 bits of a packet number. |
39 const QuicPacketNumber k6ByteSequenceNumberMask = UINT64_C(0x0000FFFFFFFFFFFF); | 42 const QuicPacketNumber k6ByteSequenceNumberMask = UINT64_C(0x0000FFFFFFFFFFFF); |
40 const QuicPacketNumber k4ByteSequenceNumberMask = UINT64_C(0x00000000FFFFFFFF); | 43 const QuicPacketNumber k4ByteSequenceNumberMask = UINT64_C(0x00000000FFFFFFFF); |
41 const QuicPacketNumber k2ByteSequenceNumberMask = UINT64_C(0x000000000000FFFF); | 44 const QuicPacketNumber k2ByteSequenceNumberMask = UINT64_C(0x000000000000FFFF); |
42 const QuicPacketNumber k1ByteSequenceNumberMask = UINT64_C(0x00000000000000FF); | 45 const QuicPacketNumber k1ByteSequenceNumberMask = UINT64_C(0x00000000000000FF); |
43 | 46 |
44 // Number of bits the packet number length bits are shifted from the right | 47 // Number of bits the packet number length bits are shifted from the right |
45 // edge of the public header. | 48 // edge of the public header. |
46 const uint8_t kPublicHeaderSequenceNumberShift = 4; | 49 const uint8_t kPublicHeaderSequenceNumberShift = 4; |
47 | 50 |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 if (!first_frame) { | 301 if (!first_frame) { |
299 return 0; | 302 return 0; |
300 } | 303 } |
301 bool can_truncate = | 304 bool can_truncate = |
302 frame.type == ACK_FRAME && | 305 frame.type == ACK_FRAME && |
303 free_bytes >= | 306 free_bytes >= |
304 GetMinAckFrameSize(quic_version_, PACKET_6BYTE_PACKET_NUMBER); | 307 GetMinAckFrameSize(quic_version_, PACKET_6BYTE_PACKET_NUMBER); |
305 if (can_truncate) { | 308 if (can_truncate) { |
306 // Truncate the frame so the packet will not exceed kMaxPacketSize. | 309 // Truncate the frame so the packet will not exceed kMaxPacketSize. |
307 // Note that we may not use every byte of the writer in this case. | 310 // Note that we may not use every byte of the writer in this case. |
308 DVLOG(1) << "Truncating large frame, free bytes: " << free_bytes; | 311 DVLOG(1) << ENDPOINT |
| 312 << "Truncating large frame, free bytes: " << free_bytes; |
309 return free_bytes; | 313 return free_bytes; |
310 } | 314 } |
311 return 0; | 315 return 0; |
312 } | 316 } |
313 | 317 |
314 QuicFramer::NewAckFrameInfo::NewAckFrameInfo() | 318 QuicFramer::NewAckFrameInfo::NewAckFrameInfo() |
315 : max_block_length(0), first_block_length(0), num_ack_blocks(0) {} | 319 : max_block_length(0), first_block_length(0), num_ack_blocks(0) {} |
316 | 320 |
317 QuicFramer::NewAckFrameInfo::NewAckFrameInfo(const NewAckFrameInfo& other) = | 321 QuicFramer::NewAckFrameInfo::NewAckFrameInfo(const NewAckFrameInfo& other) = |
318 default; | 322 default; |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
495 } | 499 } |
496 | 500 |
497 bool QuicFramer::ProcessPacket(const QuicEncryptedPacket& packet) { | 501 bool QuicFramer::ProcessPacket(const QuicEncryptedPacket& packet) { |
498 QuicDataReader reader(packet.data(), packet.length()); | 502 QuicDataReader reader(packet.data(), packet.length()); |
499 | 503 |
500 visitor_->OnPacket(); | 504 visitor_->OnPacket(); |
501 | 505 |
502 // First parse the public header. | 506 // First parse the public header. |
503 QuicPacketPublicHeader public_header; | 507 QuicPacketPublicHeader public_header; |
504 if (!ProcessPublicHeader(&reader, &public_header)) { | 508 if (!ProcessPublicHeader(&reader, &public_header)) { |
505 DVLOG(1) << "Unable to process public header."; | 509 DVLOG(1) << ENDPOINT << "Unable to process public header."; |
506 DCHECK_NE("", detailed_error_); | 510 DCHECK_NE("", detailed_error_); |
507 return RaiseError(QUIC_INVALID_PACKET_HEADER); | 511 return RaiseError(QUIC_INVALID_PACKET_HEADER); |
508 } | 512 } |
509 | 513 |
510 if (!visitor_->OnUnauthenticatedPublicHeader(public_header)) { | 514 if (!visitor_->OnUnauthenticatedPublicHeader(public_header)) { |
511 // The visitor suppresses further processing of the packet. | 515 // The visitor suppresses further processing of the packet. |
512 return true; | 516 return true; |
513 } | 517 } |
514 | 518 |
515 if (perspective_ == Perspective::IS_SERVER && public_header.version_flag && | 519 if (perspective_ == Perspective::IS_SERVER && public_header.version_flag && |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
562 return true; | 566 return true; |
563 } | 567 } |
564 | 568 |
565 bool QuicFramer::ProcessDataPacket(QuicDataReader* encrypted_reader, | 569 bool QuicFramer::ProcessDataPacket(QuicDataReader* encrypted_reader, |
566 const QuicPacketPublicHeader& public_header, | 570 const QuicPacketPublicHeader& public_header, |
567 const QuicEncryptedPacket& packet, | 571 const QuicEncryptedPacket& packet, |
568 char* decrypted_buffer, | 572 char* decrypted_buffer, |
569 size_t buffer_length) { | 573 size_t buffer_length) { |
570 QuicPacketHeader header(public_header); | 574 QuicPacketHeader header(public_header); |
571 if (!ProcessUnauthenticatedHeader(encrypted_reader, &header)) { | 575 if (!ProcessUnauthenticatedHeader(encrypted_reader, &header)) { |
572 DVLOG(1) << "Unable to process packet header. Stopping parsing."; | 576 DVLOG(1) << ENDPOINT |
| 577 << "Unable to process packet header. Stopping parsing."; |
573 return false; | 578 return false; |
574 } | 579 } |
575 | 580 |
576 size_t decrypted_length = 0; | 581 size_t decrypted_length = 0; |
577 if (!DecryptPayload(encrypted_reader, header, packet, decrypted_buffer, | 582 if (!DecryptPayload(encrypted_reader, header, packet, decrypted_buffer, |
578 buffer_length, &decrypted_length)) { | 583 buffer_length, &decrypted_length)) { |
579 set_detailed_error("Unable to decrypt payload."); | 584 set_detailed_error("Unable to decrypt payload."); |
580 return RaiseError(QUIC_DECRYPTION_FAILURE); | 585 return RaiseError(QUIC_DECRYPTION_FAILURE); |
581 } | 586 } |
582 | 587 |
(...skipping 10 matching lines...) Expand all Loading... |
593 | 598 |
594 if (packet.length() > kMaxPacketSize) { | 599 if (packet.length() > kMaxPacketSize) { |
595 // If the packet has gotten this far, it should not be too large. | 600 // If the packet has gotten this far, it should not be too large. |
596 QUIC_BUG << "Packet too large:" << packet.length(); | 601 QUIC_BUG << "Packet too large:" << packet.length(); |
597 return RaiseError(QUIC_PACKET_TOO_LARGE); | 602 return RaiseError(QUIC_PACKET_TOO_LARGE); |
598 } | 603 } |
599 | 604 |
600 // Handle the payload. | 605 // Handle the payload. |
601 if (!ProcessFrameData(&reader, header)) { | 606 if (!ProcessFrameData(&reader, header)) { |
602 DCHECK_NE(QUIC_NO_ERROR, error_); // ProcessFrameData sets the error. | 607 DCHECK_NE(QUIC_NO_ERROR, error_); // ProcessFrameData sets the error. |
603 DLOG(WARNING) << "Unable to process frame data."; | 608 DLOG(WARNING) << ENDPOINT << "Unable to process frame data."; |
604 return false; | 609 return false; |
605 } | 610 } |
606 | 611 |
607 visitor_->OnPacketComplete(); | 612 visitor_->OnPacketComplete(); |
608 return true; | 613 return true; |
609 } | 614 } |
610 | 615 |
611 bool QuicFramer::ProcessPublicResetPacket( | 616 bool QuicFramer::ProcessPublicResetPacket( |
612 QuicDataReader* reader, | 617 QuicDataReader* reader, |
613 const QuicPacketPublicHeader& public_header) { | 618 const QuicPacketPublicHeader& public_header) { |
(...skipping 24 matching lines...) Expand all Loading... |
638 QuicSocketAddress(address_coder.ip(), address_coder.port()); | 643 QuicSocketAddress(address_coder.ip(), address_coder.port()); |
639 } | 644 } |
640 } | 645 } |
641 | 646 |
642 visitor_->OnPublicResetPacket(packet); | 647 visitor_->OnPublicResetPacket(packet); |
643 return true; | 648 return true; |
644 } | 649 } |
645 | 650 |
646 bool QuicFramer::AppendPacketHeader(const QuicPacketHeader& header, | 651 bool QuicFramer::AppendPacketHeader(const QuicPacketHeader& header, |
647 QuicDataWriter* writer) { | 652 QuicDataWriter* writer) { |
648 DVLOG(1) << "Appending header: " << header; | 653 DVLOG(1) << ENDPOINT << "Appending header: " << header; |
649 uint8_t public_flags = 0; | 654 uint8_t public_flags = 0; |
650 if (header.public_header.reset_flag) { | 655 if (header.public_header.reset_flag) { |
651 public_flags |= PACKET_PUBLIC_FLAGS_RST; | 656 public_flags |= PACKET_PUBLIC_FLAGS_RST; |
652 } | 657 } |
653 if (header.public_header.version_flag) { | 658 if (header.public_header.version_flag) { |
654 public_flags |= PACKET_PUBLIC_FLAGS_VERSION; | 659 public_flags |= PACKET_PUBLIC_FLAGS_VERSION; |
655 } | 660 } |
656 if (header.public_header.multipath_flag) { | 661 if (header.public_header.multipath_flag) { |
657 public_flags |= PACKET_PUBLIC_FLAGS_MULTIPATH; | 662 public_flags |= PACKET_PUBLIC_FLAGS_MULTIPATH; |
658 } | 663 } |
(...skipping 25 matching lines...) Expand all Loading... |
684 return false; | 689 return false; |
685 } | 690 } |
686 break; | 691 break; |
687 } | 692 } |
688 last_serialized_connection_id_ = header.public_header.connection_id; | 693 last_serialized_connection_id_ = header.public_header.connection_id; |
689 | 694 |
690 if (header.public_header.version_flag) { | 695 if (header.public_header.version_flag) { |
691 DCHECK_EQ(Perspective::IS_CLIENT, perspective_); | 696 DCHECK_EQ(Perspective::IS_CLIENT, perspective_); |
692 QuicTag tag = QuicVersionToQuicTag(quic_version_); | 697 QuicTag tag = QuicVersionToQuicTag(quic_version_); |
693 writer->WriteUInt32(tag); | 698 writer->WriteUInt32(tag); |
694 DVLOG(1) << "version = " << quic_version_ << ", tag = '" | 699 DVLOG(1) << ENDPOINT << "version = " << quic_version_ << ", tag = '" |
695 << QuicTagToString(tag) << "'"; | 700 << QuicTagToString(tag) << "'"; |
696 } | 701 } |
697 | 702 |
698 if (header.public_header.multipath_flag && | 703 if (header.public_header.multipath_flag && |
699 !writer->WriteUInt8(header.path_id)) { | 704 !writer->WriteUInt8(header.path_id)) { |
700 return false; | 705 return false; |
701 } | 706 } |
702 | 707 |
703 if (header.public_header.nonce != nullptr && | 708 if (header.public_header.nonce != nullptr && |
704 !writer->WriteBytes(header.public_header.nonce, | 709 !writer->WriteBytes(header.public_header.nonce, |
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1020 } | 1025 } |
1021 | 1026 |
1022 if (frame_type & kQuicFrameTypeSpecialMask) { | 1027 if (frame_type & kQuicFrameTypeSpecialMask) { |
1023 // Stream Frame | 1028 // Stream Frame |
1024 if (frame_type & kQuicFrameTypeStreamMask) { | 1029 if (frame_type & kQuicFrameTypeStreamMask) { |
1025 QuicStreamFrame frame; | 1030 QuicStreamFrame frame; |
1026 if (!ProcessStreamFrame(reader, frame_type, &frame)) { | 1031 if (!ProcessStreamFrame(reader, frame_type, &frame)) { |
1027 return RaiseError(QUIC_INVALID_STREAM_DATA); | 1032 return RaiseError(QUIC_INVALID_STREAM_DATA); |
1028 } | 1033 } |
1029 if (!visitor_->OnStreamFrame(frame)) { | 1034 if (!visitor_->OnStreamFrame(frame)) { |
1030 DVLOG(1) << "Visitor asked to stop further processing."; | 1035 DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing."; |
1031 // Returning true since there was no parsing error. | 1036 // Returning true since there was no parsing error. |
1032 return true; | 1037 return true; |
1033 } | 1038 } |
1034 continue; | 1039 continue; |
1035 } | 1040 } |
1036 | 1041 |
1037 // Ack Frame | 1042 // Ack Frame |
1038 if (frame_type & kQuicFrameTypeAckMask) { | 1043 if (frame_type & kQuicFrameTypeAckMask) { |
1039 QuicAckFrame frame; | 1044 QuicAckFrame frame; |
1040 if (!ProcessNewAckFrame(reader, frame_type, &frame)) { | 1045 if (!ProcessNewAckFrame(reader, frame_type, &frame)) { |
1041 return RaiseError(QUIC_INVALID_ACK_DATA); | 1046 return RaiseError(QUIC_INVALID_ACK_DATA); |
1042 } | 1047 } |
1043 if (!visitor_->OnAckFrame(frame)) { | 1048 if (!visitor_->OnAckFrame(frame)) { |
1044 DVLOG(1) << "Visitor asked to stop further processing."; | 1049 DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing."; |
1045 // Returning true since there was no parsing error. | 1050 // Returning true since there was no parsing error. |
1046 return true; | 1051 return true; |
1047 } | 1052 } |
1048 continue; | 1053 continue; |
1049 } | 1054 } |
1050 | 1055 |
1051 // This was a special frame type that did not match any | 1056 // This was a special frame type that did not match any |
1052 // of the known ones. Error. | 1057 // of the known ones. Error. |
1053 set_detailed_error("Illegal frame type."); | 1058 set_detailed_error("Illegal frame type."); |
1054 DLOG(WARNING) << "Illegal frame type: " << static_cast<int>(frame_type); | 1059 DLOG(WARNING) << ENDPOINT |
| 1060 << "Illegal frame type: " << static_cast<int>(frame_type); |
1055 return RaiseError(QUIC_INVALID_FRAME_DATA); | 1061 return RaiseError(QUIC_INVALID_FRAME_DATA); |
1056 } | 1062 } |
1057 | 1063 |
1058 switch (frame_type) { | 1064 switch (frame_type) { |
1059 case PADDING_FRAME: { | 1065 case PADDING_FRAME: { |
1060 QuicPaddingFrame frame(reader->BytesRemaining()); | 1066 QuicPaddingFrame frame(reader->BytesRemaining()); |
1061 if (!visitor_->OnPaddingFrame(frame)) { | 1067 if (!visitor_->OnPaddingFrame(frame)) { |
1062 DVLOG(1) << "Visitor asked to stop further processing."; | 1068 DVLOG(1) << "Visitor asked to stop further processing."; |
1063 } | 1069 } |
1064 // We're done with the packet. | 1070 // We're done with the packet. |
(...skipping 13 matching lines...) Expand all Loading... |
1078 continue; | 1084 continue; |
1079 } | 1085 } |
1080 | 1086 |
1081 case CONNECTION_CLOSE_FRAME: { | 1087 case CONNECTION_CLOSE_FRAME: { |
1082 QuicConnectionCloseFrame frame; | 1088 QuicConnectionCloseFrame frame; |
1083 if (!ProcessConnectionCloseFrame(reader, &frame)) { | 1089 if (!ProcessConnectionCloseFrame(reader, &frame)) { |
1084 return RaiseError(QUIC_INVALID_CONNECTION_CLOSE_DATA); | 1090 return RaiseError(QUIC_INVALID_CONNECTION_CLOSE_DATA); |
1085 } | 1091 } |
1086 | 1092 |
1087 if (!visitor_->OnConnectionCloseFrame(frame)) { | 1093 if (!visitor_->OnConnectionCloseFrame(frame)) { |
1088 DVLOG(1) << "Visitor asked to stop further processing."; | 1094 DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing."; |
1089 // Returning true since there was no parsing error. | 1095 // Returning true since there was no parsing error. |
1090 return true; | 1096 return true; |
1091 } | 1097 } |
1092 continue; | 1098 continue; |
1093 } | 1099 } |
1094 | 1100 |
1095 case GOAWAY_FRAME: { | 1101 case GOAWAY_FRAME: { |
1096 QuicGoAwayFrame goaway_frame; | 1102 QuicGoAwayFrame goaway_frame; |
1097 if (!ProcessGoAwayFrame(reader, &goaway_frame)) { | 1103 if (!ProcessGoAwayFrame(reader, &goaway_frame)) { |
1098 return RaiseError(QUIC_INVALID_GOAWAY_DATA); | 1104 return RaiseError(QUIC_INVALID_GOAWAY_DATA); |
1099 } | 1105 } |
1100 if (!visitor_->OnGoAwayFrame(goaway_frame)) { | 1106 if (!visitor_->OnGoAwayFrame(goaway_frame)) { |
1101 DVLOG(1) << "Visitor asked to stop further processing."; | 1107 DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing."; |
1102 // Returning true since there was no parsing error. | 1108 // Returning true since there was no parsing error. |
1103 return true; | 1109 return true; |
1104 } | 1110 } |
1105 continue; | 1111 continue; |
1106 } | 1112 } |
1107 | 1113 |
1108 case WINDOW_UPDATE_FRAME: { | 1114 case WINDOW_UPDATE_FRAME: { |
1109 QuicWindowUpdateFrame window_update_frame; | 1115 QuicWindowUpdateFrame window_update_frame; |
1110 if (!ProcessWindowUpdateFrame(reader, &window_update_frame)) { | 1116 if (!ProcessWindowUpdateFrame(reader, &window_update_frame)) { |
1111 return RaiseError(QUIC_INVALID_WINDOW_UPDATE_DATA); | 1117 return RaiseError(QUIC_INVALID_WINDOW_UPDATE_DATA); |
1112 } | 1118 } |
1113 if (!visitor_->OnWindowUpdateFrame(window_update_frame)) { | 1119 if (!visitor_->OnWindowUpdateFrame(window_update_frame)) { |
1114 DVLOG(1) << "Visitor asked to stop further processing."; | 1120 DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing."; |
1115 // Returning true since there was no parsing error. | 1121 // Returning true since there was no parsing error. |
1116 return true; | 1122 return true; |
1117 } | 1123 } |
1118 continue; | 1124 continue; |
1119 } | 1125 } |
1120 | 1126 |
1121 case BLOCKED_FRAME: { | 1127 case BLOCKED_FRAME: { |
1122 QuicBlockedFrame blocked_frame; | 1128 QuicBlockedFrame blocked_frame; |
1123 if (!ProcessBlockedFrame(reader, &blocked_frame)) { | 1129 if (!ProcessBlockedFrame(reader, &blocked_frame)) { |
1124 return RaiseError(QUIC_INVALID_BLOCKED_DATA); | 1130 return RaiseError(QUIC_INVALID_BLOCKED_DATA); |
1125 } | 1131 } |
1126 if (!visitor_->OnBlockedFrame(blocked_frame)) { | 1132 if (!visitor_->OnBlockedFrame(blocked_frame)) { |
1127 DVLOG(1) << "Visitor asked to stop further processing."; | 1133 DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing."; |
1128 // Returning true since there was no parsing error. | 1134 // Returning true since there was no parsing error. |
1129 return true; | 1135 return true; |
1130 } | 1136 } |
1131 continue; | 1137 continue; |
1132 } | 1138 } |
1133 | 1139 |
1134 case STOP_WAITING_FRAME: { | 1140 case STOP_WAITING_FRAME: { |
1135 QuicStopWaitingFrame stop_waiting_frame; | 1141 QuicStopWaitingFrame stop_waiting_frame; |
1136 if (!ProcessStopWaitingFrame(reader, header, &stop_waiting_frame)) { | 1142 if (!ProcessStopWaitingFrame(reader, header, &stop_waiting_frame)) { |
1137 return RaiseError(QUIC_INVALID_STOP_WAITING_DATA); | 1143 return RaiseError(QUIC_INVALID_STOP_WAITING_DATA); |
1138 } | 1144 } |
1139 if (!visitor_->OnStopWaitingFrame(stop_waiting_frame)) { | 1145 if (!visitor_->OnStopWaitingFrame(stop_waiting_frame)) { |
1140 DVLOG(1) << "Visitor asked to stop further processing."; | 1146 DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing."; |
1141 // Returning true since there was no parsing error. | 1147 // Returning true since there was no parsing error. |
1142 return true; | 1148 return true; |
1143 } | 1149 } |
1144 continue; | 1150 continue; |
1145 } | 1151 } |
1146 case PING_FRAME: { | 1152 case PING_FRAME: { |
1147 // Ping has no payload. | 1153 // Ping has no payload. |
1148 QuicPingFrame ping_frame; | 1154 QuicPingFrame ping_frame; |
1149 if (!visitor_->OnPingFrame(ping_frame)) { | 1155 if (!visitor_->OnPingFrame(ping_frame)) { |
1150 DVLOG(1) << "Visitor asked to stop further processing."; | 1156 DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing."; |
1151 // Returning true since there was no parsing error. | 1157 // Returning true since there was no parsing error. |
1152 return true; | 1158 return true; |
1153 } | 1159 } |
1154 continue; | 1160 continue; |
1155 } | 1161 } |
1156 case PATH_CLOSE_FRAME: { | 1162 case PATH_CLOSE_FRAME: { |
1157 QuicPathCloseFrame path_close_frame; | 1163 QuicPathCloseFrame path_close_frame; |
1158 if (!ProcessPathCloseFrame(reader, &path_close_frame)) { | 1164 if (!ProcessPathCloseFrame(reader, &path_close_frame)) { |
1159 return RaiseError(QUIC_INVALID_PATH_CLOSE_DATA); | 1165 return RaiseError(QUIC_INVALID_PATH_CLOSE_DATA); |
1160 } | 1166 } |
1161 if (!visitor_->OnPathCloseFrame(path_close_frame)) { | 1167 if (!visitor_->OnPathCloseFrame(path_close_frame)) { |
1162 DVLOG(1) << "Visitor asked to stop further processing."; | 1168 DVLOG(1) << ENDPOINT << "Visitor asked to stop further processing."; |
1163 // Returning true since there was no parsing error. | 1169 // Returning true since there was no parsing error. |
1164 return true; | 1170 return true; |
1165 } | 1171 } |
1166 continue; | 1172 continue; |
1167 } | 1173 } |
1168 | 1174 |
1169 default: | 1175 default: |
1170 set_detailed_error("Illegal frame type."); | 1176 set_detailed_error("Illegal frame type."); |
1171 DLOG(WARNING) << "Illegal frame type: " << static_cast<int>(frame_type); | 1177 DLOG(WARNING) << ENDPOINT |
| 1178 << "Illegal frame type: " << static_cast<int>(frame_type); |
1172 return RaiseError(QUIC_INVALID_FRAME_DATA); | 1179 return RaiseError(QUIC_INVALID_FRAME_DATA); |
1173 } | 1180 } |
1174 } | 1181 } |
1175 | 1182 |
1176 return true; | 1183 return true; |
1177 } | 1184 } |
1178 | 1185 |
1179 bool QuicFramer::ProcessStreamFrame(QuicDataReader* reader, | 1186 bool QuicFramer::ProcessStreamFrame(QuicDataReader* reader, |
1180 uint8_t frame_type, | 1187 uint8_t frame_type, |
1181 QuicStreamFrame* frame) { | 1188 QuicStreamFrame* frame) { |
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1661 // Switch the alternative decrypter so that we use it first next time. | 1668 // Switch the alternative decrypter so that we use it first next time. |
1662 decrypter_.swap(alternative_decrypter_); | 1669 decrypter_.swap(alternative_decrypter_); |
1663 EncryptionLevel level = alternative_decrypter_level_; | 1670 EncryptionLevel level = alternative_decrypter_level_; |
1664 alternative_decrypter_level_ = decrypter_level_; | 1671 alternative_decrypter_level_ = decrypter_level_; |
1665 decrypter_level_ = level; | 1672 decrypter_level_ = level; |
1666 } | 1673 } |
1667 } | 1674 } |
1668 } | 1675 } |
1669 | 1676 |
1670 if (!success) { | 1677 if (!success) { |
1671 DVLOG(1) << "DecryptPacket failed for packet_number:" | 1678 DVLOG(1) << ENDPOINT << "DecryptPacket failed for packet_number:" |
1672 << header.packet_number; | 1679 << header.packet_number; |
1673 return false; | 1680 return false; |
1674 } | 1681 } |
1675 | 1682 |
1676 return true; | 1683 return true; |
1677 } | 1684 } |
1678 | 1685 |
1679 size_t QuicFramer::GetAckFrameTimeStampSize(const QuicAckFrame& ack) { | 1686 size_t QuicFramer::GetAckFrameTimeStampSize(const QuicAckFrame& ack) { |
1680 if (ack.received_packet_times.empty()) { | 1687 if (ack.received_packet_times.empty()) { |
1681 return 0; | 1688 return 0; |
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2178 bool QuicFramer::AppendPathCloseFrame(const QuicPathCloseFrame& frame, | 2185 bool QuicFramer::AppendPathCloseFrame(const QuicPathCloseFrame& frame, |
2179 QuicDataWriter* writer) { | 2186 QuicDataWriter* writer) { |
2180 uint8_t path_id = static_cast<uint8_t>(frame.path_id); | 2187 uint8_t path_id = static_cast<uint8_t>(frame.path_id); |
2181 if (!writer->WriteUInt8(path_id)) { | 2188 if (!writer->WriteUInt8(path_id)) { |
2182 return false; | 2189 return false; |
2183 } | 2190 } |
2184 return true; | 2191 return true; |
2185 } | 2192 } |
2186 | 2193 |
2187 bool QuicFramer::RaiseError(QuicErrorCode error) { | 2194 bool QuicFramer::RaiseError(QuicErrorCode error) { |
2188 DVLOG(1) << "Error: " << QuicErrorCodeToString(error) | 2195 DVLOG(1) << ENDPOINT << "Error: " << QuicErrorCodeToString(error) |
2189 << " detail: " << detailed_error_; | 2196 << " detail: " << detailed_error_; |
2190 set_error(error); | 2197 set_error(error); |
2191 visitor_->OnError(this); | 2198 visitor_->OnError(this); |
2192 return false; | 2199 return false; |
2193 } | 2200 } |
2194 | 2201 |
2195 } // namespace net | 2202 } // namespace net |
OLD | NEW |