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 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 | 90 |
91 if (!CreateUDPSocket()) { | 91 if (!CreateUDPSocket()) { |
92 return false; | 92 return false; |
93 } | 93 } |
94 | 94 |
95 epoll_server_->RegisterFD(fd_, this, kEpollFlags); | 95 epoll_server_->RegisterFD(fd_, this, kEpollFlags); |
96 initialized_ = true; | 96 initialized_ = true; |
97 return true; | 97 return true; |
98 } | 98 } |
99 | 99 |
| 100 QuicClient::DummyPacketWriterFactory::DummyPacketWriterFactory( |
| 101 QuicPacketWriter* writer) |
| 102 : writer_(writer) {} |
| 103 |
| 104 QuicClient::DummyPacketWriterFactory::~DummyPacketWriterFactory() {} |
| 105 |
| 106 QuicPacketWriter* QuicClient::DummyPacketWriterFactory::Create( |
| 107 QuicConnection* /*connection*/) const { |
| 108 return writer_; |
| 109 } |
| 110 |
| 111 |
100 bool QuicClient::CreateUDPSocket() { | 112 bool QuicClient::CreateUDPSocket() { |
101 int address_family = server_address_.GetSockAddrFamily(); | 113 int address_family = server_address_.GetSockAddrFamily(); |
102 fd_ = socket(address_family, SOCK_DGRAM | SOCK_NONBLOCK, IPPROTO_UDP); | 114 fd_ = socket(address_family, SOCK_DGRAM | SOCK_NONBLOCK, IPPROTO_UDP); |
103 if (fd_ < 0) { | 115 if (fd_ < 0) { |
104 LOG(ERROR) << "CreateSocket() failed: " << strerror(errno); | 116 LOG(ERROR) << "CreateSocket() failed: " << strerror(errno); |
105 return false; | 117 return false; |
106 } | 118 } |
107 | 119 |
108 int get_overflow = 1; | 120 int get_overflow = 1; |
109 int rc = setsockopt(fd_, SOL_SOCKET, SO_RXQ_OVFL, &get_overflow, | 121 int rc = setsockopt(fd_, SOL_SOCKET, SO_RXQ_OVFL, &get_overflow, |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 } | 184 } |
173 return session_->connection()->connected(); | 185 return session_->connection()->connected(); |
174 } | 186 } |
175 | 187 |
176 bool QuicClient::StartConnect() { | 188 bool QuicClient::StartConnect() { |
177 DCHECK(initialized_); | 189 DCHECK(initialized_); |
178 DCHECK(!connected()); | 190 DCHECK(!connected()); |
179 | 191 |
180 QuicPacketWriter* writer = CreateQuicPacketWriter(); | 192 QuicPacketWriter* writer = CreateQuicPacketWriter(); |
181 | 193 |
| 194 DummyPacketWriterFactory factory(writer); |
| 195 |
182 session_.reset(new QuicClientSession( | 196 session_.reset(new QuicClientSession( |
183 config_, | 197 config_, |
184 new QuicConnection(GenerateConnectionId(), | 198 new QuicConnection(GenerateConnectionId(), |
185 server_address_, | 199 server_address_, |
186 helper_.get(), | 200 helper_.get(), |
187 writer, | 201 factory, |
188 false /* owns_writer */, | 202 /* owns_writer= */ false, |
189 false /* is_server */, | 203 /* is_server= */ false, |
190 supported_versions_))); | 204 supported_versions_))); |
| 205 |
191 // Reset |writer_| after |session_| so that the old writer outlives the old | 206 // Reset |writer_| after |session_| so that the old writer outlives the old |
192 // session. | 207 // session. |
193 if (writer_.get() != writer) { | 208 if (writer_.get() != writer) { |
194 writer_.reset(writer); | 209 writer_.reset(writer); |
195 } | 210 } |
196 session_->InitializeSession(server_id_, &crypto_config_); | 211 session_->InitializeSession(server_id_, &crypto_config_); |
197 return session_->CryptoConnect(); | 212 return session_->CryptoConnect(); |
198 } | 213 } |
199 | 214 |
200 bool QuicClient::EncryptionBeingEstablished() { | 215 bool QuicClient::EncryptionBeingEstablished() { |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 QuicEncryptedPacket packet(buf, bytes_read, false); | 356 QuicEncryptedPacket packet(buf, bytes_read, false); |
342 | 357 |
343 IPEndPoint client_address(client_ip, client_address_.port()); | 358 IPEndPoint client_address(client_ip, client_address_.port()); |
344 session_->connection()->ProcessUdpPacket( | 359 session_->connection()->ProcessUdpPacket( |
345 client_address, server_address, packet); | 360 client_address, server_address, packet); |
346 return true; | 361 return true; |
347 } | 362 } |
348 | 363 |
349 } // namespace tools | 364 } // namespace tools |
350 } // namespace net | 365 } // namespace net |
OLD | NEW |