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 38becd8fce404724661231367c45ceb9c28bab7b..0bab4e452c1940accd8b7c23e5bdaed7ec5bc886 100644 |
--- a/net/tools/quic/quic_simple_client.h |
+++ b/net/tools/quic/quic_simple_client.h |
@@ -5,8 +5,8 @@ |
// A toy client, which connects to a specified port and sends QUIC |
// request to that endpoint. |
-#ifndef NET_TOOLS_QUIC_QUIC_CLIENT_H_ |
-#define NET_TOOLS_QUIC_QUIC_CLIENT_H_ |
+#ifndef NET_TOOLS_QUIC_QUIC_SIMPLE_CLIENT_H_ |
+#define NET_TOOLS_QUIC_QUIC_SIMPLE_CLIENT_H_ |
#include <string> |
@@ -14,54 +14,53 @@ |
#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/base/net_log.h" |
+#include "net/http/http_response_headers.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/tools/balsa/balsa_headers.h" |
-#include "net/tools/epoll_server/epoll_server.h" |
-#include "net/tools/quic/quic_client_session.h" |
-#include "net/tools/quic/quic_spdy_client_stream.h" |
+#include "net/tools/quic/quic_simple_client_session.h" |
+#include "net/tools/quic/quic_simple_client_stream.h" |
namespace net { |
+struct HttpRequestInfo; |
class ProofVerifier; |
class QuicServerId; |
+class QuicConnectionHelper; |
+class UDPClientSocket; |
namespace tools { |
-class QuicEpollConnectionHelper; |
- |
namespace test { |
class QuicClientPeer; |
} // namespace test |
-class QuicClient : public EpollCallbackInterface, |
- public QuicDataStream::Visitor { |
+class QuicSimpleClient : public QuicDataStream::Visitor { |
public: |
class ResponseListener { |
public: |
ResponseListener() {} |
virtual ~ResponseListener() {} |
virtual void OnCompleteResponse(QuicStreamId id, |
- const BalsaHeaders& response_headers, |
+ const HttpResponseHeaders& response_headers, |
const std::string& response_body) = 0; |
}; |
// Create a quic client, which will have events managed by an externally owned |
// EpollServer. |
- QuicClient(IPEndPoint server_address, |
- const QuicServerId& server_id, |
- const QuicVersionVector& supported_versions, |
- EpollServer* epoll_server); |
- QuicClient(IPEndPoint server_address, |
- const QuicServerId& server_id, |
- const QuicVersionVector& supported_versions, |
- const QuicConfig& config, |
- EpollServer* epoll_server); |
- |
- ~QuicClient() override; |
+ QuicSimpleClient(IPEndPoint server_address, |
+ const QuicServerId& server_id, |
+ const QuicVersionVector& supported_versions); |
+ QuicSimpleClient(IPEndPoint server_address, |
+ const QuicServerId& server_id, |
+ const QuicVersionVector& supported_versions, |
+ const QuicConfig& config); |
+ |
+ ~QuicSimpleClient() override; |
// Initializes the client to create a connection. Should be called exactly |
// once before calling StartConnect or Connect. Returns true if the |
@@ -86,23 +85,23 @@ class QuicClient : public EpollCallbackInterface, |
void Disconnect(); |
// Sends an HTTP request and does not wait for response before returning. |
- void SendRequest(const BalsaHeaders& headers, |
+ void SendRequest(const HttpRequestInfo& headers, |
base::StringPiece body, |
bool fin); |
// Sends an HTTP request and waits for response before returning. |
- void SendRequestAndWaitForResponse(const BalsaHeaders& headers, |
+ void SendRequestAndWaitForResponse(const HttpRequestInfo& headers, |
base::StringPiece body, |
bool fin); |
// Sends a request simple GET for each URL in |args|, and then waits for |
// each to complete. |
- void SendRequestsAndWaitForResponse(const |
- base::CommandLine::StringVector& args); |
+ void SendRequestsAndWaitForResponse( |
+ const base::CommandLine::StringVector& url_list); |
- // Returns a newly created QuicSpdyClientStream, owned by the |
- // QuicClient. |
- QuicSpdyClientStream* CreateReliableClientStream(); |
+ // Returns a newly created QuicSimpleClientStream, owned by the |
+ // QuicSimpleClient. |
+ QuicSimpleClientStream* CreateReliableClientStream(); |
// Wait for events until the stream with the given ID is closed. |
void WaitForStreamToClose(QuicStreamId id); |
@@ -114,20 +113,17 @@ class QuicClient : public EpollCallbackInterface, |
// Returns true if there are any outstanding requests. |
bool WaitForEvents(); |
- // From EpollCallbackInterface |
- void OnRegistration(EpollServer* eps, int fd, int event_mask) override {} |
- void OnModification(int fd, int event_mask) override {} |
- void OnEvent(int fd, EpollEvent* event) override; |
- // |fd_| can be unregistered without the client being disconnected. This |
- // happens in b3m QuicProber where we unregister |fd_| to feed in events to |
- // the client from the SelectServer. |
- void OnUnregistration(int fd, bool replaced) override {} |
- void OnShutdown(EpollServer* eps, int fd) override {} |
+ // Start the read loop on the socket. |
+ void StartReading(); |
+ |
+ // Called on reads that complete asynchronously. Dispatches the packet and |
+ // calls StartReading() again. |
+ void OnReadComplete(int result); |
// QuicDataStream::Visitor |
void OnClose(QuicDataStream* stream) override; |
- QuicClientSession* session() { return session_.get(); } |
+ QuicSimpleClientSession* session() { return session_.get(); } |
bool connected() const; |
bool goaway_received() const; |
@@ -144,8 +140,6 @@ class QuicClient : public EpollCallbackInterface, |
const IPEndPoint& client_address() const { return client_address_; } |
- int fd() { return fd_; } |
- |
const QuicServerId& server_id() const { return server_id_; } |
// This should only be set before the initial Connect() |
@@ -191,16 +185,9 @@ class QuicClient : public EpollCallbackInterface, |
protected: |
virtual QuicConnectionId GenerateConnectionId(); |
- virtual QuicEpollConnectionHelper* CreateQuicConnectionHelper(); |
+ virtual QuicConnectionHelper* CreateQuicConnectionHelper(); |
virtual QuicPacketWriter* CreateQuicPacketWriter(); |
- virtual int ReadPacket(char* buffer, |
- int buffer_len, |
- IPEndPoint* server_address, |
- IPAddressNumber* client_ip); |
- |
- EpollServer* epoll_server() { return epoll_server_; } |
- |
private: |
friend class net::tools::test::QuicClientPeer; |
@@ -220,12 +207,12 @@ class QuicClient : public EpollCallbackInterface, |
// and binds the socket to our address. |
bool CreateUDPSocket(); |
- // If the socket has been created, then unregister and close() the FD. |
- void CleanUpUDPSocket(); |
- |
// Read a UDP packet and hand it to the framer. |
bool ReadAndProcessPacket(); |
+ // Used by |helper_| to time alarms. |
+ QuicClock clock_; |
+ |
// Address of the server. |
const IPEndPoint server_address_; |
@@ -250,14 +237,16 @@ class QuicClient : public EpollCallbackInterface, |
scoped_ptr<QuicPacketWriter> writer_; |
// Session which manages streams. |
- scoped_ptr<QuicClientSession> session_; |
- // Listens for events on the client socket. |
- EpollServer* epoll_server_; |
- // UDP socket. |
- int fd_; |
+ scoped_ptr<QuicSimpleClientSession> 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<QuicEpollConnectionHelper> helper_; |
+ scoped_ptr<QuicConnectionHelper> helper_; |
// Listens for full responses. |
scoped_ptr<ResponseListener> response_listener_; |
@@ -289,10 +278,24 @@ class QuicClient : public EpollCallbackInterface, |
// Body of most recent response. |
std::string latest_response_body_; |
- DISALLOW_COPY_AND_ASSIGN(QuicClient); |
+ bool read_pending_; |
+ |
+ // The number of iterations of the read loop that have completed synchronously |
+ // and without posting a new task to the message loop. |
+ int synchronous_read_count_; |
+ |
+ // The target buffer of the current read. |
+ scoped_refptr<IOBufferWithSize> read_buffer_; |
+ |
+ // The log used for the sockets. |
+ NetLog net_log_; |
+ |
+ base::WeakPtrFactory<QuicSimpleClient> weak_factory_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(QuicSimpleClient); |
}; |
} // namespace tools |
} // namespace net |
-#endif // NET_TOOLS_QUIC_QUIC_CLIENT_H_ |
+#endif // NET_TOOLS_QUIC_QUIC_SIMPLE_CLIENT_H_ |