Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: net/socket/ssl_server_socket_nss.cc

Issue 15829004: Update net/ to use scoped_refptr<T>::get() rather than implicit "operator T*" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: license twerk Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/socket/ssl_client_socket_unittest.cc ('k') | net/socket/ssl_server_socket_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/socket/ssl_server_socket_nss.h" 5 #include "net/socket/ssl_server_socket_nss.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <winsock2.h> 8 #include <winsock2.h>
9 #endif 9 #endif
10 10
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 193
194 int SSLServerSocketNSS::Connect(const CompletionCallback& callback) { 194 int SSLServerSocketNSS::Connect(const CompletionCallback& callback) {
195 NOTIMPLEMENTED(); 195 NOTIMPLEMENTED();
196 return ERR_NOT_IMPLEMENTED; 196 return ERR_NOT_IMPLEMENTED;
197 } 197 }
198 198
199 int SSLServerSocketNSS::Read(IOBuffer* buf, int buf_len, 199 int SSLServerSocketNSS::Read(IOBuffer* buf, int buf_len,
200 const CompletionCallback& callback) { 200 const CompletionCallback& callback) {
201 DCHECK(user_read_callback_.is_null()); 201 DCHECK(user_read_callback_.is_null());
202 DCHECK(user_handshake_callback_.is_null()); 202 DCHECK(user_handshake_callback_.is_null());
203 DCHECK(!user_read_buf_); 203 DCHECK(!user_read_buf_.get());
204 DCHECK(nss_bufs_); 204 DCHECK(nss_bufs_);
205 DCHECK(!callback.is_null()); 205 DCHECK(!callback.is_null());
206 206
207 user_read_buf_ = buf; 207 user_read_buf_ = buf;
208 user_read_buf_len_ = buf_len; 208 user_read_buf_len_ = buf_len;
209 209
210 DCHECK(completed_handshake_); 210 DCHECK(completed_handshake_);
211 211
212 int rv = DoReadLoop(OK); 212 int rv = DoReadLoop(OK);
213 213
214 if (rv == ERR_IO_PENDING) { 214 if (rv == ERR_IO_PENDING) {
215 user_read_callback_ = callback; 215 user_read_callback_ = callback;
216 } else { 216 } else {
217 user_read_buf_ = NULL; 217 user_read_buf_ = NULL;
218 user_read_buf_len_ = 0; 218 user_read_buf_len_ = 0;
219 } 219 }
220 return rv; 220 return rv;
221 } 221 }
222 222
223 int SSLServerSocketNSS::Write(IOBuffer* buf, int buf_len, 223 int SSLServerSocketNSS::Write(IOBuffer* buf, int buf_len,
224 const CompletionCallback& callback) { 224 const CompletionCallback& callback) {
225 DCHECK(user_write_callback_.is_null()); 225 DCHECK(user_write_callback_.is_null());
226 DCHECK(!user_write_buf_); 226 DCHECK(!user_write_buf_.get());
227 DCHECK(nss_bufs_); 227 DCHECK(nss_bufs_);
228 DCHECK(!callback.is_null()); 228 DCHECK(!callback.is_null());
229 229
230 user_write_buf_ = buf; 230 user_write_buf_ = buf;
231 user_write_buf_len_ = buf_len; 231 user_write_buf_len_ = buf_len;
232 232
233 int rv = DoWriteLoop(OK); 233 int rv = DoWriteLoop(OK);
234 234
235 if (rv == ERR_IO_PENDING) { 235 if (rv == ERR_IO_PENDING) {
236 user_write_callback_ = callback; 236 user_write_callback_ = callback;
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 void SSLServerSocketNSS::OnSendComplete(int result) { 479 void SSLServerSocketNSS::OnSendComplete(int result) {
480 if (next_handshake_state_ == STATE_HANDSHAKE) { 480 if (next_handshake_state_ == STATE_HANDSHAKE) {
481 // In handshake phase. 481 // In handshake phase.
482 OnHandshakeIOComplete(result); 482 OnHandshakeIOComplete(result);
483 return; 483 return;
484 } 484 }
485 485
486 if (!completed_handshake_) 486 if (!completed_handshake_)
487 return; 487 return;
488 488
489 if (user_write_buf_) { 489 if (user_write_buf_.get()) {
490 int rv = DoWriteLoop(result); 490 int rv = DoWriteLoop(result);
491 if (rv != ERR_IO_PENDING) 491 if (rv != ERR_IO_PENDING)
492 DoWriteCallback(rv); 492 DoWriteCallback(rv);
493 } else { 493 } else {
494 // Ensure that any queued ciphertext is flushed. 494 // Ensure that any queued ciphertext is flushed.
495 DoTransportIO(); 495 DoTransportIO();
496 } 496 }
497 } 497 }
498 498
499 void SSLServerSocketNSS::OnRecvComplete(int result) { 499 void SSLServerSocketNSS::OnRecvComplete(int result) {
500 if (next_handshake_state_ == STATE_HANDSHAKE) { 500 if (next_handshake_state_ == STATE_HANDSHAKE) {
501 // In handshake phase. 501 // In handshake phase.
502 OnHandshakeIOComplete(result); 502 OnHandshakeIOComplete(result);
503 return; 503 return;
504 } 504 }
505 505
506 // Network layer received some data, check if client requested to read 506 // Network layer received some data, check if client requested to read
507 // decrypted data. 507 // decrypted data.
508 if (!user_read_buf_ || !completed_handshake_) 508 if (!user_read_buf_.get() || !completed_handshake_)
509 return; 509 return;
510 510
511 int rv = DoReadLoop(result); 511 int rv = DoReadLoop(result);
512 if (rv != ERR_IO_PENDING) 512 if (rv != ERR_IO_PENDING)
513 DoReadCallback(rv); 513 DoReadCallback(rv);
514 } 514 }
515 515
516 void SSLServerSocketNSS::OnHandshakeIOComplete(int result) { 516 void SSLServerSocketNSS::OnHandshakeIOComplete(int result) {
517 int rv = DoHandshakeLoop(result); 517 int rv = DoHandshakeLoop(result);
518 if (rv != ERR_IO_PENDING) { 518 if (rv != ERR_IO_PENDING) {
(...skipping 15 matching lines...) Expand all
534 unsigned int len1, len2; 534 unsigned int len1, len2;
535 memio_GetWriteParams(nss_bufs_, &buf1, &len1, &buf2, &len2); 535 memio_GetWriteParams(nss_bufs_, &buf1, &len1, &buf2, &len2);
536 const unsigned int len = len1 + len2; 536 const unsigned int len = len1 + len2;
537 537
538 int rv = 0; 538 int rv = 0;
539 if (len) { 539 if (len) {
540 scoped_refptr<IOBuffer> send_buffer(new IOBuffer(len)); 540 scoped_refptr<IOBuffer> send_buffer(new IOBuffer(len));
541 memcpy(send_buffer->data(), buf1, len1); 541 memcpy(send_buffer->data(), buf1, len1);
542 memcpy(send_buffer->data() + len1, buf2, len2); 542 memcpy(send_buffer->data() + len1, buf2, len2);
543 rv = transport_socket_->Write( 543 rv = transport_socket_->Write(
544 send_buffer, len, 544 send_buffer.get(),
545 len,
545 base::Bind(&SSLServerSocketNSS::BufferSendComplete, 546 base::Bind(&SSLServerSocketNSS::BufferSendComplete,
546 base::Unretained(this))); 547 base::Unretained(this)));
547 if (rv == ERR_IO_PENDING) { 548 if (rv == ERR_IO_PENDING) {
548 transport_send_busy_ = true; 549 transport_send_busy_ = true;
549 } else { 550 } else {
550 memio_PutWriteResult(nss_bufs_, MapErrorToNSS(rv)); 551 memio_PutWriteResult(nss_bufs_, MapErrorToNSS(rv));
551 } 552 }
552 } 553 }
553 554
554 return rv; 555 return rv;
(...skipping 10 matching lines...) Expand all
565 566
566 char* buf; 567 char* buf;
567 int nb = memio_GetReadParams(nss_bufs_, &buf); 568 int nb = memio_GetReadParams(nss_bufs_, &buf);
568 int rv; 569 int rv;
569 if (!nb) { 570 if (!nb) {
570 // buffer too full to read into, so no I/O possible at moment 571 // buffer too full to read into, so no I/O possible at moment
571 rv = ERR_IO_PENDING; 572 rv = ERR_IO_PENDING;
572 } else { 573 } else {
573 recv_buffer_ = new IOBuffer(nb); 574 recv_buffer_ = new IOBuffer(nb);
574 rv = transport_socket_->Read( 575 rv = transport_socket_->Read(
575 recv_buffer_, nb, 576 recv_buffer_.get(),
577 nb,
576 base::Bind(&SSLServerSocketNSS::BufferRecvComplete, 578 base::Bind(&SSLServerSocketNSS::BufferRecvComplete,
577 base::Unretained(this))); 579 base::Unretained(this)));
578 if (rv == ERR_IO_PENDING) { 580 if (rv == ERR_IO_PENDING) {
579 transport_recv_busy_ = true; 581 transport_recv_busy_ = true;
580 } else { 582 } else {
581 if (rv > 0) 583 if (rv > 0)
582 memcpy(buf, recv_buffer_->data(), rv); 584 memcpy(buf, recv_buffer_->data(), rv);
583 memio_PutReadResult(nss_bufs_, MapErrorToNSS(rv)); 585 memio_PutReadResult(nss_bufs_, MapErrorToNSS(rv));
584 recv_buffer_ = NULL; 586 recv_buffer_ = NULL;
585 } 587 }
(...skipping 27 matching lines...) Expand all
613 if (rv > 0) 615 if (rv > 0)
614 network_moved = true; 616 network_moved = true;
615 } while (rv > 0); 617 } while (rv > 0);
616 if (BufferRecv() >= 0) 618 if (BufferRecv() >= 0)
617 network_moved = true; 619 network_moved = true;
618 } 620 }
619 return network_moved; 621 return network_moved;
620 } 622 }
621 623
622 int SSLServerSocketNSS::DoPayloadRead() { 624 int SSLServerSocketNSS::DoPayloadRead() {
623 DCHECK(user_read_buf_); 625 DCHECK(user_read_buf_.get());
624 DCHECK_GT(user_read_buf_len_, 0); 626 DCHECK_GT(user_read_buf_len_, 0);
625 int rv = PR_Read(nss_fd_, user_read_buf_->data(), user_read_buf_len_); 627 int rv = PR_Read(nss_fd_, user_read_buf_->data(), user_read_buf_len_);
626 if (rv >= 0) 628 if (rv >= 0)
627 return rv; 629 return rv;
628 PRErrorCode prerr = PR_GetError(); 630 PRErrorCode prerr = PR_GetError();
629 if (prerr == PR_WOULD_BLOCK_ERROR) { 631 if (prerr == PR_WOULD_BLOCK_ERROR) {
630 return ERR_IO_PENDING; 632 return ERR_IO_PENDING;
631 } 633 }
632 rv = MapNSSError(prerr); 634 rv = MapNSSError(prerr);
633 net_log_.AddEvent(NetLog::TYPE_SSL_READ_ERROR, 635 net_log_.AddEvent(NetLog::TYPE_SSL_READ_ERROR,
634 CreateNetLogSSLErrorCallback(rv, prerr)); 636 CreateNetLogSSLErrorCallback(rv, prerr));
635 return rv; 637 return rv;
636 } 638 }
637 639
638 int SSLServerSocketNSS::DoPayloadWrite() { 640 int SSLServerSocketNSS::DoPayloadWrite() {
639 DCHECK(user_write_buf_); 641 DCHECK(user_write_buf_.get());
640 int rv = PR_Write(nss_fd_, user_write_buf_->data(), user_write_buf_len_); 642 int rv = PR_Write(nss_fd_, user_write_buf_->data(), user_write_buf_len_);
641 if (rv >= 0) 643 if (rv >= 0)
642 return rv; 644 return rv;
643 PRErrorCode prerr = PR_GetError(); 645 PRErrorCode prerr = PR_GetError();
644 if (prerr == PR_WOULD_BLOCK_ERROR) { 646 if (prerr == PR_WOULD_BLOCK_ERROR) {
645 return ERR_IO_PENDING; 647 return ERR_IO_PENDING;
646 } 648 }
647 rv = MapNSSError(prerr); 649 rv = MapNSSError(prerr);
648 net_log_.AddEvent(NetLog::TYPE_SSL_WRITE_ERROR, 650 net_log_.AddEvent(NetLog::TYPE_SSL_WRITE_ERROR,
649 CreateNetLogSSLErrorCallback(rv, prerr)); 651 CreateNetLogSSLErrorCallback(rv, prerr));
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 // initializes the NSS base library. 818 // initializes the NSS base library.
817 EnsureNSSSSLInit(); 819 EnsureNSSSSLInit();
818 if (!NSS_IsInitialized()) 820 if (!NSS_IsInitialized())
819 return ERR_UNEXPECTED; 821 return ERR_UNEXPECTED;
820 822
821 EnableSSLServerSockets(); 823 EnableSSLServerSockets();
822 return OK; 824 return OK;
823 } 825 }
824 826
825 } // namespace net 827 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/ssl_client_socket_unittest.cc ('k') | net/socket/ssl_server_socket_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698