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 |