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 |