summaryrefslogtreecommitdiff
path: root/chromium/net/quic/quic_chromium_client_session.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/net/quic/quic_chromium_client_session.h')
-rw-r--r--chromium/net/quic/quic_chromium_client_session.h52
1 files changed, 38 insertions, 14 deletions
diff --git a/chromium/net/quic/quic_chromium_client_session.h b/chromium/net/quic/quic_chromium_client_session.h
index 0a1ac868ce0..e47f4146788 100644
--- a/chromium/net/quic/quic_chromium_client_session.h
+++ b/chromium/net/quic/quic_chromium_client_session.h
@@ -10,28 +10,31 @@
#ifndef NET_QUIC_QUIC_CHROMIUM_CLIENT_SESSION_H_
#define NET_QUIC_QUIC_CHROMIUM_CLIENT_SESSION_H_
+#include <stddef.h>
+
#include <string>
-#include "base/basictypes.h"
#include "base/containers/hash_tables.h"
+#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "base/time/time.h"
#include "net/base/completion_callback.h"
#include "net/base/socket_performance_watcher.h"
+#include "net/cert/ct_verify_result.h"
#include "net/proxy/proxy_server.h"
+#include "net/quic/quic_chromium_client_stream.h"
#include "net/quic/quic_client_session_base.h"
#include "net/quic/quic_connection_logger.h"
#include "net/quic/quic_crypto_client_stream.h"
#include "net/quic/quic_packet_reader.h"
#include "net/quic/quic_protocol.h"
-#include "net/quic/quic_reliable_client_stream.h"
#include "net/quic/quic_time.h"
namespace net {
class CertVerifyResult;
class DatagramClientSocket;
-class QuicConnectionHelper;
+class QuicChromiumConnectionHelper;
class QuicCryptoClientStreamFactory;
class QuicServerId;
class QuicServerInfo;
@@ -78,7 +81,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession
// ERR_IO_PENDING is returned, then when the request is eventuallly
// complete |callback| will be called.
int StartRequest(const base::WeakPtr<QuicChromiumClientSession>& session,
- QuicReliableClientStream** stream,
+ QuicChromiumClientStream** stream,
const CompletionCallback& callback);
// Cancels any pending stream creation request. May be called
@@ -90,7 +93,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession
// Called by |session_| for an asynchronous request when the stream
// request has finished successfully.
- void OnRequestCompleteSuccess(QuicReliableClientStream* stream);
+ void OnRequestCompleteSuccess(QuicChromiumClientStream* stream);
// Called by |session_| for an asynchronous request when the stream
// request has finished with an error. Also called with ERR_ABORTED
@@ -99,7 +102,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession
base::WeakPtr<QuicChromiumClientSession> session_;
CompletionCallback callback_;
- QuicReliableClientStream** stream_;
+ QuicChromiumClientStream** stream_;
DISALLOW_COPY_AND_ASSIGN(StreamRequest);
};
@@ -139,14 +142,18 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession
// TODO(rch): remove |stream| from this and use setter on |request|
// and fix in spdy too.
int TryCreateStream(StreamRequest* request,
- QuicReliableClientStream** stream);
+ QuicChromiumClientStream** stream);
// Cancels the pending stream creation request.
void CancelRequest(StreamRequest* request);
+ // QuicSpdySession methods:
+ void OnHeadersHeadOfLineBlocking(QuicTime::Delta delta) override;
+
// QuicSession methods:
void OnStreamFrame(const QuicStreamFrame& frame) override;
- QuicReliableClientStream* CreateOutgoingDynamicStream() override;
+ QuicChromiumClientStream* CreateOutgoingDynamicStream(
+ SpdyPriority priority) override;
QuicCryptoClientStream* GetCryptoStream() override;
void CloseStream(QuicStreamId stream_id) override;
void SendRstStream(QuicStreamId id,
@@ -158,6 +165,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession
void OnCryptoHandshakeMessageReceived(
const CryptoHandshakeMessage& message) override;
void OnGoAway(const QuicGoAwayFrame& frame) override;
+ void OnRstStream(const QuicRstStreamFrame& frame) override;
// QuicClientSessionBase methods:
void OnProofValid(const QuicCryptoClientConfig::CachedState& cached) override;
@@ -169,7 +177,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession
void OnSuccessfulVersionNegotiation(const QuicVersion& version) override;
// QuicPacketReader::Visitor methods:
- void OnReadError(int result) override;
+ void OnReadError(int result, const DatagramClientSocket* socket) override;
bool OnPacket(const QuicEncryptedPacket& packet,
IPEndPoint local_address,
IPEndPoint peer_address) override;
@@ -184,7 +192,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession
// Resumes a crypto handshake with the server after a timeout.
int ResumeCryptoConnect(const CompletionCallback& callback);
- // Causes the QuicConnectionHelper to start reading from the socket
+ // Causes the QuicConnectionHelper to start reading from all sockets
// and passing the data along to the QuicConnection.
void StartReading();
@@ -217,9 +225,24 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession
QuicDisabledReason disabled_reason() const { return disabled_reason_; }
+ // Migrates session onto new socket, i.e., starts reading from |socket|
+ // in addition to any previous sockets, and sets |writer| to be the new
+ // default writer. Returns true if socket was successfully added to the
+ // session and the session was successfully migrated to using the new socket.
+ // Returns false if number of migrations exceeds kMaxReadersPerQuicSession.
+ // Takes ownership of |socket|, |reader|, and |writer|.
+ bool MigrateToSocket(scoped_ptr<DatagramClientSocket> socket,
+ scoped_ptr<QuicPacketReader> reader,
+ scoped_ptr<QuicPacketWriter> writer);
+
+ // Returns current default socket. This is the socket over which all
+ // QUIC packets are sent. This default socket can change, so do not store the
+ // returned socket.
+ const DatagramClientSocket* GetDefaultSocket() const;
+
protected:
// QuicSession methods:
- QuicDataStream* CreateIncomingDynamicStream(QuicStreamId id) override;
+ QuicSpdyStream* CreateIncomingDynamicStream(QuicStreamId id) override;
private:
friend class test::QuicChromiumClientSessionPeer;
@@ -227,7 +250,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession
typedef std::set<Observer*> ObserverSet;
typedef std::list<StreamRequest*> StreamRequestQueue;
- QuicReliableClientStream* CreateOutgoingReliableStreamImpl();
+ QuicChromiumClientStream* CreateOutgoingReliableStreamImpl();
// A completion callback invoked when a read completes.
void OnReadComplete(int result);
@@ -266,10 +289,11 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession
bool require_confirmation_;
scoped_ptr<QuicCryptoClientStream> crypto_stream_;
QuicStreamFactory* stream_factory_;
- scoped_ptr<DatagramClientSocket> socket_;
+ std::vector<scoped_ptr<DatagramClientSocket>> sockets_;
TransportSecurityState* transport_security_state_;
scoped_ptr<QuicServerInfo> server_info_;
scoped_ptr<CertVerifyResult> cert_verify_result_;
+ scoped_ptr<ct::CTVerifyResult> ct_verify_result_;
std::string pinning_failure_log_;
ObserverSet observers_;
StreamRequestQueue stream_requests_;
@@ -277,7 +301,7 @@ class NET_EXPORT_PRIVATE QuicChromiumClientSession
size_t num_total_streams_;
base::TaskRunner* task_runner_;
BoundNetLog net_log_;
- QuicPacketReader packet_reader_;
+ std::vector<scoped_ptr<QuicPacketReader>> packet_readers_;
base::TimeTicks dns_resolution_end_time_;
base::TimeTicks handshake_start_; // Time the handshake was started.
scoped_ptr<QuicConnectionLogger> logger_;