| 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_QUIC_FRAMER_H_ | 5 #ifndef NET_QUIC_QUIC_FRAMER_H_ |
| 6 #define NET_QUIC_QUIC_FRAMER_H_ | 6 #define NET_QUIC_QUIC_FRAMER_H_ |
| 7 | 7 |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 QuicSequenceNumberLength sequence_number_length); | 294 QuicSequenceNumberLength sequence_number_length); |
| 295 | 295 |
| 296 // Returns the associated data from the encrypted packet |encrypted| as a | 296 // Returns the associated data from the encrypted packet |encrypted| as a |
| 297 // stringpiece. | 297 // stringpiece. |
| 298 static base::StringPiece GetAssociatedDataFromEncryptedPacket( | 298 static base::StringPiece GetAssociatedDataFromEncryptedPacket( |
| 299 const QuicEncryptedPacket& encrypted, | 299 const QuicEncryptedPacket& encrypted, |
| 300 QuicConnectionIdLength connection_id_length, | 300 QuicConnectionIdLength connection_id_length, |
| 301 bool includes_version, | 301 bool includes_version, |
| 302 QuicSequenceNumberLength sequence_number_length); | 302 QuicSequenceNumberLength sequence_number_length); |
| 303 | 303 |
| 304 // Returns a SerializedPacket whose |packet| member is owned by the caller, | 304 // Returns a QuicPacket* that is owned by the caller, is created from |
| 305 // is created from the first |num_frames| frames, or is nullptr if the packet | 305 // |frames|. Returns nullptr if the packet could not be created. |
| 306 // could not be created. The packet must be of size |packet_size|. | 306 // The packet must be of size |packet_size|. |
| 307 SerializedPacket BuildDataPacket(const QuicPacketHeader& header, | 307 QuicPacket* BuildDataPacket(const QuicPacketHeader& header, |
| 308 const QuicFrames& frames, | 308 const QuicFrames& frames, |
| 309 size_t packet_size); | 309 char* buffer, |
| 310 size_t packet_length); |
| 310 | 311 |
| 311 // Returns a SerializedPacket whose |packet| member is owned by the caller, | 312 // Returns a QuicPacket* that is owned by the caller, and is populated with |
| 312 // and is populated with the fields in |header| and |fec|, or is nullptr if | 313 // the fields in |header| and |fec|. Returns nullptr if the packet could |
| 313 // the packet could not be created. | 314 // not be created. |
| 314 SerializedPacket BuildFecPacket(const QuicPacketHeader& header, | 315 QuicPacket* BuildFecPacket(const QuicPacketHeader& header, |
| 315 const QuicFecData& fec); | 316 const QuicFecData& fec); |
| 316 | 317 |
| 317 // Returns a new public reset packet, owned by the caller. | 318 // Returns a new public reset packet, owned by the caller. |
| 318 static QuicEncryptedPacket* BuildPublicResetPacket( | 319 static QuicEncryptedPacket* BuildPublicResetPacket( |
| 319 const QuicPublicResetPacket& packet); | 320 const QuicPublicResetPacket& packet); |
| 320 | 321 |
| 321 QuicEncryptedPacket* BuildVersionNegotiationPacket( | 322 QuicEncryptedPacket* BuildVersionNegotiationPacket( |
| 322 const QuicPacketPublicHeader& header, | 323 const QuicPacketPublicHeader& header, |
| 323 const QuicVersionVector& supported_versions); | 324 const QuicVersionVector& supported_versions); |
| 324 | 325 |
| 325 // SetDecrypter sets the primary decrypter, replacing any that already exists, | 326 // SetDecrypter sets the primary decrypter, replacing any that already exists, |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 | 365 |
| 365 void SetSupportedVersions(const QuicVersionVector& versions) { | 366 void SetSupportedVersions(const QuicVersionVector& versions) { |
| 366 supported_versions_ = versions; | 367 supported_versions_ = versions; |
| 367 quic_version_ = versions[0]; | 368 quic_version_ = versions[0]; |
| 368 } | 369 } |
| 369 | 370 |
| 370 void set_validate_flags(bool value) { validate_flags_ = value; } | 371 void set_validate_flags(bool value) { validate_flags_ = value; } |
| 371 | 372 |
| 372 bool is_server() const { return is_server_; } | 373 bool is_server() const { return is_server_; } |
| 373 | 374 |
| 375 static QuicPacketEntropyHash GetPacketEntropyHash( |
| 376 const QuicPacketHeader& header); |
| 377 |
| 374 private: | 378 private: |
| 375 friend class test::QuicFramerPeer; | 379 friend class test::QuicFramerPeer; |
| 376 | 380 |
| 377 typedef std::map<QuicPacketSequenceNumber, uint8> NackRangeMap; | 381 typedef std::map<QuicPacketSequenceNumber, uint8> NackRangeMap; |
| 378 | 382 |
| 379 struct AckFrameInfo { | 383 struct AckFrameInfo { |
| 380 AckFrameInfo(); | 384 AckFrameInfo(); |
| 381 ~AckFrameInfo(); | 385 ~AckFrameInfo(); |
| 382 | 386 |
| 383 // The maximum delta between ranges. | 387 // The maximum delta between ranges. |
| 384 QuicPacketSequenceNumber max_delta; | 388 QuicPacketSequenceNumber max_delta; |
| 385 // Nack ranges starting with start sequence numbers and lengths. | 389 // Nack ranges starting with start sequence numbers and lengths. |
| 386 NackRangeMap nack_ranges; | 390 NackRangeMap nack_ranges; |
| 387 }; | 391 }; |
| 388 | 392 |
| 389 QuicPacketEntropyHash GetPacketEntropyHash( | |
| 390 const QuicPacketHeader& header) const; | |
| 391 | |
| 392 bool ProcessDataPacket(const QuicPacketPublicHeader& public_header, | 393 bool ProcessDataPacket(const QuicPacketPublicHeader& public_header, |
| 393 const QuicEncryptedPacket& packet); | 394 const QuicEncryptedPacket& packet, |
| 395 char* decrypted_buffer, |
| 396 size_t buffer_length); |
| 394 | 397 |
| 395 bool ProcessPublicResetPacket(const QuicPacketPublicHeader& public_header); | 398 bool ProcessPublicResetPacket(const QuicPacketPublicHeader& public_header); |
| 396 | 399 |
| 397 bool ProcessVersionNegotiationPacket(QuicPacketPublicHeader* public_header); | 400 bool ProcessVersionNegotiationPacket(QuicPacketPublicHeader* public_header); |
| 398 | 401 |
| 399 bool ProcessPublicHeader(QuicPacketPublicHeader* header); | 402 bool ProcessPublicHeader(QuicPacketPublicHeader* header); |
| 400 | 403 |
| 404 // |decrypted_buffer| must be allocated to be large enough to hold the |
| 405 // unencrypted contents of |packet|. |
| 401 bool ProcessPacketHeader(QuicPacketHeader* header, | 406 bool ProcessPacketHeader(QuicPacketHeader* header, |
| 402 const QuicEncryptedPacket& packet); | 407 const QuicEncryptedPacket& packet, |
| 408 char* decrypted_buffer, |
| 409 size_t buffer_length); |
| 403 | 410 |
| 404 bool ProcessPacketSequenceNumber( | 411 bool ProcessPacketSequenceNumber( |
| 405 QuicSequenceNumberLength sequence_number_length, | 412 QuicSequenceNumberLength sequence_number_length, |
| 406 QuicPacketSequenceNumber* sequence_number); | 413 QuicPacketSequenceNumber* sequence_number); |
| 407 bool ProcessFrameData(const QuicPacketHeader& header); | 414 bool ProcessFrameData(const QuicPacketHeader& header); |
| 408 bool ProcessStreamFrame(uint8 frame_type, QuicStreamFrame* frame); | 415 bool ProcessStreamFrame(uint8 frame_type, QuicStreamFrame* frame); |
| 409 bool ProcessAckFrame(uint8 frame_type, QuicAckFrame* frame); | 416 bool ProcessAckFrame(uint8 frame_type, QuicAckFrame* frame); |
| 410 bool ProcessTimestampsInAckFrame(QuicAckFrame* frame); | 417 bool ProcessTimestampsInAckFrame(QuicAckFrame* frame); |
| 411 bool ProcessStopWaitingFrame(const QuicPacketHeader& public_header, | 418 bool ProcessStopWaitingFrame(const QuicPacketHeader& public_header, |
| 412 QuicStopWaitingFrame* stop_waiting); | 419 QuicStopWaitingFrame* stop_waiting); |
| 413 bool ProcessRstStreamFrame(QuicRstStreamFrame* frame); | 420 bool ProcessRstStreamFrame(QuicRstStreamFrame* frame); |
| 414 bool ProcessConnectionCloseFrame(QuicConnectionCloseFrame* frame); | 421 bool ProcessConnectionCloseFrame(QuicConnectionCloseFrame* frame); |
| 415 bool ProcessGoAwayFrame(QuicGoAwayFrame* frame); | 422 bool ProcessGoAwayFrame(QuicGoAwayFrame* frame); |
| 416 bool ProcessWindowUpdateFrame(QuicWindowUpdateFrame* frame); | 423 bool ProcessWindowUpdateFrame(QuicWindowUpdateFrame* frame); |
| 417 bool ProcessBlockedFrame(QuicBlockedFrame* frame); | 424 bool ProcessBlockedFrame(QuicBlockedFrame* frame); |
| 418 | 425 |
| 419 bool DecryptPayload(const QuicPacketHeader& header, | 426 bool DecryptPayload(const QuicPacketHeader& header, |
| 420 const QuicEncryptedPacket& packet); | 427 const QuicEncryptedPacket& packet, |
| 428 char* decrypted_buffer, |
| 429 size_t buffer_length); |
| 421 | 430 |
| 422 // Returns the full packet sequence number from the truncated | 431 // Returns the full packet sequence number from the truncated |
| 423 // wire format version and the last seen packet sequence number. | 432 // wire format version and the last seen packet sequence number. |
| 424 QuicPacketSequenceNumber CalculatePacketSequenceNumberFromWire( | 433 QuicPacketSequenceNumber CalculatePacketSequenceNumberFromWire( |
| 425 QuicSequenceNumberLength sequence_number_length, | 434 QuicSequenceNumberLength sequence_number_length, |
| 426 QuicPacketSequenceNumber packet_sequence_number) const; | 435 QuicPacketSequenceNumber packet_sequence_number) const; |
| 427 | 436 |
| 428 // Returns the QuicTime::Delta corresponding to the time from when the framer | 437 // Returns the QuicTime::Delta corresponding to the time from when the framer |
| 429 // was created. | 438 // was created. |
| 430 const QuicTime::Delta CalculateTimestampFromWire(uint32 time_delta_us); | 439 const QuicTime::Delta CalculateTimestampFromWire(uint32 time_delta_us); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 490 std::string detailed_error_; | 499 std::string detailed_error_; |
| 491 scoped_ptr<QuicDataReader> reader_; | 500 scoped_ptr<QuicDataReader> reader_; |
| 492 QuicFramerVisitorInterface* visitor_; | 501 QuicFramerVisitorInterface* visitor_; |
| 493 QuicFecBuilderInterface* fec_builder_; | 502 QuicFecBuilderInterface* fec_builder_; |
| 494 QuicReceivedEntropyHashCalculatorInterface* entropy_calculator_; | 503 QuicReceivedEntropyHashCalculatorInterface* entropy_calculator_; |
| 495 QuicErrorCode error_; | 504 QuicErrorCode error_; |
| 496 // Updated by ProcessPacketHeader when it succeeds. | 505 // Updated by ProcessPacketHeader when it succeeds. |
| 497 QuicPacketSequenceNumber last_sequence_number_; | 506 QuicPacketSequenceNumber last_sequence_number_; |
| 498 // Updated by WritePacketHeader. | 507 // Updated by WritePacketHeader. |
| 499 QuicConnectionId last_serialized_connection_id_; | 508 QuicConnectionId last_serialized_connection_id_; |
| 500 // Buffer containing decrypted payload data during parsing. | |
| 501 scoped_ptr<QuicData> decrypted_; | |
| 502 // Version of the protocol being used. | 509 // Version of the protocol being used. |
| 503 QuicVersion quic_version_; | 510 QuicVersion quic_version_; |
| 504 // This vector contains QUIC versions which we currently support. | 511 // This vector contains QUIC versions which we currently support. |
| 505 // This should be ordered such that the highest supported version is the first | 512 // This should be ordered such that the highest supported version is the first |
| 506 // element, with subsequent elements in descending order (versions can be | 513 // element, with subsequent elements in descending order (versions can be |
| 507 // skipped as necessary). | 514 // skipped as necessary). |
| 508 QuicVersionVector supported_versions_; | 515 QuicVersionVector supported_versions_; |
| 509 // Primary decrypter used to decrypt packets during parsing. | 516 // Primary decrypter used to decrypt packets during parsing. |
| 510 scoped_ptr<QuicDecrypter> decrypter_; | 517 scoped_ptr<QuicDecrypter> decrypter_; |
| 511 // Alternative decrypter that can also be used to decrypt packets. | 518 // Alternative decrypter that can also be used to decrypt packets. |
| (...skipping 19 matching lines...) Expand all Loading... |
| 531 // The time delta computed for the last timestamp frame. This is relative to | 538 // The time delta computed for the last timestamp frame. This is relative to |
| 532 // the creation_time. | 539 // the creation_time. |
| 533 QuicTime::Delta last_timestamp_; | 540 QuicTime::Delta last_timestamp_; |
| 534 | 541 |
| 535 DISALLOW_COPY_AND_ASSIGN(QuicFramer); | 542 DISALLOW_COPY_AND_ASSIGN(QuicFramer); |
| 536 }; | 543 }; |
| 537 | 544 |
| 538 } // namespace net | 545 } // namespace net |
| 539 | 546 |
| 540 #endif // NET_QUIC_QUIC_FRAMER_H_ | 547 #endif // NET_QUIC_QUIC_FRAMER_H_ |
| OLD | NEW |