| 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/epoll.h> | 10 #include <sys/epoll.h> |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 supported_versions, | 67 supported_versions, |
| 68 config, | 68 config, |
| 69 new QuicEpollConnectionHelper(epoll_server), | 69 new QuicEpollConnectionHelper(epoll_server), |
| 70 proof_verifier), | 70 proof_verifier), |
| 71 server_address_(server_address), | 71 server_address_(server_address), |
| 72 local_port_(0), | 72 local_port_(0), |
| 73 epoll_server_(epoll_server), | 73 epoll_server_(epoll_server), |
| 74 initialized_(false), | 74 initialized_(false), |
| 75 packets_dropped_(0), | 75 packets_dropped_(0), |
| 76 overflow_supported_(false), | 76 overflow_supported_(false), |
| 77 use_recvmmsg_(false), | |
| 78 store_response_(false), | 77 store_response_(false), |
| 79 latest_response_code_(-1), | 78 latest_response_code_(-1), |
| 80 packet_reader_(new QuicPacketReader()) {} | 79 packet_reader_(new QuicPacketReader()) {} |
| 81 | 80 |
| 82 QuicClient::~QuicClient() { | 81 QuicClient::~QuicClient() { |
| 83 if (connected()) { | 82 if (connected()) { |
| 84 session()->connection()->SendConnectionCloseWithDetails( | 83 session()->connection()->SendConnectionCloseWithDetails( |
| 85 QUIC_PEER_GOING_AWAY, "Client being torn down"); | 84 QUIC_PEER_GOING_AWAY, "Client being torn down"); |
| 86 } | 85 } |
| 87 | 86 |
| 88 STLDeleteElements(&data_to_resend_on_connect_); | 87 STLDeleteElements(&data_to_resend_on_connect_); |
| 89 STLDeleteElements(&data_sent_before_handshake_); | 88 STLDeleteElements(&data_sent_before_handshake_); |
| 90 | 89 |
| 91 CleanUpAllUDPSockets(); | 90 CleanUpAllUDPSockets(); |
| 92 } | 91 } |
| 93 | 92 |
| 94 bool QuicClient::Initialize() { | 93 bool QuicClient::Initialize() { |
| 95 QuicClientBase::Initialize(); | 94 QuicClientBase::Initialize(); |
| 96 | 95 |
| 97 #if MMSG_MORE | |
| 98 use_recvmmsg_ = true; | |
| 99 #endif | |
| 100 | |
| 101 set_num_sent_client_hellos(0); | 96 set_num_sent_client_hellos(0); |
| 102 set_num_stateless_rejects_received(0); | 97 set_num_stateless_rejects_received(0); |
| 103 set_connection_error(QUIC_NO_ERROR); | 98 set_connection_error(QUIC_NO_ERROR); |
| 104 | 99 |
| 105 // If an initial flow control window has not explicitly been set, then use the | 100 // If an initial flow control window has not explicitly been set, then use the |
| 106 // same values that Chrome uses. | 101 // same values that Chrome uses. |
| 107 const uint32_t kSessionMaxRecvWindowSize = 15 * 1024 * 1024; // 15 MB | 102 const uint32_t kSessionMaxRecvWindowSize = 15 * 1024 * 1024; // 15 MB |
| 108 const uint32_t kStreamMaxRecvWindowSize = 6 * 1024 * 1024; // 6 MB | 103 const uint32_t kStreamMaxRecvWindowSize = 6 * 1024 * 1024; // 6 MB |
| 109 if (config()->GetInitialStreamFlowControlWindowToSend() == | 104 if (config()->GetInitialStreamFlowControlWindowToSend() == |
| 110 kMinimumFlowControlSendWindow) { | 105 kMinimumFlowControlSendWindow) { |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 | 384 |
| 390 return true; | 385 return true; |
| 391 } | 386 } |
| 392 | 387 |
| 393 void QuicClient::OnEvent(int fd, EpollEvent* event) { | 388 void QuicClient::OnEvent(int fd, EpollEvent* event) { |
| 394 DCHECK_EQ(fd, GetLatestFD()); | 389 DCHECK_EQ(fd, GetLatestFD()); |
| 395 | 390 |
| 396 if (event->in_events & EPOLLIN) { | 391 if (event->in_events & EPOLLIN) { |
| 397 bool more_to_read = true; | 392 bool more_to_read = true; |
| 398 while (connected() && more_to_read) { | 393 while (connected() && more_to_read) { |
| 399 if (use_recvmmsg_) { | 394 more_to_read = packet_reader_->ReadAndDispatchPackets( |
| 400 more_to_read = packet_reader_->ReadAndDispatchPackets( | 395 GetLatestFD(), QuicClient::GetLatestClientAddress().port(), this, |
| 401 GetLatestFD(), QuicClient::GetLatestClientAddress().port(), this, | 396 overflow_supported_ ? &packets_dropped_ : nullptr); |
| 402 overflow_supported_ ? &packets_dropped_ : nullptr); | |
| 403 } else { | |
| 404 more_to_read = QuicPacketReader::ReadAndDispatchSinglePacket( | |
| 405 GetLatestFD(), QuicClient::GetLatestClientAddress().port(), this, | |
| 406 overflow_supported_ ? &packets_dropped_ : nullptr); | |
| 407 } | |
| 408 } | 397 } |
| 409 } | 398 } |
| 410 if (connected() && (event->in_events & EPOLLOUT)) { | 399 if (connected() && (event->in_events & EPOLLOUT)) { |
| 411 writer()->SetWritable(); | 400 writer()->SetWritable(); |
| 412 session()->connection()->OnCanWrite(); | 401 session()->connection()->OnCanWrite(); |
| 413 } | 402 } |
| 414 if (event->in_events & EPOLLERR) { | 403 if (event->in_events & EPOLLERR) { |
| 415 DVLOG(1) << "Epollerr"; | 404 DVLOG(1) << "Epollerr"; |
| 416 } | 405 } |
| 417 } | 406 } |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 496 return fd_address_map_.back().first; | 485 return fd_address_map_.back().first; |
| 497 } | 486 } |
| 498 | 487 |
| 499 void QuicClient::ProcessPacket(const IPEndPoint& self_address, | 488 void QuicClient::ProcessPacket(const IPEndPoint& self_address, |
| 500 const IPEndPoint& peer_address, | 489 const IPEndPoint& peer_address, |
| 501 const QuicEncryptedPacket& packet) { | 490 const QuicEncryptedPacket& packet) { |
| 502 session()->connection()->ProcessUdpPacket(self_address, peer_address, packet); | 491 session()->connection()->ProcessUdpPacket(self_address, peer_address, packet); |
| 503 } | 492 } |
| 504 | 493 |
| 505 } // namespace net | 494 } // namespace net |
| OLD | NEW |