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

Side by Side Diff: net/socket/ssl_client_socket_mac.h

Issue 266078: Make SSLClientSocketMac full-duplex (Closed)
Patch Set: cleanup OnTransportWriteComplete Created 11 years, 2 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
« no previous file with comments | « no previous file | net/socket/ssl_client_socket_mac.cc » ('j') | net/socket/ssl_client_socket_mac.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2009 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 #ifndef NET_SOCKET_SSL_CLIENT_SOCKET_MAC_H_ 5 #ifndef NET_SOCKET_SSL_CLIENT_SOCKET_MAC_H_
6 #define NET_SOCKET_SSL_CLIENT_SOCKET_MAC_H_ 6 #define NET_SOCKET_SSL_CLIENT_SOCKET_MAC_H_
7 7
8 #include <Security/Security.h> 8 #include <Security/Security.h>
9 9
10 #include <string> 10 #include <string>
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 virtual bool IsConnected() const; 42 virtual bool IsConnected() const;
43 virtual bool IsConnectedAndIdle() const; 43 virtual bool IsConnectedAndIdle() const;
44 44
45 // Socket methods: 45 // Socket methods:
46 virtual int Read(IOBuffer* buf, int buf_len, CompletionCallback* callback); 46 virtual int Read(IOBuffer* buf, int buf_len, CompletionCallback* callback);
47 virtual int Write(IOBuffer* buf, int buf_len, CompletionCallback* callback); 47 virtual int Write(IOBuffer* buf, int buf_len, CompletionCallback* callback);
48 virtual bool SetReceiveBufferSize(int32 size); 48 virtual bool SetReceiveBufferSize(int32 size);
49 virtual bool SetSendBufferSize(int32 size); 49 virtual bool SetSendBufferSize(int32 size);
50 50
51 private: 51 private:
52 void DoCallback(int result); 52 void DoConnectCallback(int result);
53 void OnIOComplete(int result); 53 void DoReadCallback(int result);
54 void DoWriteCallback(int result);
55 void OnHandshakeIOComplete(int result);
56 void OnTransportReadComplete(int result);
57 void OnTransportWriteComplete(int result);
54 58
55 int DoLoop(int last_io_result); 59 int DoHandshakeLoop(int last_io_result);
60
56 int DoPayloadRead(); 61 int DoPayloadRead();
57 int DoPayloadWrite(); 62 int DoPayloadWrite();
58 int DoHandshakeStart(); 63 int DoHandshakeStart();
59 int DoVerifyCert(); 64 int DoVerifyCert();
60 int DoVerifyCertComplete(int result); 65 int DoVerifyCertComplete(int result);
61 int DoHandshakeFinish(); 66 int DoHandshakeFinish();
62 int DoReadComplete(int result);
63 void OnWriteComplete(int result);
64 67
65 static OSStatus SSLReadCallback(SSLConnectionRef connection, 68 static OSStatus SSLReadCallback(SSLConnectionRef connection,
66 void* data, 69 void* data,
67 size_t* data_length); 70 size_t* data_length);
68 static OSStatus SSLWriteCallback(SSLConnectionRef connection, 71 static OSStatus SSLWriteCallback(SSLConnectionRef connection,
69 const void* data, 72 const void* data,
70 size_t* data_length); 73 size_t* data_length);
71 74
72 CompletionCallbackImpl<SSLClientSocketMac> io_callback_; 75 CompletionCallbackImpl<SSLClientSocketMac> handshake_io_callback_;
73 CompletionCallbackImpl<SSLClientSocketMac> write_callback_; 76 CompletionCallbackImpl<SSLClientSocketMac> transport_read_callback_;
77 CompletionCallbackImpl<SSLClientSocketMac> transport_write_callback_;
74 78
75 scoped_ptr<ClientSocket> transport_; 79 scoped_ptr<ClientSocket> transport_;
76 std::string hostname_; 80 std::string hostname_;
77 SSLConfig ssl_config_; 81 SSLConfig ssl_config_;
78 82
79 CompletionCallback* user_callback_; 83 CompletionCallback* user_connect_callback_;
84 CompletionCallback* user_read_callback_;
85 CompletionCallback* user_write_callback_;
80 86
81 // Used by both Read and Write functions. 87 // Used by Read function.
82 scoped_refptr<IOBuffer> user_buf_; 88 scoped_refptr<IOBuffer> user_read_buf_;
83 int user_buf_len_; 89 int user_read_buf_len_;
90
91 // Used by Write function.
92 scoped_refptr<IOBuffer> user_write_buf_;
93 int user_write_buf_len_;
84 94
85 enum State { 95 enum State {
86 STATE_NONE, 96 STATE_NONE,
87 STATE_PAYLOAD_READ,
88 STATE_PAYLOAD_WRITE,
89 STATE_HANDSHAKE_START, 97 STATE_HANDSHAKE_START,
90 STATE_VERIFY_CERT, 98 STATE_VERIFY_CERT,
91 STATE_VERIFY_CERT_COMPLETE, 99 STATE_VERIFY_CERT_COMPLETE,
92 STATE_HANDSHAKE_FINISH, 100 STATE_HANDSHAKE_FINISH,
93 STATE_READ_COMPLETE,
94 }; 101 };
95 State next_state_; 102 State next_handshake_state_;
96 State next_io_state_;
97 103
98 scoped_refptr<X509Certificate> server_cert_; 104 scoped_refptr<X509Certificate> server_cert_;
99 std::vector<scoped_refptr<X509Certificate> > intermediate_certs_; 105 std::vector<scoped_refptr<X509Certificate> > intermediate_certs_;
100 scoped_ptr<CertVerifier> verifier_; 106 scoped_ptr<CertVerifier> verifier_;
101 CertVerifyResult server_cert_verify_result_; 107 CertVerifyResult server_cert_verify_result_;
102 108
103 bool completed_handshake_; 109 bool completed_handshake_;
104 bool handshake_interrupted_; 110 bool handshake_interrupted_;
105 SSLContextRef ssl_context_; 111 SSLContextRef ssl_context_;
106 112
107 // These are buffers for holding data during I/O. The "slop" is the amount of 113 // These are buffers for holding data during I/O. The "slop" is the amount of
108 // space at the ends of the receive buffer that are allocated for holding data 114 // space at the ends of the receive buffer that are allocated for holding data
109 // but don't (yet). 115 // but don't (yet).
110 std::vector<char> send_buffer_; 116 std::vector<char> send_buffer_;
111 int pending_send_error_; 117 int pending_send_error_;
112 std::vector<char> recv_buffer_; 118 std::vector<char> recv_buffer_;
113 int recv_buffer_head_slop_; 119 int recv_buffer_head_slop_;
114 int recv_buffer_tail_slop_; 120 int recv_buffer_tail_slop_;
115 121
116 // This buffer holds data for Read() operations on the underlying transport 122 // This buffer holds data for Read() operations on the underlying transport
117 // (ClientSocket::Read()). 123 // (ClientSocket::Read()).
118 scoped_refptr<IOBuffer> read_io_buf_; 124 scoped_refptr<IOBuffer> read_io_buf_;
119 }; 125 };
120 126
121 } // namespace net 127 } // namespace net
122 128
123 #endif // NET_SOCKET_SSL_CLIENT_SOCKET_MAC_H_ 129 #endif // NET_SOCKET_SSL_CLIENT_SOCKET_MAC_H_
OLDNEW
« no previous file with comments | « no previous file | net/socket/ssl_client_socket_mac.cc » ('j') | net/socket/ssl_client_socket_mac.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698