OLD | NEW |
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 toy client, which connects to a specified port and sends QUIC | 5 // A toy client, which connects to a specified port and sends QUIC |
6 // request to that endpoint. | 6 // request to that endpoint. |
7 | 7 |
8 #ifndef NET_TOOLS_QUIC_QUIC_SIMPLE_CLIENT_H_ | 8 #ifndef NET_TOOLS_QUIC_QUIC_SIMPLE_CLIENT_H_ |
9 #define NET_TOOLS_QUIC_QUIC_SIMPLE_CLIENT_H_ | 9 #define NET_TOOLS_QUIC_QUIC_SIMPLE_CLIENT_H_ |
10 | 10 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 public: | 43 public: |
44 class ResponseListener { | 44 class ResponseListener { |
45 public: | 45 public: |
46 ResponseListener() {} | 46 ResponseListener() {} |
47 virtual ~ResponseListener() {} | 47 virtual ~ResponseListener() {} |
48 virtual void OnCompleteResponse(QuicStreamId id, | 48 virtual void OnCompleteResponse(QuicStreamId id, |
49 const HttpResponseHeaders& response_headers, | 49 const HttpResponseHeaders& response_headers, |
50 const std::string& response_body) = 0; | 50 const std::string& response_body) = 0; |
51 }; | 51 }; |
52 | 52 |
53 // The client uses these objects to keep track of any data to resend upon | |
54 // receipt of a stateless reject. Recall that the client API allows callers | |
55 // to optimistically send data to the server prior to handshake-confirmation. | |
56 // If the client subsequently receives a stateless reject, it must tear down | |
57 // its existing session, create a new session, and resend all previously sent | |
58 // data. It uses these objects to keep track of all the sent data, and to | |
59 // resend the data upon a subsequent connection. | |
60 class QuicDataToResend { | |
61 public: | |
62 // Takes ownership of |headers|. |headers| may be null, since it's possible | |
63 // to send data without headers. | |
64 QuicDataToResend(HttpRequestInfo* headers, | |
65 base::StringPiece body, | |
66 bool fin); | |
67 | |
68 virtual ~QuicDataToResend(); | |
69 | |
70 // Must be overridden by specific classes with the actual method for | |
71 // re-sending data. | |
72 virtual void Resend() = 0; | |
73 | |
74 protected: | |
75 HttpRequestInfo* headers_; | |
76 base::StringPiece body_; | |
77 bool fin_; | |
78 | |
79 private: | |
80 DISALLOW_COPY_AND_ASSIGN(QuicDataToResend); | |
81 }; | |
82 | |
83 // Create a quic client, which will have events managed by an externally owned | 53 // Create a quic client, which will have events managed by an externally owned |
84 // EpollServer. | 54 // EpollServer. |
85 QuicSimpleClient(IPEndPoint server_address, | 55 QuicSimpleClient(IPEndPoint server_address, |
86 const QuicServerId& server_id, | 56 const QuicServerId& server_id, |
87 const QuicVersionVector& supported_versions, | 57 const QuicVersionVector& supported_versions, |
88 std::unique_ptr<ProofVerifier> proof_verifier); | 58 std::unique_ptr<ProofVerifier> proof_verifier); |
89 QuicSimpleClient(IPEndPoint server_address, | 59 QuicSimpleClient(IPEndPoint server_address, |
90 const QuicServerId& server_id, | 60 const QuicServerId& server_id, |
91 const QuicVersionVector& supported_versions, | 61 const QuicVersionVector& supported_versions, |
92 const QuicConfig& config, | 62 const QuicConfig& config, |
(...skipping 12 matching lines...) Expand all Loading... |
105 | 75 |
106 // Start the crypto handshake. This can be done in place of the synchronous | 76 // Start the crypto handshake. This can be done in place of the synchronous |
107 // Connect(), but callers are responsible for making sure the crypto handshake | 77 // Connect(), but callers are responsible for making sure the crypto handshake |
108 // completes. | 78 // completes. |
109 void StartConnect(); | 79 void StartConnect(); |
110 | 80 |
111 // Disconnects from the QUIC server. | 81 // Disconnects from the QUIC server. |
112 void Disconnect(); | 82 void Disconnect(); |
113 | 83 |
114 // Sends an HTTP request and does not wait for response before returning. | 84 // Sends an HTTP request and does not wait for response before returning. |
115 void SendRequest(const HttpRequestInfo& headers, | 85 void SendRequest(const SpdyHeaderBlock& headers, |
116 base::StringPiece body, | 86 base::StringPiece body, |
117 bool fin); | 87 bool fin); |
118 | 88 |
119 // Sends an HTTP request and waits for response before returning. | 89 // Sends an HTTP request and waits for response before returning. |
120 void SendRequestAndWaitForResponse(const HttpRequestInfo& headers, | 90 void SendRequestAndWaitForResponse(const SpdyHeaderBlock& headers, |
121 base::StringPiece body, | 91 base::StringPiece body, |
122 bool fin); | 92 bool fin); |
123 | 93 |
124 // Sends a request simple GET for each URL in |args|, and then waits for | 94 // Sends a request simple GET for each URL in |args|, and then waits for |
125 // each to complete. | 95 // each to complete. |
126 void SendRequestsAndWaitForResponse( | 96 void SendRequestsAndWaitForResponse( |
127 const base::CommandLine::StringVector& url_list); | 97 const base::CommandLine::StringVector& url_list); |
128 | 98 |
129 // Migrate to a new socket during an active connection. | 99 // Migrate to a new socket during an active connection. |
130 bool MigrateSocket(const IPAddress& new_host); | 100 bool MigrateSocket(const IPAddress& new_host); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 virtual QuicChromiumConnectionHelper* CreateQuicConnectionHelper(); | 142 virtual QuicChromiumConnectionHelper* CreateQuicConnectionHelper(); |
173 virtual QuicPacketWriter* CreateQuicPacketWriter(); | 143 virtual QuicPacketWriter* CreateQuicPacketWriter(); |
174 | 144 |
175 private: | 145 private: |
176 friend class net::test::QuicClientPeer; | 146 friend class net::test::QuicClientPeer; |
177 | 147 |
178 // Specific QuicClient class for storing data to resend. | 148 // Specific QuicClient class for storing data to resend. |
179 class ClientQuicDataToResend : public QuicDataToResend { | 149 class ClientQuicDataToResend : public QuicDataToResend { |
180 public: | 150 public: |
181 // Takes ownership of |headers|. | 151 // Takes ownership of |headers|. |
182 ClientQuicDataToResend(HttpRequestInfo* headers, | 152 ClientQuicDataToResend(std::unique_ptr<SpdyHeaderBlock> headers, |
183 base::StringPiece body, | 153 base::StringPiece body, |
184 bool fin, | 154 bool fin, |
185 QuicSimpleClient* client) | 155 QuicSimpleClient* client) |
186 : QuicDataToResend(headers, body, fin), client_(client) { | 156 : QuicDataToResend(std::move(headers), body, fin), client_(client) { |
187 DCHECK(headers); | |
188 DCHECK(client); | 157 DCHECK(client); |
189 } | 158 } |
190 | 159 |
191 ~ClientQuicDataToResend() override {} | 160 ~ClientQuicDataToResend() override {} |
192 | 161 |
193 void Resend() override; | 162 void Resend() override; |
194 | 163 |
195 private: | 164 private: |
196 QuicSimpleClient* client_; | 165 QuicSimpleClient* client_; |
197 | 166 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 bool packet_reader_started_; | 229 bool packet_reader_started_; |
261 | 230 |
262 base::WeakPtrFactory<QuicSimpleClient> weak_factory_; | 231 base::WeakPtrFactory<QuicSimpleClient> weak_factory_; |
263 | 232 |
264 DISALLOW_COPY_AND_ASSIGN(QuicSimpleClient); | 233 DISALLOW_COPY_AND_ASSIGN(QuicSimpleClient); |
265 }; | 234 }; |
266 | 235 |
267 } // namespace net | 236 } // namespace net |
268 | 237 |
269 #endif // NET_TOOLS_QUIC_QUIC_SIMPLE_CLIENT_H_ | 238 #endif // NET_TOOLS_QUIC_QUIC_SIMPLE_CLIENT_H_ |
OLD | NEW |