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 "content/browser/renderer_host/pepper/pepper_tcp_socket.h" | 5 #include "content/browser/renderer_host/pepper/pepper_tcp_socket.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 SendReadACKError(); | 161 SendReadACKError(); |
162 return; | 162 return; |
163 } | 163 } |
164 | 164 |
165 if (bytes_to_read > ppapi::TCPSocketPrivateImpl::kMaxReadSize) { | 165 if (bytes_to_read > ppapi::TCPSocketPrivateImpl::kMaxReadSize) { |
166 NOTREACHED(); | 166 NOTREACHED(); |
167 bytes_to_read = ppapi::TCPSocketPrivateImpl::kMaxReadSize; | 167 bytes_to_read = ppapi::TCPSocketPrivateImpl::kMaxReadSize; |
168 } | 168 } |
169 | 169 |
170 read_buffer_ = new net::IOBuffer(bytes_to_read); | 170 read_buffer_ = new net::IOBuffer(bytes_to_read); |
171 int result = socket_->Read(read_buffer_, bytes_to_read, | 171 int result = socket_->Read( |
172 base::Bind(&PepperTCPSocket::OnReadCompleted, | 172 read_buffer_.get(), |
173 base::Unretained(this))); | 173 bytes_to_read, |
| 174 base::Bind(&PepperTCPSocket::OnReadCompleted, base::Unretained(this))); |
174 if (result != net::ERR_IO_PENDING) | 175 if (result != net::ERR_IO_PENDING) |
175 OnReadCompleted(result); | 176 OnReadCompleted(result); |
176 } | 177 } |
177 | 178 |
178 void PepperTCPSocket::Write(const std::string& data) { | 179 void PepperTCPSocket::Write(const std::string& data) { |
179 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 180 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
180 | 181 |
181 if (!IsConnected() || write_buffer_base_.get() || write_buffer_.get() || | 182 if (!IsConnected() || write_buffer_base_.get() || write_buffer_.get() || |
182 data.empty()) { | 183 data.empty()) { |
183 SendWriteACKError(); | 184 SendWriteACKError(); |
184 return; | 185 return; |
185 } | 186 } |
186 | 187 |
187 int data_size = data.size(); | 188 int data_size = data.size(); |
188 if (data_size > ppapi::TCPSocketPrivateImpl::kMaxWriteSize) { | 189 if (data_size > ppapi::TCPSocketPrivateImpl::kMaxWriteSize) { |
189 NOTREACHED(); | 190 NOTREACHED(); |
190 data_size = ppapi::TCPSocketPrivateImpl::kMaxWriteSize; | 191 data_size = ppapi::TCPSocketPrivateImpl::kMaxWriteSize; |
191 } | 192 } |
192 | 193 |
193 write_buffer_base_ = new net::IOBuffer(data_size); | 194 write_buffer_base_ = new net::IOBuffer(data_size); |
194 memcpy(write_buffer_base_->data(), data.data(), data_size); | 195 memcpy(write_buffer_base_->data(), data.data(), data_size); |
195 write_buffer_ = new net::DrainableIOBuffer(write_buffer_base_, data_size); | 196 write_buffer_ = |
| 197 new net::DrainableIOBuffer(write_buffer_base_.get(), data_size); |
196 DoWrite(); | 198 DoWrite(); |
197 } | 199 } |
198 | 200 |
199 void PepperTCPSocket::SetBoolOption(uint32_t name, bool value) { | 201 void PepperTCPSocket::SetBoolOption(uint32_t name, bool value) { |
200 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 202 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
201 DCHECK(socket_.get()); | 203 DCHECK(socket_.get()); |
202 | 204 |
203 switch (name) { | 205 switch (name) { |
204 case PP_TCPSOCKETOPTION_NO_DELAY: | 206 case PP_TCPSOCKETOPTION_NO_DELAY: |
205 if (!IsSsl()) { | 207 if (!IsSsl()) { |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
284 return true; | 286 return true; |
285 } | 287 } |
286 | 288 |
287 // static | 289 // static |
288 bool PepperTCPSocket::GetCertificateFields( | 290 bool PepperTCPSocket::GetCertificateFields( |
289 const char* der, | 291 const char* der, |
290 uint32_t length, | 292 uint32_t length, |
291 ppapi::PPB_X509Certificate_Fields* fields) { | 293 ppapi::PPB_X509Certificate_Fields* fields) { |
292 scoped_refptr<net::X509Certificate> cert = | 294 scoped_refptr<net::X509Certificate> cert = |
293 net::X509Certificate::CreateFromBytes(der, length); | 295 net::X509Certificate::CreateFromBytes(der, length); |
294 if (!cert) | 296 if (!cert.get()) |
295 return false; | 297 return false; |
296 return GetCertificateFields(*cert, fields); | 298 return GetCertificateFields(*cert.get(), fields); |
297 } | 299 } |
298 | 300 |
299 void PepperTCPSocket::SendReadACKError() { | 301 void PepperTCPSocket::SendReadACKError() { |
300 manager_->Send(new PpapiMsg_PPBTCPSocket_ReadACK( | 302 manager_->Send(new PpapiMsg_PPBTCPSocket_ReadACK( |
301 routing_id_, plugin_dispatcher_id_, socket_id_, false, std::string())); | 303 routing_id_, plugin_dispatcher_id_, socket_id_, false, std::string())); |
302 } | 304 } |
303 | 305 |
304 void PepperTCPSocket::SendWriteACKError() { | 306 void PepperTCPSocket::SendWriteACKError() { |
305 manager_->Send(new PpapiMsg_PPBTCPSocket_WriteACK( | 307 manager_->Send(new PpapiMsg_PPBTCPSocket_WriteACK( |
306 routing_id_, plugin_dispatcher_id_, socket_id_, false, 0)); | 308 routing_id_, plugin_dispatcher_id_, socket_id_, false, 0)); |
307 } | 309 } |
308 | 310 |
309 void PepperTCPSocket::SendSSLHandshakeACK(bool succeeded) { | 311 void PepperTCPSocket::SendSSLHandshakeACK(bool succeeded) { |
310 ppapi::PPB_X509Certificate_Fields certificate_fields; | 312 ppapi::PPB_X509Certificate_Fields certificate_fields; |
311 if (succeeded) { | 313 if (succeeded) { |
312 // Our socket is guaranteed to be an SSL socket if we get here. | 314 // Our socket is guaranteed to be an SSL socket if we get here. |
313 net::SSLClientSocket* ssl_socket = | 315 net::SSLClientSocket* ssl_socket = |
314 static_cast<net::SSLClientSocket*>(socket_.get()); | 316 static_cast<net::SSLClientSocket*>(socket_.get()); |
315 net::SSLInfo ssl_info; | 317 net::SSLInfo ssl_info; |
316 ssl_socket->GetSSLInfo(&ssl_info); | 318 ssl_socket->GetSSLInfo(&ssl_info); |
317 if (ssl_info.cert) | 319 if (ssl_info.cert.get()) |
318 GetCertificateFields(*ssl_info.cert, &certificate_fields); | 320 GetCertificateFields(*ssl_info.cert.get(), &certificate_fields); |
319 } | 321 } |
320 manager_->Send(new PpapiMsg_PPBTCPSocket_SSLHandshakeACK( | 322 manager_->Send(new PpapiMsg_PPBTCPSocket_SSLHandshakeACK( |
321 routing_id_, | 323 routing_id_, |
322 plugin_dispatcher_id_, | 324 plugin_dispatcher_id_, |
323 socket_id_, | 325 socket_id_, |
324 succeeded, | 326 succeeded, |
325 certificate_fields)); | 327 certificate_fields)); |
326 } | 328 } |
327 | 329 |
328 void PepperTCPSocket::SendSetBoolOptionACK(bool succeeded) { | 330 void PepperTCPSocket::SendSetBoolOptionACK(bool succeeded) { |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
436 return connection_state_ == SSL_HANDSHAKE_IN_PROGRESS || | 438 return connection_state_ == SSL_HANDSHAKE_IN_PROGRESS || |
437 connection_state_ == SSL_CONNECTED || | 439 connection_state_ == SSL_CONNECTED || |
438 connection_state_ == SSL_HANDSHAKE_FAILED; | 440 connection_state_ == SSL_HANDSHAKE_FAILED; |
439 } | 441 } |
440 | 442 |
441 void PepperTCPSocket::DoWrite() { | 443 void PepperTCPSocket::DoWrite() { |
442 DCHECK(write_buffer_base_.get()); | 444 DCHECK(write_buffer_base_.get()); |
443 DCHECK(write_buffer_.get()); | 445 DCHECK(write_buffer_.get()); |
444 DCHECK_GT(write_buffer_->BytesRemaining(), 0); | 446 DCHECK_GT(write_buffer_->BytesRemaining(), 0); |
445 | 447 |
446 int result = socket_->Write(write_buffer_, write_buffer_->BytesRemaining(), | 448 int result = socket_->Write( |
447 base::Bind(&PepperTCPSocket::OnWriteCompleted, | 449 write_buffer_.get(), |
448 base::Unretained(this))); | 450 write_buffer_->BytesRemaining(), |
| 451 base::Bind(&PepperTCPSocket::OnWriteCompleted, base::Unretained(this))); |
449 if (result != net::ERR_IO_PENDING) | 452 if (result != net::ERR_IO_PENDING) |
450 OnWriteCompleted(result); | 453 OnWriteCompleted(result); |
451 } | 454 } |
452 | 455 |
453 } // namespace content | 456 } // namespace content |
OLD | NEW |