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 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
926 c->Run(rv > OK ? OK : rv); | 944 c->Run(rv > OK ? OK : rv); |
927 } else { | 945 } else { |
928 CompletionCallback c = user_connect_callback_; | 946 CompletionCallback c = user_connect_callback_; |
929 user_connect_callback_.Reset(); | 947 user_connect_callback_.Reset(); |
930 c.Run(rv > OK ? OK : rv); | 948 c.Run(rv > OK ? OK : rv); |
931 } | 949 } |
932 } | 950 } |
933 | 951 |
934 void SSLClientSocketMac::DoReadCallback(int rv) { | 952 void SSLClientSocketMac::DoReadCallback(int rv) { |
935 DCHECK(rv != ERR_IO_PENDING); | 953 DCHECK(rv != ERR_IO_PENDING); |
936 DCHECK(user_read_callback_); | 954 DCHECK(old_user_read_callback_ || !user_read_callback_.is_null()); |
937 | 955 |
938 // Since Run may result in Read being called, clear user_read_callback_ up | 956 // Since Run may result in Read being called, clear user_read_callback_ up |
939 // front. | 957 // front. |
940 OldCompletionCallback* c = user_read_callback_; | 958 if (old_user_read_callback_) { |
941 user_read_callback_ = NULL; | 959 OldCompletionCallback* c = old_user_read_callback_; |
942 user_read_buf_ = NULL; | 960 old_user_read_callback_ = NULL; |
943 user_read_buf_len_ = 0; | 961 user_read_buf_ = NULL; |
944 c->Run(rv); | 962 user_read_buf_len_ = 0; |
| 963 c->Run(rv); |
| 964 } else { |
| 965 CompletionCallback c = user_read_callback_; |
| 966 user_read_callback_.Reset(); |
| 967 user_read_buf_ = NULL; |
| 968 user_read_buf_len_ = 0; |
| 969 c.Run(rv); |
| 970 } |
945 } | 971 } |
946 | 972 |
947 void SSLClientSocketMac::DoWriteCallback(int rv) { | 973 void SSLClientSocketMac::DoWriteCallback(int rv) { |
948 DCHECK(rv != ERR_IO_PENDING); | 974 DCHECK(rv != ERR_IO_PENDING); |
949 DCHECK(user_write_callback_); | 975 DCHECK(user_write_callback_); |
950 | 976 |
951 // Since Run may result in Write being called, clear user_write_callback_ up | 977 // Since Run may result in Write being called, clear user_write_callback_ up |
952 // front. | 978 // front. |
953 OldCompletionCallback* c = user_write_callback_; | 979 OldCompletionCallback* c = user_write_callback_; |
954 user_write_callback_ = NULL; | 980 user_write_callback_ = NULL; |
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1457 if (rv < 0 && rv != ERR_IO_PENDING) { | 1483 if (rv < 0 && rv != ERR_IO_PENDING) { |
1458 us->write_io_buf_ = NULL; | 1484 us->write_io_buf_ = NULL; |
1459 return OSStatusFromNetError(rv); | 1485 return OSStatusFromNetError(rv); |
1460 } | 1486 } |
1461 | 1487 |
1462 // always lie to our caller | 1488 // always lie to our caller |
1463 return noErr; | 1489 return noErr; |
1464 } | 1490 } |
1465 | 1491 |
1466 } // namespace net | 1492 } // namespace net |
OLD | NEW |