| 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 // A QuicSession, which demuxes a single connection to individual streams. | 5 // A QuicSession, which demuxes a single connection to individual streams. |
| 6 | 6 |
| 7 #ifndef NET_QUIC_QUIC_SESSION_H_ | 7 #ifndef NET_QUIC_QUIC_SESSION_H_ |
| 8 #define NET_QUIC_QUIC_SESSION_H_ | 8 #define NET_QUIC_QUIC_SESSION_H_ |
| 9 | 9 |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 // the server and thus the encryption key has been updated. Therefore the | 45 // the server and thus the encryption key has been updated. Therefore the |
| 46 // connection should resend any packets that were sent under | 46 // connection should resend any packets that were sent under |
| 47 // ENCRYPTION_INITIAL. (Client only.) | 47 // ENCRYPTION_INITIAL. (Client only.) |
| 48 ENCRYPTION_REESTABLISHED, | 48 ENCRYPTION_REESTABLISHED, |
| 49 // HANDSHAKE_CONFIRMED, in a client, indicates the the server has accepted | 49 // HANDSHAKE_CONFIRMED, in a client, indicates the the server has accepted |
| 50 // our handshake. In a server it indicates that a full, valid client hello | 50 // our handshake. In a server it indicates that a full, valid client hello |
| 51 // has been received. (Client and server.) | 51 // has been received. (Client and server.) |
| 52 HANDSHAKE_CONFIRMED, | 52 HANDSHAKE_CONFIRMED, |
| 53 }; | 53 }; |
| 54 | 54 |
| 55 QuicSession(QuicConnection* connection, | 55 QuicSession(QuicConnection* connection, const QuicConfig& config); |
| 56 const QuicConfig& config); | |
| 57 | 56 |
| 58 virtual ~QuicSession(); | 57 virtual ~QuicSession(); |
| 59 | 58 |
| 60 // QuicConnectionVisitorInterface methods: | 59 // QuicConnectionVisitorInterface methods: |
| 61 virtual void OnStreamFrames( | 60 virtual void OnStreamFrames( |
| 62 const std::vector<QuicStreamFrame>& frames) OVERRIDE; | 61 const std::vector<QuicStreamFrame>& frames) OVERRIDE; |
| 63 virtual void OnRstStream(const QuicRstStreamFrame& frame) OVERRIDE; | 62 virtual void OnRstStream(const QuicRstStreamFrame& frame) OVERRIDE; |
| 64 virtual void OnGoAway(const QuicGoAwayFrame& frame) OVERRIDE; | 63 virtual void OnGoAway(const QuicGoAwayFrame& frame) OVERRIDE; |
| 65 virtual void OnWindowUpdateFrames( | 64 virtual void OnWindowUpdateFrames( |
| 66 const std::vector<QuicWindowUpdateFrame>& frames) OVERRIDE; | 65 const std::vector<QuicWindowUpdateFrame>& frames) OVERRIDE; |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 QuicConfig* config(); | 158 QuicConfig* config(); |
| 160 | 159 |
| 161 // Returns true if the stream existed previously and has been closed. | 160 // Returns true if the stream existed previously and has been closed. |
| 162 // Returns false if the stream is still active or if the stream has | 161 // Returns false if the stream is still active or if the stream has |
| 163 // not yet been created. | 162 // not yet been created. |
| 164 bool IsClosedStream(QuicStreamId id); | 163 bool IsClosedStream(QuicStreamId id); |
| 165 | 164 |
| 166 QuicConnection* connection() { return connection_.get(); } | 165 QuicConnection* connection() { return connection_.get(); } |
| 167 const QuicConnection* connection() const { return connection_.get(); } | 166 const QuicConnection* connection() const { return connection_.get(); } |
| 168 size_t num_active_requests() const { return stream_map_.size(); } | 167 size_t num_active_requests() const { return stream_map_.size(); } |
| 169 const IPEndPoint& peer_address() const { | 168 const IPEndPoint& peer_address() const { return connection_->peer_address(); } |
| 170 return connection_->peer_address(); | |
| 171 } | |
| 172 QuicConnectionId connection_id() const { | 169 QuicConnectionId connection_id() const { |
| 173 return connection_->connection_id(); | 170 return connection_->connection_id(); |
| 174 } | 171 } |
| 175 | 172 |
| 176 QuicPacketCreator::Options* options() { return connection()->options(); } | 173 QuicPacketCreator::Options* options() { return connection()->options(); } |
| 177 | 174 |
| 178 // Returns the number of currently open streams, including those which have | 175 // Returns the number of currently open streams, including those which have |
| 179 // been implicitly created, but excluding the reserved headers and crypto | 176 // been implicitly created, but excluding the reserved headers and crypto |
| 180 // streams. | 177 // streams. |
| 181 virtual size_t GetNumOpenStreams() const; | 178 virtual size_t GetNumOpenStreams() const; |
| 182 | 179 |
| 183 void MarkWriteBlocked(QuicStreamId id, QuicPriority priority); | 180 void MarkWriteBlocked(QuicStreamId id, QuicPriority priority); |
| 184 | 181 |
| 185 // Returns true if the session has data to be sent, either queued in the | 182 // Returns true if the session has data to be sent, either queued in the |
| 186 // connection, or in a write-blocked stream. | 183 // connection, or in a write-blocked stream. |
| 187 bool HasDataToWrite() const; | 184 bool HasDataToWrite() const; |
| 188 | 185 |
| 189 bool goaway_received() const { | 186 bool goaway_received() const { return goaway_received_; } |
| 190 return goaway_received_; | |
| 191 } | |
| 192 | 187 |
| 193 bool goaway_sent() const { | 188 bool goaway_sent() const { return goaway_sent_; } |
| 194 return goaway_sent_; | |
| 195 } | |
| 196 | 189 |
| 197 // Gets the SSL connection information. | 190 // Gets the SSL connection information. |
| 198 virtual bool GetSSLInfo(SSLInfo* ssl_info) const; | 191 virtual bool GetSSLInfo(SSLInfo* ssl_info) const; |
| 199 | 192 |
| 200 QuicErrorCode error() const { return error_; } | 193 QuicErrorCode error() const { return error_; } |
| 201 | 194 |
| 202 bool is_server() const { return connection_->is_server(); } | 195 bool is_server() const { return connection_->is_server(); } |
| 203 | 196 |
| 204 protected: | 197 protected: |
| 205 typedef base::hash_map<QuicStreamId, QuicDataStream*> DataStreamMap; | 198 typedef base::hash_map<QuicStreamId, QuicDataStream*> DataStreamMap; |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 base::hash_map<QuicStreamId, QuicDataStream*>* streams() { | 230 base::hash_map<QuicStreamId, QuicDataStream*>* streams() { |
| 238 return &stream_map_; | 231 return &stream_map_; |
| 239 } | 232 } |
| 240 | 233 |
| 241 const base::hash_map<QuicStreamId, QuicDataStream*>* streams() const { | 234 const base::hash_map<QuicStreamId, QuicDataStream*>* streams() const { |
| 242 return &stream_map_; | 235 return &stream_map_; |
| 243 } | 236 } |
| 244 | 237 |
| 245 std::vector<QuicDataStream*>* closed_streams() { return &closed_streams_; } | 238 std::vector<QuicDataStream*>* closed_streams() { return &closed_streams_; } |
| 246 | 239 |
| 247 size_t get_max_open_streams() const { | 240 size_t get_max_open_streams() const { return max_open_streams_; } |
| 248 return max_open_streams_; | |
| 249 } | |
| 250 | 241 |
| 251 private: | 242 private: |
| 252 friend class test::QuicSessionPeer; | 243 friend class test::QuicSessionPeer; |
| 253 friend class VisitorShim; | 244 friend class VisitorShim; |
| 254 | 245 |
| 255 // Performs the work required to close |stream_id|. If |locally_reset| | 246 // Performs the work required to close |stream_id|. If |locally_reset| |
| 256 // then the stream has been reset by this endpoint, not by the peer. | 247 // then the stream has been reset by this endpoint, not by the peer. |
| 257 void CloseStreamInner(QuicStreamId stream_id, bool locally_reset); | 248 void CloseStreamInner(QuicStreamId stream_id, bool locally_reset); |
| 258 | 249 |
| 259 scoped_ptr<QuicConnection> connection_; | 250 scoped_ptr<QuicConnection> connection_; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 | 285 |
| 295 // Indicate if there is pending data for the crypto stream. | 286 // Indicate if there is pending data for the crypto stream. |
| 296 bool has_pending_handshake_; | 287 bool has_pending_handshake_; |
| 297 | 288 |
| 298 DISALLOW_COPY_AND_ASSIGN(QuicSession); | 289 DISALLOW_COPY_AND_ASSIGN(QuicSession); |
| 299 }; | 290 }; |
| 300 | 291 |
| 301 } // namespace net | 292 } // namespace net |
| 302 | 293 |
| 303 #endif // NET_QUIC_QUIC_SESSION_H_ | 294 #endif // NET_QUIC_QUIC_SESSION_H_ |
| OLD | NEW |