| 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_framer.h" | 5 #include "net/quic/quic_framer.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 } | 99 } |
| 100 | 100 |
| 101 size_t GetPrivateFlagsOffset(bool include_version, | 101 size_t GetPrivateFlagsOffset(bool include_version, |
| 102 bool include_path_id, | 102 bool include_path_id, |
| 103 QuicPacketNumberLength packet_number_length) { | 103 QuicPacketNumberLength packet_number_length) { |
| 104 return GetPacketNumberOffset(PACKET_8BYTE_CONNECTION_ID, include_version, | 104 return GetPacketNumberOffset(PACKET_8BYTE_CONNECTION_ID, include_version, |
| 105 include_path_id) + | 105 include_path_id) + |
| 106 packet_number_length; | 106 packet_number_length; |
| 107 } | 107 } |
| 108 | 108 |
| 109 // Index into the fec group offset in the header. | |
| 110 size_t GetFecGroupOffset(QuicConnectionIdLength connection_id_length, | |
| 111 bool include_version, | |
| 112 bool include_path_id) { | |
| 113 return GetPrivateFlagsOffset(connection_id_length, include_version, | |
| 114 include_path_id) + | |
| 115 kPrivateFlagsSize; | |
| 116 } | |
| 117 | |
| 118 size_t GetFecGroupOffset(bool include_version, bool include_path_id) { | |
| 119 return GetPrivateFlagsOffset(PACKET_8BYTE_CONNECTION_ID, include_version, | |
| 120 include_path_id) + | |
| 121 kPrivateFlagsSize; | |
| 122 } | |
| 123 | |
| 124 size_t GetFecGroupOffset(bool include_version, | |
| 125 bool include_path_id, | |
| 126 QuicPacketNumberLength packet_number_length) { | |
| 127 return GetPrivateFlagsOffset(include_version, include_path_id, | |
| 128 packet_number_length) + | |
| 129 kPrivateFlagsSize; | |
| 130 } | |
| 131 | |
| 132 // Index into the message tag of the public reset packet. | 109 // Index into the message tag of the public reset packet. |
| 133 // Public resets always have full connection_ids. | 110 // Public resets always have full connection_ids. |
| 134 const size_t kPublicResetPacketMessageTagOffset = | 111 const size_t kPublicResetPacketMessageTagOffset = |
| 135 kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; | 112 kConnectionIdOffset + PACKET_8BYTE_CONNECTION_ID; |
| 136 | 113 |
| 137 class TestEncrypter : public QuicEncrypter { | 114 class TestEncrypter : public QuicEncrypter { |
| 138 public: | 115 public: |
| 139 ~TestEncrypter() override {} | 116 ~TestEncrypter() override {} |
| 140 bool SetKey(StringPiece key) override { return true; } | 117 bool SetKey(StringPiece key) override { return true; } |
| 141 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; } | 118 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; } |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 string ciphertext_; | 178 string ciphertext_; |
| 202 }; | 179 }; |
| 203 | 180 |
| 204 class TestQuicVisitor : public QuicFramerVisitorInterface { | 181 class TestQuicVisitor : public QuicFramerVisitorInterface { |
| 205 public: | 182 public: |
| 206 TestQuicVisitor() | 183 TestQuicVisitor() |
| 207 : error_count_(0), | 184 : error_count_(0), |
| 208 version_mismatch_(0), | 185 version_mismatch_(0), |
| 209 packet_count_(0), | 186 packet_count_(0), |
| 210 frame_count_(0), | 187 frame_count_(0), |
| 211 fec_count_(0), | |
| 212 complete_packets_(0), | 188 complete_packets_(0), |
| 213 revived_packets_(0), | |
| 214 accept_packet_(true), | 189 accept_packet_(true), |
| 215 accept_public_header_(true) {} | 190 accept_public_header_(true) {} |
| 216 | 191 |
| 217 ~TestQuicVisitor() override { | 192 ~TestQuicVisitor() override { |
| 218 STLDeleteElements(&stream_frames_); | 193 STLDeleteElements(&stream_frames_); |
| 219 STLDeleteElements(&ack_frames_); | 194 STLDeleteElements(&ack_frames_); |
| 220 STLDeleteElements(&stop_waiting_frames_); | 195 STLDeleteElements(&stop_waiting_frames_); |
| 221 STLDeleteElements(&ping_frames_); | 196 STLDeleteElements(&ping_frames_); |
| 222 STLDeleteElements(&stream_data_); | 197 STLDeleteElements(&stream_data_); |
| 223 } | 198 } |
| 224 | 199 |
| 225 void OnError(QuicFramer* f) override { | 200 void OnError(QuicFramer* f) override { |
| 226 DVLOG(1) << "QuicFramer Error: " << QuicUtils::ErrorToString(f->error()) | 201 DVLOG(1) << "QuicFramer Error: " << QuicUtils::ErrorToString(f->error()) |
| 227 << " (" << f->error() << ")"; | 202 << " (" << f->error() << ")"; |
| 228 ++error_count_; | 203 ++error_count_; |
| 229 } | 204 } |
| 230 | 205 |
| 231 void OnPacket() override {} | 206 void OnPacket() override {} |
| 232 | 207 |
| 233 void OnPublicResetPacket(const QuicPublicResetPacket& packet) override { | 208 void OnPublicResetPacket(const QuicPublicResetPacket& packet) override { |
| 234 public_reset_packet_.reset(new QuicPublicResetPacket(packet)); | 209 public_reset_packet_.reset(new QuicPublicResetPacket(packet)); |
| 235 } | 210 } |
| 236 | 211 |
| 237 void OnVersionNegotiationPacket( | 212 void OnVersionNegotiationPacket( |
| 238 const QuicVersionNegotiationPacket& packet) override { | 213 const QuicVersionNegotiationPacket& packet) override { |
| 239 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); | 214 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); |
| 240 } | 215 } |
| 241 | 216 |
| 242 void OnRevivedPacket() override { ++revived_packets_; } | |
| 243 | |
| 244 bool OnProtocolVersionMismatch(QuicVersion version) override { | 217 bool OnProtocolVersionMismatch(QuicVersion version) override { |
| 245 DVLOG(1) << "QuicFramer Version Mismatch, version: " << version; | 218 DVLOG(1) << "QuicFramer Version Mismatch, version: " << version; |
| 246 ++version_mismatch_; | 219 ++version_mismatch_; |
| 247 return true; | 220 return true; |
| 248 } | 221 } |
| 249 | 222 |
| 250 bool OnUnauthenticatedPublicHeader( | 223 bool OnUnauthenticatedPublicHeader( |
| 251 const QuicPacketPublicHeader& header) override { | 224 const QuicPacketPublicHeader& header) override { |
| 252 public_header_.reset(new QuicPacketPublicHeader(header)); | 225 public_header_.reset(new QuicPacketPublicHeader(header)); |
| 253 return accept_public_header_; | 226 return accept_public_header_; |
| 254 } | 227 } |
| 255 | 228 |
| 256 bool OnUnauthenticatedHeader(const QuicPacketHeader& header) override { | 229 bool OnUnauthenticatedHeader(const QuicPacketHeader& header) override { |
| 257 return true; | 230 return true; |
| 258 } | 231 } |
| 259 | 232 |
| 260 void OnDecryptedPacket(EncryptionLevel level) override {} | 233 void OnDecryptedPacket(EncryptionLevel level) override {} |
| 261 | 234 |
| 262 bool OnPacketHeader(const QuicPacketHeader& header) override { | 235 bool OnPacketHeader(const QuicPacketHeader& header) override { |
| 236 if (header.fec_flag) { |
| 237 // Drop any FEC packet. |
| 238 return false; |
| 239 } |
| 263 ++packet_count_; | 240 ++packet_count_; |
| 264 header_.reset(new QuicPacketHeader(header)); | 241 header_.reset(new QuicPacketHeader(header)); |
| 265 return accept_packet_; | 242 return accept_packet_; |
| 266 } | 243 } |
| 267 | 244 |
| 268 bool OnStreamFrame(const QuicStreamFrame& frame) override { | 245 bool OnStreamFrame(const QuicStreamFrame& frame) override { |
| 269 ++frame_count_; | 246 ++frame_count_; |
| 270 // Save a copy of the data so it is valid after the packet is processed. | 247 // Save a copy of the data so it is valid after the packet is processed. |
| 271 string* string_data = new string(); | 248 string* string_data = new string(); |
| 272 StringPiece(frame.frame_buffer, frame.frame_length) | 249 StringPiece(frame.frame_buffer, frame.frame_length) |
| 273 .AppendToString(string_data); | 250 .AppendToString(string_data); |
| 274 stream_data_.push_back(string_data); | 251 stream_data_.push_back(string_data); |
| 275 stream_frames_.push_back(new QuicStreamFrame(frame.stream_id, frame.fin, | 252 stream_frames_.push_back(new QuicStreamFrame(frame.stream_id, frame.fin, |
| 276 frame.offset, *string_data)); | 253 frame.offset, *string_data)); |
| 277 return true; | 254 return true; |
| 278 } | 255 } |
| 279 | 256 |
| 280 void OnFecProtectedPayload(StringPiece payload) override { | |
| 281 fec_protected_payload_ = payload.as_string(); | |
| 282 } | |
| 283 | |
| 284 bool OnAckFrame(const QuicAckFrame& frame) override { | 257 bool OnAckFrame(const QuicAckFrame& frame) override { |
| 285 ++frame_count_; | 258 ++frame_count_; |
| 286 ack_frames_.push_back(new QuicAckFrame(frame)); | 259 ack_frames_.push_back(new QuicAckFrame(frame)); |
| 287 return true; | 260 return true; |
| 288 } | 261 } |
| 289 | 262 |
| 290 bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override { | 263 bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override { |
| 291 ++frame_count_; | 264 ++frame_count_; |
| 292 stop_waiting_frames_.push_back(new QuicStopWaitingFrame(frame)); | 265 stop_waiting_frames_.push_back(new QuicStopWaitingFrame(frame)); |
| 293 return true; | 266 return true; |
| 294 } | 267 } |
| 295 | 268 |
| 296 bool OnPingFrame(const QuicPingFrame& frame) override { | 269 bool OnPingFrame(const QuicPingFrame& frame) override { |
| 297 ++frame_count_; | 270 ++frame_count_; |
| 298 ping_frames_.push_back(new QuicPingFrame(frame)); | 271 ping_frames_.push_back(new QuicPingFrame(frame)); |
| 299 return true; | 272 return true; |
| 300 } | 273 } |
| 301 | 274 |
| 302 void OnFecData(StringPiece redundancy) override { | |
| 303 ++fec_count_; | |
| 304 fec_data_redundancy_.push_back(redundancy.as_string()); | |
| 305 } | |
| 306 | |
| 307 void OnPacketComplete() override { ++complete_packets_; } | 275 void OnPacketComplete() override { ++complete_packets_; } |
| 308 | 276 |
| 309 bool OnRstStreamFrame(const QuicRstStreamFrame& frame) override { | 277 bool OnRstStreamFrame(const QuicRstStreamFrame& frame) override { |
| 310 rst_stream_frame_ = frame; | 278 rst_stream_frame_ = frame; |
| 311 return true; | 279 return true; |
| 312 } | 280 } |
| 313 | 281 |
| 314 bool OnConnectionCloseFrame(const QuicConnectionCloseFrame& frame) override { | 282 bool OnConnectionCloseFrame(const QuicConnectionCloseFrame& frame) override { |
| 315 connection_close_frame_ = frame; | 283 connection_close_frame_ = frame; |
| 316 return true; | 284 return true; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 334 bool OnPathCloseFrame(const QuicPathCloseFrame& frame) override { | 302 bool OnPathCloseFrame(const QuicPathCloseFrame& frame) override { |
| 335 path_close_frame_ = frame; | 303 path_close_frame_ = frame; |
| 336 return true; | 304 return true; |
| 337 } | 305 } |
| 338 | 306 |
| 339 // Counters from the visitor_ callbacks. | 307 // Counters from the visitor_ callbacks. |
| 340 int error_count_; | 308 int error_count_; |
| 341 int version_mismatch_; | 309 int version_mismatch_; |
| 342 int packet_count_; | 310 int packet_count_; |
| 343 int frame_count_; | 311 int frame_count_; |
| 344 int fec_count_; | |
| 345 int complete_packets_; | 312 int complete_packets_; |
| 346 int revived_packets_; | |
| 347 bool accept_packet_; | 313 bool accept_packet_; |
| 348 bool accept_public_header_; | 314 bool accept_public_header_; |
| 349 | 315 |
| 350 scoped_ptr<QuicPacketHeader> header_; | 316 scoped_ptr<QuicPacketHeader> header_; |
| 351 scoped_ptr<QuicPacketPublicHeader> public_header_; | 317 scoped_ptr<QuicPacketPublicHeader> public_header_; |
| 352 scoped_ptr<QuicPublicResetPacket> public_reset_packet_; | 318 scoped_ptr<QuicPublicResetPacket> public_reset_packet_; |
| 353 scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_; | 319 scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_; |
| 354 vector<QuicStreamFrame*> stream_frames_; | 320 vector<QuicStreamFrame*> stream_frames_; |
| 355 vector<QuicAckFrame*> ack_frames_; | 321 vector<QuicAckFrame*> ack_frames_; |
| 356 vector<QuicStopWaitingFrame*> stop_waiting_frames_; | 322 vector<QuicStopWaitingFrame*> stop_waiting_frames_; |
| 357 vector<QuicPingFrame*> ping_frames_; | 323 vector<QuicPingFrame*> ping_frames_; |
| 358 string fec_protected_payload_; | |
| 359 QuicRstStreamFrame rst_stream_frame_; | 324 QuicRstStreamFrame rst_stream_frame_; |
| 360 QuicConnectionCloseFrame connection_close_frame_; | 325 QuicConnectionCloseFrame connection_close_frame_; |
| 361 QuicGoAwayFrame goaway_frame_; | 326 QuicGoAwayFrame goaway_frame_; |
| 362 QuicWindowUpdateFrame window_update_frame_; | 327 QuicWindowUpdateFrame window_update_frame_; |
| 363 QuicBlockedFrame blocked_frame_; | 328 QuicBlockedFrame blocked_frame_; |
| 364 QuicPathCloseFrame path_close_frame_; | 329 QuicPathCloseFrame path_close_frame_; |
| 365 vector<string*> stream_data_; | 330 vector<string*> stream_data_; |
| 366 vector<string> fec_data_redundancy_; | |
| 367 }; | 331 }; |
| 368 | 332 |
| 369 class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> { | 333 class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> { |
| 370 public: | 334 public: |
| 371 QuicFramerTest() | 335 QuicFramerTest() |
| 372 : encrypter_(new test::TestEncrypter()), | 336 : encrypter_(new test::TestEncrypter()), |
| 373 decrypter_(new test::TestDecrypter()), | 337 decrypter_(new test::TestDecrypter()), |
| 374 start_(QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(0x10))), | 338 start_(QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(0x10))), |
| 375 framer_(QuicSupportedVersions(), start_, Perspective::IS_SERVER) { | 339 framer_(QuicSupportedVersions(), start_, Perspective::IS_SERVER) { |
| 376 version_ = GetParam(); | 340 version_ = GetParam(); |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 474 expected_error = "Unable to read stream_id."; | 438 expected_error = "Unable to read stream_id."; |
| 475 } else if (i < kQuicFrameTypeSize + stream_id_size + | 439 } else if (i < kQuicFrameTypeSize + stream_id_size + |
| 476 kQuicMaxStreamOffsetSize) { | 440 kQuicMaxStreamOffsetSize) { |
| 477 expected_error = "Unable to read offset."; | 441 expected_error = "Unable to read offset."; |
| 478 } else { | 442 } else { |
| 479 expected_error = "Unable to read frame data."; | 443 expected_error = "Unable to read frame data."; |
| 480 } | 444 } |
| 481 CheckProcessingFails( | 445 CheckProcessingFails( |
| 482 packet, | 446 packet, |
| 483 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, include_version, | 447 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, include_version, |
| 484 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 448 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
| 485 NOT_IN_FEC_GROUP), | |
| 486 expected_error, QUIC_INVALID_STREAM_DATA); | 449 expected_error, QUIC_INVALID_STREAM_DATA); |
| 487 } | 450 } |
| 488 } | 451 } |
| 489 | 452 |
| 490 void CheckCalculatePacketNumber(QuicPacketNumber expected_packet_number, | 453 void CheckCalculatePacketNumber(QuicPacketNumber expected_packet_number, |
| 491 QuicPacketNumber last_packet_number) { | 454 QuicPacketNumber last_packet_number) { |
| 492 QuicPacketNumber wire_packet_number = expected_packet_number & kMask; | 455 QuicPacketNumber wire_packet_number = expected_packet_number & kMask; |
| 493 QuicFramerPeer::SetLastPacketNumber(&framer_, last_packet_number); | 456 QuicFramerPeer::SetLastPacketNumber(&framer_, last_packet_number); |
| 494 EXPECT_EQ( | 457 EXPECT_EQ( |
| 495 expected_packet_number, | 458 expected_packet_number, |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 641 // connection_id | 604 // connection_id |
| 642 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 605 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 643 // packet number | 606 // packet number |
| 644 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | 607 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 645 // private flags | 608 // private flags |
| 646 0x00, | 609 0x00, |
| 647 }; | 610 }; |
| 648 | 611 |
| 649 memset(packet + GetPacketHeaderSize( | 612 memset(packet + GetPacketHeaderSize( |
| 650 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, !kIncludePathId, | 613 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, !kIncludePathId, |
| 651 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), 0, | 614 PACKET_6BYTE_PACKET_NUMBER), 0, |
| 652 kMaxPacketSize - GetPacketHeaderSize( | 615 kMaxPacketSize - GetPacketHeaderSize( |
| 653 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, !kIncludePathId, | 616 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, !kIncludePathId, |
| 654 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP) + 1); | 617 PACKET_6BYTE_PACKET_NUMBER) + 1); |
| 655 // clang-format on | 618 // clang-format on |
| 656 | 619 |
| 657 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 620 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 658 EXPECT_DFATAL(framer_.ProcessPacket(encrypted), "Packet too large:1"); | 621 EXPECT_DFATAL(framer_.ProcessPacket(encrypted), "Packet too large:1"); |
| 659 | 622 |
| 660 ASSERT_TRUE(visitor_.header_.get()); | 623 ASSERT_TRUE(visitor_.header_.get()); |
| 661 // Make sure we've parsed the packet header, so we can send an error. | 624 // Make sure we've parsed the packet header, so we can send an error. |
| 662 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | 625 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); |
| 663 // Make sure the correct error is propagated. | 626 // Make sure the correct error is propagated. |
| 664 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); | 627 EXPECT_EQ(QUIC_PACKET_TOO_LARGE, framer_.error()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 689 EXPECT_FALSE(visitor_.header_->fec_flag); | 652 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 690 EXPECT_FALSE(visitor_.header_->entropy_flag); | 653 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 691 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 654 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 692 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 655 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 693 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 656 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 694 EXPECT_EQ(0u, visitor_.header_->fec_group); | 657 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 695 | 658 |
| 696 // Now test framing boundaries. | 659 // Now test framing boundaries. |
| 697 for (size_t i = 0; | 660 for (size_t i = 0; |
| 698 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 661 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 699 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 662 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); |
| 700 NOT_IN_FEC_GROUP); | |
| 701 ++i) { | 663 ++i) { |
| 702 string expected_error; | 664 string expected_error; |
| 703 if (i < kConnectionIdOffset) { | 665 if (i < kConnectionIdOffset) { |
| 704 expected_error = "Unable to read public flags."; | 666 expected_error = "Unable to read public flags."; |
| 705 } else if (i < GetPacketNumberOffset(!kIncludeVersion, !kIncludePathId)) { | 667 } else if (i < GetPacketNumberOffset(!kIncludeVersion, !kIncludePathId)) { |
| 706 expected_error = "Unable to read ConnectionId."; | 668 expected_error = "Unable to read ConnectionId."; |
| 707 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, !kIncludePathId)) { | 669 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, !kIncludePathId)) { |
| 708 expected_error = "Unable to read packet number."; | 670 expected_error = "Unable to read packet number."; |
| 709 } else if (i < GetFecGroupOffset(!kIncludeVersion, !kIncludePathId)) { | 671 } else { |
| 710 expected_error = "Unable to read private flags."; | 672 expected_error = "Unable to read private flags."; |
| 711 } else { | |
| 712 expected_error = "Unable to read first fec protected packet offset."; | |
| 713 } | 673 } |
| 714 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 674 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 715 } | 675 } |
| 716 } | 676 } |
| 717 | 677 |
| 718 TEST_P(QuicFramerTest, PacketHeaderWith4ByteConnectionId) { | 678 TEST_P(QuicFramerTest, PacketHeaderWith4ByteConnectionId) { |
| 719 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); | 679 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); |
| 720 | 680 |
| 721 // clang-format off | 681 // clang-format off |
| 722 unsigned char packet[] = { | 682 unsigned char packet[] = { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 742 EXPECT_FALSE(visitor_.header_->fec_flag); | 702 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 743 EXPECT_FALSE(visitor_.header_->entropy_flag); | 703 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 744 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 704 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 745 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 705 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 746 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 706 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 747 EXPECT_EQ(0u, visitor_.header_->fec_group); | 707 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 748 | 708 |
| 749 // Now test framing boundaries. | 709 // Now test framing boundaries. |
| 750 for (size_t i = 0; | 710 for (size_t i = 0; |
| 751 i < GetPacketHeaderSize(PACKET_4BYTE_CONNECTION_ID, !kIncludeVersion, | 711 i < GetPacketHeaderSize(PACKET_4BYTE_CONNECTION_ID, !kIncludeVersion, |
| 752 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 712 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); |
| 753 NOT_IN_FEC_GROUP); | |
| 754 ++i) { | 713 ++i) { |
| 755 string expected_error; | 714 string expected_error; |
| 756 if (i < kConnectionIdOffset) { | 715 if (i < kConnectionIdOffset) { |
| 757 expected_error = "Unable to read public flags."; | 716 expected_error = "Unable to read public flags."; |
| 758 } else if (i < GetPacketNumberOffset(PACKET_4BYTE_CONNECTION_ID, | 717 } else if (i < GetPacketNumberOffset(PACKET_4BYTE_CONNECTION_ID, |
| 759 !kIncludeVersion, !kIncludePathId)) { | 718 !kIncludeVersion, !kIncludePathId)) { |
| 760 expected_error = "Unable to read ConnectionId."; | 719 expected_error = "Unable to read ConnectionId."; |
| 761 } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_CONNECTION_ID, | 720 } else if (i < GetPrivateFlagsOffset(PACKET_4BYTE_CONNECTION_ID, |
| 762 !kIncludeVersion, !kIncludePathId)) { | 721 !kIncludeVersion, !kIncludePathId)) { |
| 763 expected_error = "Unable to read packet number."; | 722 expected_error = "Unable to read packet number."; |
| 764 } else if (i < GetFecGroupOffset(PACKET_4BYTE_CONNECTION_ID, | 723 } else { |
| 765 !kIncludeVersion, !kIncludePathId)) { | |
| 766 expected_error = "Unable to read private flags."; | 724 expected_error = "Unable to read private flags."; |
| 767 } else { | |
| 768 expected_error = "Unable to read first fec protected packet offset."; | |
| 769 } | 725 } |
| 770 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 726 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 771 } | 727 } |
| 772 } | 728 } |
| 773 | 729 |
| 774 TEST_P(QuicFramerTest, PacketHeader1ByteConnectionId) { | 730 TEST_P(QuicFramerTest, PacketHeader1ByteConnectionId) { |
| 775 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); | 731 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); |
| 776 | 732 |
| 777 // clang-format off | 733 // clang-format off |
| 778 unsigned char packet[] = { | 734 unsigned char packet[] = { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 798 EXPECT_FALSE(visitor_.header_->fec_flag); | 754 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 799 EXPECT_FALSE(visitor_.header_->entropy_flag); | 755 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 800 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 756 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 801 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 757 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 802 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 758 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 803 EXPECT_EQ(0u, visitor_.header_->fec_group); | 759 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 804 | 760 |
| 805 // Now test framing boundaries. | 761 // Now test framing boundaries. |
| 806 for (size_t i = 0; | 762 for (size_t i = 0; |
| 807 i < GetPacketHeaderSize(PACKET_1BYTE_CONNECTION_ID, !kIncludeVersion, | 763 i < GetPacketHeaderSize(PACKET_1BYTE_CONNECTION_ID, !kIncludeVersion, |
| 808 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 764 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); |
| 809 NOT_IN_FEC_GROUP); | |
| 810 ++i) { | 765 ++i) { |
| 811 string expected_error; | 766 string expected_error; |
| 812 if (i < kConnectionIdOffset) { | 767 if (i < kConnectionIdOffset) { |
| 813 expected_error = "Unable to read public flags."; | 768 expected_error = "Unable to read public flags."; |
| 814 } else if (i < GetPacketNumberOffset(PACKET_1BYTE_CONNECTION_ID, | 769 } else if (i < GetPacketNumberOffset(PACKET_1BYTE_CONNECTION_ID, |
| 815 !kIncludeVersion, !kIncludePathId)) { | 770 !kIncludeVersion, !kIncludePathId)) { |
| 816 expected_error = "Unable to read ConnectionId."; | 771 expected_error = "Unable to read ConnectionId."; |
| 817 } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_CONNECTION_ID, | 772 } else if (i < GetPrivateFlagsOffset(PACKET_1BYTE_CONNECTION_ID, |
| 818 !kIncludeVersion, !kIncludePathId)) { | 773 !kIncludeVersion, !kIncludePathId)) { |
| 819 expected_error = "Unable to read packet number."; | 774 expected_error = "Unable to read packet number."; |
| 820 } else if (i < GetFecGroupOffset(PACKET_1BYTE_CONNECTION_ID, | 775 } else { |
| 821 !kIncludeVersion, !kIncludePathId)) { | |
| 822 expected_error = "Unable to read private flags."; | 776 expected_error = "Unable to read private flags."; |
| 823 } else { | |
| 824 expected_error = "Unable to read first fec protected packet offset."; | |
| 825 } | 777 } |
| 826 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 778 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 827 } | 779 } |
| 828 } | 780 } |
| 829 | 781 |
| 830 TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) { | 782 TEST_P(QuicFramerTest, PacketHeaderWith0ByteConnectionId) { |
| 831 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); | 783 QuicFramerPeer::SetLastSerializedConnectionId(&framer_, kConnectionId); |
| 832 | 784 |
| 833 // clang-format off | 785 // clang-format off |
| 834 unsigned char packet[] = { | 786 unsigned char packet[] = { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 854 EXPECT_FALSE(visitor_.header_->fec_flag); | 806 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 855 EXPECT_FALSE(visitor_.header_->entropy_flag); | 807 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 856 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 808 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 857 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 809 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 858 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 810 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 859 EXPECT_EQ(0u, visitor_.header_->fec_group); | 811 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 860 | 812 |
| 861 // Now test framing boundaries. | 813 // Now test framing boundaries. |
| 862 for (size_t i = 0; | 814 for (size_t i = 0; |
| 863 i < GetPacketHeaderSize(PACKET_0BYTE_CONNECTION_ID, !kIncludeVersion, | 815 i < GetPacketHeaderSize(PACKET_0BYTE_CONNECTION_ID, !kIncludeVersion, |
| 864 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 816 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); |
| 865 NOT_IN_FEC_GROUP); | |
| 866 ++i) { | 817 ++i) { |
| 867 string expected_error; | 818 string expected_error; |
| 868 if (i < kConnectionIdOffset) { | 819 if (i < kConnectionIdOffset) { |
| 869 expected_error = "Unable to read public flags."; | 820 expected_error = "Unable to read public flags."; |
| 870 } else if (i < GetPacketNumberOffset(PACKET_0BYTE_CONNECTION_ID, | 821 } else if (i < GetPacketNumberOffset(PACKET_0BYTE_CONNECTION_ID, |
| 871 !kIncludeVersion, !kIncludePathId)) { | 822 !kIncludeVersion, !kIncludePathId)) { |
| 872 expected_error = "Unable to read ConnectionId."; | 823 expected_error = "Unable to read ConnectionId."; |
| 873 } else if (i < GetPrivateFlagsOffset(PACKET_0BYTE_CONNECTION_ID, | 824 } else if (i < GetPrivateFlagsOffset(PACKET_0BYTE_CONNECTION_ID, |
| 874 !kIncludeVersion, !kIncludePathId)) { | 825 !kIncludeVersion, !kIncludePathId)) { |
| 875 expected_error = "Unable to read packet number."; | 826 expected_error = "Unable to read packet number."; |
| 876 } else if (i < GetFecGroupOffset(PACKET_0BYTE_CONNECTION_ID, | 827 } else { |
| 877 !kIncludeVersion, !kIncludePathId)) { | |
| 878 expected_error = "Unable to read private flags."; | 828 expected_error = "Unable to read private flags."; |
| 879 } else { | |
| 880 expected_error = "Unable to read first fec protected packet offset."; | |
| 881 } | 829 } |
| 882 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 830 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 883 } | 831 } |
| 884 } | 832 } |
| 885 | 833 |
| 886 TEST_P(QuicFramerTest, PacketHeaderWithVersionFlag) { | 834 TEST_P(QuicFramerTest, PacketHeaderWithVersionFlag) { |
| 887 // clang-format off | 835 // clang-format off |
| 888 unsigned char packet[] = { | 836 unsigned char packet[] = { |
| 889 // public flags (version) | 837 // public flags (version) |
| 890 0x3D, | 838 0x3D, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 911 EXPECT_FALSE(visitor_.header_->fec_flag); | 859 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 912 EXPECT_FALSE(visitor_.header_->entropy_flag); | 860 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 913 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 861 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 914 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 862 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 915 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 863 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 916 EXPECT_EQ(0u, visitor_.header_->fec_group); | 864 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 917 | 865 |
| 918 // Now test framing boundaries. | 866 // Now test framing boundaries. |
| 919 for (size_t i = 0; | 867 for (size_t i = 0; |
| 920 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, | 868 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, |
| 921 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 869 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); |
| 922 NOT_IN_FEC_GROUP); | |
| 923 ++i) { | 870 ++i) { |
| 924 string expected_error; | 871 string expected_error; |
| 925 if (i < kConnectionIdOffset) { | 872 if (i < kConnectionIdOffset) { |
| 926 expected_error = "Unable to read public flags."; | 873 expected_error = "Unable to read public flags."; |
| 927 } else if (i < kVersionOffset) { | 874 } else if (i < kVersionOffset) { |
| 928 expected_error = "Unable to read ConnectionId."; | 875 expected_error = "Unable to read ConnectionId."; |
| 929 } else if (i < GetPacketNumberOffset(kIncludeVersion, !kIncludePathId)) { | 876 } else if (i < GetPacketNumberOffset(kIncludeVersion, !kIncludePathId)) { |
| 930 expected_error = "Unable to read protocol version."; | 877 expected_error = "Unable to read protocol version."; |
| 931 } else if (i < GetPrivateFlagsOffset(kIncludeVersion, !kIncludePathId)) { | 878 } else if (i < GetPrivateFlagsOffset(kIncludeVersion, !kIncludePathId)) { |
| 932 expected_error = "Unable to read packet number."; | 879 expected_error = "Unable to read packet number."; |
| 933 } else if (i < GetFecGroupOffset(kIncludeVersion, !kIncludePathId)) { | 880 } else { |
| 934 expected_error = "Unable to read private flags."; | 881 expected_error = "Unable to read private flags."; |
| 935 } else { | |
| 936 expected_error = "Unable to read first fec protected packet offset."; | |
| 937 } | 882 } |
| 938 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 883 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 939 } | 884 } |
| 940 } | 885 } |
| 941 | 886 |
| 942 TEST_P(QuicFramerTest, PacketHeaderWithMultipathFlag) { | 887 TEST_P(QuicFramerTest, PacketHeaderWithMultipathFlag) { |
| 943 // clang-format off | 888 // clang-format off |
| 944 unsigned char packet[] = { | 889 unsigned char packet[] = { |
| 945 // public flags (version) | 890 // public flags (version) |
| 946 0x7C, | 891 0x7C, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 968 EXPECT_FALSE(visitor_.header_->entropy_flag); | 913 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 969 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 914 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 970 EXPECT_EQ(kPathId, visitor_.header_->path_id); | 915 EXPECT_EQ(kPathId, visitor_.header_->path_id); |
| 971 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 916 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 972 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 917 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 973 EXPECT_EQ(0u, visitor_.header_->fec_group); | 918 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 974 | 919 |
| 975 // Now test framing boundaries. | 920 // Now test framing boundaries. |
| 976 for (size_t i = 0; | 921 for (size_t i = 0; |
| 977 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 922 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 978 kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 923 kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); |
| 979 NOT_IN_FEC_GROUP); | |
| 980 ++i) { | 924 ++i) { |
| 981 string expected_error; | 925 string expected_error; |
| 982 if (i < kConnectionIdOffset) { | 926 if (i < kConnectionIdOffset) { |
| 983 expected_error = "Unable to read public flags."; | 927 expected_error = "Unable to read public flags."; |
| 984 } else if (i < | 928 } else if (i < |
| 985 GetPathIdOffset(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion)) { | 929 GetPathIdOffset(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion)) { |
| 986 expected_error = "Unable to read ConnectionId."; | 930 expected_error = "Unable to read ConnectionId."; |
| 987 } else if (i < GetPacketNumberOffset(!kIncludeVersion, kIncludePathId)) { | 931 } else if (i < GetPacketNumberOffset(!kIncludeVersion, kIncludePathId)) { |
| 988 expected_error = "Unable to read path id."; | 932 expected_error = "Unable to read path id."; |
| 989 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, kIncludePathId)) { | 933 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, kIncludePathId)) { |
| 990 expected_error = "Unable to read packet number."; | 934 expected_error = "Unable to read packet number."; |
| 991 } else if (i < GetFecGroupOffset(!kIncludeVersion, kIncludePathId)) { | 935 } else { |
| 992 expected_error = "Unable to read private flags."; | 936 expected_error = "Unable to read private flags."; |
| 993 } else { | |
| 994 expected_error = "Unable to read first fec protected packet offset."; | |
| 995 } | 937 } |
| 996 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 938 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 997 } | 939 } |
| 998 } | 940 } |
| 999 | 941 |
| 1000 TEST_P(QuicFramerTest, PacketHeaderWithBothVersionFlagAndMultipathFlag) { | 942 TEST_P(QuicFramerTest, PacketHeaderWithBothVersionFlagAndMultipathFlag) { |
| 1001 // clang-format off | 943 // clang-format off |
| 1002 unsigned char packet[] = { | 944 unsigned char packet[] = { |
| 1003 // public flags (version) | 945 // public flags (version) |
| 1004 0x7D, | 946 0x7D, |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1029 EXPECT_FALSE(visitor_.header_->entropy_flag); | 971 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 1030 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 972 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 1031 EXPECT_EQ(kPathId, visitor_.header_->path_id); | 973 EXPECT_EQ(kPathId, visitor_.header_->path_id); |
| 1032 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 974 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 1033 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 975 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 1034 EXPECT_EQ(0u, visitor_.header_->fec_group); | 976 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 1035 | 977 |
| 1036 // Now test framing boundaries. | 978 // Now test framing boundaries. |
| 1037 for (size_t i = 0; | 979 for (size_t i = 0; |
| 1038 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 980 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 1039 kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 981 kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); |
| 1040 NOT_IN_FEC_GROUP); | |
| 1041 ++i) { | 982 ++i) { |
| 1042 string expected_error; | 983 string expected_error; |
| 1043 if (i < kConnectionIdOffset) { | 984 if (i < kConnectionIdOffset) { |
| 1044 expected_error = "Unable to read public flags."; | 985 expected_error = "Unable to read public flags."; |
| 1045 } else if (i < kVersionOffset) { | 986 } else if (i < kVersionOffset) { |
| 1046 expected_error = "Unable to read ConnectionId."; | 987 expected_error = "Unable to read ConnectionId."; |
| 1047 } else if (i < | 988 } else if (i < |
| 1048 GetPathIdOffset(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion)) { | 989 GetPathIdOffset(PACKET_8BYTE_CONNECTION_ID, kIncludeVersion)) { |
| 1049 expected_error = "Unable to read protocol version."; | 990 expected_error = "Unable to read protocol version."; |
| 1050 } else if (i < GetPacketNumberOffset(kIncludeVersion, kIncludePathId)) { | 991 } else if (i < GetPacketNumberOffset(kIncludeVersion, kIncludePathId)) { |
| 1051 expected_error = "Unable to read path id."; | 992 expected_error = "Unable to read path id."; |
| 1052 } else if (i < GetPrivateFlagsOffset(kIncludeVersion, kIncludePathId)) { | 993 } else if (i < GetPrivateFlagsOffset(kIncludeVersion, kIncludePathId)) { |
| 1053 expected_error = "Unable to read packet number."; | 994 expected_error = "Unable to read packet number."; |
| 1054 } else if (i < GetFecGroupOffset(kIncludeVersion, kIncludePathId)) { | 995 } else { |
| 1055 expected_error = "Unable to read private flags."; | 996 expected_error = "Unable to read private flags."; |
| 1056 } else { | |
| 1057 expected_error = "Unable to read first fec protected packet offset."; | |
| 1058 } | 997 } |
| 1059 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 998 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 1060 } | 999 } |
| 1061 } | 1000 } |
| 1062 | 1001 |
| 1063 TEST_P(QuicFramerTest, PacketHeaderWithPathChange) { | 1002 TEST_P(QuicFramerTest, PacketHeaderWithPathChange) { |
| 1064 // Packet 1 from path 0x42. | 1003 // Packet 1 from path 0x42. |
| 1065 // clang-format off | 1004 // clang-format off |
| 1066 unsigned char packet1[] = { | 1005 unsigned char packet1[] = { |
| 1067 // public flags (version) | 1006 // public flags (version) |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1194 EXPECT_FALSE(visitor_.header_->fec_flag); | 1133 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 1195 EXPECT_FALSE(visitor_.header_->entropy_flag); | 1134 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 1196 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 1135 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 1197 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 1136 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 1198 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1137 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 1199 EXPECT_EQ(0u, visitor_.header_->fec_group); | 1138 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 1200 | 1139 |
| 1201 // Now test framing boundaries. | 1140 // Now test framing boundaries. |
| 1202 for (size_t i = 0; | 1141 for (size_t i = 0; |
| 1203 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1142 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 1204 !kIncludePathId, PACKET_4BYTE_PACKET_NUMBER, | 1143 !kIncludePathId, PACKET_4BYTE_PACKET_NUMBER); |
| 1205 NOT_IN_FEC_GROUP); | |
| 1206 ++i) { | 1144 ++i) { |
| 1207 string expected_error; | 1145 string expected_error; |
| 1208 if (i < kConnectionIdOffset) { | 1146 if (i < kConnectionIdOffset) { |
| 1209 expected_error = "Unable to read public flags."; | 1147 expected_error = "Unable to read public flags."; |
| 1210 } else if (i < GetPacketNumberOffset(!kIncludeVersion, !kIncludePathId)) { | 1148 } else if (i < GetPacketNumberOffset(!kIncludeVersion, !kIncludePathId)) { |
| 1211 expected_error = "Unable to read ConnectionId."; | 1149 expected_error = "Unable to read ConnectionId."; |
| 1212 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, !kIncludePathId, | 1150 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, !kIncludePathId, |
| 1213 PACKET_4BYTE_PACKET_NUMBER)) { | 1151 PACKET_4BYTE_PACKET_NUMBER)) { |
| 1214 expected_error = "Unable to read packet number."; | 1152 expected_error = "Unable to read packet number."; |
| 1215 } else if (i < GetFecGroupOffset(!kIncludeVersion, !kIncludePathId, | 1153 } else { |
| 1216 PACKET_4BYTE_PACKET_NUMBER)) { | |
| 1217 expected_error = "Unable to read private flags."; | 1154 expected_error = "Unable to read private flags."; |
| 1218 } else { | |
| 1219 expected_error = "Unable to read first fec protected packet offset."; | |
| 1220 } | 1155 } |
| 1221 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 1156 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 1222 } | 1157 } |
| 1223 } | 1158 } |
| 1224 | 1159 |
| 1225 TEST_P(QuicFramerTest, PacketHeaderWith2BytePacketNumber) { | 1160 TEST_P(QuicFramerTest, PacketHeaderWith2BytePacketNumber) { |
| 1226 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); | 1161 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); |
| 1227 | 1162 |
| 1228 // clang-format off | 1163 // clang-format off |
| 1229 unsigned char packet[] = { | 1164 unsigned char packet[] = { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1249 EXPECT_FALSE(visitor_.header_->fec_flag); | 1184 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 1250 EXPECT_FALSE(visitor_.header_->entropy_flag); | 1185 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 1251 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 1186 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 1252 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 1187 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 1253 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1188 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 1254 EXPECT_EQ(0u, visitor_.header_->fec_group); | 1189 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 1255 | 1190 |
| 1256 // Now test framing boundaries. | 1191 // Now test framing boundaries. |
| 1257 for (size_t i = 0; | 1192 for (size_t i = 0; |
| 1258 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1193 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 1259 !kIncludePathId, PACKET_2BYTE_PACKET_NUMBER, | 1194 !kIncludePathId, PACKET_2BYTE_PACKET_NUMBER); |
| 1260 NOT_IN_FEC_GROUP); | |
| 1261 ++i) { | 1195 ++i) { |
| 1262 string expected_error; | 1196 string expected_error; |
| 1263 if (i < kConnectionIdOffset) { | 1197 if (i < kConnectionIdOffset) { |
| 1264 expected_error = "Unable to read public flags."; | 1198 expected_error = "Unable to read public flags."; |
| 1265 } else if (i < GetPacketNumberOffset(!kIncludeVersion, !kIncludePathId)) { | 1199 } else if (i < GetPacketNumberOffset(!kIncludeVersion, !kIncludePathId)) { |
| 1266 expected_error = "Unable to read ConnectionId."; | 1200 expected_error = "Unable to read ConnectionId."; |
| 1267 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, !kIncludePathId, | 1201 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, !kIncludePathId, |
| 1268 PACKET_2BYTE_PACKET_NUMBER)) { | 1202 PACKET_2BYTE_PACKET_NUMBER)) { |
| 1269 expected_error = "Unable to read packet number."; | 1203 expected_error = "Unable to read packet number."; |
| 1270 } else if (i < GetFecGroupOffset(!kIncludeVersion, !kIncludePathId, | 1204 } else { |
| 1271 PACKET_2BYTE_PACKET_NUMBER)) { | |
| 1272 expected_error = "Unable to read private flags."; | 1205 expected_error = "Unable to read private flags."; |
| 1273 } else { | |
| 1274 expected_error = "Unable to read first fec protected packet offset."; | |
| 1275 } | 1206 } |
| 1276 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 1207 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 1277 } | 1208 } |
| 1278 } | 1209 } |
| 1279 | 1210 |
| 1280 TEST_P(QuicFramerTest, PacketHeaderWith1BytePacketNumber) { | 1211 TEST_P(QuicFramerTest, PacketHeaderWith1BytePacketNumber) { |
| 1281 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); | 1212 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); |
| 1282 | 1213 |
| 1283 // clang-format off | 1214 // clang-format off |
| 1284 unsigned char packet[] = { | 1215 unsigned char packet[] = { |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1304 EXPECT_FALSE(visitor_.header_->fec_flag); | 1235 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 1305 EXPECT_FALSE(visitor_.header_->entropy_flag); | 1236 EXPECT_FALSE(visitor_.header_->entropy_flag); |
| 1306 EXPECT_EQ(0, visitor_.header_->entropy_hash); | 1237 EXPECT_EQ(0, visitor_.header_->entropy_hash); |
| 1307 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | 1238 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); |
| 1308 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1239 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
| 1309 EXPECT_EQ(0u, visitor_.header_->fec_group); | 1240 EXPECT_EQ(0u, visitor_.header_->fec_group); |
| 1310 | 1241 |
| 1311 // Now test framing boundaries. | 1242 // Now test framing boundaries. |
| 1312 for (size_t i = 0; | 1243 for (size_t i = 0; |
| 1313 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1244 i < GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 1314 !kIncludePathId, PACKET_1BYTE_PACKET_NUMBER, | 1245 !kIncludePathId, PACKET_1BYTE_PACKET_NUMBER); |
| 1315 NOT_IN_FEC_GROUP); | |
| 1316 ++i) { | 1246 ++i) { |
| 1317 string expected_error; | 1247 string expected_error; |
| 1318 if (i < kConnectionIdOffset) { | 1248 if (i < kConnectionIdOffset) { |
| 1319 expected_error = "Unable to read public flags."; | 1249 expected_error = "Unable to read public flags."; |
| 1320 } else if (i < GetPacketNumberOffset(!kIncludeVersion, !kIncludePathId)) { | 1250 } else if (i < GetPacketNumberOffset(!kIncludeVersion, !kIncludePathId)) { |
| 1321 expected_error = "Unable to read ConnectionId."; | 1251 expected_error = "Unable to read ConnectionId."; |
| 1322 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, !kIncludePathId, | 1252 } else if (i < GetPrivateFlagsOffset(!kIncludeVersion, !kIncludePathId, |
| 1323 PACKET_1BYTE_PACKET_NUMBER)) { | 1253 PACKET_1BYTE_PACKET_NUMBER)) { |
| 1324 expected_error = "Unable to read packet number."; | 1254 expected_error = "Unable to read packet number."; |
| 1325 } else if (i < GetFecGroupOffset(!kIncludeVersion, !kIncludePathId, | 1255 } else { |
| 1326 PACKET_1BYTE_PACKET_NUMBER)) { | |
| 1327 expected_error = "Unable to read private flags."; | 1256 expected_error = "Unable to read private flags."; |
| 1328 } else { | |
| 1329 expected_error = "Unable to read first fec protected packet offset."; | |
| 1330 } | 1257 } |
| 1331 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); | 1258 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); |
| 1332 } | 1259 } |
| 1333 } | 1260 } |
| 1334 | 1261 |
| 1335 TEST_P(QuicFramerTest, InvalidPublicFlag) { | 1262 TEST_P(QuicFramerTest, InvalidPublicFlag) { |
| 1336 // clang-format off | 1263 // clang-format off |
| 1337 unsigned char packet[] = { | 1264 unsigned char packet[] = { |
| 1338 // public flags: all flags set but the public reset flag and version flag. | 1265 // public flags: all flags set but the public reset flag and version flag. |
| 1339 0xFC, | 1266 0xFC, |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1497 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1424 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1498 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1425 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1499 ASSERT_TRUE(visitor_.header_.get()); | 1426 ASSERT_TRUE(visitor_.header_.get()); |
| 1500 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId)); | 1427 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId)); |
| 1501 | 1428 |
| 1502 ASSERT_EQ(0u, visitor_.stream_frames_.size()); | 1429 ASSERT_EQ(0u, visitor_.stream_frames_.size()); |
| 1503 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1430 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
| 1504 // A packet with no frames is not acceptable. | 1431 // A packet with no frames is not acceptable. |
| 1505 CheckProcessingFails( | 1432 CheckProcessingFails( |
| 1506 packet, GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1433 packet, GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 1507 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 1434 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
| 1508 NOT_IN_FEC_GROUP), | |
| 1509 "Packet has no frames.", QUIC_MISSING_PAYLOAD); | 1435 "Packet has no frames.", QUIC_MISSING_PAYLOAD); |
| 1510 } | 1436 } |
| 1511 | 1437 |
| 1512 TEST_P(QuicFramerTest, StreamFrame) { | 1438 TEST_P(QuicFramerTest, StreamFrame) { |
| 1513 // clang-format off | 1439 // clang-format off |
| 1514 unsigned char packet[] = { | 1440 unsigned char packet[] = { |
| 1515 // public flags (8 byte connection_id) | 1441 // public flags (8 byte connection_id) |
| 1516 0x3C, | 1442 0x3C, |
| 1517 // connection_id | 1443 // connection_id |
| 1518 0x10, 0x32, 0x54, 0x76, | 1444 0x10, 0x32, 0x54, 0x76, |
| (...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1816 // clang-format on | 1742 // clang-format on |
| 1817 | 1743 |
| 1818 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1744 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 1819 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1745 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 1820 | 1746 |
| 1821 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1747 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 1822 ASSERT_TRUE(visitor_.public_header_.get()); | 1748 ASSERT_TRUE(visitor_.public_header_.get()); |
| 1823 ASSERT_FALSE(visitor_.header_.get()); | 1749 ASSERT_FALSE(visitor_.header_.get()); |
| 1824 } | 1750 } |
| 1825 | 1751 |
| 1826 TEST_P(QuicFramerTest, RevivedStreamFrame) { | |
| 1827 // clang-format off | |
| 1828 unsigned char payload[] = { | |
| 1829 // frame type (stream frame with fin) | |
| 1830 0xFF, | |
| 1831 // stream id | |
| 1832 0x04, 0x03, 0x02, 0x01, | |
| 1833 // offset | |
| 1834 0x54, 0x76, 0x10, 0x32, | |
| 1835 0xDC, 0xFE, 0x98, 0xBA, | |
| 1836 // data length | |
| 1837 0x0c, 0x00, | |
| 1838 // data | |
| 1839 'h', 'e', 'l', 'l', | |
| 1840 'o', ' ', 'w', 'o', | |
| 1841 'r', 'l', 'd', '!', | |
| 1842 }; | |
| 1843 // clang-format on | |
| 1844 | |
| 1845 QuicPacketHeader header; | |
| 1846 header.public_header.connection_id = kConnectionId; | |
| 1847 header.public_header.reset_flag = false; | |
| 1848 header.public_header.version_flag = false; | |
| 1849 header.fec_flag = true; | |
| 1850 header.entropy_flag = true; | |
| 1851 header.packet_number = kPacketNumber; | |
| 1852 header.fec_group = 0; | |
| 1853 | |
| 1854 // Do not encrypt the payload because the revived payload is post-encryption. | |
| 1855 EXPECT_TRUE(framer_.ProcessRevivedPacket( | |
| 1856 &header, StringPiece(AsChars(payload), arraysize(payload)))); | |
| 1857 | |
| 1858 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
| 1859 ASSERT_EQ(1, visitor_.revived_packets_); | |
| 1860 ASSERT_TRUE(visitor_.header_.get()); | |
| 1861 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); | |
| 1862 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); | |
| 1863 EXPECT_FALSE(visitor_.header_->public_header.version_flag); | |
| 1864 EXPECT_TRUE(visitor_.header_->fec_flag); | |
| 1865 EXPECT_TRUE(visitor_.header_->entropy_flag); | |
| 1866 EXPECT_EQ(1 << (header.packet_number % 8), visitor_.header_->entropy_hash); | |
| 1867 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); | |
| 1868 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | |
| 1869 EXPECT_EQ(0u, visitor_.header_->fec_group); | |
| 1870 | |
| 1871 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | |
| 1872 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | |
| 1873 EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); | |
| 1874 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | |
| 1875 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); | |
| 1876 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | |
| 1877 } | |
| 1878 | |
| 1879 TEST_P(QuicFramerTest, StreamFrameInFecGroup) { | |
| 1880 // clang-format off | |
| 1881 unsigned char packet[] = { | |
| 1882 // public flags (8 byte connection_id) | |
| 1883 0x3C, | |
| 1884 // connection_id | |
| 1885 0x10, 0x32, 0x54, 0x76, | |
| 1886 0x98, 0xBA, 0xDC, 0xFE, | |
| 1887 // packet number | |
| 1888 0xBC, 0x9A, 0x78, 0x56, | |
| 1889 0x34, 0x12, | |
| 1890 // private flags (fec group) | |
| 1891 0x02, | |
| 1892 // first fec protected packet offset | |
| 1893 0x02, | |
| 1894 | |
| 1895 // frame type (stream frame with fin) | |
| 1896 0xFF, | |
| 1897 // stream id | |
| 1898 0x04, 0x03, 0x02, 0x01, | |
| 1899 // offset | |
| 1900 0x54, 0x76, 0x10, 0x32, | |
| 1901 0xDC, 0xFE, 0x98, 0xBA, | |
| 1902 // data length | |
| 1903 0x0c, 0x00, | |
| 1904 // data | |
| 1905 'h', 'e', 'l', 'l', | |
| 1906 'o', ' ', 'w', 'o', | |
| 1907 'r', 'l', 'd', '!', | |
| 1908 }; | |
| 1909 // clang-format on | |
| 1910 | |
| 1911 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
| 1912 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
| 1913 | |
| 1914 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
| 1915 ASSERT_TRUE(visitor_.header_.get()); | |
| 1916 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId)); | |
| 1917 EXPECT_EQ(IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | |
| 1918 EXPECT_EQ(kPacketNumber - 2, visitor_.header_->fec_group); | |
| 1919 const size_t fec_offset = | |
| 1920 GetStartOfFecProtectedData(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | |
| 1921 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); | |
| 1922 EXPECT_EQ( | |
| 1923 string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset), | |
| 1924 visitor_.fec_protected_payload_); | |
| 1925 | |
| 1926 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | |
| 1927 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | |
| 1928 EXPECT_EQ(kStreamId, visitor_.stream_frames_[0]->stream_id); | |
| 1929 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | |
| 1930 EXPECT_EQ(kStreamOffset, visitor_.stream_frames_[0]->offset); | |
| 1931 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | |
| 1932 } | |
| 1933 | |
| 1934 TEST_P(QuicFramerTest, AckFrameTwoTimestamp) { | 1752 TEST_P(QuicFramerTest, AckFrameTwoTimestamp) { |
| 1935 // clang-format off | 1753 // clang-format off |
| 1936 unsigned char packet[] = { | 1754 unsigned char packet[] = { |
| 1937 // public flags (8 byte connection_id) | 1755 // public flags (8 byte connection_id) |
| 1938 0x3C, | 1756 0x3C, |
| 1939 // connection_id | 1757 // connection_id |
| 1940 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 1758 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
| 1941 // packet number | 1759 // packet number |
| 1942 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, | 1760 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, |
| 1943 // private flags (entropy) | 1761 // private flags (entropy) |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2039 } else if (i < kMissingPacketsRange) { | 1857 } else if (i < kMissingPacketsRange) { |
| 2040 expected_error = "Unable to read missing packet number delta."; | 1858 expected_error = "Unable to read missing packet number delta."; |
| 2041 } else if (i < kRevivedPacketsLength) { | 1859 } else if (i < kRevivedPacketsLength) { |
| 2042 expected_error = "Unable to read missing packet number range."; | 1860 expected_error = "Unable to read missing packet number range."; |
| 2043 } else { | 1861 } else { |
| 2044 expected_error = "Unable to read num revived packets."; | 1862 expected_error = "Unable to read num revived packets."; |
| 2045 } | 1863 } |
| 2046 CheckProcessingFails( | 1864 CheckProcessingFails( |
| 2047 packet, | 1865 packet, |
| 2048 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1866 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2049 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 1867 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
| 2050 NOT_IN_FEC_GROUP), | |
| 2051 expected_error, QUIC_INVALID_ACK_DATA); | 1868 expected_error, QUIC_INVALID_ACK_DATA); |
| 2052 } | 1869 } |
| 2053 } | 1870 } |
| 2054 | 1871 |
| 2055 TEST_P(QuicFramerTest, AckFrameOneTimestamp) { | 1872 TEST_P(QuicFramerTest, AckFrameOneTimestamp) { |
| 2056 // clang-format off | 1873 // clang-format off |
| 2057 unsigned char packet[] = { | 1874 unsigned char packet[] = { |
| 2058 // public flags (8 byte connection_id) | 1875 // public flags (8 byte connection_id) |
| 2059 0x3C, | 1876 0x3C, |
| 2060 // connection_id | 1877 // connection_id |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2146 } else if (i < kMissingPacketsRange) { | 1963 } else if (i < kMissingPacketsRange) { |
| 2147 expected_error = "Unable to read missing packet number delta."; | 1964 expected_error = "Unable to read missing packet number delta."; |
| 2148 } else if (i < kRevivedPacketsLength) { | 1965 } else if (i < kRevivedPacketsLength) { |
| 2149 expected_error = "Unable to read missing packet number range."; | 1966 expected_error = "Unable to read missing packet number range."; |
| 2150 } else { | 1967 } else { |
| 2151 expected_error = "Unable to read num revived packets."; | 1968 expected_error = "Unable to read num revived packets."; |
| 2152 } | 1969 } |
| 2153 CheckProcessingFails( | 1970 CheckProcessingFails( |
| 2154 packet, | 1971 packet, |
| 2155 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 1972 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2156 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 1973 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
| 2157 NOT_IN_FEC_GROUP), | |
| 2158 expected_error, QUIC_INVALID_ACK_DATA); | 1974 expected_error, QUIC_INVALID_ACK_DATA); |
| 2159 } | 1975 } |
| 2160 } | 1976 } |
| 2161 | 1977 |
| 2162 TEST_P(QuicFramerTest, AckFrame) { | 1978 TEST_P(QuicFramerTest, AckFrame) { |
| 2163 // clang-format off | 1979 // clang-format off |
| 2164 unsigned char packet[] = { | 1980 unsigned char packet[] = { |
| 2165 // public flags (8 byte connection_id) | 1981 // public flags (8 byte connection_id) |
| 2166 0x3C, | 1982 0x3C, |
| 2167 // connection_id | 1983 // connection_id |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2241 } else if (i < kMissingPacketsRange) { | 2057 } else if (i < kMissingPacketsRange) { |
| 2242 expected_error = "Unable to read missing packet number delta."; | 2058 expected_error = "Unable to read missing packet number delta."; |
| 2243 } else if (i < kRevivedPacketsLength) { | 2059 } else if (i < kRevivedPacketsLength) { |
| 2244 expected_error = "Unable to read missing packet number range."; | 2060 expected_error = "Unable to read missing packet number range."; |
| 2245 } else { | 2061 } else { |
| 2246 expected_error = "Unable to read num revived packets."; | 2062 expected_error = "Unable to read num revived packets."; |
| 2247 } | 2063 } |
| 2248 CheckProcessingFails( | 2064 CheckProcessingFails( |
| 2249 packet, | 2065 packet, |
| 2250 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2066 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2251 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2067 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
| 2252 NOT_IN_FEC_GROUP), | |
| 2253 expected_error, QUIC_INVALID_ACK_DATA); | 2068 expected_error, QUIC_INVALID_ACK_DATA); |
| 2254 } | 2069 } |
| 2255 } | 2070 } |
| 2256 | 2071 |
| 2257 TEST_P(QuicFramerTest, AckFrameRevivedPackets) { | 2072 TEST_P(QuicFramerTest, AckFrameRevivedPackets) { |
| 2258 // clang-format off | 2073 // clang-format off |
| 2259 unsigned char packet[] = { | 2074 unsigned char packet[] = { |
| 2260 // public flags (8 byte connection_id) | 2075 // public flags (8 byte connection_id) |
| 2261 0x3C, | 2076 0x3C, |
| 2262 // connection_id | 2077 // connection_id |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2346 } else if (i < kRevivedPacketsLength) { | 2161 } else if (i < kRevivedPacketsLength) { |
| 2347 expected_error = "Unable to read missing packet number range."; | 2162 expected_error = "Unable to read missing packet number range."; |
| 2348 } else if (i < kRevivedPacketSequenceNumberLength) { | 2163 } else if (i < kRevivedPacketSequenceNumberLength) { |
| 2349 expected_error = "Unable to read num revived packets."; | 2164 expected_error = "Unable to read num revived packets."; |
| 2350 } else { | 2165 } else { |
| 2351 expected_error = "Unable to read revived packet."; | 2166 expected_error = "Unable to read revived packet."; |
| 2352 } | 2167 } |
| 2353 CheckProcessingFails( | 2168 CheckProcessingFails( |
| 2354 packet, | 2169 packet, |
| 2355 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2170 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2356 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2171 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
| 2357 NOT_IN_FEC_GROUP), | |
| 2358 expected_error, QUIC_INVALID_ACK_DATA); | 2172 expected_error, QUIC_INVALID_ACK_DATA); |
| 2359 } | 2173 } |
| 2360 } | 2174 } |
| 2361 | 2175 |
| 2362 TEST_P(QuicFramerTest, AckFrameNoNacks) { | 2176 TEST_P(QuicFramerTest, AckFrameNoNacks) { |
| 2363 // clang-format off | 2177 // clang-format off |
| 2364 unsigned char packet[] = { | 2178 unsigned char packet[] = { |
| 2365 // public flags (8 byte connection_id) | 2179 // public flags (8 byte connection_id) |
| 2366 0x3C, | 2180 0x3C, |
| 2367 // connection_id | 2181 // connection_id |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2522 for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) { | 2336 for (size_t i = kQuicFrameTypeSize; i < frame_size; ++i) { |
| 2523 string expected_error; | 2337 string expected_error; |
| 2524 if (i < kLeastUnackedOffset) { | 2338 if (i < kLeastUnackedOffset) { |
| 2525 expected_error = "Unable to read entropy hash for sent packets."; | 2339 expected_error = "Unable to read entropy hash for sent packets."; |
| 2526 } else { | 2340 } else { |
| 2527 expected_error = "Unable to read least unacked delta."; | 2341 expected_error = "Unable to read least unacked delta."; |
| 2528 } | 2342 } |
| 2529 CheckProcessingFails( | 2343 CheckProcessingFails( |
| 2530 packet, | 2344 packet, |
| 2531 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2345 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2532 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2346 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
| 2533 NOT_IN_FEC_GROUP), | |
| 2534 expected_error, QUIC_INVALID_STOP_WAITING_DATA); | 2347 expected_error, QUIC_INVALID_STOP_WAITING_DATA); |
| 2535 } | 2348 } |
| 2536 } | 2349 } |
| 2537 | 2350 |
| 2538 TEST_P(QuicFramerTest, RstStreamFrameQuic) { | 2351 TEST_P(QuicFramerTest, RstStreamFrameQuic) { |
| 2539 // clang-format off | 2352 // clang-format off |
| 2540 unsigned char packet[] = { | 2353 unsigned char packet[] = { |
| 2541 // public flags (8 byte connection_id) | 2354 // public flags (8 byte connection_id) |
| 2542 0x3C, | 2355 0x3C, |
| 2543 // connection_id | 2356 // connection_id |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2583 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + | 2396 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + |
| 2584 kQuicMaxStreamOffsetSize) { | 2397 kQuicMaxStreamOffsetSize) { |
| 2585 expected_error = "Unable to read rst stream sent byte offset."; | 2398 expected_error = "Unable to read rst stream sent byte offset."; |
| 2586 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + | 2399 } else if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize + |
| 2587 kQuicMaxStreamOffsetSize + kQuicErrorCodeSize) { | 2400 kQuicMaxStreamOffsetSize + kQuicErrorCodeSize) { |
| 2588 expected_error = "Unable to read rst stream error code."; | 2401 expected_error = "Unable to read rst stream error code."; |
| 2589 } | 2402 } |
| 2590 CheckProcessingFails( | 2403 CheckProcessingFails( |
| 2591 packet, | 2404 packet, |
| 2592 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2405 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2593 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2406 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
| 2594 NOT_IN_FEC_GROUP), | |
| 2595 expected_error, QUIC_INVALID_RST_STREAM_DATA); | 2407 expected_error, QUIC_INVALID_RST_STREAM_DATA); |
| 2596 } | 2408 } |
| 2597 } | 2409 } |
| 2598 | 2410 |
| 2599 TEST_P(QuicFramerTest, ConnectionCloseFrame) { | 2411 TEST_P(QuicFramerTest, ConnectionCloseFrame) { |
| 2600 // clang-format off | 2412 // clang-format off |
| 2601 unsigned char packet[] = { | 2413 unsigned char packet[] = { |
| 2602 // public flags (8 byte connection_id) | 2414 // public flags (8 byte connection_id) |
| 2603 0x3C, | 2415 0x3C, |
| 2604 // connection_id | 2416 // connection_id |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2644 i < QuicFramer::GetMinConnectionCloseFrameSize(); ++i) { | 2456 i < QuicFramer::GetMinConnectionCloseFrameSize(); ++i) { |
| 2645 string expected_error; | 2457 string expected_error; |
| 2646 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { | 2458 if (i < kQuicFrameTypeSize + kQuicErrorCodeSize) { |
| 2647 expected_error = "Unable to read connection close error code."; | 2459 expected_error = "Unable to read connection close error code."; |
| 2648 } else { | 2460 } else { |
| 2649 expected_error = "Unable to read connection close error details."; | 2461 expected_error = "Unable to read connection close error details."; |
| 2650 } | 2462 } |
| 2651 CheckProcessingFails( | 2463 CheckProcessingFails( |
| 2652 packet, | 2464 packet, |
| 2653 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2465 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2654 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2466 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
| 2655 NOT_IN_FEC_GROUP), | |
| 2656 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA); | 2467 expected_error, QUIC_INVALID_CONNECTION_CLOSE_DATA); |
| 2657 } | 2468 } |
| 2658 } | 2469 } |
| 2659 | 2470 |
| 2660 TEST_P(QuicFramerTest, GoAwayFrame) { | 2471 TEST_P(QuicFramerTest, GoAwayFrame) { |
| 2661 // clang-format off | 2472 // clang-format off |
| 2662 unsigned char packet[] = { | 2473 unsigned char packet[] = { |
| 2663 // public flags (8 byte connection_id) | 2474 // public flags (8 byte connection_id) |
| 2664 0x3C, | 2475 0x3C, |
| 2665 // connection_id | 2476 // connection_id |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2707 expected_error = "Unable to read go away error code."; | 2518 expected_error = "Unable to read go away error code."; |
| 2708 } else if (i < | 2519 } else if (i < |
| 2709 kQuicFrameTypeSize + kQuicErrorCodeSize + kQuicMaxStreamIdSize) { | 2520 kQuicFrameTypeSize + kQuicErrorCodeSize + kQuicMaxStreamIdSize) { |
| 2710 expected_error = "Unable to read last good stream id."; | 2521 expected_error = "Unable to read last good stream id."; |
| 2711 } else { | 2522 } else { |
| 2712 expected_error = "Unable to read goaway reason."; | 2523 expected_error = "Unable to read goaway reason."; |
| 2713 } | 2524 } |
| 2714 CheckProcessingFails( | 2525 CheckProcessingFails( |
| 2715 packet, | 2526 packet, |
| 2716 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2527 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2717 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2528 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
| 2718 NOT_IN_FEC_GROUP), | |
| 2719 expected_error, QUIC_INVALID_GOAWAY_DATA); | 2529 expected_error, QUIC_INVALID_GOAWAY_DATA); |
| 2720 } | 2530 } |
| 2721 } | 2531 } |
| 2722 | 2532 |
| 2723 TEST_P(QuicFramerTest, WindowUpdateFrame) { | 2533 TEST_P(QuicFramerTest, WindowUpdateFrame) { |
| 2724 // clang-format off | 2534 // clang-format off |
| 2725 unsigned char packet[] = { | 2535 unsigned char packet[] = { |
| 2726 // public flags (8 byte connection_id) | 2536 // public flags (8 byte connection_id) |
| 2727 0x3C, | 2537 0x3C, |
| 2728 // connection_id | 2538 // connection_id |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2760 i < QuicFramer::GetWindowUpdateFrameSize(); ++i) { | 2570 i < QuicFramer::GetWindowUpdateFrameSize(); ++i) { |
| 2761 string expected_error; | 2571 string expected_error; |
| 2762 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { | 2572 if (i < kQuicFrameTypeSize + kQuicMaxStreamIdSize) { |
| 2763 expected_error = "Unable to read stream_id."; | 2573 expected_error = "Unable to read stream_id."; |
| 2764 } else { | 2574 } else { |
| 2765 expected_error = "Unable to read window byte_offset."; | 2575 expected_error = "Unable to read window byte_offset."; |
| 2766 } | 2576 } |
| 2767 CheckProcessingFails( | 2577 CheckProcessingFails( |
| 2768 packet, | 2578 packet, |
| 2769 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2579 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2770 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2580 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
| 2771 NOT_IN_FEC_GROUP), | |
| 2772 expected_error, QUIC_INVALID_WINDOW_UPDATE_DATA); | 2581 expected_error, QUIC_INVALID_WINDOW_UPDATE_DATA); |
| 2773 } | 2582 } |
| 2774 } | 2583 } |
| 2775 | 2584 |
| 2776 TEST_P(QuicFramerTest, BlockedFrame) { | 2585 TEST_P(QuicFramerTest, BlockedFrame) { |
| 2777 // clang-format off | 2586 // clang-format off |
| 2778 unsigned char packet[] = { | 2587 unsigned char packet[] = { |
| 2779 // public flags (8 byte connection_id) | 2588 // public flags (8 byte connection_id) |
| 2780 0x3C, | 2589 0x3C, |
| 2781 // connection_id | 2590 // connection_id |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2804 | 2613 |
| 2805 EXPECT_EQ(kStreamId, visitor_.blocked_frame_.stream_id); | 2614 EXPECT_EQ(kStreamId, visitor_.blocked_frame_.stream_id); |
| 2806 | 2615 |
| 2807 // Now test framing boundaries. | 2616 // Now test framing boundaries. |
| 2808 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetBlockedFrameSize(); | 2617 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetBlockedFrameSize(); |
| 2809 ++i) { | 2618 ++i) { |
| 2810 string expected_error = "Unable to read stream_id."; | 2619 string expected_error = "Unable to read stream_id."; |
| 2811 CheckProcessingFails( | 2620 CheckProcessingFails( |
| 2812 packet, | 2621 packet, |
| 2813 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2622 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2814 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2623 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
| 2815 NOT_IN_FEC_GROUP), | |
| 2816 expected_error, QUIC_INVALID_BLOCKED_DATA); | 2624 expected_error, QUIC_INVALID_BLOCKED_DATA); |
| 2817 } | 2625 } |
| 2818 } | 2626 } |
| 2819 | 2627 |
| 2820 TEST_P(QuicFramerTest, PingFrame) { | 2628 TEST_P(QuicFramerTest, PingFrame) { |
| 2821 // clang-format off | 2629 // clang-format off |
| 2822 unsigned char packet[] = { | 2630 unsigned char packet[] = { |
| 2823 // public flags (8 byte connection_id) | 2631 // public flags (8 byte connection_id) |
| 2824 0x3C, | 2632 0x3C, |
| 2825 // connection_id | 2633 // connection_id |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2880 // Now test framing boundaries. | 2688 // Now test framing boundaries. |
| 2881 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetPathCloseFrameSize(); | 2689 for (size_t i = kQuicFrameTypeSize; i < QuicFramer::GetPathCloseFrameSize(); |
| 2882 ++i) { | 2690 ++i) { |
| 2883 string expected_error; | 2691 string expected_error; |
| 2884 if (i < kQuicFrameTypeSize + kQuicPathIdSize) { | 2692 if (i < kQuicFrameTypeSize + kQuicPathIdSize) { |
| 2885 expected_error = "Unable to read path_id."; | 2693 expected_error = "Unable to read path_id."; |
| 2886 } | 2694 } |
| 2887 CheckProcessingFails( | 2695 CheckProcessingFails( |
| 2888 packet, | 2696 packet, |
| 2889 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 2697 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 2890 kIncludePathId, PACKET_6BYTE_PACKET_NUMBER, | 2698 kIncludePathId, PACKET_6BYTE_PACKET_NUMBER), |
| 2891 NOT_IN_FEC_GROUP), | |
| 2892 expected_error, QUIC_INVALID_PATH_CLOSE_DATA); | 2699 expected_error, QUIC_INVALID_PATH_CLOSE_DATA); |
| 2893 } | 2700 } |
| 2894 } | 2701 } |
| 2895 | 2702 |
| 2896 TEST_P(QuicFramerTest, PublicResetPacket) { | 2703 TEST_P(QuicFramerTest, PublicResetPacket) { |
| 2897 // clang-format off | 2704 // clang-format off |
| 2898 unsigned char packet[] = { | 2705 unsigned char packet[] = { |
| 2899 // public flags (public reset, 8 byte connection_id) | 2706 // public flags (public reset, 8 byte connection_id) |
| 2900 0x0E, | 2707 0x0E, |
| 2901 // connection_id | 2708 // connection_id |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3095 } else if (i < kVersionOffset) { | 2902 } else if (i < kVersionOffset) { |
| 3096 expected_error = "Unable to read ConnectionId."; | 2903 expected_error = "Unable to read ConnectionId."; |
| 3097 } else { | 2904 } else { |
| 3098 expected_error = "Unable to read supported version in negotiation."; | 2905 expected_error = "Unable to read supported version in negotiation."; |
| 3099 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; | 2906 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; |
| 3100 } | 2907 } |
| 3101 CheckProcessingFails(packet, i, expected_error, error_code); | 2908 CheckProcessingFails(packet, i, expected_error, error_code); |
| 3102 } | 2909 } |
| 3103 } | 2910 } |
| 3104 | 2911 |
| 3105 TEST_P(QuicFramerTest, FecPacket) { | 2912 TEST_P(QuicFramerTest, DropFecPacket) { |
| 3106 // clang-format off | 2913 // clang-format off |
| 3107 unsigned char packet[] = { | 2914 unsigned char packet[] = { |
| 3108 // public flags (8 byte connection_id) | 2915 // public flags (8 byte connection_id) |
| 3109 0x3C, | 2916 0x3C, |
| 3110 // connection_id | 2917 // connection_id |
| 3111 0x10, 0x32, 0x54, 0x76, | 2918 0x10, 0x32, 0x54, 0x76, |
| 3112 0x98, 0xBA, 0xDC, 0xFE, | 2919 0x98, 0xBA, 0xDC, 0xFE, |
| 3113 // packet number | 2920 // packet number |
| 3114 0xBC, 0x9A, 0x78, 0x56, | 2921 0xBC, 0x9A, 0x78, 0x56, |
| 3115 0x34, 0x12, | 2922 0x34, 0x12, |
| 3116 // private flags (fec group & FEC) | 2923 // private flags (fec group & FEC) |
| 3117 0x06, | 2924 0x06, |
| 3118 // first fec protected packet offset | 2925 // first fec protected packet offset |
| 3119 0x01, | 2926 0x01, |
| 3120 | 2927 |
| 3121 // redundancy | 2928 // redundancy |
| 3122 'a', 'b', 'c', 'd', | 2929 'a', 'b', 'c', 'd', |
| 3123 'e', 'f', 'g', 'h', | 2930 'e', 'f', 'g', 'h', |
| 3124 'i', 'j', 'k', 'l', | 2931 'i', 'j', 'k', 'l', |
| 3125 'm', 'n', 'o', 'p', | 2932 'm', 'n', 'o', 'p', |
| 3126 }; | 2933 }; |
| 3127 // clang-format on | 2934 // clang-format on |
| 3128 | 2935 |
| 3129 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 2936 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 3130 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 2937 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 3131 | 2938 |
| 3132 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 2939 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 3133 ASSERT_TRUE(visitor_.header_.get()); | 2940 EXPECT_FALSE(visitor_.header_.get()); |
| 3134 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId)); | |
| 3135 | |
| 3136 EXPECT_EQ(0u, visitor_.stream_frames_.size()); | |
| 3137 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | |
| 3138 ASSERT_EQ(1, visitor_.fec_count_); | |
| 3139 EXPECT_EQ("abcdefghijklmnop", visitor_.fec_data_redundancy_[0]); | |
| 3140 } | 2941 } |
| 3141 | 2942 |
| 3142 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { | 2943 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { |
| 3143 QuicPacketHeader header; | 2944 QuicPacketHeader header; |
| 3144 header.public_header.connection_id = kConnectionId; | 2945 header.public_header.connection_id = kConnectionId; |
| 3145 header.public_header.reset_flag = false; | 2946 header.public_header.reset_flag = false; |
| 3146 header.public_header.version_flag = false; | 2947 header.public_header.version_flag = false; |
| 3147 header.fec_flag = false; | 2948 header.fec_flag = false; |
| 3148 header.entropy_flag = false; | 2949 header.entropy_flag = false; |
| 3149 header.packet_number = kPacketNumber; | 2950 header.packet_number = kPacketNumber; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 3166 0x34, 0x12, | 2967 0x34, 0x12, |
| 3167 // private flags | 2968 // private flags |
| 3168 0x00, | 2969 0x00, |
| 3169 | 2970 |
| 3170 // frame type (padding frame) | 2971 // frame type (padding frame) |
| 3171 0x00, | 2972 0x00, |
| 3172 0x00, 0x00, 0x00, 0x00 | 2973 0x00, 0x00, 0x00, 0x00 |
| 3173 }; | 2974 }; |
| 3174 // clang-format on | 2975 // clang-format on |
| 3175 | 2976 |
| 3176 uint64_t header_size = GetPacketHeaderSize( | 2977 uint64_t header_size = |
| 3177 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, !kIncludePathId, | 2978 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 3178 PACKET_6BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 2979 !kIncludePathId, PACKET_6BYTE_PACKET_NUMBER); |
| 3179 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 2980 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
| 3180 | 2981 |
| 3181 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 2982 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3182 ASSERT_TRUE(data != nullptr); | 2983 ASSERT_TRUE(data != nullptr); |
| 3183 | 2984 |
| 3184 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 2985 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3185 data->length(), AsChars(packet), | 2986 data->length(), AsChars(packet), |
| 3186 arraysize(packet)); | 2987 arraysize(packet)); |
| 3187 } | 2988 } |
| 3188 | 2989 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 3213 0xBC, 0x9A, 0x78, 0x56, | 3014 0xBC, 0x9A, 0x78, 0x56, |
| 3214 // private flags | 3015 // private flags |
| 3215 0x00, | 3016 0x00, |
| 3216 | 3017 |
| 3217 // frame type (padding frame) | 3018 // frame type (padding frame) |
| 3218 0x00, | 3019 0x00, |
| 3219 0x00, 0x00, 0x00, 0x00 | 3020 0x00, 0x00, 0x00, 0x00 |
| 3220 }; | 3021 }; |
| 3221 // clang-format on | 3022 // clang-format on |
| 3222 | 3023 |
| 3223 uint64_t header_size = GetPacketHeaderSize( | 3024 uint64_t header_size = |
| 3224 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, !kIncludePathId, | 3025 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 3225 PACKET_4BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 3026 !kIncludePathId, PACKET_4BYTE_PACKET_NUMBER); |
| 3226 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 3027 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
| 3227 | 3028 |
| 3228 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3029 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3229 ASSERT_TRUE(data != nullptr); | 3030 ASSERT_TRUE(data != nullptr); |
| 3230 | 3031 |
| 3231 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3032 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3232 data->length(), AsChars(packet), | 3033 data->length(), AsChars(packet), |
| 3233 arraysize(packet)); | 3034 arraysize(packet)); |
| 3234 } | 3035 } |
| 3235 | 3036 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 3260 0xBC, 0x9A, | 3061 0xBC, 0x9A, |
| 3261 // private flags | 3062 // private flags |
| 3262 0x00, | 3063 0x00, |
| 3263 | 3064 |
| 3264 // frame type (padding frame) | 3065 // frame type (padding frame) |
| 3265 0x00, | 3066 0x00, |
| 3266 0x00, 0x00, 0x00, 0x00 | 3067 0x00, 0x00, 0x00, 0x00 |
| 3267 }; | 3068 }; |
| 3268 // clang-format on | 3069 // clang-format on |
| 3269 | 3070 |
| 3270 uint64_t header_size = GetPacketHeaderSize( | 3071 uint64_t header_size = |
| 3271 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, !kIncludePathId, | 3072 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 3272 PACKET_2BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 3073 !kIncludePathId, PACKET_2BYTE_PACKET_NUMBER); |
| 3273 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 3074 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
| 3274 | 3075 |
| 3275 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3076 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3276 ASSERT_TRUE(data != nullptr); | 3077 ASSERT_TRUE(data != nullptr); |
| 3277 | 3078 |
| 3278 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3079 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3279 data->length(), AsChars(packet), | 3080 data->length(), AsChars(packet), |
| 3280 arraysize(packet)); | 3081 arraysize(packet)); |
| 3281 } | 3082 } |
| 3282 | 3083 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 3307 0xBC, | 3108 0xBC, |
| 3308 // private flags | 3109 // private flags |
| 3309 0x00, | 3110 0x00, |
| 3310 | 3111 |
| 3311 // frame type (padding frame) | 3112 // frame type (padding frame) |
| 3312 0x00, | 3113 0x00, |
| 3313 0x00, 0x00, 0x00, 0x00 | 3114 0x00, 0x00, 0x00, 0x00 |
| 3314 }; | 3115 }; |
| 3315 // clang-format on | 3116 // clang-format on |
| 3316 | 3117 |
| 3317 uint64_t header_size = GetPacketHeaderSize( | 3118 uint64_t header_size = |
| 3318 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, !kIncludePathId, | 3119 GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, |
| 3319 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP); | 3120 !kIncludePathId, PACKET_1BYTE_PACKET_NUMBER); |
| 3320 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); | 3121 memset(packet + header_size + 1, 0x00, kMaxPacketSize - header_size - 1); |
| 3321 | 3122 |
| 3322 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3123 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3323 ASSERT_TRUE(data != nullptr); | 3124 ASSERT_TRUE(data != nullptr); |
| 3324 | 3125 |
| 3325 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3126 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3326 data->length(), AsChars(packet), | 3127 data->length(), AsChars(packet), |
| 3327 arraysize(packet)); | 3128 arraysize(packet)); |
| 3328 } | 3129 } |
| 3329 | 3130 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3371 // clang-format on | 3172 // clang-format on |
| 3372 | 3173 |
| 3373 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | 3174 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
| 3374 ASSERT_TRUE(data != nullptr); | 3175 ASSERT_TRUE(data != nullptr); |
| 3375 | 3176 |
| 3376 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 3177 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 3377 data->length(), AsChars(packet), | 3178 data->length(), AsChars(packet), |
| 3378 arraysize(packet)); | 3179 arraysize(packet)); |
| 3379 } | 3180 } |
| 3380 | 3181 |
| 3381 TEST_P(QuicFramerTest, BuildStreamFramePacketInFecGroup) { | |
| 3382 QuicPacketHeader header; | |
| 3383 header.public_header.connection_id = kConnectionId; | |
| 3384 header.public_header.reset_flag = false; | |
| 3385 header.public_header.version_flag = false; | |
| 3386 header.fec_flag = false; | |
| 3387 header.entropy_flag = true; | |
| 3388 header.packet_number = kPacketNumber; | |
| 3389 header.is_in_fec_group = IN_FEC_GROUP; | |
| 3390 header.fec_group = kPacketNumber; | |
| 3391 | |
| 3392 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, | |
| 3393 StringPiece("hello world!")); | |
| 3394 | |
| 3395 QuicFrames frames; | |
| 3396 frames.push_back(QuicFrame(&stream_frame)); | |
| 3397 // clang-format off | |
| 3398 unsigned char packet[] = { | |
| 3399 // public flags (8 byte connection_id) | |
| 3400 0x3C, | |
| 3401 // connection_id | |
| 3402 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | |
| 3403 // packet number | |
| 3404 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, | |
| 3405 // private flags (entropy, is_in_fec_group) | |
| 3406 0x03, | |
| 3407 // FEC group | |
| 3408 0x00, | |
| 3409 // frame type (stream frame with fin and data length field) | |
| 3410 0xFF, | |
| 3411 // stream id | |
| 3412 0x04, 0x03, 0x02, 0x01, | |
| 3413 // offset | |
| 3414 0x54, 0x76, 0x10, 0x32, 0xDC, 0xFE, 0x98, 0xBA, | |
| 3415 // data length (since packet is in an FEC group) | |
| 3416 0x0C, 0x00, | |
| 3417 // data | |
| 3418 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', '!', | |
| 3419 }; | |
| 3420 // clang-format on | |
| 3421 | |
| 3422 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); | |
| 3423 ASSERT_TRUE(data != nullptr); | |
| 3424 | |
| 3425 test::CompareCharArraysWithHexError("constructed packet", data->data(), | |
| 3426 data->length(), AsChars(packet), | |
| 3427 arraysize(packet)); | |
| 3428 } | |
| 3429 | |
| 3430 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { | 3182 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { |
| 3431 QuicPacketHeader header; | 3183 QuicPacketHeader header; |
| 3432 header.public_header.connection_id = kConnectionId; | 3184 header.public_header.connection_id = kConnectionId; |
| 3433 header.public_header.reset_flag = false; | 3185 header.public_header.reset_flag = false; |
| 3434 header.public_header.version_flag = true; | 3186 header.public_header.version_flag = true; |
| 3435 header.fec_flag = false; | 3187 header.fec_flag = false; |
| 3436 header.entropy_flag = true; | 3188 header.entropy_flag = true; |
| 3437 header.packet_number = kPacketNumber; | 3189 header.packet_number = kPacketNumber; |
| 3438 header.fec_group = 0; | 3190 header.fec_group = 0; |
| 3439 | 3191 |
| (...skipping 925 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4365 | 4117 |
| 4366 scoped_ptr<QuicEncryptedPacket> data( | 4118 scoped_ptr<QuicEncryptedPacket> data( |
| 4367 framer_.BuildPublicResetPacket(reset_packet)); | 4119 framer_.BuildPublicResetPacket(reset_packet)); |
| 4368 ASSERT_TRUE(data != nullptr); | 4120 ASSERT_TRUE(data != nullptr); |
| 4369 | 4121 |
| 4370 test::CompareCharArraysWithHexError("constructed packet", data->data(), | 4122 test::CompareCharArraysWithHexError("constructed packet", data->data(), |
| 4371 data->length(), AsChars(packet), | 4123 data->length(), AsChars(packet), |
| 4372 arraysize(packet)); | 4124 arraysize(packet)); |
| 4373 } | 4125 } |
| 4374 | 4126 |
| 4375 TEST_P(QuicFramerTest, BuildFecPacket) { | |
| 4376 QuicPacketHeader header; | |
| 4377 header.public_header.connection_id = kConnectionId; | |
| 4378 header.public_header.reset_flag = false; | |
| 4379 header.public_header.version_flag = false; | |
| 4380 header.fec_flag = true; | |
| 4381 header.entropy_flag = true; | |
| 4382 header.packet_number = kPacketNumber; | |
| 4383 header.is_in_fec_group = IN_FEC_GROUP; | |
| 4384 header.fec_group = kPacketNumber - 1; | |
| 4385 | |
| 4386 string redundancy = "abcdefghijklmnop"; | |
| 4387 | |
| 4388 // clang-format off | |
| 4389 unsigned char packet[] = { | |
| 4390 // public flags (8 byte connection_id) | |
| 4391 0x3C, | |
| 4392 // connection_id | |
| 4393 0x10, 0x32, 0x54, 0x76, | |
| 4394 0x98, 0xBA, 0xDC, 0xFE, | |
| 4395 // packet number | |
| 4396 0xBC, 0x9A, 0x78, 0x56, | |
| 4397 0x34, 0x12, | |
| 4398 // private flags (entropy & fec group & fec packet) | |
| 4399 0x07, | |
| 4400 // first fec protected packet offset | |
| 4401 0x01, | |
| 4402 | |
| 4403 // redundancy | |
| 4404 'a', 'b', 'c', 'd', | |
| 4405 'e', 'f', 'g', 'h', | |
| 4406 'i', 'j', 'k', 'l', | |
| 4407 'm', 'n', 'o', 'p', | |
| 4408 }; | |
| 4409 // clang-format on | |
| 4410 | |
| 4411 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, redundancy)); | |
| 4412 ASSERT_TRUE(data != nullptr); | |
| 4413 | |
| 4414 test::CompareCharArraysWithHexError("constructed packet", data->data(), | |
| 4415 data->length(), AsChars(packet), | |
| 4416 arraysize(packet)); | |
| 4417 } | |
| 4418 | |
| 4419 TEST_P(QuicFramerTest, EncryptPacket) { | 4127 TEST_P(QuicFramerTest, EncryptPacket) { |
| 4420 QuicPacketNumber packet_number = kPacketNumber; | 4128 QuicPacketNumber packet_number = kPacketNumber; |
| 4421 // clang-format off | 4129 // clang-format off |
| 4422 unsigned char packet[] = { | 4130 unsigned char packet[] = { |
| 4423 // public flags (8 byte connection_id) | 4131 // public flags (8 byte connection_id) |
| 4424 0x3C, | 4132 0x3C, |
| 4425 // connection_id | 4133 // connection_id |
| 4426 0x10, 0x32, 0x54, 0x76, | 4134 0x10, 0x32, 0x54, 0x76, |
| 4427 0x98, 0xBA, 0xDC, 0xFE, | 4135 0x98, 0xBA, 0xDC, 0xFE, |
| 4428 // packet number | 4136 // packet number |
| 4429 0xBC, 0x9A, 0x78, 0x56, | 4137 0xBC, 0x9A, 0x78, 0x56, |
| 4430 0x34, 0x12, | 4138 0x34, 0x12, |
| 4431 // private flags (fec group & fec packet) | 4139 // private flags |
| 4432 0x06, | 4140 0x00, |
| 4433 // first fec protected packet offset | |
| 4434 0x01, | |
| 4435 | 4141 |
| 4436 // redundancy | 4142 // redundancy |
| 4437 'a', 'b', 'c', 'd', | 4143 'a', 'b', 'c', 'd', |
| 4438 'e', 'f', 'g', 'h', | 4144 'e', 'f', 'g', 'h', |
| 4439 'i', 'j', 'k', 'l', | 4145 'i', 'j', 'k', 'l', |
| 4440 'm', 'n', 'o', 'p', | 4146 'm', 'n', 'o', 'p', |
| 4441 }; | 4147 }; |
| 4442 // clang-format on | 4148 // clang-format on |
| 4443 | 4149 |
| 4444 scoped_ptr<QuicPacket> raw(new QuicPacket( | 4150 scoped_ptr<QuicPacket> raw(new QuicPacket( |
| (...skipping 15 matching lines...) Expand all Loading... |
| 4460 // public flags (version, 8 byte connection_id) | 4166 // public flags (version, 8 byte connection_id) |
| 4461 0x3D, | 4167 0x3D, |
| 4462 // connection_id | 4168 // connection_id |
| 4463 0x10, 0x32, 0x54, 0x76, | 4169 0x10, 0x32, 0x54, 0x76, |
| 4464 0x98, 0xBA, 0xDC, 0xFE, | 4170 0x98, 0xBA, 0xDC, 0xFE, |
| 4465 // version tag | 4171 // version tag |
| 4466 'Q', '.', '1', '0', | 4172 'Q', '.', '1', '0', |
| 4467 // packet number | 4173 // packet number |
| 4468 0xBC, 0x9A, 0x78, 0x56, | 4174 0xBC, 0x9A, 0x78, 0x56, |
| 4469 0x34, 0x12, | 4175 0x34, 0x12, |
| 4470 // private flags (fec group & fec flags) | 4176 // private flags |
| 4471 0x06, | 4177 0x00, |
| 4472 // first fec protected packet offset | |
| 4473 0x01, | |
| 4474 | 4178 |
| 4475 // redundancy | 4179 // redundancy |
| 4476 'a', 'b', 'c', 'd', | 4180 'a', 'b', 'c', 'd', |
| 4477 'e', 'f', 'g', 'h', | 4181 'e', 'f', 'g', 'h', |
| 4478 'i', 'j', 'k', 'l', | 4182 'i', 'j', 'k', 'l', |
| 4479 'm', 'n', 'o', 'p', | 4183 'm', 'n', 'o', 'p', |
| 4480 }; | 4184 }; |
| 4481 // clang-format on | 4185 // clang-format on |
| 4482 | 4186 |
| 4483 scoped_ptr<QuicPacket> raw(new QuicPacket( | 4187 scoped_ptr<QuicPacket> raw(new QuicPacket( |
| (...skipping 15 matching lines...) Expand all Loading... |
| 4499 // public flags (version, 8 byte connection_id) | 4203 // public flags (version, 8 byte connection_id) |
| 4500 0x7C, | 4204 0x7C, |
| 4501 // connection_id | 4205 // connection_id |
| 4502 0x10, 0x32, 0x54, 0x76, | 4206 0x10, 0x32, 0x54, 0x76, |
| 4503 0x98, 0xBA, 0xDC, 0xFE, | 4207 0x98, 0xBA, 0xDC, 0xFE, |
| 4504 // path_id | 4208 // path_id |
| 4505 0x42, | 4209 0x42, |
| 4506 // packet number | 4210 // packet number |
| 4507 0xBC, 0x9A, 0x78, 0x56, | 4211 0xBC, 0x9A, 0x78, 0x56, |
| 4508 0x34, 0x12, | 4212 0x34, 0x12, |
| 4509 // private flags (fec group & fec flags) | 4213 // private flags |
| 4510 0x06, | 4214 0x00, |
| 4511 // first fec protected packet offset | |
| 4512 0x01, | |
| 4513 | 4215 |
| 4514 // redundancy | 4216 // redundancy |
| 4515 'a', 'b', 'c', 'd', | 4217 'a', 'b', 'c', 'd', |
| 4516 'e', 'f', 'g', 'h', | 4218 'e', 'f', 'g', 'h', |
| 4517 'i', 'j', 'k', 'l', | 4219 'i', 'j', 'k', 'l', |
| 4518 'm', 'n', 'o', 'p', | 4220 'm', 'n', 'o', 'p', |
| 4519 }; | 4221 }; |
| 4520 // clang-format on | 4222 // clang-format on |
| 4521 | 4223 |
| 4522 scoped_ptr<QuicPacket> raw(new QuicPacket( | 4224 scoped_ptr<QuicPacket> raw(new QuicPacket( |
| (...skipping 16 matching lines...) Expand all Loading... |
| 4539 // connection_id | 4241 // connection_id |
| 4540 0x10, 0x32, 0x54, 0x76, | 4242 0x10, 0x32, 0x54, 0x76, |
| 4541 0x98, 0xBA, 0xDC, 0xFE, | 4243 0x98, 0xBA, 0xDC, 0xFE, |
| 4542 // version tag | 4244 // version tag |
| 4543 'Q', '.', '1', '0', | 4245 'Q', '.', '1', '0', |
| 4544 // path_id | 4246 // path_id |
| 4545 0x42, | 4247 0x42, |
| 4546 // packet number | 4248 // packet number |
| 4547 0xBC, 0x9A, 0x78, 0x56, | 4249 0xBC, 0x9A, 0x78, 0x56, |
| 4548 0x34, 0x12, | 4250 0x34, 0x12, |
| 4549 // private flags (fec group & fec flags) | 4251 // private flags |
| 4550 0x06, | 4252 0x00, |
| 4551 // first fec protected packet offset | |
| 4552 0x01, | |
| 4553 | 4253 |
| 4554 // redundancy | 4254 // redundancy |
| 4555 'a', 'b', 'c', 'd', | 4255 'a', 'b', 'c', 'd', |
| 4556 'e', 'f', 'g', 'h', | 4256 'e', 'f', 'g', 'h', |
| 4557 'i', 'j', 'k', 'l', | 4257 'i', 'j', 'k', 'l', |
| 4558 'm', 'n', 'o', 'p', | 4258 'm', 'n', 'o', 'p', |
| 4559 }; | 4259 }; |
| 4560 // clang-format on | 4260 // clang-format on |
| 4561 | 4261 |
| 4562 scoped_ptr<QuicPacket> raw(new QuicPacket( | 4262 scoped_ptr<QuicPacket> raw(new QuicPacket( |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4724 | 4424 |
| 4725 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 4425 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
| 4726 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 4426 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
| 4727 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 4427 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
| 4728 ASSERT_TRUE(visitor_.header_.get()); | 4428 ASSERT_TRUE(visitor_.header_.get()); |
| 4729 EXPECT_TRUE(visitor_.header_->entropy_flag); | 4429 EXPECT_TRUE(visitor_.header_->entropy_flag); |
| 4730 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); | 4430 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); |
| 4731 EXPECT_FALSE(visitor_.header_->fec_flag); | 4431 EXPECT_FALSE(visitor_.header_->fec_flag); |
| 4732 }; | 4432 }; |
| 4733 | 4433 |
| 4734 TEST_P(QuicFramerTest, FecEntropyTest) { | |
| 4735 // clang-format off | |
| 4736 unsigned char packet[] = { | |
| 4737 // public flags (8 byte connection_id) | |
| 4738 0x3C, | |
| 4739 // connection_id | |
| 4740 0x10, 0x32, 0x54, 0x76, | |
| 4741 0x98, 0xBA, 0xDC, 0xFE, | |
| 4742 // packet number | |
| 4743 0xBC, 0x9A, 0x78, 0x56, | |
| 4744 0x34, 0x12, | |
| 4745 // private flags (Entropy & fec group & FEC) | |
| 4746 0x07, | |
| 4747 // first fec protected packet offset | |
| 4748 0xFF, | |
| 4749 | |
| 4750 // frame type (stream frame with fin and no length) | |
| 4751 0xDF, | |
| 4752 // stream id | |
| 4753 0x04, 0x03, 0x02, 0x01, | |
| 4754 // offset | |
| 4755 0x54, 0x76, 0x10, 0x32, | |
| 4756 0xDC, 0xFE, 0x98, 0xBA, | |
| 4757 // data | |
| 4758 'h', 'e', 'l', 'l', | |
| 4759 'o', ' ', 'w', 'o', | |
| 4760 'r', 'l', 'd', '!', | |
| 4761 }; | |
| 4762 // clang-format on | |
| 4763 | |
| 4764 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | |
| 4765 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | |
| 4766 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | |
| 4767 ASSERT_TRUE(visitor_.header_.get()); | |
| 4768 EXPECT_TRUE(visitor_.header_->fec_flag); | |
| 4769 EXPECT_TRUE(visitor_.header_->entropy_flag); | |
| 4770 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); | |
| 4771 }; | |
| 4772 | |
| 4773 TEST_P(QuicFramerTest, StopPacketProcessing) { | 4434 TEST_P(QuicFramerTest, StopPacketProcessing) { |
| 4774 // clang-format off | 4435 // clang-format off |
| 4775 unsigned char packet[] = { | 4436 unsigned char packet[] = { |
| 4776 // public flags (8 byte connection_id) | 4437 // public flags (8 byte connection_id) |
| 4777 0x3C, | 4438 0x3C, |
| 4778 // connection_id | 4439 // connection_id |
| 4779 0x10, 0x32, 0x54, 0x76, | 4440 0x10, 0x32, 0x54, 0x76, |
| 4780 0x98, 0xBA, 0xDC, 0xFE, | 4441 0x98, 0xBA, 0xDC, 0xFE, |
| 4781 // packet number | 4442 // packet number |
| 4782 0xBC, 0x9A, 0x78, 0x56, | 4443 0xBC, 0x9A, 0x78, 0x56, |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4965 'o', ' ', 'w', 'o', | 4626 'o', ' ', 'w', 'o', |
| 4966 'r', 'l', 'd', '!', | 4627 'r', 'l', 'd', '!', |
| 4967 }; | 4628 }; |
| 4968 // clang-format on | 4629 // clang-format on |
| 4969 | 4630 |
| 4970 QuicFramerFuzzFunc(packet, arraysize(packet)); | 4631 QuicFramerFuzzFunc(packet, arraysize(packet)); |
| 4971 } | 4632 } |
| 4972 | 4633 |
| 4973 } // namespace test | 4634 } // namespace test |
| 4974 } // namespace net | 4635 } // namespace net |
| OLD | NEW |