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 #include "net/tools/quic/quic_client.h" | 5 #include "net/tools/quic/quic_client.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <netinet/in.h> | 8 #include <netinet/in.h> |
9 #include <string.h> | 9 #include <string.h> |
10 #include <sys/socket.h> | 10 #include <sys/socket.h> |
11 #include <unistd.h> | 11 #include <unistd.h> |
12 | 12 |
13 #include "base/logging.h" | 13 #include "base/logging.h" |
14 #include "net/quic/crypto/quic_random.h" | 14 #include "net/quic/crypto/quic_random.h" |
15 #include "net/quic/quic_connection.h" | 15 #include "net/quic/quic_connection.h" |
16 #include "net/quic/quic_data_reader.h" | 16 #include "net/quic/quic_data_reader.h" |
17 #include "net/quic/quic_protocol.h" | 17 #include "net/quic/quic_protocol.h" |
18 #include "net/quic/quic_server_id.h" | 18 #include "net/quic/quic_server_id.h" |
19 #include "net/tools/balsa/balsa_headers.h" | 19 #include "net/tools/balsa/balsa_headers.h" |
20 #include "net/tools/epoll_server/epoll_server.h" | 20 #include "net/tools/epoll_server/epoll_server.h" |
21 #include "net/tools/quic/quic_epoll_connection_helper.h" | 21 #include "net/tools/quic/quic_epoll_connection_helper.h" |
22 #include "net/tools/quic/quic_socket_utils.h" | 22 #include "net/tools/quic/quic_socket_utils.h" |
23 #include "net/tools/quic/quic_spdy_client_stream.h" | 23 #include "net/tools/quic/quic_spdy_client_stream.h" |
24 | 24 |
25 #ifndef SO_RXQ_OVFL | 25 #ifndef SO_RXQ_OVFL |
26 #define SO_RXQ_OVFL 40 | 26 #define SO_RXQ_OVFL 40 |
27 #endif | 27 #endif |
28 | 28 |
29 using std::string; | 29 using std::string; |
| 30 using std::vector; |
30 | 31 |
31 namespace net { | 32 namespace net { |
32 namespace tools { | 33 namespace tools { |
33 | 34 |
34 const PollBits kEpollFlags = PollBits(NET_POLLIN | NET_POLLOUT | NET_POLLET); | 35 const PollBits kEpollFlags = PollBits(NET_POLLIN | NET_POLLOUT | NET_POLLET); |
35 | 36 |
36 QuicClient::QuicClient(IPEndPoint server_address, | 37 QuicClient::QuicClient(IPEndPoint server_address, |
37 const QuicServerId& server_id, | 38 const QuicServerId& server_id, |
38 const QuicVersionVector& supported_versions, | 39 const QuicVersionVector& supported_versions, |
39 EpollServer* epoll_server) | 40 EpollServer* epoll_server) |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 bool fin) { | 246 bool fin) { |
246 QuicSpdyClientStream* stream = CreateReliableClientStream(); | 247 QuicSpdyClientStream* stream = CreateReliableClientStream(); |
247 if (stream == nullptr) { | 248 if (stream == nullptr) { |
248 LOG(DFATAL) << "stream creation failed!"; | 249 LOG(DFATAL) << "stream creation failed!"; |
249 return; | 250 return; |
250 } | 251 } |
251 stream->SendRequest(headers, body, fin); | 252 stream->SendRequest(headers, body, fin); |
252 stream->set_visitor(this); | 253 stream->set_visitor(this); |
253 } | 254 } |
254 | 255 |
255 void QuicClient::SendRequestAndWaitForResponse(const BalsaHeaders& headers, | 256 void QuicClient::SendRequestAndWaitForResponse( |
256 StringPiece body, | 257 const BalsaHeaders& headers, |
257 bool fin) { | 258 StringPiece body, |
258 SendRequest(headers, "", true); | 259 bool fin) { |
259 while (WaitForEvents()) { | 260 SendRequest(headers, body, fin); |
260 } | 261 while (WaitForEvents()) {} |
261 } | 262 } |
262 | 263 |
263 void QuicClient::SendRequestsAndWaitForResponse( | 264 void QuicClient::SendRequestsAndWaitForResponse( |
264 const base::CommandLine::StringVector& args) { | 265 const vector<string>& url_list) { |
265 for (size_t i = 0; i < args.size(); ++i) { | 266 for (size_t i = 0; i < url_list.size(); ++i) { |
266 BalsaHeaders headers; | 267 BalsaHeaders headers; |
267 headers.SetRequestFirstlineFromStringPieces("GET", args[i], "HTTP/1.1"); | 268 headers.SetRequestFirstlineFromStringPieces("GET", url_list[i], "HTTP/1.1"); |
268 SendRequest(headers, "", true); | 269 SendRequest(headers, "", true); |
269 } | 270 } |
270 while (WaitForEvents()) {} | 271 while (WaitForEvents()) {} |
271 } | 272 } |
272 | 273 |
273 QuicSpdyClientStream* QuicClient::CreateReliableClientStream() { | 274 QuicSpdyClientStream* QuicClient::CreateReliableClientStream() { |
274 if (!connected()) { | 275 if (!connected()) { |
275 return nullptr; | 276 return nullptr; |
276 } | 277 } |
277 | 278 |
278 return session_->CreateOutgoingDataStream(); | 279 return session_->CreateOutgoingDataStream(); |
279 } | 280 } |
280 | 281 |
281 void QuicClient::WaitForStreamToClose(QuicStreamId id) { | 282 void QuicClient::WaitForStreamToClose(QuicStreamId id) { |
282 DCHECK(connected()); | 283 DCHECK(connected()); |
283 | 284 |
284 while (connected() && !session_->IsClosedStream(id)) { | 285 while (connected() && !session_->IsClosedStream(id)) { |
285 epoll_server_->WaitForEventsAndExecuteCallbacks(); | 286 WaitForEvents(); |
286 } | 287 } |
287 } | 288 } |
288 | 289 |
289 void QuicClient::WaitForCryptoHandshakeConfirmed() { | 290 void QuicClient::WaitForCryptoHandshakeConfirmed() { |
290 DCHECK(connected()); | 291 DCHECK(connected()); |
291 | 292 |
292 while (connected() && !session_->IsCryptoHandshakeConfirmed()) { | 293 while (connected() && !session_->IsCryptoHandshakeConfirmed()) { |
293 epoll_server_->WaitForEventsAndExecuteCallbacks(); | 294 WaitForEvents(); |
294 } | 295 } |
295 } | 296 } |
296 | 297 |
297 bool QuicClient::WaitForEvents() { | 298 bool QuicClient::WaitForEvents() { |
298 DCHECK(connected()); | 299 DCHECK(connected()); |
299 | 300 |
300 epoll_server_->WaitForEventsAndExecuteCallbacks(); | 301 epoll_server_->WaitForEventsAndExecuteCallbacks(); |
301 return session_->num_active_requests() != 0; | 302 return session_->num_active_requests() != 0; |
302 } | 303 } |
303 | 304 |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
396 QuicEncryptedPacket packet(buf, bytes_read, false); | 397 QuicEncryptedPacket packet(buf, bytes_read, false); |
397 | 398 |
398 IPEndPoint client_address(client_ip, client_address_.port()); | 399 IPEndPoint client_address(client_ip, client_address_.port()); |
399 session_->connection()->ProcessUdpPacket( | 400 session_->connection()->ProcessUdpPacket( |
400 client_address, server_address, packet); | 401 client_address, server_address, packet); |
401 return true; | 402 return true; |
402 } | 403 } |
403 | 404 |
404 } // namespace tools | 405 } // namespace tools |
405 } // namespace net | 406 } // namespace net |
OLD | NEW |