| 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 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 int rv) = 0; | 94 int rv) = 0; |
| 95 | 95 |
| 96 // Called when a packet has been received, but before it is | 96 // Called when a packet has been received, but before it is |
| 97 // validated or parsed. | 97 // validated or parsed. |
| 98 virtual void OnPacketReceived(const IPEndPoint& self_address, | 98 virtual void OnPacketReceived(const IPEndPoint& self_address, |
| 99 const IPEndPoint& peer_address, | 99 const IPEndPoint& peer_address, |
| 100 const QuicEncryptedPacket& packet) = 0; | 100 const QuicEncryptedPacket& packet) = 0; |
| 101 | 101 |
| 102 // Called when the protocol version on the received packet doensn't match | 102 // Called when the protocol version on the received packet doensn't match |
| 103 // current protocol version of the connection. | 103 // current protocol version of the connection. |
| 104 virtual void OnProtocolVersionMismatch(QuicTag version) = 0; | 104 virtual void OnProtocolVersionMismatch(QuicVersion version) = 0; |
| 105 | 105 |
| 106 // Called when the complete header of a packet has been parsed. | 106 // Called when the complete header of a packet has been parsed. |
| 107 virtual void OnPacketHeader(const QuicPacketHeader& header) = 0; | 107 virtual void OnPacketHeader(const QuicPacketHeader& header) = 0; |
| 108 | 108 |
| 109 // Called when a StreamFrame has been parsed. | 109 // Called when a StreamFrame has been parsed. |
| 110 virtual void OnStreamFrame(const QuicStreamFrame& frame) = 0; | 110 virtual void OnStreamFrame(const QuicStreamFrame& frame) = 0; |
| 111 | 111 |
| 112 // Called when a AckFrame has been parsed. | 112 // Called when a AckFrame has been parsed. |
| 113 virtual void OnAckFrame(const QuicAckFrame& frame) = 0; | 113 virtual void OnAckFrame(const QuicAckFrame& frame) = 0; |
| 114 | 114 |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 enum RetransmissionType { | 213 enum RetransmissionType { |
| 214 INITIAL_ENCRYPTION_ONLY, | 214 INITIAL_ENCRYPTION_ONLY, |
| 215 ALL_PACKETS | 215 ALL_PACKETS |
| 216 }; | 216 }; |
| 217 | 217 |
| 218 // Constructs a new QuicConnection for the specified |guid| and |address|. | 218 // Constructs a new QuicConnection for the specified |guid| and |address|. |
| 219 // |helper| will be owned by this connection. | 219 // |helper| will be owned by this connection. |
| 220 QuicConnection(QuicGuid guid, | 220 QuicConnection(QuicGuid guid, |
| 221 IPEndPoint address, | 221 IPEndPoint address, |
| 222 QuicConnectionHelperInterface* helper, | 222 QuicConnectionHelperInterface* helper, |
| 223 bool is_server); | 223 bool is_server, |
| 224 QuicVersion version); |
| 224 virtual ~QuicConnection(); | 225 virtual ~QuicConnection(); |
| 225 | 226 |
| 226 static void DeleteEnclosedFrame(QuicFrame* frame); | 227 static void DeleteEnclosedFrame(QuicFrame* frame); |
| 227 | 228 |
| 228 // Send the data payload to the peer. | 229 // Send the data payload to the peer. |
| 229 // Returns a pair with the number of bytes consumed from data, and a boolean | 230 // Returns a pair with the number of bytes consumed from data, and a boolean |
| 230 // indicating if the fin bit was consumed. This does not indicate the data | 231 // indicating if the fin bit was consumed. This does not indicate the data |
| 231 // has been sent on the wire: it may have been turned into a packet and queued | 232 // has been sent on the wire: it may have been turned into a packet and queued |
| 232 // if the socket was unexpectedly blocked. | 233 // if the socket was unexpectedly blocked. |
| 233 QuicConsumedData SendStreamData(QuicStreamId id, | 234 QuicConsumedData SendStreamData(QuicStreamId id, |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 // Called when the underlying connection becomes writable to allow | 270 // Called when the underlying connection becomes writable to allow |
| 270 // queued writes to happen. Returns false if the socket has become blocked. | 271 // queued writes to happen. Returns false if the socket has become blocked. |
| 271 virtual bool OnCanWrite() OVERRIDE; | 272 virtual bool OnCanWrite() OVERRIDE; |
| 272 | 273 |
| 273 // Do any work which logically would be done in OnPacket but can not be | 274 // Do any work which logically would be done in OnPacket but can not be |
| 274 // safely done until the packet is validated. Returns true if the packet | 275 // safely done until the packet is validated. Returns true if the packet |
| 275 // can be handled, false otherwise. | 276 // can be handled, false otherwise. |
| 276 bool ProcessValidatedPacket(); | 277 bool ProcessValidatedPacket(); |
| 277 | 278 |
| 278 // The version of the protocol this connection is using. | 279 // The version of the protocol this connection is using. |
| 279 QuicTag version() const { return framer_.version(); } | 280 QuicVersion version() const { return framer_.version(); } |
| 280 | 281 |
| 281 // From QuicFramerVisitorInterface | 282 // From QuicFramerVisitorInterface |
| 282 virtual void OnError(QuicFramer* framer) OVERRIDE; | 283 virtual void OnError(QuicFramer* framer) OVERRIDE; |
| 283 virtual bool OnProtocolVersionMismatch(QuicTag received_version) OVERRIDE; | 284 virtual bool OnProtocolVersionMismatch(QuicVersion received_version) OVERRIDE; |
| 284 virtual void OnPacket() OVERRIDE; | 285 virtual void OnPacket() OVERRIDE; |
| 285 virtual void OnPublicResetPacket( | 286 virtual void OnPublicResetPacket( |
| 286 const QuicPublicResetPacket& packet) OVERRIDE; | 287 const QuicPublicResetPacket& packet) OVERRIDE; |
| 287 virtual void OnVersionNegotiationPacket( | 288 virtual void OnVersionNegotiationPacket( |
| 288 const QuicVersionNegotiationPacket& packet) OVERRIDE; | 289 const QuicVersionNegotiationPacket& packet) OVERRIDE; |
| 289 virtual void OnRevivedPacket() OVERRIDE; | 290 virtual void OnRevivedPacket() OVERRIDE; |
| 290 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE; | 291 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE; |
| 291 virtual void OnFecProtectedPayload(base::StringPiece payload) OVERRIDE; | 292 virtual void OnFecProtectedPayload(base::StringPiece payload) OVERRIDE; |
| 292 virtual bool OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE; | 293 virtual bool OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE; |
| 293 virtual bool OnAckFrame(const QuicAckFrame& frame) OVERRIDE; | 294 virtual bool OnAckFrame(const QuicAckFrame& frame) OVERRIDE; |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 441 int WritePacketToWire(QuicPacketSequenceNumber sequence_number, | 442 int WritePacketToWire(QuicPacketSequenceNumber sequence_number, |
| 442 EncryptionLevel level, | 443 EncryptionLevel level, |
| 443 const QuicEncryptedPacket& packet, | 444 const QuicEncryptedPacket& packet, |
| 444 int* error); | 445 int* error); |
| 445 | 446 |
| 446 // Make sure an ack we got from our peer is sane. | 447 // Make sure an ack we got from our peer is sane. |
| 447 bool ValidateAckFrame(const QuicAckFrame& incoming_ack); | 448 bool ValidateAckFrame(const QuicAckFrame& incoming_ack); |
| 448 | 449 |
| 449 QuicConnectionHelperInterface* helper() { return helper_.get(); } | 450 QuicConnectionHelperInterface* helper() { return helper_.get(); } |
| 450 | 451 |
| 451 protected: | 452 // Selects and updates the version of the protocol being used by selecting a |
| 453 // version from |available_versions| which is also supported. Returns true if |
| 454 // such a version exists, false otherwise. |
| 455 bool SelectMutualVersion(const QuicVersionVector& available_versions); |
| 456 |
| 452 QuicFramer framer_; | 457 QuicFramer framer_; |
| 453 | 458 |
| 454 private: | 459 private: |
| 455 friend class test::QuicConnectionPeer; | 460 friend class test::QuicConnectionPeer; |
| 456 | 461 |
| 457 // Packets which have not been written to the wire. | 462 // Packets which have not been written to the wire. |
| 458 // Owns the QuicPacket* packet. | 463 // Owns the QuicPacket* packet. |
| 459 struct QueuedPacket { | 464 struct QueuedPacket { |
| 460 QueuedPacket(QuicPacketSequenceNumber sequence_number, | 465 QueuedPacket(QuicPacketSequenceNumber sequence_number, |
| 461 QuicPacket* packet, | 466 QuicPacket* packet, |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 512 typedef linked_hash_map<QuicPacketSequenceNumber, | 517 typedef linked_hash_map<QuicPacketSequenceNumber, |
| 513 RetransmittableFrames*> UnackedPacketMap; | 518 RetransmittableFrames*> UnackedPacketMap; |
| 514 typedef std::map<QuicFecGroupNumber, QuicFecGroup*> FecGroupMap; | 519 typedef std::map<QuicFecGroupNumber, QuicFecGroup*> FecGroupMap; |
| 515 typedef base::hash_map<QuicPacketSequenceNumber, | 520 typedef base::hash_map<QuicPacketSequenceNumber, |
| 516 RetransmissionInfo> RetransmissionMap; | 521 RetransmissionInfo> RetransmissionMap; |
| 517 typedef std::priority_queue<RetransmissionTime, | 522 typedef std::priority_queue<RetransmissionTime, |
| 518 std::vector<RetransmissionTime>, | 523 std::vector<RetransmissionTime>, |
| 519 RetransmissionTimeComparator> | 524 RetransmissionTimeComparator> |
| 520 RetransmissionTimeouts; | 525 RetransmissionTimeouts; |
| 521 | 526 |
| 522 // Selects and updates the version of the protocol being used by selecting a | |
| 523 // version from |available_versions| which is also supported. Returns true if | |
| 524 // such a version exists, false otherwise. | |
| 525 bool SelectMutualVersion(const QuicTagVector& available_versions); | |
| 526 // Sends a version negotiation packet to the peer. | 527 // Sends a version negotiation packet to the peer. |
| 527 void SendVersionNegotiationPacket(); | 528 void SendVersionNegotiationPacket(); |
| 528 | 529 |
| 529 void SetupRetransmission(QuicPacketSequenceNumber sequence_number, | 530 void SetupRetransmission(QuicPacketSequenceNumber sequence_number, |
| 530 EncryptionLevel level); | 531 EncryptionLevel level); |
| 531 bool IsRetransmission(QuicPacketSequenceNumber sequence_number); | 532 bool IsRetransmission(QuicPacketSequenceNumber sequence_number); |
| 532 | 533 |
| 533 void SetupAbandonFecTimer(QuicPacketSequenceNumber sequence_number); | 534 void SetupAbandonFecTimer(QuicPacketSequenceNumber sequence_number); |
| 534 | 535 |
| 535 // Drop packet corresponding to |sequence_number| by deleting entries from | 536 // Drop packet corresponding to |sequence_number| by deleting entries from |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 702 // Set to true if the udp packet headers have a new self or peer address. | 703 // Set to true if the udp packet headers have a new self or peer address. |
| 703 // This is checked later on validating a data or version negotiation packet. | 704 // This is checked later on validating a data or version negotiation packet. |
| 704 bool address_migrating_; | 705 bool address_migrating_; |
| 705 | 706 |
| 706 DISALLOW_COPY_AND_ASSIGN(QuicConnection); | 707 DISALLOW_COPY_AND_ASSIGN(QuicConnection); |
| 707 }; | 708 }; |
| 708 | 709 |
| 709 } // namespace net | 710 } // namespace net |
| 710 | 711 |
| 711 #endif // NET_QUIC_QUIC_CONNECTION_H_ | 712 #endif // NET_QUIC_QUIC_CONNECTION_H_ |
| OLD | NEW |