| 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 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 388 | 383 |
| 389 return true; | 384 return true; |
| 390 } | 385 } |
| 391 | 386 |
| 392 void QuicClient::OnEvent(int fd, EpollEvent* event) { | 387 void QuicClient::OnEvent(int fd, EpollEvent* event) { |
| 393 DCHECK_EQ(fd, GetLatestFD()); | 388 DCHECK_EQ(fd, GetLatestFD()); |
| 394 | 389 |
| 395 if (event->in_events & EPOLLIN) { | 390 if (event->in_events & EPOLLIN) { |
| 396 bool more_to_read = true; | 391 bool more_to_read = true; |
| 397 while (connected() && more_to_read) { | 392 while (connected() && more_to_read) { |
| 398 if (use_recvmmsg_) { | 393 more_to_read = packet_reader_->ReadAndDispatchPackets( |
| 399 more_to_read = packet_reader_->ReadAndDispatchPackets( | 394 GetLatestFD(), QuicClient::GetLatestClientAddress().port(), this, |
| 400 GetLatestFD(), QuicClient::GetLatestClientAddress().port(), this, | 395 overflow_supported_ ? &packets_dropped_ : nullptr); |
| 401 overflow_supported_ ? &packets_dropped_ : nullptr); | |
| 402 } else { | |
| 403 more_to_read = QuicPacketReader::ReadAndDispatchSinglePacket( | |
| 404 GetLatestFD(), QuicClient::GetLatestClientAddress().port(), this, | |
| 405 overflow_supported_ ? &packets_dropped_ : nullptr); | |
| 406 } | |
| 407 } | 396 } |
| 408 } | 397 } |
| 409 if (connected() && (event->in_events & EPOLLOUT)) { | 398 if (connected() && (event->in_events & EPOLLOUT)) { |
| 410 writer()->SetWritable(); | 399 writer()->SetWritable(); |
| 411 session()->connection()->OnCanWrite(); | 400 session()->connection()->OnCanWrite(); |
| 412 } | 401 } |
| 413 if (event->in_events & EPOLLERR) { | 402 if (event->in_events & EPOLLERR) { |
| 414 DVLOG(1) << "Epollerr"; | 403 DVLOG(1) << "Epollerr"; |
| 415 } | 404 } |
| 416 } | 405 } |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 495 return fd_address_map_.back().first; | 484 return fd_address_map_.back().first; |
| 496 } | 485 } |
| 497 | 486 |
| 498 void QuicClient::ProcessPacket(const IPEndPoint& self_address, | 487 void QuicClient::ProcessPacket(const IPEndPoint& self_address, |
| 499 const IPEndPoint& peer_address, | 488 const IPEndPoint& peer_address, |
| 500 const QuicEncryptedPacket& packet) { | 489 const QuicEncryptedPacket& packet) { |
| 501 session()->connection()->ProcessUdpPacket(self_address, peer_address, packet); | 490 session()->connection()->ProcessUdpPacket(self_address, peer_address, packet); |
| 502 } | 491 } |
| 503 | 492 |
| 504 } // namespace net | 493 } // namespace net |
| OLD | NEW |