| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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_client_socket_mac.h" | 5 #include "net/socket/ssl_client_socket_mac.h" |
| 6 | 6 |
| 7 #include <CoreServices/CoreServices.h> | 7 #include <CoreServices/CoreServices.h> |
| 8 #include <netdb.h> | 8 #include <netdb.h> |
| 9 #include <sys/socket.h> | 9 #include <sys/socket.h> |
| 10 #include <sys/types.h> | 10 #include <sys/types.h> |
| (...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 const SSLConfig& ssl_config, | 525 const SSLConfig& ssl_config, |
| 526 const SSLClientSocketContext& context) | 526 const SSLClientSocketContext& context) |
| 527 : transport_read_callback_(this, | 527 : transport_read_callback_(this, |
| 528 &SSLClientSocketMac::OnTransportReadComplete), | 528 &SSLClientSocketMac::OnTransportReadComplete), |
| 529 transport_write_callback_(this, | 529 transport_write_callback_(this, |
| 530 &SSLClientSocketMac::OnTransportWriteComplete), | 530 &SSLClientSocketMac::OnTransportWriteComplete), |
| 531 transport_(transport_socket), | 531 transport_(transport_socket), |
| 532 host_and_port_(host_and_port), | 532 host_and_port_(host_and_port), |
| 533 ssl_config_(ssl_config), | 533 ssl_config_(ssl_config), |
| 534 old_user_connect_callback_(NULL), | 534 old_user_connect_callback_(NULL), |
| 535 user_read_callback_(NULL), | 535 old_user_read_callback_(NULL), |
| 536 user_write_callback_(NULL), | 536 user_write_callback_(NULL), |
| 537 user_read_buf_len_(0), | 537 user_read_buf_len_(0), |
| 538 user_write_buf_len_(0), | 538 user_write_buf_len_(0), |
| 539 next_handshake_state_(STATE_NONE), | 539 next_handshake_state_(STATE_NONE), |
| 540 cert_verifier_(context.cert_verifier), | 540 cert_verifier_(context.cert_verifier), |
| 541 renegotiating_(false), | 541 renegotiating_(false), |
| 542 client_cert_requested_(false), | 542 client_cert_requested_(false), |
| 543 ssl_context_(NULL), | 543 ssl_context_(NULL), |
| 544 bytes_read_after_renegotiation_(0), | 544 bytes_read_after_renegotiation_(0), |
| 545 pending_send_error_(OK), | 545 pending_send_error_(OK), |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 693 if (transport_.get() && transport_->socket()) { | 693 if (transport_.get() && transport_->socket()) { |
| 694 return transport_->socket()->GetConnectTimeMicros(); | 694 return transport_->socket()->GetConnectTimeMicros(); |
| 695 } | 695 } |
| 696 NOTREACHED(); | 696 NOTREACHED(); |
| 697 return base::TimeDelta::FromMicroseconds(-1); | 697 return base::TimeDelta::FromMicroseconds(-1); |
| 698 } | 698 } |
| 699 | 699 |
| 700 int SSLClientSocketMac::Read(IOBuffer* buf, int buf_len, | 700 int SSLClientSocketMac::Read(IOBuffer* buf, int buf_len, |
| 701 OldCompletionCallback* callback) { | 701 OldCompletionCallback* callback) { |
| 702 DCHECK(completed_handshake()); | 702 DCHECK(completed_handshake()); |
| 703 DCHECK(!user_read_callback_); | 703 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null()); |
| 704 DCHECK(!user_read_buf_); | 704 DCHECK(!user_read_buf_); |
| 705 | 705 |
| 706 user_read_buf_ = buf; | 706 user_read_buf_ = buf; |
| 707 user_read_buf_len_ = buf_len; |
| 708 |
| 709 int rv = DoPayloadRead(); |
| 710 if (rv == ERR_IO_PENDING) { |
| 711 old_user_read_callback_ = callback; |
| 712 } else { |
| 713 user_read_buf_ = NULL; |
| 714 user_read_buf_len_ = 0; |
| 715 } |
| 716 return rv; |
| 717 } |
| 718 int SSLClientSocketMac::Read(IOBuffer* buf, int buf_len, |
| 719 const CompletionCallback& callback) { |
| 720 DCHECK(completed_handshake()); |
| 721 DCHECK(!old_user_read_callback_ && user_read_callback_.is_null()); |
| 722 DCHECK(!user_read_buf_); |
| 723 |
| 724 user_read_buf_ = buf; |
| 707 user_read_buf_len_ = buf_len; | 725 user_read_buf_len_ = buf_len; |
| 708 | 726 |
| 709 int rv = DoPayloadRead(); | 727 int rv = DoPayloadRead(); |
| 710 if (rv == ERR_IO_PENDING) { | 728 if (rv == ERR_IO_PENDING) { |
| 711 user_read_callback_ = callback; | 729 user_read_callback_ = callback; |
| 712 } else { | 730 } else { |
| 713 user_read_buf_ = NULL; | 731 user_read_buf_ = NULL; |
| 714 user_read_buf_len_ = 0; | 732 user_read_buf_len_ = 0; |
| 715 } | 733 } |
| 716 return rv; | 734 return rv; |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 924 c->Run(rv > OK ? OK : rv); | 942 c->Run(rv > OK ? OK : rv); |
| 925 } else { | 943 } else { |
| 926 CompletionCallback c = user_connect_callback_; | 944 CompletionCallback c = user_connect_callback_; |
| 927 user_connect_callback_.Reset(); | 945 user_connect_callback_.Reset(); |
| 928 c.Run(rv > OK ? OK : rv); | 946 c.Run(rv > OK ? OK : rv); |
| 929 } | 947 } |
| 930 } | 948 } |
| 931 | 949 |
| 932 void SSLClientSocketMac::DoReadCallback(int rv) { | 950 void SSLClientSocketMac::DoReadCallback(int rv) { |
| 933 DCHECK(rv != ERR_IO_PENDING); | 951 DCHECK(rv != ERR_IO_PENDING); |
| 934 DCHECK(user_read_callback_); | 952 DCHECK(old_user_read_callback_ || !user_read_callback_.is_null()); |
| 935 | 953 |
| 936 // Since Run may result in Read being called, clear user_read_callback_ up | 954 // Since Run may result in Read being called, clear user_read_callback_ up |
| 937 // front. | 955 // front. |
| 938 OldCompletionCallback* c = user_read_callback_; | 956 if (old_user_read_callback_) { |
| 939 user_read_callback_ = NULL; | 957 OldCompletionCallback* c = old_user_read_callback_; |
| 940 user_read_buf_ = NULL; | 958 old_user_read_callback_ = NULL; |
| 941 user_read_buf_len_ = 0; | 959 user_read_buf_ = NULL; |
| 942 c->Run(rv); | 960 user_read_buf_len_ = 0; |
| 961 c->Run(rv); |
| 962 } else { |
| 963 CompletionCallback c = user_read_callback_; |
| 964 user_read_callback_.Reset(); |
| 965 user_read_buf_ = NULL; |
| 966 user_read_buf_len_ = 0; |
| 967 c.Run(rv); |
| 968 } |
| 943 } | 969 } |
| 944 | 970 |
| 945 void SSLClientSocketMac::DoWriteCallback(int rv) { | 971 void SSLClientSocketMac::DoWriteCallback(int rv) { |
| 946 DCHECK(rv != ERR_IO_PENDING); | 972 DCHECK(rv != ERR_IO_PENDING); |
| 947 DCHECK(user_write_callback_); | 973 DCHECK(user_write_callback_); |
| 948 | 974 |
| 949 // Since Run may result in Write being called, clear user_write_callback_ up | 975 // Since Run may result in Write being called, clear user_write_callback_ up |
| 950 // front. | 976 // front. |
| 951 OldCompletionCallback* c = user_write_callback_; | 977 OldCompletionCallback* c = user_write_callback_; |
| 952 user_write_callback_ = NULL; | 978 user_write_callback_ = NULL; |
| (...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1455 if (rv < 0 && rv != ERR_IO_PENDING) { | 1481 if (rv < 0 && rv != ERR_IO_PENDING) { |
| 1456 us->write_io_buf_ = NULL; | 1482 us->write_io_buf_ = NULL; |
| 1457 return OSStatusFromNetError(rv); | 1483 return OSStatusFromNetError(rv); |
| 1458 } | 1484 } |
| 1459 | 1485 |
| 1460 // always lie to our caller | 1486 // always lie to our caller |
| 1461 return noErr; | 1487 return noErr; |
| 1462 } | 1488 } |
| 1463 | 1489 |
| 1464 } // namespace net | 1490 } // namespace net |
| OLD | NEW |