| 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 #ifndef NET_QUIC_CORE_QUIC_FRAMER_H_ | 5 #ifndef NET_QUIC_CORE_QUIC_FRAMER_H_ |
| 6 #define NET_QUIC_CORE_QUIC_FRAMER_H_ | 6 #define NET_QUIC_CORE_QUIC_FRAMER_H_ |
| 7 | 7 |
| 8 #include <cstddef> | 8 #include <cstddef> |
| 9 #include <cstdint> | 9 #include <cstdint> |
| 10 #include <memory> | 10 #include <memory> |
| 11 #include <string> | 11 #include <string> |
| 12 | 12 |
| 13 #include "base/macros.h" | 13 #include "base/macros.h" |
| 14 #include "net/quic/core/quic_packets.h" | 14 #include "net/quic/core/quic_packets.h" |
| 15 #include "net/quic/platform/api/quic_endian.h" |
| 15 #include "net/quic/platform/api/quic_export.h" | 16 #include "net/quic/platform/api/quic_export.h" |
| 16 #include "net/quic/platform/api/quic_string_piece.h" | 17 #include "net/quic/platform/api/quic_string_piece.h" |
| 17 | 18 |
| 18 namespace net { | 19 namespace net { |
| 19 | 20 |
| 20 namespace test { | 21 namespace test { |
| 21 class QuicFramerPeer; | 22 class QuicFramerPeer; |
| 22 } // namespace test | 23 } // namespace test |
| 23 | 24 |
| 24 class QuicDataReader; | 25 class QuicDataReader; |
| (...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 char* buffer, | 306 char* buffer, |
| 306 size_t buffer_len); | 307 size_t buffer_len); |
| 307 | 308 |
| 308 // Returns the maximum length of plaintext that can be encrypted | 309 // Returns the maximum length of plaintext that can be encrypted |
| 309 // to ciphertext no larger than |ciphertext_size|. | 310 // to ciphertext no larger than |ciphertext_size|. |
| 310 size_t GetMaxPlaintextSize(size_t ciphertext_size); | 311 size_t GetMaxPlaintextSize(size_t ciphertext_size); |
| 311 | 312 |
| 312 const std::string& detailed_error() { return detailed_error_; } | 313 const std::string& detailed_error() { return detailed_error_; } |
| 313 | 314 |
| 314 // The minimum packet number length required to represent |packet_number|. | 315 // The minimum packet number length required to represent |packet_number|. |
| 315 static QuicPacketNumberLength GetMinSequenceNumberLength( | 316 static QuicPacketNumberLength GetMinPacketNumberLength( |
| 316 QuicPacketNumber packet_number); | 317 QuicPacketNumber packet_number); |
| 317 | 318 |
| 318 void SetSupportedVersions(const QuicVersionVector& versions) { | 319 void SetSupportedVersions(const QuicVersionVector& versions) { |
| 319 supported_versions_ = versions; | 320 supported_versions_ = versions; |
| 320 quic_version_ = versions[0]; | 321 quic_version_ = versions[0]; |
| 321 } | 322 } |
| 322 | 323 |
| 324 // Returns byte order to read/write integers and floating numbers. |
| 325 Endianness endianness() const; |
| 326 |
| 323 void set_validate_flags(bool value) { validate_flags_ = value; } | 327 void set_validate_flags(bool value) { validate_flags_ = value; } |
| 324 | 328 |
| 325 Perspective perspective() const { return perspective_; } | 329 Perspective perspective() const { return perspective_; } |
| 326 | 330 |
| 327 QuicTag last_version_tag() { return last_version_tag_; } | 331 QuicTag last_version_tag() { return last_version_tag_; } |
| 328 | 332 |
| 329 private: | 333 private: |
| 330 friend class test::QuicFramerPeer; | 334 friend class test::QuicFramerPeer; |
| 331 | 335 |
| 332 typedef std::map<QuicPacketNumber, uint8_t> NackRangeMap; | 336 typedef std::map<QuicPacketNumber, uint8_t> NackRangeMap; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 357 QuicPacketPublicHeader* public_header); | 361 QuicPacketPublicHeader* public_header); |
| 358 | 362 |
| 359 bool ProcessPublicHeader(QuicDataReader* reader, | 363 bool ProcessPublicHeader(QuicDataReader* reader, |
| 360 QuicPacketPublicHeader* header); | 364 QuicPacketPublicHeader* header); |
| 361 | 365 |
| 362 // Processes the unauthenticated portion of the header into |header| from | 366 // Processes the unauthenticated portion of the header into |header| from |
| 363 // the current QuicDataReader. Returns true on success, false on failure. | 367 // the current QuicDataReader. Returns true on success, false on failure. |
| 364 bool ProcessUnauthenticatedHeader(QuicDataReader* encrypted_reader, | 368 bool ProcessUnauthenticatedHeader(QuicDataReader* encrypted_reader, |
| 365 QuicPacketHeader* header); | 369 QuicPacketHeader* header); |
| 366 | 370 |
| 367 bool ProcessPacketSequenceNumber(QuicDataReader* reader, | 371 // First processes possibly truncated packet number. Calculates the full |
| 368 QuicPacketNumberLength packet_number_length, | 372 // packet number from the truncated one and the last seen packet number, and |
| 369 QuicPacketNumber base_packet_number, | 373 // stores it to |packet_number|. |
| 370 QuicPacketNumber* packet_number); | 374 bool ProcessAndCalculatePacketNumber( |
| 375 QuicDataReader* reader, |
| 376 QuicPacketNumberLength packet_number_length, |
| 377 QuicPacketNumber base_packet_number, |
| 378 QuicPacketNumber* packet_number); |
| 371 bool ProcessFrameData(QuicDataReader* reader, const QuicPacketHeader& header); | 379 bool ProcessFrameData(QuicDataReader* reader, const QuicPacketHeader& header); |
| 372 bool ProcessStreamFrame(QuicDataReader* reader, | 380 bool ProcessStreamFrame(QuicDataReader* reader, |
| 373 uint8_t frame_type, | 381 uint8_t frame_type, |
| 374 QuicStreamFrame* frame); | 382 QuicStreamFrame* frame); |
| 375 bool ProcessAckFrame(QuicDataReader* reader, | 383 bool ProcessAckFrame(QuicDataReader* reader, |
| 376 uint8_t frame_type, | 384 uint8_t frame_type, |
| 377 QuicAckFrame* frame); | 385 QuicAckFrame* frame); |
| 378 bool ProcessTimestampsInAckFrame(QuicDataReader* reader, QuicAckFrame* frame); | 386 bool ProcessTimestampsInAckFrame(QuicDataReader* reader, QuicAckFrame* frame); |
| 379 bool ProcessStopWaitingFrame(QuicDataReader* reader, | 387 bool ProcessStopWaitingFrame(QuicDataReader* reader, |
| 380 const QuicPacketHeader& public_header, | 388 const QuicPacketHeader& public_header, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 418 QuicPacketNumberLength packet_number_length); | 426 QuicPacketNumberLength packet_number_length); |
| 419 | 427 |
| 420 // Computes the wire size in bytes of the |ack| frame. | 428 // Computes the wire size in bytes of the |ack| frame. |
| 421 size_t GetAckFrameSize(const QuicAckFrame& ack); | 429 size_t GetAckFrameSize(const QuicAckFrame& ack); |
| 422 | 430 |
| 423 // Computes the wire size in bytes of the payload of |frame|. | 431 // Computes the wire size in bytes of the payload of |frame|. |
| 424 size_t ComputeFrameLength(const QuicFrame& frame, | 432 size_t ComputeFrameLength(const QuicFrame& frame, |
| 425 bool last_frame_in_packet, | 433 bool last_frame_in_packet, |
| 426 QuicPacketNumberLength packet_number_length); | 434 QuicPacketNumberLength packet_number_length); |
| 427 | 435 |
| 428 static bool AppendPacketSequenceNumber( | 436 static bool AppendPacketNumber(QuicPacketNumberLength packet_number_length, |
| 429 QuicPacketNumberLength packet_number_length, | 437 QuicPacketNumber packet_number, |
| 430 QuicPacketNumber packet_number, | 438 QuicDataWriter* writer); |
| 431 QuicDataWriter* writer); | 439 static bool AppendStreamId(size_t stream_id_length, |
| 440 QuicStreamId stream_id, |
| 441 QuicDataWriter* writer); |
| 442 static bool AppendStreamOffset(size_t offset_length, |
| 443 QuicStreamOffset offset, |
| 444 QuicDataWriter* writer); |
| 432 | 445 |
| 433 // Appends a single ACK block to |writer| and returns true if the block was | 446 // Appends a single ACK block to |writer| and returns true if the block was |
| 434 // successfully appended. | 447 // successfully appended. |
| 435 static bool AppendAckBlock(uint8_t gap, | 448 static bool AppendAckBlock(uint8_t gap, |
| 436 QuicPacketNumberLength length_length, | 449 QuicPacketNumberLength length_length, |
| 437 QuicPacketNumber length, | 450 QuicPacketNumber length, |
| 438 QuicDataWriter* writer); | 451 QuicDataWriter* writer); |
| 439 | 452 |
| 440 static uint8_t GetSequenceNumberFlags( | 453 static uint8_t GetPacketNumberFlags( |
| 441 QuicPacketNumberLength packet_number_length); | 454 QuicPacketNumberLength packet_number_length); |
| 442 | 455 |
| 443 static AckFrameInfo GetAckFrameInfo(const QuicAckFrame& frame); | 456 static AckFrameInfo GetAckFrameInfo(const QuicAckFrame& frame); |
| 444 | 457 |
| 445 // The Append* methods attempt to write the provided header or frame using the | 458 // The Append* methods attempt to write the provided header or frame using the |
| 446 // |writer|, and return true if successful. | 459 // |writer|, and return true if successful. |
| 447 | 460 |
| 448 bool AppendAckFrameAndTypeByte(const QuicAckFrame& frame, | 461 bool AppendAckFrameAndTypeByte(const QuicAckFrame& frame, |
| 449 QuicDataWriter* builder); | 462 QuicDataWriter* builder); |
| 450 bool AppendTimestampToAckFrame(const QuicAckFrame& frame, | 463 bool AppendTimestampToAckFrame(const QuicAckFrame& frame, |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 515 QuicTime::Delta last_timestamp_; | 528 QuicTime::Delta last_timestamp_; |
| 516 // The diversification nonce from the last received packet. | 529 // The diversification nonce from the last received packet. |
| 517 DiversificationNonce last_nonce_; | 530 DiversificationNonce last_nonce_; |
| 518 | 531 |
| 519 DISALLOW_COPY_AND_ASSIGN(QuicFramer); | 532 DISALLOW_COPY_AND_ASSIGN(QuicFramer); |
| 520 }; | 533 }; |
| 521 | 534 |
| 522 } // namespace net | 535 } // namespace net |
| 523 | 536 |
| 524 #endif // NET_QUIC_CORE_QUIC_FRAMER_H_ | 537 #endif // NET_QUIC_CORE_QUIC_FRAMER_H_ |
| OLD | NEW |