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 // 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 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 // Called when a StreamFrame has been parsed. | 141 // Called when a StreamFrame has been parsed. |
142 virtual void OnStreamFrame(const QuicStreamFrame& frame) = 0; | 142 virtual void OnStreamFrame(const QuicStreamFrame& frame) = 0; |
143 | 143 |
144 // Called when a AckFrame has been parsed. | 144 // Called when a AckFrame has been parsed. |
145 virtual void OnAckFrame(const QuicAckFrame& frame) = 0; | 145 virtual void OnAckFrame(const QuicAckFrame& frame) = 0; |
146 | 146 |
147 // Called when a CongestionFeedbackFrame has been parsed. | 147 // Called when a CongestionFeedbackFrame has been parsed. |
148 virtual void OnCongestionFeedbackFrame( | 148 virtual void OnCongestionFeedbackFrame( |
149 const QuicCongestionFeedbackFrame& frame) = 0; | 149 const QuicCongestionFeedbackFrame& frame) = 0; |
150 | 150 |
| 151 // Called when a StopWaitingFrame has been parsed. |
| 152 virtual void OnStopWaitingFrame(const QuicStopWaitingFrame& frame) = 0; |
| 153 |
151 // Called when a RstStreamFrame has been parsed. | 154 // Called when a RstStreamFrame has been parsed. |
152 virtual void OnRstStreamFrame(const QuicRstStreamFrame& frame) = 0; | 155 virtual void OnRstStreamFrame(const QuicRstStreamFrame& frame) = 0; |
153 | 156 |
154 // Called when a ConnectionCloseFrame has been parsed. | 157 // Called when a ConnectionCloseFrame has been parsed. |
155 virtual void OnConnectionCloseFrame( | 158 virtual void OnConnectionCloseFrame( |
156 const QuicConnectionCloseFrame& frame) = 0; | 159 const QuicConnectionCloseFrame& frame) = 0; |
157 | 160 |
158 // Called when a public reset packet has been received. | 161 // Called when a public reset packet has been received. |
159 virtual void OnPublicResetPacket(const QuicPublicResetPacket& packet) = 0; | 162 virtual void OnPublicResetPacket(const QuicPublicResetPacket& packet) = 0; |
160 | 163 |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 virtual void OnRevivedPacket() OVERRIDE; | 298 virtual void OnRevivedPacket() OVERRIDE; |
296 virtual bool OnUnauthenticatedPublicHeader( | 299 virtual bool OnUnauthenticatedPublicHeader( |
297 const QuicPacketPublicHeader& header) OVERRIDE; | 300 const QuicPacketPublicHeader& header) OVERRIDE; |
298 virtual bool OnUnauthenticatedHeader(const QuicPacketHeader& header) OVERRIDE; | 301 virtual bool OnUnauthenticatedHeader(const QuicPacketHeader& header) OVERRIDE; |
299 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE; | 302 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE; |
300 virtual void OnFecProtectedPayload(base::StringPiece payload) OVERRIDE; | 303 virtual void OnFecProtectedPayload(base::StringPiece payload) OVERRIDE; |
301 virtual bool OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE; | 304 virtual bool OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE; |
302 virtual bool OnAckFrame(const QuicAckFrame& frame) OVERRIDE; | 305 virtual bool OnAckFrame(const QuicAckFrame& frame) OVERRIDE; |
303 virtual bool OnCongestionFeedbackFrame( | 306 virtual bool OnCongestionFeedbackFrame( |
304 const QuicCongestionFeedbackFrame& frame) OVERRIDE; | 307 const QuicCongestionFeedbackFrame& frame) OVERRIDE; |
| 308 virtual bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) OVERRIDE; |
305 virtual bool OnRstStreamFrame(const QuicRstStreamFrame& frame) OVERRIDE; | 309 virtual bool OnRstStreamFrame(const QuicRstStreamFrame& frame) OVERRIDE; |
306 virtual bool OnConnectionCloseFrame( | 310 virtual bool OnConnectionCloseFrame( |
307 const QuicConnectionCloseFrame& frame) OVERRIDE; | 311 const QuicConnectionCloseFrame& frame) OVERRIDE; |
308 virtual bool OnGoAwayFrame(const QuicGoAwayFrame& frame) OVERRIDE; | 312 virtual bool OnGoAwayFrame(const QuicGoAwayFrame& frame) OVERRIDE; |
309 virtual bool OnWindowUpdateFrame(const QuicWindowUpdateFrame& frame) OVERRIDE; | 313 virtual bool OnWindowUpdateFrame(const QuicWindowUpdateFrame& frame) OVERRIDE; |
310 virtual bool OnBlockedFrame(const QuicBlockedFrame& frame) OVERRIDE; | 314 virtual bool OnBlockedFrame(const QuicBlockedFrame& frame) OVERRIDE; |
311 virtual void OnFecData(const QuicFecData& fec) OVERRIDE; | 315 virtual void OnFecData(const QuicFecData& fec) OVERRIDE; |
312 virtual void OnPacketComplete() OVERRIDE; | 316 virtual void OnPacketComplete() OVERRIDE; |
313 | 317 |
314 // QuicPacketGenerator::DelegateInterface | 318 // QuicPacketGenerator::DelegateInterface |
315 virtual bool ShouldGeneratePacket(TransmissionType transmission_type, | 319 virtual bool ShouldGeneratePacket(TransmissionType transmission_type, |
316 HasRetransmittableData retransmittable, | 320 HasRetransmittableData retransmittable, |
317 IsHandshake handshake) OVERRIDE; | 321 IsHandshake handshake) OVERRIDE; |
318 virtual QuicAckFrame* CreateAckFrame() OVERRIDE; | 322 virtual QuicAckFrame* CreateAckFrame() OVERRIDE; |
319 virtual QuicCongestionFeedbackFrame* CreateFeedbackFrame() OVERRIDE; | 323 virtual QuicCongestionFeedbackFrame* CreateFeedbackFrame() OVERRIDE; |
| 324 virtual QuicStopWaitingFrame* CreateStopWaitingFrame() OVERRIDE; |
320 virtual bool OnSerializedPacket(const SerializedPacket& packet) OVERRIDE; | 325 virtual bool OnSerializedPacket(const SerializedPacket& packet) OVERRIDE; |
321 | 326 |
322 // Accessors | 327 // Accessors |
323 void set_visitor(QuicConnectionVisitorInterface* visitor) { | 328 void set_visitor(QuicConnectionVisitorInterface* visitor) { |
324 visitor_ = visitor; | 329 visitor_ = visitor; |
325 } | 330 } |
326 void set_debug_visitor(QuicConnectionDebugVisitorInterface* debug_visitor) { | 331 void set_debug_visitor(QuicConnectionDebugVisitorInterface* debug_visitor) { |
327 debug_visitor_ = debug_visitor; | 332 debug_visitor_ = debug_visitor; |
328 packet_generator_.set_debug_delegate(debug_visitor); | 333 packet_generator_.set_debug_delegate(debug_visitor); |
329 } | 334 } |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
418 const QuicDecrypter* decrypter() const; | 423 const QuicDecrypter* decrypter() const; |
419 const QuicDecrypter* alternative_decrypter() const; | 424 const QuicDecrypter* alternative_decrypter() const; |
420 | 425 |
421 bool is_server() const { return is_server_; } | 426 bool is_server() const { return is_server_; } |
422 | 427 |
423 // Returns the underlying sent packet manager. | 428 // Returns the underlying sent packet manager. |
424 const QuicSentPacketManager& sent_packet_manager() const { | 429 const QuicSentPacketManager& sent_packet_manager() const { |
425 return sent_packet_manager_; | 430 return sent_packet_manager_; |
426 } | 431 } |
427 | 432 |
| 433 // Make sure a stop waiting we got from our peer is sane. |
| 434 bool ValidateStopWaitingFrame(const QuicStopWaitingFrame& stop_waiting); |
| 435 |
428 bool CanWrite(TransmissionType transmission_type, | 436 bool CanWrite(TransmissionType transmission_type, |
429 HasRetransmittableData retransmittable, | 437 HasRetransmittableData retransmittable, |
430 IsHandshake handshake); | 438 IsHandshake handshake); |
431 | 439 |
432 protected: | 440 protected: |
433 // Send a packet to the peer using encryption |level|. If |sequence_number| | 441 // Send a packet to the peer using encryption |level|. If |sequence_number| |
434 // is present in the |retransmission_map_|, then contents of this packet will | 442 // is present in the |retransmission_map_|, then contents of this packet will |
435 // be retransmitted with a new sequence number if it's not acked by the peer. | 443 // be retransmitted with a new sequence number if it's not acked by the peer. |
436 // Deletes |packet| if WritePacket call succeeds, or transfers ownership to | 444 // Deletes |packet| if WritePacket call succeeds, or transfers ownership to |
437 // QueuedPacket, ultimately deleted in WriteQueuedPackets. Updates the | 445 // QueuedPacket, ultimately deleted in WriteQueuedPackets. Updates the |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
542 | 550 |
543 // Attempts to process any queued undecryptable packets. | 551 // Attempts to process any queued undecryptable packets. |
544 void MaybeProcessUndecryptablePackets(); | 552 void MaybeProcessUndecryptablePackets(); |
545 | 553 |
546 // If a packet can be revived from the current FEC group, then | 554 // If a packet can be revived from the current FEC group, then |
547 // revive and process the packet. | 555 // revive and process the packet. |
548 void MaybeProcessRevivedPacket(); | 556 void MaybeProcessRevivedPacket(); |
549 | 557 |
550 void ProcessAckFrame(const QuicAckFrame& incoming_ack); | 558 void ProcessAckFrame(const QuicAckFrame& incoming_ack); |
551 | 559 |
552 // Update the |sent_info| for an outgoing ack. | 560 void ProcessStopWaitingFrame(const QuicStopWaitingFrame& stop_waiting); |
553 void UpdateSentPacketInfo(SentPacketInfo* sent_info); | 561 |
| 562 // Update |stop_waiting| for an outgoing ack. |
| 563 void UpdateStopWaiting(QuicStopWaitingFrame* stop_waiting); |
554 | 564 |
555 // Queues an ack or sets the ack alarm when an incoming packet arrives that | 565 // Queues an ack or sets the ack alarm when an incoming packet arrives that |
556 // should be acked. | 566 // should be acked. |
557 void MaybeQueueAck(); | 567 void MaybeQueueAck(); |
558 | 568 |
559 // Checks if the last packet should instigate an ack. | 569 // Checks if the last packet should instigate an ack. |
560 bool ShouldLastPacketInstigateAck() const; | 570 bool ShouldLastPacketInstigateAck() const; |
561 | 571 |
562 // Checks if the peer is waiting for packets that have been given up on, and | 572 // Checks if the peer is waiting for packets that have been given up on, and |
563 // therefore an ack frame should be sent with a larger least_unacked. | 573 // therefore an ack frame should be sent with a larger least_unacked. |
(...skipping 26 matching lines...) Expand all Loading... |
590 // client. | 600 // client. |
591 IPEndPoint self_address_; | 601 IPEndPoint self_address_; |
592 IPEndPoint peer_address_; | 602 IPEndPoint peer_address_; |
593 | 603 |
594 bool last_packet_revived_; // True if the last packet was revived from FEC. | 604 bool last_packet_revived_; // True if the last packet was revived from FEC. |
595 size_t last_size_; // Size of the last received packet. | 605 size_t last_size_; // Size of the last received packet. |
596 QuicPacketHeader last_header_; | 606 QuicPacketHeader last_header_; |
597 std::vector<QuicStreamFrame> last_stream_frames_; | 607 std::vector<QuicStreamFrame> last_stream_frames_; |
598 std::vector<QuicAckFrame> last_ack_frames_; | 608 std::vector<QuicAckFrame> last_ack_frames_; |
599 std::vector<QuicCongestionFeedbackFrame> last_congestion_frames_; | 609 std::vector<QuicCongestionFeedbackFrame> last_congestion_frames_; |
| 610 std::vector<QuicStopWaitingFrame> last_stop_waiting_frames_; |
600 std::vector<QuicRstStreamFrame> last_rst_frames_; | 611 std::vector<QuicRstStreamFrame> last_rst_frames_; |
601 std::vector<QuicGoAwayFrame> last_goaway_frames_; | 612 std::vector<QuicGoAwayFrame> last_goaway_frames_; |
602 std::vector<QuicWindowUpdateFrame> last_window_update_frames_; | 613 std::vector<QuicWindowUpdateFrame> last_window_update_frames_; |
603 std::vector<QuicBlockedFrame> last_blocked_frames_; | 614 std::vector<QuicBlockedFrame> last_blocked_frames_; |
604 std::vector<QuicConnectionCloseFrame> last_close_frames_; | 615 std::vector<QuicConnectionCloseFrame> last_close_frames_; |
605 | 616 |
606 QuicCongestionFeedbackFrame outgoing_congestion_feedback_; | 617 QuicCongestionFeedbackFrame outgoing_congestion_feedback_; |
607 | 618 |
608 // Track some peer state so we can do less bookkeeping | 619 // Track some peer state so we can do less bookkeeping |
609 // Largest sequence sent by the peer which had an ack frame (latest ack info). | 620 // Largest sequence sent by the peer which had an ack frame (latest ack info). |
610 QuicPacketSequenceNumber largest_seen_packet_with_ack_; | 621 QuicPacketSequenceNumber largest_seen_packet_with_ack_; |
611 | 622 |
| 623 // Largest sequence number sent by the peer which had a stop waiting frame. |
| 624 QuicPacketSequenceNumber largest_seen_packet_with_stop_waiting_; |
| 625 |
612 // Collection of packets which were received before encryption was | 626 // Collection of packets which were received before encryption was |
613 // established, but which could not be decrypted. We buffer these on | 627 // established, but which could not be decrypted. We buffer these on |
614 // the assumption that they could not be processed because they were | 628 // the assumption that they could not be processed because they were |
615 // sent with the INITIAL encryption and the CHLO message was lost. | 629 // sent with the INITIAL encryption and the CHLO message was lost. |
616 std::deque<QuicEncryptedPacket*> undecryptable_packets_; | 630 std::deque<QuicEncryptedPacket*> undecryptable_packets_; |
617 | 631 |
618 // When the version negotiation packet could not be sent because the socket | 632 // When the version negotiation packet could not be sent because the socket |
619 // was not writable, this is set to true. | 633 // was not writable, this is set to true. |
620 bool pending_version_negotiation_packet_; | 634 bool pending_version_negotiation_packet_; |
621 | 635 |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
703 // If non-empty this contains the set of versions received in a | 717 // If non-empty this contains the set of versions received in a |
704 // version negotiation packet. | 718 // version negotiation packet. |
705 QuicVersionVector server_supported_versions_; | 719 QuicVersionVector server_supported_versions_; |
706 | 720 |
707 DISALLOW_COPY_AND_ASSIGN(QuicConnection); | 721 DISALLOW_COPY_AND_ASSIGN(QuicConnection); |
708 }; | 722 }; |
709 | 723 |
710 } // namespace net | 724 } // namespace net |
711 | 725 |
712 #endif // NET_QUIC_QUIC_CONNECTION_H_ | 726 #endif // NET_QUIC_QUIC_CONNECTION_H_ |
OLD | NEW |