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

Side by Side Diff: jingle/notifier/base/fake_ssl_client_socket.cc

Issue 8824006: Migrate net/socket/socket.h, net/socket/stream_socket.h to base::Bind(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 9 years 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
OLDNEW
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 "jingle/notifier/base/fake_ssl_client_socket.h" 5 #include "jingle/notifier/base/fake_ssl_client_socket.h"
6 6
7 #include <cstdlib> 7 #include <cstdlib>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 arraysize(kSslClientHello)); 71 arraysize(kSslClientHello));
72 } 72 }
73 73
74 base::StringPiece FakeSSLClientSocket::GetSslServerHello() { 74 base::StringPiece FakeSSLClientSocket::GetSslServerHello() {
75 return base::StringPiece(reinterpret_cast<const char*>(kSslServerHello), 75 return base::StringPiece(reinterpret_cast<const char*>(kSslServerHello),
76 arraysize(kSslServerHello)); 76 arraysize(kSslServerHello));
77 } 77 }
78 78
79 FakeSSLClientSocket::FakeSSLClientSocket( 79 FakeSSLClientSocket::FakeSSLClientSocket(
80 net::StreamSocket* transport_socket) 80 net::StreamSocket* transport_socket)
81 : connect_callback_(ALLOW_THIS_IN_INITIALIZER_LIST(this), 81 : transport_socket_(transport_socket),
82 &FakeSSLClientSocket::OnConnectDone),
83 send_client_hello_callback_(
84 ALLOW_THIS_IN_INITIALIZER_LIST(this),
85 &FakeSSLClientSocket::OnSendClientHelloDone),
86 verify_server_hello_callback_(
87 ALLOW_THIS_IN_INITIALIZER_LIST(this),
88 &FakeSSLClientSocket::OnVerifyServerHelloDone),
89 transport_socket_(transport_socket),
90 next_handshake_state_(STATE_NONE), 82 next_handshake_state_(STATE_NONE),
91 handshake_completed_(false), 83 handshake_completed_(false),
92 old_user_connect_callback_(NULL),
93 write_buf_(NewDrainableIOBufferWithSize(arraysize(kSslClientHello))), 84 write_buf_(NewDrainableIOBufferWithSize(arraysize(kSslClientHello))),
94 read_buf_(NewDrainableIOBufferWithSize(arraysize(kSslServerHello))) { 85 read_buf_(NewDrainableIOBufferWithSize(arraysize(kSslServerHello))) {
95 CHECK(transport_socket_.get()); 86 CHECK(transport_socket_.get());
96 std::memcpy(write_buf_->data(), kSslClientHello, arraysize(kSslClientHello)); 87 std::memcpy(write_buf_->data(), kSslClientHello, arraysize(kSslClientHello));
97 } 88 }
98 89
99 FakeSSLClientSocket::~FakeSSLClientSocket() {} 90 FakeSSLClientSocket::~FakeSSLClientSocket() {}
100 91
101 int FakeSSLClientSocket::Read(net::IOBuffer* buf, int buf_len, 92 int FakeSSLClientSocket::Read(net::IOBuffer* buf, int buf_len,
102 net::OldCompletionCallback* callback) {
103 DCHECK_EQ(next_handshake_state_, STATE_NONE);
104 DCHECK(handshake_completed_);
105 return transport_socket_->Read(buf, buf_len, callback);
106 }
107 int FakeSSLClientSocket::Read(net::IOBuffer* buf, int buf_len,
108 const net::CompletionCallback& callback) { 93 const net::CompletionCallback& callback) {
109 DCHECK_EQ(next_handshake_state_, STATE_NONE); 94 DCHECK_EQ(next_handshake_state_, STATE_NONE);
110 DCHECK(handshake_completed_); 95 DCHECK(handshake_completed_);
111 return transport_socket_->Read(buf, buf_len, callback); 96 return transport_socket_->Read(buf, buf_len, callback);
112 } 97 }
113 98
114 int FakeSSLClientSocket::Write(net::IOBuffer* buf, int buf_len, 99 int FakeSSLClientSocket::Write(net::IOBuffer* buf, int buf_len,
115 net::OldCompletionCallback* callback) { 100 const net::CompletionCallback& callback) {
116 DCHECK_EQ(next_handshake_state_, STATE_NONE); 101 DCHECK_EQ(next_handshake_state_, STATE_NONE);
117 DCHECK(handshake_completed_); 102 DCHECK(handshake_completed_);
118 return transport_socket_->Write(buf, buf_len, callback); 103 return transport_socket_->Write(buf, buf_len, callback);
119 } 104 }
120 105
121 bool FakeSSLClientSocket::SetReceiveBufferSize(int32 size) { 106 bool FakeSSLClientSocket::SetReceiveBufferSize(int32 size) {
122 return transport_socket_->SetReceiveBufferSize(size); 107 return transport_socket_->SetReceiveBufferSize(size);
123 } 108 }
124 109
125 bool FakeSSLClientSocket::SetSendBufferSize(int32 size) { 110 bool FakeSSLClientSocket::SetSendBufferSize(int32 size) {
126 return transport_socket_->SetSendBufferSize(size); 111 return transport_socket_->SetSendBufferSize(size);
127 } 112 }
128 113
129 int FakeSSLClientSocket::Connect(net::OldCompletionCallback* callback) {
130 // We don't support synchronous operation, even if
131 // |transport_socket_| does.
132 DCHECK(callback);
133 DCHECK_EQ(next_handshake_state_, STATE_NONE);
134 DCHECK(!handshake_completed_);
135 DCHECK(!old_user_connect_callback_);
136 DCHECK_EQ(write_buf_->BytesConsumed(), 0);
137 DCHECK_EQ(read_buf_->BytesConsumed(), 0);
138
139 next_handshake_state_ = STATE_CONNECT;
140 int status = DoHandshakeLoop();
141 if (status == net::ERR_IO_PENDING) {
142 old_user_connect_callback_ = callback;
143 }
144 return status;
145 }
146 int FakeSSLClientSocket::Connect(const net::CompletionCallback& callback) { 114 int FakeSSLClientSocket::Connect(const net::CompletionCallback& callback) {
147 // We don't support synchronous operation, even if 115 // We don't support synchronous operation, even if
148 // |transport_socket_| does. 116 // |transport_socket_| does.
149 DCHECK(!callback.is_null()); 117 DCHECK(!callback.is_null());
150 DCHECK_EQ(next_handshake_state_, STATE_NONE); 118 DCHECK_EQ(next_handshake_state_, STATE_NONE);
151 DCHECK(!handshake_completed_); 119 DCHECK(!handshake_completed_);
152 DCHECK(user_connect_callback_.is_null()); 120 DCHECK(user_connect_callback_.is_null());
153 DCHECK_EQ(write_buf_->BytesConsumed(), 0); 121 DCHECK_EQ(write_buf_->BytesConsumed(), 0);
154 DCHECK_EQ(read_buf_->BytesConsumed(), 0); 122 DCHECK_EQ(read_buf_->BytesConsumed(), 0);
155 123
(...skipping 27 matching lines...) Expand all
183 break; 151 break;
184 } 152 }
185 } while ((status != net::ERR_IO_PENDING) && 153 } while ((status != net::ERR_IO_PENDING) &&
186 (next_handshake_state_ != STATE_NONE)); 154 (next_handshake_state_ != STATE_NONE));
187 return status; 155 return status;
188 } 156 }
189 157
190 void FakeSSLClientSocket::RunUserConnectCallback(int status) { 158 void FakeSSLClientSocket::RunUserConnectCallback(int status) {
191 DCHECK_LE(status, net::OK); 159 DCHECK_LE(status, net::OK);
192 next_handshake_state_ = STATE_NONE; 160 next_handshake_state_ = STATE_NONE;
193 if (old_user_connect_callback_) { 161 net::CompletionCallback user_connect_callback = user_connect_callback_;
194 net::OldCompletionCallback* user_connect_callback = 162 user_connect_callback_.Reset();
195 old_user_connect_callback_; 163 user_connect_callback.Run(status);
196 old_user_connect_callback_ = NULL;
197 user_connect_callback->Run(status);
198 } else {
199 net::CompletionCallback user_connect_callback = user_connect_callback_;
200 user_connect_callback_.Reset();
201 user_connect_callback.Run(status);
202 }
203 } 164 }
204 165
205 void FakeSSLClientSocket::DoHandshakeLoopWithUserConnectCallback() { 166 void FakeSSLClientSocket::DoHandshakeLoopWithUserConnectCallback() {
206 int status = DoHandshakeLoop(); 167 int status = DoHandshakeLoop();
207 if (status != net::ERR_IO_PENDING) { 168 if (status != net::ERR_IO_PENDING) {
208 RunUserConnectCallback(status); 169 RunUserConnectCallback(status);
209 } 170 }
210 } 171 }
211 172
212 int FakeSSLClientSocket::DoConnect() { 173 int FakeSSLClientSocket::DoConnect() {
213 int status = transport_socket_->Connect(&connect_callback_); 174 int status = transport_socket_->Connect(
175 base::Bind(&FakeSSLClientSocket::OnConnectDone, base::Unretained(this)));
214 if (status != net::OK) { 176 if (status != net::OK) {
215 return status; 177 return status;
216 } 178 }
217 ProcessConnectDone(); 179 ProcessConnectDone();
218 return net::OK; 180 return net::OK;
219 } 181 }
220 182
221 void FakeSSLClientSocket::OnConnectDone(int status) { 183 void FakeSSLClientSocket::OnConnectDone(int status) {
222 DCHECK_NE(status, net::ERR_IO_PENDING); 184 DCHECK_NE(status, net::ERR_IO_PENDING);
223 DCHECK_LE(status, net::OK); 185 DCHECK_LE(status, net::OK);
224 DCHECK(old_user_connect_callback_ || !user_connect_callback_.is_null()); 186 DCHECK(!user_connect_callback_.is_null());
225 if (status != net::OK) { 187 if (status != net::OK) {
226 RunUserConnectCallback(status); 188 RunUserConnectCallback(status);
227 return; 189 return;
228 } 190 }
229 ProcessConnectDone(); 191 ProcessConnectDone();
230 DoHandshakeLoopWithUserConnectCallback(); 192 DoHandshakeLoopWithUserConnectCallback();
231 } 193 }
232 194
233 void FakeSSLClientSocket::ProcessConnectDone() { 195 void FakeSSLClientSocket::ProcessConnectDone() {
234 DCHECK_EQ(write_buf_->BytesConsumed(), 0); 196 DCHECK_EQ(write_buf_->BytesConsumed(), 0);
235 DCHECK_EQ(read_buf_->BytesConsumed(), 0); 197 DCHECK_EQ(read_buf_->BytesConsumed(), 0);
236 next_handshake_state_ = STATE_SEND_CLIENT_HELLO; 198 next_handshake_state_ = STATE_SEND_CLIENT_HELLO;
237 } 199 }
238 200
239 int FakeSSLClientSocket::DoSendClientHello() { 201 int FakeSSLClientSocket::DoSendClientHello() {
240 int status = transport_socket_->Write( 202 int status = transport_socket_->Write(
241 write_buf_, write_buf_->BytesRemaining(), 203 write_buf_, write_buf_->BytesRemaining(),
242 &send_client_hello_callback_); 204 base::Bind(&FakeSSLClientSocket::OnSendClientHelloDone,
205 base::Unretained(this)));
243 if (status < net::OK) { 206 if (status < net::OK) {
244 return status; 207 return status;
245 } 208 }
246 ProcessSendClientHelloDone(static_cast<size_t>(status)); 209 ProcessSendClientHelloDone(static_cast<size_t>(status));
247 return net::OK; 210 return net::OK;
248 } 211 }
249 212
250 void FakeSSLClientSocket::OnSendClientHelloDone(int status) { 213 void FakeSSLClientSocket::OnSendClientHelloDone(int status) {
251 DCHECK_NE(status, net::ERR_IO_PENDING); 214 DCHECK_NE(status, net::ERR_IO_PENDING);
252 DCHECK(old_user_connect_callback_ || !user_connect_callback_.is_null()); 215 DCHECK(!user_connect_callback_.is_null());
253 if (status < net::OK) { 216 if (status < net::OK) {
254 RunUserConnectCallback(status); 217 RunUserConnectCallback(status);
255 return; 218 return;
256 } 219 }
257 ProcessSendClientHelloDone(static_cast<size_t>(status)); 220 ProcessSendClientHelloDone(static_cast<size_t>(status));
258 DoHandshakeLoopWithUserConnectCallback(); 221 DoHandshakeLoopWithUserConnectCallback();
259 } 222 }
260 223
261 void FakeSSLClientSocket::ProcessSendClientHelloDone(size_t written) { 224 void FakeSSLClientSocket::ProcessSendClientHelloDone(size_t written) {
262 DCHECK_LE(written, static_cast<size_t>(write_buf_->BytesRemaining())); 225 DCHECK_LE(written, static_cast<size_t>(write_buf_->BytesRemaining()));
263 DCHECK_EQ(read_buf_->BytesConsumed(), 0); 226 DCHECK_EQ(read_buf_->BytesConsumed(), 0);
264 if (written < static_cast<size_t>(write_buf_->BytesRemaining())) { 227 if (written < static_cast<size_t>(write_buf_->BytesRemaining())) {
265 next_handshake_state_ = STATE_SEND_CLIENT_HELLO; 228 next_handshake_state_ = STATE_SEND_CLIENT_HELLO;
266 write_buf_->DidConsume(written); 229 write_buf_->DidConsume(written);
267 } else { 230 } else {
268 next_handshake_state_ = STATE_VERIFY_SERVER_HELLO; 231 next_handshake_state_ = STATE_VERIFY_SERVER_HELLO;
269 } 232 }
270 } 233 }
271 234
272 int FakeSSLClientSocket::DoVerifyServerHello() { 235 int FakeSSLClientSocket::DoVerifyServerHello() {
273 int status = transport_socket_->Read( 236 int status = transport_socket_->Read(
274 read_buf_, read_buf_->BytesRemaining(), 237 read_buf_, read_buf_->BytesRemaining(),
275 &verify_server_hello_callback_); 238 base::Bind(&FakeSSLClientSocket::OnVerifyServerHelloDone,
239 base::Unretained(this)));
276 if (status < net::OK) { 240 if (status < net::OK) {
277 return status; 241 return status;
278 } 242 }
279 size_t read = static_cast<size_t>(status); 243 size_t read = static_cast<size_t>(status);
280 return ProcessVerifyServerHelloDone(read); 244 return ProcessVerifyServerHelloDone(read);
281 } 245 }
282 246
283 void FakeSSLClientSocket::OnVerifyServerHelloDone(int status) { 247 void FakeSSLClientSocket::OnVerifyServerHelloDone(int status) {
284 DCHECK_NE(status, net::ERR_IO_PENDING); 248 DCHECK_NE(status, net::ERR_IO_PENDING);
285 DCHECK(old_user_connect_callback_ || !user_connect_callback_.is_null()); 249 DCHECK(!user_connect_callback_.is_null());
286 if (status < net::OK) { 250 if (status < net::OK) {
287 RunUserConnectCallback(status); 251 RunUserConnectCallback(status);
288 return; 252 return;
289 } 253 }
290 size_t read = static_cast<size_t>(status); 254 size_t read = static_cast<size_t>(status);
291 status = ProcessVerifyServerHelloDone(read); 255 status = ProcessVerifyServerHelloDone(read);
292 if (status < net::OK) { 256 if (status < net::OK) {
293 RunUserConnectCallback(status); 257 RunUserConnectCallback(status);
294 return; 258 return;
295 } 259 }
(...skipping 22 matching lines...) Expand all
318 next_handshake_state_ = STATE_NONE; 282 next_handshake_state_ = STATE_NONE;
319 handshake_completed_ = true; 283 handshake_completed_ = true;
320 } 284 }
321 return net::OK; 285 return net::OK;
322 } 286 }
323 287
324 void FakeSSLClientSocket::Disconnect() { 288 void FakeSSLClientSocket::Disconnect() {
325 transport_socket_->Disconnect(); 289 transport_socket_->Disconnect();
326 next_handshake_state_ = STATE_NONE; 290 next_handshake_state_ = STATE_NONE;
327 handshake_completed_ = false; 291 handshake_completed_ = false;
328 old_user_connect_callback_ = NULL;
329 user_connect_callback_.Reset(); 292 user_connect_callback_.Reset();
330 write_buf_->SetOffset(0); 293 write_buf_->SetOffset(0);
331 read_buf_->SetOffset(0); 294 read_buf_->SetOffset(0);
332 } 295 }
333 296
334 bool FakeSSLClientSocket::IsConnected() const { 297 bool FakeSSLClientSocket::IsConnected() const {
335 return handshake_completed_ && transport_socket_->IsConnected(); 298 return handshake_completed_ && transport_socket_->IsConnected();
336 } 299 }
337 300
338 bool FakeSSLClientSocket::IsConnectedAndIdle() const { 301 bool FakeSSLClientSocket::IsConnectedAndIdle() const {
(...skipping 30 matching lines...) Expand all
369 332
370 int64 FakeSSLClientSocket::NumBytesRead() const { 333 int64 FakeSSLClientSocket::NumBytesRead() const {
371 return transport_socket_->NumBytesRead(); 334 return transport_socket_->NumBytesRead();
372 } 335 }
373 336
374 base::TimeDelta FakeSSLClientSocket::GetConnectTimeMicros() const { 337 base::TimeDelta FakeSSLClientSocket::GetConnectTimeMicros() const {
375 return transport_socket_->GetConnectTimeMicros(); 338 return transport_socket_->GetConnectTimeMicros();
376 } 339 }
377 340
378 } // namespace notifier 341 } // namespace notifier
OLDNEW
« no previous file with comments | « jingle/notifier/base/fake_ssl_client_socket.h ('k') | jingle/notifier/base/fake_ssl_client_socket_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698