Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(503)

Side by Side Diff: net/quic/quic_connection.h

Issue 559373003: Landing Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compiler errors Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/quic_config_test.cc ('k') | net/quic/quic_connection.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 // The entity that handles framing writes for a Quic client or server. 5 // The entity that handles framing writes for a Quic client or server.
6 // Each QuicSession will have a connection associated with it. 6 // Each QuicSession will have a connection associated with it.
7 // 7 //
8 // On the server side, the Dispatcher handles the raw reads, and hands off 8 // On the server side, the Dispatcher handles the raw reads, and hands off
9 // packets via ProcessUdpPacket for framing and processing. 9 // packets via ProcessUdpPacket for framing and processing.
10 // 10 //
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 46
47 class QuicClock; 47 class QuicClock;
48 class QuicConfig; 48 class QuicConfig;
49 class QuicConnection; 49 class QuicConnection;
50 class QuicDecrypter; 50 class QuicDecrypter;
51 class QuicEncrypter; 51 class QuicEncrypter;
52 class QuicFecGroup; 52 class QuicFecGroup;
53 class QuicRandom; 53 class QuicRandom;
54 54
55 namespace test { 55 namespace test {
56 class PacketSavingConnection;
56 class QuicConnectionPeer; 57 class QuicConnectionPeer;
57 } // namespace test 58 } // namespace test
58 59
59 // Class that receives callbacks from the connection when frames are received 60 // Class that receives callbacks from the connection when frames are received
60 // and when other interesting events happen. 61 // and when other interesting events happen.
61 class NET_EXPORT_PRIVATE QuicConnectionVisitorInterface { 62 class NET_EXPORT_PRIVATE QuicConnectionVisitorInterface {
62 public: 63 public:
63 virtual ~QuicConnectionVisitorInterface() {} 64 virtual ~QuicConnectionVisitorInterface() {}
64 65
65 // A simple visitor interface for dealing with data frames. 66 // A simple visitor interface for dealing with data frames.
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 virtual void OnFecData(const QuicFecData& fec) OVERRIDE; 368 virtual void OnFecData(const QuicFecData& fec) OVERRIDE;
368 virtual void OnPacketComplete() OVERRIDE; 369 virtual void OnPacketComplete() OVERRIDE;
369 370
370 // QuicPacketGenerator::DelegateInterface 371 // QuicPacketGenerator::DelegateInterface
371 virtual bool ShouldGeneratePacket(TransmissionType transmission_type, 372 virtual bool ShouldGeneratePacket(TransmissionType transmission_type,
372 HasRetransmittableData retransmittable, 373 HasRetransmittableData retransmittable,
373 IsHandshake handshake) OVERRIDE; 374 IsHandshake handshake) OVERRIDE;
374 virtual QuicAckFrame* CreateAckFrame() OVERRIDE; 375 virtual QuicAckFrame* CreateAckFrame() OVERRIDE;
375 virtual QuicCongestionFeedbackFrame* CreateFeedbackFrame() OVERRIDE; 376 virtual QuicCongestionFeedbackFrame* CreateFeedbackFrame() OVERRIDE;
376 virtual QuicStopWaitingFrame* CreateStopWaitingFrame() OVERRIDE; 377 virtual QuicStopWaitingFrame* CreateStopWaitingFrame() OVERRIDE;
377 virtual bool OnSerializedPacket(const SerializedPacket& packet) OVERRIDE; 378 virtual void OnSerializedPacket(const SerializedPacket& packet) OVERRIDE;
378 379
379 // QuicSentPacketManager::NetworkChangeVisitor 380 // QuicSentPacketManager::NetworkChangeVisitor
380 virtual void OnCongestionWindowChange( 381 virtual void OnCongestionWindowChange(
381 QuicByteCount congestion_window) OVERRIDE; 382 QuicByteCount congestion_window) OVERRIDE;
382 383
383 // Called by the crypto stream when the handshake completes. In the server's 384 // Called by the crypto stream when the handshake completes. In the server's
384 // case this is when the SHLO has been ACKed. Clients call this on receipt of 385 // case this is when the SHLO has been ACKed. Clients call this on receipt of
385 // the SHLO. 386 // the SHLO.
386 void OnHandshakeComplete(); 387 void OnHandshakeComplete();
387 388
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
445 void SendPing(); 446 void SendPing();
446 447
447 // Sets up a packet with an QuicAckFrame and sends it out. 448 // Sets up a packet with an QuicAckFrame and sends it out.
448 void SendAck(); 449 void SendAck();
449 450
450 // Called when an RTO fires. Resets the retransmission alarm if there are 451 // Called when an RTO fires. Resets the retransmission alarm if there are
451 // remaining unacked packets. 452 // remaining unacked packets.
452 void OnRetransmissionTimeout(); 453 void OnRetransmissionTimeout();
453 454
454 // Retransmits all unacked packets with retransmittable frames if 455 // Retransmits all unacked packets with retransmittable frames if
455 // |retransmission_type| is ALL_PACKETS, otherwise retransmits only initially 456 // |retransmission_type| is ALL_UNACKED_PACKETS, otherwise retransmits only
456 // encrypted packets. Used when the negotiated protocol version is different 457 // initially encrypted packets. Used when the negotiated protocol version is
457 // from what was initially assumed and when the visitor wants to re-transmit 458 // different from what was initially assumed and when the initial encryption
458 // initially encrypted packets when the initial encrypter changes. 459 // changes.
459 void RetransmitUnackedPackets(RetransmissionType retransmission_type); 460 void RetransmitUnackedPackets(TransmissionType retransmission_type);
460 461
461 // Calls |sent_packet_manager_|'s NeuterUnencryptedPackets. Used when the 462 // Calls |sent_packet_manager_|'s NeuterUnencryptedPackets. Used when the
462 // connection becomes forward secure and hasn't received acks for all packets. 463 // connection becomes forward secure and hasn't received acks for all packets.
463 void NeuterUnencryptedPackets(); 464 void NeuterUnencryptedPackets();
464 465
465 // Changes the encrypter used for level |level| to |encrypter|. The function 466 // Changes the encrypter used for level |level| to |encrypter|. The function
466 // takes ownership of |encrypter|. 467 // takes ownership of |encrypter|.
467 void SetEncrypter(EncryptionLevel level, QuicEncrypter* encrypter); 468 void SetEncrypter(EncryptionLevel level, QuicEncrypter* encrypter);
468 const QuicEncrypter* encrypter(EncryptionLevel level) const; 469 const QuicEncrypter* encrypter(EncryptionLevel level) const;
469 470
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 // outgoing packet. 515 // outgoing packet.
515 ScopedPacketBundler(QuicConnection* connection, AckBundling send_ack); 516 ScopedPacketBundler(QuicConnection* connection, AckBundling send_ack);
516 ~ScopedPacketBundler(); 517 ~ScopedPacketBundler();
517 518
518 private: 519 private:
519 QuicConnection* connection_; 520 QuicConnection* connection_;
520 bool already_in_batch_mode_; 521 bool already_in_batch_mode_;
521 }; 522 };
522 523
523 protected: 524 protected:
525 // Packets which have not been written to the wire.
526 // Owns the QuicPacket* packet.
527 struct QueuedPacket {
528 QueuedPacket(SerializedPacket packet,
529 EncryptionLevel level);
530 QueuedPacket(SerializedPacket packet,
531 EncryptionLevel level,
532 TransmissionType transmission_type,
533 QuicPacketSequenceNumber original_sequence_number);
534
535 SerializedPacket serialized_packet;
536 const EncryptionLevel encryption_level;
537 TransmissionType transmission_type;
538 // The packet's original sequence number if it is a retransmission.
539 // Otherwise it must be 0.
540 QuicPacketSequenceNumber original_sequence_number;
541 };
542
524 // Do any work which logically would be done in OnPacket but can not be 543 // Do any work which logically would be done in OnPacket but can not be
525 // safely done until the packet is validated. Returns true if the packet 544 // safely done until the packet is validated. Returns true if the packet
526 // can be handled, false otherwise. 545 // can be handled, false otherwise.
527 virtual bool ProcessValidatedPacket(); 546 virtual bool ProcessValidatedPacket();
528 547
529 // Send a packet to the peer using encryption |level|. If |sequence_number| 548 // Send a packet to the peer, and takes ownership of the packet if the packet
530 // is present in the |retransmission_map_|, then contents of this packet will 549 // cannot be written immediately.
531 // be retransmitted with a new sequence number if it's not acked by the peer. 550 virtual void SendOrQueuePacket(QueuedPacket packet);
532 // Deletes |packet| if WritePacket call succeeds, or transfers ownership to
533 // QueuedPacket, ultimately deleted in WriteQueuedPackets. Updates the
534 // entropy map corresponding to |sequence_number| using |entropy_hash|.
535 // |transmission_type| and |retransmittable| are supplied to the congestion
536 // manager, and when |forced| is true, it bypasses the congestion manager.
537 // TODO(wtc): none of the callers check the return value.
538 virtual bool SendOrQueuePacket(EncryptionLevel level,
539 const SerializedPacket& packet,
540 TransmissionType transmission_type);
541 551
542 QuicConnectionHelperInterface* helper() { return helper_; } 552 QuicConnectionHelperInterface* helper() { return helper_; }
543 553
544 // Selects and updates the version of the protocol being used by selecting a 554 // Selects and updates the version of the protocol being used by selecting a
545 // version from |available_versions| which is also supported. Returns true if 555 // version from |available_versions| which is also supported. Returns true if
546 // such a version exists, false otherwise. 556 // such a version exists, false otherwise.
547 bool SelectMutualVersion(const QuicVersionVector& available_versions); 557 bool SelectMutualVersion(const QuicVersionVector& available_versions);
548 558
549 QuicPacketWriter* writer() { return writer_; } 559 QuicPacketWriter* writer() { return writer_; }
550 560
551 bool peer_port_changed() const { return peer_port_changed_; } 561 bool peer_port_changed() const { return peer_port_changed_; }
552 562
553 QuicPacketSequenceNumber sequence_number_of_last_sent_packet() const { 563 QuicPacketSequenceNumber sequence_number_of_last_sent_packet() const {
554 return sequence_number_of_last_sent_packet_; 564 return sequence_number_of_last_sent_packet_;
555 } 565 }
556 566
557 private: 567 private:
558 friend class test::QuicConnectionPeer; 568 friend class test::QuicConnectionPeer;
559 569 friend class test::PacketSavingConnection;
560 // Packets which have not been written to the wire.
561 // Owns the QuicPacket* packet.
562 struct QueuedPacket {
563 QueuedPacket(SerializedPacket packet,
564 EncryptionLevel level,
565 TransmissionType transmission_type);
566
567 SerializedPacket serialized_packet;
568 const EncryptionLevel encryption_level;
569 TransmissionType transmission_type;
570 };
571 570
572 typedef std::list<QueuedPacket> QueuedPacketList; 571 typedef std::list<QueuedPacket> QueuedPacketList;
573 typedef std::map<QuicFecGroupNumber, QuicFecGroup*> FecGroupMap; 572 typedef std::map<QuicFecGroupNumber, QuicFecGroup*> FecGroupMap;
574 573
575 // Writes the given packet to socket, encrypted with packet's 574 // Writes the given packet to socket, encrypted with packet's
576 // encryption_level. Returns true on successful write, and false if the writer 575 // encryption_level. Returns true on successful write, and false if the writer
577 // was blocked and the write needs to be tried again. Behavior is undefined 576 // was blocked and the write needs to be tried again. Notifies the
578 // if connection is not established or broken. Notifies the SentPacketManager 577 // SentPacketManager when the write is successful and sets
579 // when the write is successful. 578 // retransmittable frames to NULL.
580 // Saves the connection close packet for later transmission, even if the 579 // Saves the connection close packet for later transmission, even if the
581 // writer is write blocked. 580 // writer is write blocked.
582 bool WritePacket(const QueuedPacket& packet); 581 bool WritePacket(QueuedPacket* packet);
582
583 // Does the main work of WritePacket, but does not delete the packet or
584 // retransmittable frames upon success.
585 bool WritePacketInner(QueuedPacket* packet);
583 586
584 // Make sure an ack we got from our peer is sane. 587 // Make sure an ack we got from our peer is sane.
585 bool ValidateAckFrame(const QuicAckFrame& incoming_ack); 588 bool ValidateAckFrame(const QuicAckFrame& incoming_ack);
586 589
587 // Make sure a stop waiting we got from our peer is sane. 590 // Make sure a stop waiting we got from our peer is sane.
588 bool ValidateStopWaitingFrame(const QuicStopWaitingFrame& stop_waiting); 591 bool ValidateStopWaitingFrame(const QuicStopWaitingFrame& stop_waiting);
589 592
590 // Sends a version negotiation packet to the peer. 593 // Sends a version negotiation packet to the peer.
591 void SendVersionNegotiationPacket(); 594 void SendVersionNegotiationPacket();
592 595
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
802 // If non-empty this contains the set of versions received in a 805 // If non-empty this contains the set of versions received in a
803 // version negotiation packet. 806 // version negotiation packet.
804 QuicVersionVector server_supported_versions_; 807 QuicVersionVector server_supported_versions_;
805 808
806 DISALLOW_COPY_AND_ASSIGN(QuicConnection); 809 DISALLOW_COPY_AND_ASSIGN(QuicConnection);
807 }; 810 };
808 811
809 } // namespace net 812 } // namespace net
810 813
811 #endif // NET_QUIC_QUIC_CONNECTION_H_ 814 #endif // NET_QUIC_QUIC_CONNECTION_H_
OLDNEW
« no previous file with comments | « net/quic/quic_config_test.cc ('k') | net/quic/quic_connection.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698