| 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_SPDY_SPDY_SESSION_H_ | 5 #ifndef NET_SPDY_SPDY_SESSION_H_ |
| 6 #define NET_SPDY_SPDY_SESSION_H_ | 6 #define NET_SPDY_SPDY_SESSION_H_ |
| 7 | 7 |
| 8 #include <deque> | 8 #include <deque> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 STATUS_CODE_STREAM_ALREADY_CLOSED, | 86 STATUS_CODE_STREAM_ALREADY_CLOSED, |
| 87 STATUS_CODE_INVALID_CREDENTIALS, | 87 STATUS_CODE_INVALID_CREDENTIALS, |
| 88 STATUS_CODE_FRAME_TOO_LARGE, | 88 STATUS_CODE_FRAME_TOO_LARGE, |
| 89 | 89 |
| 90 // SpdySession errors | 90 // SpdySession errors |
| 91 PROTOCOL_ERROR_UNEXPECTED_PING, | 91 PROTOCOL_ERROR_UNEXPECTED_PING, |
| 92 PROTOCOL_ERROR_RST_STREAM_FOR_NON_ACTIVE_STREAM, | 92 PROTOCOL_ERROR_RST_STREAM_FOR_NON_ACTIVE_STREAM, |
| 93 PROTOCOL_ERROR_SPDY_COMPRESSION_FAILURE, | 93 PROTOCOL_ERROR_SPDY_COMPRESSION_FAILURE, |
| 94 PROTOCOL_ERROR_REQUEST_FOR_SECURE_CONTENT_OVER_INSECURE_SESSION, | 94 PROTOCOL_ERROR_REQUEST_FOR_SECURE_CONTENT_OVER_INSECURE_SESSION, |
| 95 PROTOCOL_ERROR_SYN_REPLY_NOT_RECEIVED, | 95 PROTOCOL_ERROR_SYN_REPLY_NOT_RECEIVED, |
| 96 PROTOCOL_ERROR_INVALID_WINDOW_UPDATE_SIZE, |
| 97 PROTOCOL_ERROR_RECEIVE_WINDOW_VIOLATION, |
| 96 NUM_SPDY_PROTOCOL_ERROR_DETAILS | 98 NUM_SPDY_PROTOCOL_ERROR_DETAILS |
| 97 }; | 99 }; |
| 98 | 100 |
| 99 COMPILE_ASSERT(STATUS_CODE_INVALID == | 101 COMPILE_ASSERT(STATUS_CODE_INVALID == |
| 100 static_cast<SpdyProtocolErrorDetails>(SpdyFramer::LAST_ERROR), | 102 static_cast<SpdyProtocolErrorDetails>(SpdyFramer::LAST_ERROR), |
| 101 SpdyProtocolErrorDetails_SpdyErrors_mismatch); | 103 SpdyProtocolErrorDetails_SpdyErrors_mismatch); |
| 102 | 104 |
| 103 COMPILE_ASSERT(PROTOCOL_ERROR_UNEXPECTED_PING == | 105 COMPILE_ASSERT(PROTOCOL_ERROR_UNEXPECTED_PING == |
| 104 static_cast<SpdyProtocolErrorDetails>( | 106 static_cast<SpdyProtocolErrorDetails>( |
| 105 RST_STREAM_NUM_STATUS_CODES + STATUS_CODE_INVALID), | 107 RST_STREAM_NUM_STATUS_CODES + STATUS_CODE_INVALID), |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 // ERR_IO_PENDING) otherwise. | 220 // ERR_IO_PENDING) otherwise. |
| 219 int GetPushStream( | 221 int GetPushStream( |
| 220 const GURL& url, | 222 const GURL& url, |
| 221 scoped_refptr<SpdyStream>* spdy_stream, | 223 scoped_refptr<SpdyStream>* spdy_stream, |
| 222 const BoundNetLog& stream_net_log); | 224 const BoundNetLog& stream_net_log); |
| 223 | 225 |
| 224 // Used by SpdySessionPool to initialize with a pre-existing SSL socket. For | 226 // Used by SpdySessionPool to initialize with a pre-existing SSL socket. For |
| 225 // testing, setting is_secure to false allows initialization with a | 227 // testing, setting is_secure to false allows initialization with a |
| 226 // pre-existing TCP socket. | 228 // pre-existing TCP socket. |
| 227 // Returns OK on success, or an error on failure. | 229 // Returns OK on success, or an error on failure. |
| 228 net::Error InitializeWithSocket(ClientSocketHandle* connection, | 230 Error InitializeWithSocket(ClientSocketHandle* connection, |
| 229 bool is_secure, | 231 bool is_secure, |
| 230 int certificate_error_code); | 232 int certificate_error_code); |
| 231 | 233 |
| 232 // Check to see if this SPDY session can support an additional domain. | 234 // Check to see if this SPDY session can support an additional domain. |
| 233 // If the session is un-authenticated, then this call always returns true. | 235 // If the session is un-authenticated, then this call always returns true. |
| 234 // For SSL-based sessions, verifies that the server certificate in use by | 236 // For SSL-based sessions, verifies that the server certificate in use by |
| 235 // this session provides authentication for the domain and no client | 237 // this session provides authentication for the domain and no client |
| 236 // certificate or channel ID was sent to the original server during the SSL | 238 // certificate or channel ID was sent to the original server during the SSL |
| 237 // handshake. NOTE: This function can have false negatives on some | 239 // handshake. NOTE: This function can have false negatives on some |
| 238 // platforms. | 240 // platforms. |
| 239 // TODO(wtc): rename this function and the Net.SpdyIPPoolDomainMatch | 241 // TODO(wtc): rename this function and the Net.SpdyIPPoolDomainMatch |
| 240 // histogram because this function does more than verifying domain | 242 // histogram because this function does more than verifying domain |
| (...skipping 26 matching lines...) Expand all Loading... |
| 267 scoped_ptr<SpdyFrame>* credential_frame); | 269 scoped_ptr<SpdyFrame>* credential_frame); |
| 268 | 270 |
| 269 // Creates and returns a HEADERS frame. | 271 // Creates and returns a HEADERS frame. |
| 270 scoped_ptr<SpdyFrame> CreateHeadersFrame(SpdyStreamId stream_id, | 272 scoped_ptr<SpdyFrame> CreateHeadersFrame(SpdyStreamId stream_id, |
| 271 const SpdyHeaderBlock& headers, | 273 const SpdyHeaderBlock& headers, |
| 272 SpdyControlFlags flags); | 274 SpdyControlFlags flags); |
| 273 | 275 |
| 274 // Creates and returns a SpdyBuffer holding a data frame with the | 276 // Creates and returns a SpdyBuffer holding a data frame with the |
| 275 // given data. May return NULL if stalled by flow control. | 277 // given data. May return NULL if stalled by flow control. |
| 276 scoped_ptr<SpdyBuffer> CreateDataBuffer(SpdyStreamId stream_id, | 278 scoped_ptr<SpdyBuffer> CreateDataBuffer(SpdyStreamId stream_id, |
| 277 net::IOBuffer* data, | 279 IOBuffer* data, |
| 278 int len, | 280 int len, |
| 279 SpdyDataFlags flags); | 281 SpdyDataFlags flags); |
| 280 | 282 |
| 281 // Close a stream. | 283 // Close a stream. |
| 282 void CloseStream(SpdyStreamId stream_id, int status); | 284 void CloseStream(SpdyStreamId stream_id, int status); |
| 283 | 285 |
| 284 // Close a stream that has been created but is not yet active. | 286 // Close a stream that has been created but is not yet active. |
| 285 void CloseCreatedStream(SpdyStream* stream, int status); | 287 void CloseCreatedStream(SpdyStream* stream, int status); |
| 286 | 288 |
| 287 // Reset a stream by sending a RST_STREAM frame with given status code. | 289 // Reset a stream by sending a RST_STREAM frame with given status code. |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 // If session is closed, no new streams/transactions should be created. | 321 // If session is closed, no new streams/transactions should be created. |
| 320 bool IsClosed() const { return state_ == STATE_CLOSED; } | 322 bool IsClosed() const { return state_ == STATE_CLOSED; } |
| 321 | 323 |
| 322 // Closes this session. This will close all active streams and mark | 324 // Closes this session. This will close all active streams and mark |
| 323 // the session as permanently closed. | 325 // the session as permanently closed. |
| 324 // |err| should not be OK; this function is intended to be called on | 326 // |err| should not be OK; this function is intended to be called on |
| 325 // error. | 327 // error. |
| 326 // |remove_from_pool| indicates whether to also remove the session from the | 328 // |remove_from_pool| indicates whether to also remove the session from the |
| 327 // session pool. | 329 // session pool. |
| 328 // |description| indicates the reason for the error. | 330 // |description| indicates the reason for the error. |
| 329 void CloseSessionOnError(net::Error err, | 331 void CloseSessionOnError(Error err, |
| 330 bool remove_from_pool, | 332 bool remove_from_pool, |
| 331 const std::string& description); | 333 const std::string& description); |
| 332 | 334 |
| 333 // Retrieves information on the current state of the SPDY session as a | 335 // Retrieves information on the current state of the SPDY session as a |
| 334 // Value. Caller takes possession of the returned value. | 336 // Value. Caller takes possession of the returned value. |
| 335 base::Value* GetInfoAsValue() const; | 337 base::Value* GetInfoAsValue() const; |
| 336 | 338 |
| 337 // Indicates whether the session is being reused after having successfully | 339 // Indicates whether the session is being reused after having successfully |
| 338 // used to send/receive data in the past. | 340 // used to send/receive data in the past. |
| 339 bool IsReused() const; | 341 bool IsReused() const; |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 598 // Calls OnResponseReceived(). | 600 // Calls OnResponseReceived(). |
| 599 // Returns true if successful. | 601 // Returns true if successful. |
| 600 bool Respond(const SpdyHeaderBlock& headers, | 602 bool Respond(const SpdyHeaderBlock& headers, |
| 601 const scoped_refptr<SpdyStream> stream); | 603 const scoped_refptr<SpdyStream> stream); |
| 602 | 604 |
| 603 void RecordPingRTTHistogram(base::TimeDelta duration); | 605 void RecordPingRTTHistogram(base::TimeDelta duration); |
| 604 void RecordHistograms(); | 606 void RecordHistograms(); |
| 605 void RecordProtocolErrorHistogram(SpdyProtocolErrorDetails details); | 607 void RecordProtocolErrorHistogram(SpdyProtocolErrorDetails details); |
| 606 | 608 |
| 607 // Closes all streams. Used as part of shutdown. | 609 // Closes all streams. Used as part of shutdown. |
| 608 void CloseAllStreams(net::Error status); | 610 void CloseAllStreams(Error status); |
| 609 | 611 |
| 610 void LogAbandonedStream(const scoped_refptr<SpdyStream>& stream, | 612 void LogAbandonedStream(const scoped_refptr<SpdyStream>& stream, |
| 611 net::Error status); | 613 Error status); |
| 612 | 614 |
| 613 // Invokes a user callback for stream creation. We provide this method so it | 615 // Invokes a user callback for stream creation. We provide this method so it |
| 614 // can be deferred to the MessageLoop, so we avoid re-entrancy problems. | 616 // can be deferred to the MessageLoop, so we avoid re-entrancy problems. |
| 615 void CompleteStreamRequest(SpdyStreamRequest* pending_request); | 617 void CompleteStreamRequest(SpdyStreamRequest* pending_request); |
| 616 | 618 |
| 617 // Remove old unclaimed pushed streams. | 619 // Remove old unclaimed pushed streams. |
| 618 void DeleteExpiredPushedStreams(); | 620 void DeleteExpiredPushedStreams(); |
| 619 | 621 |
| 620 // BufferedSpdyFramerVisitorInterface: | 622 // BufferedSpdyFramerVisitorInterface: |
| 621 virtual void OnError(SpdyFramer::SpdyError error_code) OVERRIDE; | 623 virtual void OnError(SpdyFramer::SpdyError error_code) OVERRIDE; |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 819 | 821 |
| 820 // Certificate error code when using a secure connection. | 822 // Certificate error code when using a secure connection. |
| 821 int certificate_error_code_; | 823 int certificate_error_code_; |
| 822 | 824 |
| 823 // Spdy Frame state. | 825 // Spdy Frame state. |
| 824 scoped_ptr<BufferedSpdyFramer> buffered_spdy_framer_; | 826 scoped_ptr<BufferedSpdyFramer> buffered_spdy_framer_; |
| 825 | 827 |
| 826 // If an error has occurred on the session, the session is effectively | 828 // If an error has occurred on the session, the session is effectively |
| 827 // dead. Record this error here. When no error has occurred, |error_| will | 829 // dead. Record this error here. When no error has occurred, |error_| will |
| 828 // be OK. | 830 // be OK. |
| 829 net::Error error_; | 831 Error error_; |
| 830 State state_; | 832 State state_; |
| 831 | 833 |
| 832 // Limits | 834 // Limits |
| 833 size_t max_concurrent_streams_; // 0 if no limit | 835 size_t max_concurrent_streams_; // 0 if no limit |
| 834 size_t max_concurrent_streams_limit_; | 836 size_t max_concurrent_streams_limit_; |
| 835 | 837 |
| 836 // Some statistics counters for the session. | 838 // Some statistics counters for the session. |
| 837 int streams_initiated_count_; | 839 int streams_initiated_count_; |
| 838 int streams_pushed_count_; | 840 int streams_pushed_count_; |
| 839 int streams_pushed_and_claimed_count_; | 841 int streams_pushed_and_claimed_count_; |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 934 // This SPDY proxy is allowed to push resources from origins that are | 936 // This SPDY proxy is allowed to push resources from origins that are |
| 935 // different from those of their associated streams. | 937 // different from those of their associated streams. |
| 936 HostPortPair trusted_spdy_proxy_; | 938 HostPortPair trusted_spdy_proxy_; |
| 937 | 939 |
| 938 TimeFunc time_func_; | 940 TimeFunc time_func_; |
| 939 }; | 941 }; |
| 940 | 942 |
| 941 } // namespace net | 943 } // namespace net |
| 942 | 944 |
| 943 #endif // NET_SPDY_SPDY_SESSION_H_ | 945 #endif // NET_SPDY_SPDY_SESSION_H_ |
| OLD | NEW |