| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <deque> | 9 #include <deque> |
| 10 #include <list> | 10 #include <list> |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 scoped_refptr<SpdyStream>* spdy_stream, | 181 scoped_refptr<SpdyStream>* spdy_stream, |
| 182 const BoundNetLog& stream_net_log, | 182 const BoundNetLog& stream_net_log, |
| 183 CompletionCallback* callback) | 183 CompletionCallback* callback) |
| 184 : url(&url), priority(priority), spdy_stream(spdy_stream), | 184 : url(&url), priority(priority), spdy_stream(spdy_stream), |
| 185 stream_net_log(&stream_net_log), callback(callback) { } | 185 stream_net_log(&stream_net_log), callback(callback) { } |
| 186 }; | 186 }; |
| 187 typedef std::queue<PendingCreateStream, std::list< PendingCreateStream> > | 187 typedef std::queue<PendingCreateStream, std::list< PendingCreateStream> > |
| 188 PendingCreateStreamQueue; | 188 PendingCreateStreamQueue; |
| 189 typedef std::map<int, scoped_refptr<SpdyStream> > ActiveStreamMap; | 189 typedef std::map<int, scoped_refptr<SpdyStream> > ActiveStreamMap; |
| 190 // Only HTTP push a stream. | 190 // Only HTTP push a stream. |
| 191 typedef std::list<scoped_refptr<SpdyStream> > ActivePushedStreamList; | 191 typedef std::map<std::string, scoped_refptr<SpdyStream> > PushedStreamMap; |
| 192 typedef std::map<std::string, scoped_refptr<SpdyStream> > PendingStreamMap; | |
| 193 typedef std::priority_queue<SpdyIOBuffer> OutputQueue; | 192 typedef std::priority_queue<SpdyIOBuffer> OutputQueue; |
| 194 | 193 |
| 195 virtual ~SpdySession(); | 194 virtual ~SpdySession(); |
| 196 | 195 |
| 197 void ProcessPendingCreateStreams(); | 196 void ProcessPendingCreateStreams(); |
| 198 int CreateStreamImpl( | 197 int CreateStreamImpl( |
| 199 const GURL& url, | 198 const GURL& url, |
| 200 RequestPriority priority, | 199 RequestPriority priority, |
| 201 scoped_refptr<SpdyStream>* spdy_stream, | 200 scoped_refptr<SpdyStream>* spdy_stream, |
| 202 const BoundNetLog& stream_net_log); | 201 const BoundNetLog& stream_net_log); |
| 203 | 202 |
| 204 // SpdyFramerVisitorInterface | 203 // SpdyFramerVisitorInterface |
| 205 virtual void OnError(spdy::SpdyFramer*); | 204 virtual void OnError(spdy::SpdyFramer*); |
| 206 virtual void OnStreamFrameData(spdy::SpdyStreamId stream_id, | 205 virtual void OnStreamFrameData(spdy::SpdyStreamId stream_id, |
| 207 const char* data, | 206 const char* data, |
| 208 size_t len); | 207 size_t len); |
| 209 virtual void OnControl(const spdy::SpdyControlFrame* frame); | 208 virtual void OnControl(const spdy::SpdyControlFrame* frame); |
| 210 | 209 |
| 211 // Control frame handlers. | 210 // Control frame handlers. |
| 212 void OnSyn(const spdy::SpdySynStreamControlFrame& frame, | 211 void OnSyn(const spdy::SpdySynStreamControlFrame& frame, |
| 213 const linked_ptr<spdy::SpdyHeaderBlock>& headers); | 212 const linked_ptr<spdy::SpdyHeaderBlock>& headers); |
| 214 void OnSynReply(const spdy::SpdySynReplyControlFrame& frame, | 213 void OnSynReply(const spdy::SpdySynReplyControlFrame& frame, |
| 215 const linked_ptr<spdy::SpdyHeaderBlock>& headers); | 214 const linked_ptr<spdy::SpdyHeaderBlock>& headers); |
| 216 void OnFin(const spdy::SpdyRstStreamControlFrame& frame); | 215 void OnRst(const spdy::SpdyRstStreamControlFrame& frame); |
| 217 void OnGoAway(const spdy::SpdyGoAwayControlFrame& frame); | 216 void OnGoAway(const spdy::SpdyGoAwayControlFrame& frame); |
| 218 void OnSettings(const spdy::SpdySettingsControlFrame& frame); | 217 void OnSettings(const spdy::SpdySettingsControlFrame& frame); |
| 219 void OnWindowUpdate(const spdy::SpdyWindowUpdateControlFrame& frame); | 218 void OnWindowUpdate(const spdy::SpdyWindowUpdateControlFrame& frame); |
| 220 | 219 |
| 221 // IO Callbacks | 220 // IO Callbacks |
| 222 void OnTCPConnect(int result); | 221 void OnTCPConnect(int result); |
| 223 void OnSSLConnect(int result); | 222 void OnSSLConnect(int result); |
| 224 void OnReadComplete(int result); | 223 void OnReadComplete(int result); |
| 225 void OnWriteComplete(int result); | 224 void OnWriteComplete(int result); |
| 226 | 225 |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 | 302 |
| 304 // Map from stream id to all active streams. Streams are active in the sense | 303 // Map from stream id to all active streams. Streams are active in the sense |
| 305 // that they have a consumer (typically SpdyNetworkTransaction and regardless | 304 // that they have a consumer (typically SpdyNetworkTransaction and regardless |
| 306 // of whether or not there is currently any ongoing IO [might be waiting for | 305 // of whether or not there is currently any ongoing IO [might be waiting for |
| 307 // the server to start pushing the stream]) or there are still network events | 306 // the server to start pushing the stream]) or there are still network events |
| 308 // incoming even though the consumer has already gone away (cancellation). | 307 // incoming even though the consumer has already gone away (cancellation). |
| 309 // TODO(willchan): Perhaps we should separate out cancelled streams and move | 308 // TODO(willchan): Perhaps we should separate out cancelled streams and move |
| 310 // them into a separate ActiveStreamMap, and not deliver network events to | 309 // them into a separate ActiveStreamMap, and not deliver network events to |
| 311 // them? | 310 // them? |
| 312 ActiveStreamMap active_streams_; | 311 ActiveStreamMap active_streams_; |
| 313 // List of all the streams that have already started to be pushed by the | 312 // Map of all the streams that have already started to be pushed by the |
| 314 // server, but do not have consumers yet. | 313 // server, but do not have consumers yet. |
| 315 ActivePushedStreamList pushed_streams_; | 314 PushedStreamMap unclaimed_pushed_streams_; |
| 316 // List of streams declared in X-Associated-Content headers, but do not have | |
| 317 // consumers yet. | |
| 318 // The key is a string representing the path of the URI being pushed. | |
| 319 PendingStreamMap pending_streams_; | |
| 320 | 315 |
| 321 // As we gather data to be sent, we put it into the output queue. | 316 // As we gather data to be sent, we put it into the output queue. |
| 322 OutputQueue queue_; | 317 OutputQueue queue_; |
| 323 | 318 |
| 324 // The packet we are currently sending. | 319 // The packet we are currently sending. |
| 325 bool write_pending_; // Will be true when a write is in progress. | 320 bool write_pending_; // Will be true when a write is in progress. |
| 326 SpdyIOBuffer in_flight_write_; // This is the write buffer in progress. | 321 SpdyIOBuffer in_flight_write_; // This is the write buffer in progress. |
| 327 | 322 |
| 328 // Flag if we have a pending message scheduled for WriteSocket. | 323 // Flag if we have a pending message scheduled for WriteSocket. |
| 329 bool delayed_write_pending_; | 324 bool delayed_write_pending_; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 365 | 360 |
| 366 BoundNetLog net_log_; | 361 BoundNetLog net_log_; |
| 367 | 362 |
| 368 static bool use_ssl_; | 363 static bool use_ssl_; |
| 369 static bool use_flow_control_; | 364 static bool use_flow_control_; |
| 370 }; | 365 }; |
| 371 | 366 |
| 372 } // namespace net | 367 } // namespace net |
| 373 | 368 |
| 374 #endif // NET_SPDY_SPDY_SESSION_H_ | 369 #endif // NET_SPDY_SPDY_SESSION_H_ |
| OLD | NEW |