| Index: net/tools/quic/quic_simple_client.h
|
| diff --git a/net/tools/quic/quic_simple_client.h b/net/tools/quic/quic_simple_client.h
|
| index b94f8c2b00379cda589288093f51f3cbe86180bc..88a0032189c82db464bc306921a1acf2442de9b9 100644
|
| --- a/net/tools/quic/quic_simple_client.h
|
| +++ b/net/tools/quic/quic_simple_client.h
|
| @@ -14,23 +14,17 @@
|
| #include "base/command_line.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/strings/string_piece.h"
|
| -#include "net/base/io_buffer.h"
|
| #include "net/base/ip_endpoint.h"
|
| #include "net/http/http_response_headers.h"
|
| #include "net/log/net_log.h"
|
| -#include "net/quic/crypto/crypto_handshake.h"
|
| #include "net/quic/quic_config.h"
|
| -#include "net/quic/quic_framer.h"
|
| -#include "net/quic/quic_packet_creator.h"
|
| +#include "net/quic/quic_data_stream.h"
|
| #include "net/quic/quic_packet_reader.h"
|
| -#include "net/tools/quic/quic_client_session.h"
|
| -#include "net/tools/quic/quic_spdy_client_stream.h"
|
| +#include "net/tools/quic/quic_client_base.h"
|
|
|
| namespace net {
|
|
|
| struct HttpRequestInfo;
|
| -class ProofVerifier;
|
| -class QuicServerId;
|
| class QuicConnectionHelper;
|
| class UDPClientSocket;
|
|
|
| @@ -40,7 +34,8 @@ namespace test {
|
| class QuicClientPeer;
|
| } // namespace test
|
|
|
| -class QuicSimpleClient : public QuicDataStream::Visitor,
|
| +class QuicSimpleClient : public QuicClientBase,
|
| + public QuicDataStream::Visitor,
|
| public QuicPacketReader::Visitor {
|
| public:
|
| class ResponseListener {
|
| @@ -94,10 +89,10 @@ class QuicSimpleClient : public QuicDataStream::Visitor,
|
|
|
| ~QuicSimpleClient() override;
|
|
|
| - // Initializes the client to create a connection. Should be called exactly
|
| - // once before calling StartConnect or Connect. Returns true if the
|
| - // initialization succeeds, false otherwise.
|
| - bool Initialize();
|
| + // From QuicClientBase
|
| + bool Initialize() override;
|
| + bool WaitForEvents() override;
|
| + QuicConnectionId GenerateNewConnectionId() override;
|
|
|
| // "Connect" to the QUIC server, including performing synchronous crypto
|
| // handshake.
|
| @@ -108,11 +103,6 @@ class QuicSimpleClient : public QuicDataStream::Visitor,
|
| // completes.
|
| void StartConnect();
|
|
|
| - // Returns true if the crypto handshake has yet to establish encryption.
|
| - // Returns false if encryption is active (even if the server hasn't confirmed
|
| - // the handshake) or if the connection has been closed.
|
| - bool EncryptionBeingEstablished();
|
| -
|
| // Disconnects from the QUIC server.
|
| void Disconnect();
|
|
|
| @@ -131,20 +121,6 @@ class QuicSimpleClient : public QuicDataStream::Visitor,
|
| void SendRequestsAndWaitForResponse(
|
| const base::CommandLine::StringVector& url_list);
|
|
|
| - // Returns a newly created QuicSpdyClientStream, owned by the
|
| - // QuicSimpleClient.
|
| - QuicSpdyClientStream* CreateReliableClientStream();
|
| -
|
| - // Wait for events until the stream with the given ID is closed.
|
| - void WaitForStreamToClose(QuicStreamId id);
|
| -
|
| - // Wait for events until the handshake is confirmed.
|
| - void WaitForCryptoHandshakeConfirmed();
|
| -
|
| - // Wait up to 50ms, and handle any events which occur.
|
| - // Returns true if there are any outstanding requests.
|
| - bool WaitForEvents();
|
| -
|
| // Migrate to a new socket during an active connection.
|
| bool MigrateSocket(const IPAddressNumber& new_host);
|
|
|
| @@ -162,11 +138,6 @@ class QuicSimpleClient : public QuicDataStream::Visitor,
|
| // Otherwise, deletes the data. Takes ownerership of |data_to_resend|.
|
| void MaybeAddQuicDataToResend(QuicDataToResend* data_to_resend);
|
|
|
| - QuicClientSession* session() { return session_.get(); }
|
| -
|
| - bool connected() const;
|
| - bool goaway_received() const;
|
| -
|
| void set_bind_to_address(IPAddressNumber address) {
|
| bind_to_address_ = address;
|
| }
|
| @@ -179,111 +150,24 @@ class QuicSimpleClient : public QuicDataStream::Visitor,
|
|
|
| const IPEndPoint& client_address() const { return client_address_; }
|
|
|
| - const QuicServerId& server_id() const { return server_id_; }
|
| -
|
| - // This should only be set before the initial Connect()
|
| - void set_server_id(const QuicServerId& server_id) {
|
| - server_id_ = server_id;
|
| - }
|
| -
|
| - void SetUserAgentID(const std::string& user_agent_id) {
|
| - crypto_config_.set_user_agent_id(user_agent_id);
|
| - }
|
| -
|
| - // SetProofVerifier sets the ProofVerifier that will be used to verify the
|
| - // server's certificate and takes ownership of |verifier|.
|
| - void SetProofVerifier(ProofVerifier* verifier) {
|
| - // TODO(rtenneti): We should set ProofVerifier in QuicClientSession.
|
| - crypto_config_.SetProofVerifier(verifier);
|
| - }
|
| -
|
| - // SetChannelIDSource sets a ChannelIDSource that will be called, when the
|
| - // server supports channel IDs, to obtain a channel ID for signing a message
|
| - // proving possession of the channel ID. This object takes ownership of
|
| - // |source|.
|
| - void SetChannelIDSource(ChannelIDSource* source) {
|
| - crypto_config_.SetChannelIDSource(source);
|
| - }
|
| -
|
| - void SetSupportedVersions(const QuicVersionVector& versions) {
|
| - supported_versions_ = versions;
|
| - }
|
| -
|
| // Takes ownership of the listener.
|
| void set_response_listener(ResponseListener* listener) {
|
| response_listener_.reset(listener);
|
| }
|
|
|
| - QuicConfig* config() { return &config_; }
|
| -
|
| void set_store_response(bool val) { store_response_ = val; }
|
|
|
| size_t latest_response_code() const;
|
| const std::string& latest_response_headers() const;
|
| const std::string& latest_response_body() const;
|
|
|
| - // Change the initial maximum packet size of the connection. Has to be called
|
| - // before Connect()/StartConnect() in order to have any effect.
|
| - void set_initial_max_packet_length(QuicByteCount initial_max_packet_length) {
|
| - initial_max_packet_length_ = initial_max_packet_length;
|
| - }
|
| -
|
| - int num_stateless_rejects_received() const {
|
| - return num_stateless_rejects_received_;
|
| - }
|
| -
|
| - // The number of client hellos sent, taking stateless rejects into
|
| - // account. In the case of a stateless reject, the initial
|
| - // connection object may be torn down and a new one created. The
|
| - // user cannot rely upon the latest connection object to get the
|
| - // total number of client hellos sent, and should use this function
|
| - // instead.
|
| - int GetNumSentClientHellos();
|
| -
|
| - // Returns any errors that occurred at the connection-level (as
|
| - // opposed to the session-level). When a stateless reject occurs,
|
| - // the error of the last session may not reflect the overall state
|
| - // of the connection.
|
| - QuicErrorCode connection_error() const;
|
| -
|
| protected:
|
| - // Generates the next ConnectionId for |server_id_|. By default, if the
|
| - // cached server config contains a server-designated ID, that ID will be
|
| - // returned. Otherwise, the next random ID will be returned.
|
| - QuicConnectionId GetNextConnectionId();
|
| -
|
| - // Returns the next server-designated ConnectionId from the cached config for
|
| - // |server_id_|, if it exists. Otherwise, returns 0.
|
| - QuicConnectionId GetNextServerDesignatedConnectionId();
|
| -
|
| - // Generates a new, random connection ID (as opposed to a server-designated
|
| - // connection ID).
|
| - virtual QuicConnectionId GenerateNewConnectionId();
|
| -
|
| virtual QuicConnectionHelper* CreateQuicConnectionHelper();
|
| virtual QuicPacketWriter* CreateQuicPacketWriter();
|
|
|
| - virtual QuicClientSession* CreateQuicClientSession(
|
| - const QuicConfig& config,
|
| - QuicConnection* connection,
|
| - const QuicServerId& server_id,
|
| - QuicCryptoClientConfig* crypto_config);
|
| -
|
| private:
|
| friend class net::tools::test::QuicClientPeer;
|
|
|
| - // A packet writer factory that always returns the same writer
|
| - class DummyPacketWriterFactory : public QuicConnection::PacketWriterFactory {
|
| - public:
|
| - DummyPacketWriterFactory(QuicPacketWriter* writer);
|
| - ~DummyPacketWriterFactory() override;
|
| -
|
| - QuicPacketWriter* Create(QuicConnection* connection) const override;
|
| -
|
| - private:
|
| - QuicPacketWriter* writer_;
|
| - };
|
| -
|
| // Specific QuicClient class for storing data to resend.
|
| class ClientQuicDataToResend : public QuicDataToResend {
|
| public:
|
| @@ -322,14 +206,6 @@ class QuicSimpleClient : public QuicDataStream::Visitor,
|
| // Address of the server.
|
| const IPEndPoint server_address_;
|
|
|
| - // |server_id_| is a tuple (hostname, port, is_https) of the server.
|
| - QuicServerId server_id_;
|
| -
|
| - // config_ and crypto_config_ contain configuration and cached state about
|
| - // servers.
|
| - QuicConfig config_;
|
| - QuicCryptoClientConfig crypto_config_;
|
| -
|
| // Address of the client if the client is connected to the server.
|
| IPEndPoint client_address_;
|
|
|
| @@ -338,19 +214,9 @@ class QuicSimpleClient : public QuicDataStream::Visitor,
|
| // Local port to bind to. Initialize to 0.
|
| int local_port_;
|
|
|
| - // Writer used to actually send packets to the wire. Needs to outlive
|
| - // |session_|.
|
| - scoped_ptr<QuicPacketWriter> writer_;
|
| -
|
| - // Session which manages streams.
|
| - scoped_ptr<QuicClientSession> session_;
|
| -
|
| // UDP socket connected to the server.
|
| scoped_ptr<UDPClientSocket> socket_;
|
|
|
| - // Connection on the socket. Owned by |session_|.
|
| - QuicConnection* connection_;
|
| -
|
| // Helper to be used by created connections.
|
| scoped_ptr<QuicConnectionHelper> helper_;
|
|
|
| @@ -368,13 +234,6 @@ class QuicSimpleClient : public QuicDataStream::Visitor,
|
| // because the socket would otherwise overflow.
|
| bool overflow_supported_;
|
|
|
| - // This vector contains QUIC versions which we currently support.
|
| - // This should be ordered such that the highest supported version is the first
|
| - // element, with subsequent elements in descending order (versions can be
|
| - // skipped as necessary). We will always pick supported_versions_[0] as the
|
| - // initial version to use.
|
| - QuicVersionVector supported_versions_;
|
| -
|
| // If true, store the latest response code, headers, and body.
|
| bool store_response_;
|
| // HTTP response code from most recent response.
|
| @@ -384,31 +243,6 @@ class QuicSimpleClient : public QuicDataStream::Visitor,
|
| // Body of most recent response.
|
| std::string latest_response_body_;
|
|
|
| - // The initial value of maximum packet size of the connection. If set to
|
| - // zero, the default is used.
|
| - QuicByteCount initial_max_packet_length_;
|
| -
|
| - // The number of stateless rejects received during the current/latest
|
| - // connection.
|
| - // TODO(jokulik): Consider some consistent naming scheme (or other) for member
|
| - // variables that are kept per-request, per-connection, and over the client's
|
| - // lifetime.
|
| - int num_stateless_rejects_received_;
|
| -
|
| - // The number of hellos sent during the current/latest connection.
|
| - int num_sent_client_hellos_;
|
| -
|
| - // Used to store any errors that occurred with the overall connection (as
|
| - // opposed to that associated with the last session object).
|
| - QuicErrorCode connection_error_;
|
| -
|
| - // True when the client is attempting to connect or re-connect the session (in
|
| - // the case of a stateless reject). Set to false between a call to
|
| - // Disconnect() and the subsequent call to StartConnect(). When
|
| - // connected_or_attempting_connect_ is false, the session object corresponds
|
| - // to the previous client-level connection.
|
| - bool connected_or_attempting_connect_;
|
| -
|
| // Keeps track of any data sent before the handshake.
|
| std::vector<QuicDataToResend*> data_sent_before_handshake_;
|
|
|
|
|