Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(244)

Side by Side Diff: net/quic/quic_session.h

Issue 2132623002: Landing Recent QUIC changes until 2016-07-02 02:45 UTC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removing comment about RPCs Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/quic_server_session_base_test.cc ('k') | net/quic/quic_session.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <stddef.h> 10 #include <stddef.h>
11 11
12 #include <map> 12 #include <map>
13 #include <memory> 13 #include <memory>
14 #include <string> 14 #include <string>
15 #include <unordered_map> 15 #include <unordered_map>
16 #include <unordered_set> 16 #include <unordered_set>
17 #include <vector> 17 #include <vector>
18 18
19 #include "base/compiler_specific.h" 19 #include "base/compiler_specific.h"
20 #include "base/containers/small_map.h"
20 #include "base/macros.h" 21 #include "base/macros.h"
21 #include "base/strings/string_piece.h" 22 #include "base/strings/string_piece.h"
22 #include "net/base/ip_endpoint.h" 23 #include "net/base/ip_endpoint.h"
23 #include "net/quic/quic_connection.h" 24 #include "net/quic/quic_connection.h"
24 #include "net/quic/quic_crypto_stream.h" 25 #include "net/quic/quic_crypto_stream.h"
25 #include "net/quic/quic_packet_creator.h" 26 #include "net/quic/quic_packet_creator.h"
26 #include "net/quic/quic_protocol.h" 27 #include "net/quic/quic_protocol.h"
27 #include "net/quic/quic_write_blocked_list.h" 28 #include "net/quic/quic_write_blocked_list.h"
28 #include "net/quic/reliable_quic_stream.h" 29 #include "net/quic/reliable_quic_stream.h"
29 30
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 // returned. 221 // returned.
221 ReliableQuicStream* GetOrCreateStream(const QuicStreamId stream_id); 222 ReliableQuicStream* GetOrCreateStream(const QuicStreamId stream_id);
222 223
223 // Mark a stream as draining. 224 // Mark a stream as draining.
224 virtual void StreamDraining(QuicStreamId id); 225 virtual void StreamDraining(QuicStreamId id);
225 226
226 // Returns true if this stream should yield writes to another blocked stream. 227 // Returns true if this stream should yield writes to another blocked stream.
227 bool ShouldYield(QuicStreamId stream_id); 228 bool ShouldYield(QuicStreamId stream_id);
228 229
229 protected: 230 protected:
230 typedef std::unordered_map<QuicStreamId, ReliableQuicStream*> StreamMap; 231 using StaticStreamMap =
232 base::SmallMap<std::unordered_map<QuicStreamId, ReliableQuicStream*>, 2>;
233
234 using DynamicStreamMap =
235 base::SmallMap<std::unordered_map<QuicStreamId, ReliableQuicStream*>, 10>;
231 236
232 // Creates a new stream to handle a peer-initiated stream. 237 // Creates a new stream to handle a peer-initiated stream.
233 // Caller does not own the returned stream. 238 // Caller does not own the returned stream.
234 // Returns nullptr and does error handling if the stream can not be created. 239 // Returns nullptr and does error handling if the stream can not be created.
235 virtual ReliableQuicStream* CreateIncomingDynamicStream(QuicStreamId id) = 0; 240 virtual ReliableQuicStream* CreateIncomingDynamicStream(QuicStreamId id) = 0;
236 241
237 // Create a new stream to handle a locally-initiated stream. 242 // Create a new stream to handle a locally-initiated stream.
238 // Caller does not own the returned stream. 243 // Caller does not own the returned stream.
239 // Returns nullptr if max streams have already been opened. 244 // Returns nullptr if max streams have already been opened.
240 virtual ReliableQuicStream* CreateOutgoingDynamicStream( 245 virtual ReliableQuicStream* CreateOutgoingDynamicStream(
(...skipping 25 matching lines...) Expand all
266 // peer sent on that stream. 271 // peer sent on that stream.
267 // When this data arrives (via stream frame w. FIN, or RST) this method 272 // When this data arrives (via stream frame w. FIN, or RST) this method
268 // is called, and correctly updates the connection level flow controller. 273 // is called, and correctly updates the connection level flow controller.
269 void UpdateFlowControlOnFinalReceivedByteOffset( 274 void UpdateFlowControlOnFinalReceivedByteOffset(
270 QuicStreamId id, 275 QuicStreamId id,
271 QuicStreamOffset final_byte_offset); 276 QuicStreamOffset final_byte_offset);
272 277
273 // Return true if given stream is peer initiated. 278 // Return true if given stream is peer initiated.
274 bool IsIncomingStream(QuicStreamId id) const; 279 bool IsIncomingStream(QuicStreamId id) const;
275 280
276 StreamMap& static_streams() { return static_stream_map_; } 281 StaticStreamMap& static_streams() { return static_stream_map_; }
277 const StreamMap& static_streams() const { return static_stream_map_; } 282 const StaticStreamMap& static_streams() const { return static_stream_map_; }
278 283
279 StreamMap& dynamic_streams() { return dynamic_stream_map_; } 284 DynamicStreamMap& dynamic_streams() { return dynamic_stream_map_; }
280 const StreamMap& dynamic_streams() const { return dynamic_stream_map_; } 285 const DynamicStreamMap& dynamic_streams() const {
286 return dynamic_stream_map_;
287 }
281 288
282 std::vector<ReliableQuicStream*>* closed_streams() { 289 std::vector<ReliableQuicStream*>* closed_streams() {
283 return &closed_streams_; 290 return &closed_streams_;
284 } 291 }
285 292
286 void set_max_open_incoming_streams(size_t max_open_incoming_streams); 293 void set_max_open_incoming_streams(size_t max_open_incoming_streams);
287 void set_max_open_outgoing_streams(size_t max_open_outgoing_streams); 294 void set_max_open_outgoing_streams(size_t max_open_outgoing_streams);
288 295
289 void set_largest_peer_created_stream_id( 296 void set_largest_peer_created_stream_id(
290 QuicStreamId largest_peer_created_stream_id) { 297 QuicStreamId largest_peer_created_stream_id) {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 QuicConfig config_; 367 QuicConfig config_;
361 368
362 // The maximum number of outgoing streams this connection can open. 369 // The maximum number of outgoing streams this connection can open.
363 size_t max_open_outgoing_streams_; 370 size_t max_open_outgoing_streams_;
364 371
365 // The maximum number of incoming streams this connection will allow. 372 // The maximum number of incoming streams this connection will allow.
366 size_t max_open_incoming_streams_; 373 size_t max_open_incoming_streams_;
367 374
368 // Static streams, such as crypto and header streams. Owned by child classes 375 // Static streams, such as crypto and header streams. Owned by child classes
369 // that create these streams. 376 // that create these streams.
370 StreamMap static_stream_map_; 377 StaticStreamMap static_stream_map_;
371 378
372 // Map from StreamId to pointers to streams. Owns the streams. 379 // Map from StreamId to pointers to streams. Owns the streams.
373 StreamMap dynamic_stream_map_; 380 DynamicStreamMap dynamic_stream_map_;
374 381
375 // The ID to use for the next outgoing stream. 382 // The ID to use for the next outgoing stream.
376 QuicStreamId next_outgoing_stream_id_; 383 QuicStreamId next_outgoing_stream_id_;
377 384
378 // Set of stream ids that are less than the largest stream id that has been 385 // Set of stream ids that are less than the largest stream id that has been
379 // received, but are nonetheless available to be created. 386 // received, but are nonetheless available to be created.
380 std::unordered_set<QuicStreamId> available_streams_; 387 std::unordered_set<QuicStreamId> available_streams_;
381 388
382 // Set of stream ids that are "draining" -- a FIN has been sent and received, 389 // Set of stream ids that are "draining" -- a FIN has been sent and received,
383 // but the stream object still exists because not all the received data has 390 // but the stream object still exists because not all the received data has
(...skipping 24 matching lines...) Expand all
408 // The stream id which was last popped in OnCanWrite, or 0, if not under the 415 // The stream id which was last popped in OnCanWrite, or 0, if not under the
409 // call stack of OnCanWrite. 416 // call stack of OnCanWrite.
410 QuicStreamId currently_writing_stream_id_; 417 QuicStreamId currently_writing_stream_id_;
411 418
412 DISALLOW_COPY_AND_ASSIGN(QuicSession); 419 DISALLOW_COPY_AND_ASSIGN(QuicSession);
413 }; 420 };
414 421
415 } // namespace net 422 } // namespace net
416 423
417 #endif // NET_QUIC_QUIC_SESSION_H_ 424 #endif // NET_QUIC_QUIC_SESSION_H_
OLDNEW
« no previous file with comments | « net/quic/quic_server_session_base_test.cc ('k') | net/quic/quic_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698