| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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.h" | 5 #include "net/socket/ssl_client_socket.h" |
| 6 | 6 |
| 7 #include "net/base/address_list.h" | 7 #include "net/base/address_list.h" |
| 8 #include "net/base/host_resolver.h" | 8 #include "net/base/host_resolver.h" |
| 9 #include "net/base/io_buffer.h" | 9 #include "net/base/io_buffer.h" |
| 10 #include "net/base/net_log.h" | 10 #include "net/base/net_log.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 net::CapturingNetLog log(net::CapturingNetLog::kUnbounded); | 60 net::CapturingNetLog log(net::CapturingNetLog::kUnbounded); |
| 61 net::ClientSocket* transport = new net::TCPClientSocket( | 61 net::ClientSocket* transport = new net::TCPClientSocket( |
| 62 addr, &log, net::NetLog::Source()); | 62 addr, &log, net::NetLog::Source()); |
| 63 int rv = transport->Connect(&callback); | 63 int rv = transport->Connect(&callback); |
| 64 if (rv == net::ERR_IO_PENDING) | 64 if (rv == net::ERR_IO_PENDING) |
| 65 rv = callback.WaitForResult(); | 65 rv = callback.WaitForResult(); |
| 66 EXPECT_EQ(net::OK, rv); | 66 EXPECT_EQ(net::OK, rv); |
| 67 | 67 |
| 68 scoped_ptr<net::SSLClientSocket> sock( | 68 scoped_ptr<net::SSLClientSocket> sock( |
| 69 socket_factory_->CreateSSLClientSocket(transport, | 69 socket_factory_->CreateSSLClientSocket(transport, |
| 70 test_server.host_port_pair().host(), kDefaultSSLConfig, | 70 test_server.host_port_pair().host(), kDefaultSSLConfig)); |
| 71 NULL /* ssl_host_info */)); | |
| 72 | 71 |
| 73 EXPECT_FALSE(sock->IsConnected()); | 72 EXPECT_FALSE(sock->IsConnected()); |
| 74 | 73 |
| 75 rv = sock->Connect(&callback); | 74 rv = sock->Connect(&callback); |
| 76 EXPECT_TRUE(net::LogContainsBeginEvent( | 75 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 77 log.entries(), 5, net::NetLog::TYPE_SSL_CONNECT)); | 76 log.entries(), 5, net::NetLog::TYPE_SSL_CONNECT)); |
| 78 if (rv != net::OK) { | 77 if (rv != net::OK) { |
| 79 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 78 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| 80 EXPECT_FALSE(sock->IsConnected()); | 79 EXPECT_FALSE(sock->IsConnected()); |
| 81 EXPECT_FALSE(net::LogContainsEndEvent( | 80 EXPECT_FALSE(net::LogContainsEndEvent( |
| (...skipping 22 matching lines...) Expand all Loading... |
| 104 net::CapturingNetLog log(net::CapturingNetLog::kUnbounded); | 103 net::CapturingNetLog log(net::CapturingNetLog::kUnbounded); |
| 105 net::ClientSocket* transport = new net::TCPClientSocket( | 104 net::ClientSocket* transport = new net::TCPClientSocket( |
| 106 addr, &log, net::NetLog::Source()); | 105 addr, &log, net::NetLog::Source()); |
| 107 int rv = transport->Connect(&callback); | 106 int rv = transport->Connect(&callback); |
| 108 if (rv == net::ERR_IO_PENDING) | 107 if (rv == net::ERR_IO_PENDING) |
| 109 rv = callback.WaitForResult(); | 108 rv = callback.WaitForResult(); |
| 110 EXPECT_EQ(net::OK, rv); | 109 EXPECT_EQ(net::OK, rv); |
| 111 | 110 |
| 112 scoped_ptr<net::SSLClientSocket> sock( | 111 scoped_ptr<net::SSLClientSocket> sock( |
| 113 socket_factory_->CreateSSLClientSocket(transport, | 112 socket_factory_->CreateSSLClientSocket(transport, |
| 114 test_server.host_port_pair().host(), kDefaultSSLConfig, | 113 test_server.host_port_pair().host(), kDefaultSSLConfig)); |
| 115 NULL /* ssl_host_info */)); | |
| 116 | 114 |
| 117 EXPECT_FALSE(sock->IsConnected()); | 115 EXPECT_FALSE(sock->IsConnected()); |
| 118 | 116 |
| 119 rv = sock->Connect(&callback); | 117 rv = sock->Connect(&callback); |
| 120 EXPECT_TRUE(net::LogContainsBeginEvent( | 118 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 121 log.entries(), 5, net::NetLog::TYPE_SSL_CONNECT)); | 119 log.entries(), 5, net::NetLog::TYPE_SSL_CONNECT)); |
| 122 if (rv != net::OK) { | 120 if (rv != net::OK) { |
| 123 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 121 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| 124 EXPECT_FALSE(sock->IsConnected()); | 122 EXPECT_FALSE(sock->IsConnected()); |
| 125 EXPECT_FALSE(net::LogContainsEndEvent( | 123 EXPECT_FALSE(net::LogContainsEndEvent( |
| (...skipping 21 matching lines...) Expand all Loading... |
| 147 net::CapturingNetLog log(net::CapturingNetLog::kUnbounded); | 145 net::CapturingNetLog log(net::CapturingNetLog::kUnbounded); |
| 148 net::ClientSocket* transport = new net::TCPClientSocket( | 146 net::ClientSocket* transport = new net::TCPClientSocket( |
| 149 addr, &log, net::NetLog::Source()); | 147 addr, &log, net::NetLog::Source()); |
| 150 int rv = transport->Connect(&callback); | 148 int rv = transport->Connect(&callback); |
| 151 if (rv == net::ERR_IO_PENDING) | 149 if (rv == net::ERR_IO_PENDING) |
| 152 rv = callback.WaitForResult(); | 150 rv = callback.WaitForResult(); |
| 153 EXPECT_EQ(net::OK, rv); | 151 EXPECT_EQ(net::OK, rv); |
| 154 | 152 |
| 155 scoped_ptr<net::SSLClientSocket> sock( | 153 scoped_ptr<net::SSLClientSocket> sock( |
| 156 socket_factory_->CreateSSLClientSocket(transport, | 154 socket_factory_->CreateSSLClientSocket(transport, |
| 157 test_server.host_port_pair().host(), kDefaultSSLConfig, | 155 test_server.host_port_pair().host(), kDefaultSSLConfig)); |
| 158 NULL /* ssl_host_info */)); | |
| 159 | 156 |
| 160 EXPECT_FALSE(sock->IsConnected()); | 157 EXPECT_FALSE(sock->IsConnected()); |
| 161 | 158 |
| 162 rv = sock->Connect(&callback); | 159 rv = sock->Connect(&callback); |
| 163 | 160 |
| 164 EXPECT_TRUE(net::LogContainsBeginEvent( | 161 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 165 log.entries(), 5, net::NetLog::TYPE_SSL_CONNECT)); | 162 log.entries(), 5, net::NetLog::TYPE_SSL_CONNECT)); |
| 166 if (rv != net::ERR_CERT_COMMON_NAME_INVALID) { | 163 if (rv != net::ERR_CERT_COMMON_NAME_INVALID) { |
| 167 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 164 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| 168 EXPECT_FALSE(sock->IsConnected()); | 165 EXPECT_FALSE(sock->IsConnected()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 193 net::CapturingNetLog log(net::CapturingNetLog::kUnbounded); | 190 net::CapturingNetLog log(net::CapturingNetLog::kUnbounded); |
| 194 net::ClientSocket* transport = new net::TCPClientSocket( | 191 net::ClientSocket* transport = new net::TCPClientSocket( |
| 195 addr, &log, net::NetLog::Source()); | 192 addr, &log, net::NetLog::Source()); |
| 196 int rv = transport->Connect(&callback); | 193 int rv = transport->Connect(&callback); |
| 197 if (rv == net::ERR_IO_PENDING) | 194 if (rv == net::ERR_IO_PENDING) |
| 198 rv = callback.WaitForResult(); | 195 rv = callback.WaitForResult(); |
| 199 EXPECT_EQ(net::OK, rv); | 196 EXPECT_EQ(net::OK, rv); |
| 200 | 197 |
| 201 scoped_ptr<net::SSLClientSocket> sock( | 198 scoped_ptr<net::SSLClientSocket> sock( |
| 202 socket_factory_->CreateSSLClientSocket(transport, | 199 socket_factory_->CreateSSLClientSocket(transport, |
| 203 test_server.host_port_pair().host(), kDefaultSSLConfig, | 200 test_server.host_port_pair().host(), kDefaultSSLConfig)); |
| 204 NULL /* ssl_host_info */)); | |
| 205 | 201 |
| 206 EXPECT_FALSE(sock->IsConnected()); | 202 EXPECT_FALSE(sock->IsConnected()); |
| 207 | 203 |
| 208 rv = sock->Connect(&callback); | 204 rv = sock->Connect(&callback); |
| 209 EXPECT_TRUE(net::LogContainsBeginEvent( | 205 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 210 log.entries(), 5, net::NetLog::TYPE_SSL_CONNECT)); | 206 log.entries(), 5, net::NetLog::TYPE_SSL_CONNECT)); |
| 211 if (rv != net::ERR_SSL_CLIENT_AUTH_CERT_NEEDED) { | 207 if (rv != net::ERR_SSL_CLIENT_AUTH_CERT_NEEDED) { |
| 212 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 208 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| 213 EXPECT_FALSE(sock->IsConnected()); | 209 EXPECT_FALSE(sock->IsConnected()); |
| 214 EXPECT_FALSE(net::LogContainsEndEvent( | 210 EXPECT_FALSE(net::LogContainsEndEvent( |
| (...skipping 29 matching lines...) Expand all Loading... |
| 244 if (rv == net::ERR_IO_PENDING) | 240 if (rv == net::ERR_IO_PENDING) |
| 245 rv = callback.WaitForResult(); | 241 rv = callback.WaitForResult(); |
| 246 EXPECT_EQ(net::OK, rv); | 242 EXPECT_EQ(net::OK, rv); |
| 247 | 243 |
| 248 net::SSLConfig ssl_config = kDefaultSSLConfig; | 244 net::SSLConfig ssl_config = kDefaultSSLConfig; |
| 249 ssl_config.send_client_cert = true; | 245 ssl_config.send_client_cert = true; |
| 250 ssl_config.client_cert = NULL; | 246 ssl_config.client_cert = NULL; |
| 251 | 247 |
| 252 scoped_ptr<net::SSLClientSocket> sock( | 248 scoped_ptr<net::SSLClientSocket> sock( |
| 253 socket_factory_->CreateSSLClientSocket(transport, | 249 socket_factory_->CreateSSLClientSocket(transport, |
| 254 test_server.host_port_pair().host(), ssl_config, | 250 test_server.host_port_pair().host(), ssl_config)); |
| 255 NULL /* ssl_host_info */)); | |
| 256 | 251 |
| 257 EXPECT_FALSE(sock->IsConnected()); | 252 EXPECT_FALSE(sock->IsConnected()); |
| 258 | 253 |
| 259 // Our test server accepts certificate-less connections. | 254 // Our test server accepts certificate-less connections. |
| 260 // TODO(davidben): Add a test which requires them and verify the error. | 255 // TODO(davidben): Add a test which requires them and verify the error. |
| 261 rv = sock->Connect(&callback); | 256 rv = sock->Connect(&callback); |
| 262 EXPECT_TRUE(net::LogContainsBeginEvent( | 257 EXPECT_TRUE(net::LogContainsBeginEvent( |
| 263 log.entries(), 5, net::NetLog::TYPE_SSL_CONNECT)); | 258 log.entries(), 5, net::NetLog::TYPE_SSL_CONNECT)); |
| 264 if (rv != net::OK) { | 259 if (rv != net::OK) { |
| 265 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 260 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 295 addr, NULL, net::NetLog::Source()); | 290 addr, NULL, net::NetLog::Source()); |
| 296 int rv = transport->Connect(&callback); | 291 int rv = transport->Connect(&callback); |
| 297 if (rv == net::ERR_IO_PENDING) | 292 if (rv == net::ERR_IO_PENDING) |
| 298 rv = callback.WaitForResult(); | 293 rv = callback.WaitForResult(); |
| 299 EXPECT_EQ(net::OK, rv); | 294 EXPECT_EQ(net::OK, rv); |
| 300 | 295 |
| 301 scoped_ptr<net::SSLClientSocket> sock( | 296 scoped_ptr<net::SSLClientSocket> sock( |
| 302 socket_factory_->CreateSSLClientSocket( | 297 socket_factory_->CreateSSLClientSocket( |
| 303 transport, | 298 transport, |
| 304 test_server.host_port_pair().host(), | 299 test_server.host_port_pair().host(), |
| 305 kDefaultSSLConfig, | 300 kDefaultSSLConfig)); |
| 306 NULL /* ssl_host_info */)); | |
| 307 | 301 |
| 308 rv = sock->Connect(&callback); | 302 rv = sock->Connect(&callback); |
| 309 if (rv != net::OK) { | 303 if (rv != net::OK) { |
| 310 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 304 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| 311 | 305 |
| 312 rv = callback.WaitForResult(); | 306 rv = callback.WaitForResult(); |
| 313 EXPECT_EQ(net::OK, rv); | 307 EXPECT_EQ(net::OK, rv); |
| 314 } | 308 } |
| 315 EXPECT_TRUE(sock->IsConnected()); | 309 EXPECT_TRUE(sock->IsConnected()); |
| 316 | 310 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 addr, NULL, net::NetLog::Source()); | 350 addr, NULL, net::NetLog::Source()); |
| 357 int rv = transport->Connect(&callback); | 351 int rv = transport->Connect(&callback); |
| 358 if (rv == net::ERR_IO_PENDING) | 352 if (rv == net::ERR_IO_PENDING) |
| 359 rv = callback.WaitForResult(); | 353 rv = callback.WaitForResult(); |
| 360 EXPECT_EQ(net::OK, rv); | 354 EXPECT_EQ(net::OK, rv); |
| 361 | 355 |
| 362 scoped_ptr<net::SSLClientSocket> sock( | 356 scoped_ptr<net::SSLClientSocket> sock( |
| 363 socket_factory_->CreateSSLClientSocket( | 357 socket_factory_->CreateSSLClientSocket( |
| 364 transport, | 358 transport, |
| 365 test_server.host_port_pair().host(), | 359 test_server.host_port_pair().host(), |
| 366 kDefaultSSLConfig, | 360 kDefaultSSLConfig)); |
| 367 NULL /* ssl_host_info */)); | |
| 368 | 361 |
| 369 rv = sock->Connect(&callback); | 362 rv = sock->Connect(&callback); |
| 370 if (rv != net::OK) { | 363 if (rv != net::OK) { |
| 371 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 364 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| 372 | 365 |
| 373 rv = callback.WaitForResult(); | 366 rv = callback.WaitForResult(); |
| 374 EXPECT_EQ(net::OK, rv); | 367 EXPECT_EQ(net::OK, rv); |
| 375 } | 368 } |
| 376 EXPECT_TRUE(sock->IsConnected()); | 369 EXPECT_TRUE(sock->IsConnected()); |
| 377 | 370 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 TestCompletionCallback callback; | 407 TestCompletionCallback callback; |
| 415 net::ClientSocket* transport = new net::TCPClientSocket( | 408 net::ClientSocket* transport = new net::TCPClientSocket( |
| 416 addr, NULL, net::NetLog::Source()); | 409 addr, NULL, net::NetLog::Source()); |
| 417 int rv = transport->Connect(&callback); | 410 int rv = transport->Connect(&callback); |
| 418 if (rv == net::ERR_IO_PENDING) | 411 if (rv == net::ERR_IO_PENDING) |
| 419 rv = callback.WaitForResult(); | 412 rv = callback.WaitForResult(); |
| 420 EXPECT_EQ(net::OK, rv); | 413 EXPECT_EQ(net::OK, rv); |
| 421 | 414 |
| 422 scoped_ptr<net::SSLClientSocket> sock( | 415 scoped_ptr<net::SSLClientSocket> sock( |
| 423 socket_factory_->CreateSSLClientSocket(transport, | 416 socket_factory_->CreateSSLClientSocket(transport, |
| 424 test_server.host_port_pair().host(), kDefaultSSLConfig, | 417 test_server.host_port_pair().host(), kDefaultSSLConfig)); |
| 425 NULL /* ssl_host_info */)); | |
| 426 | 418 |
| 427 rv = sock->Connect(&callback); | 419 rv = sock->Connect(&callback); |
| 428 if (rv != net::OK) { | 420 if (rv != net::OK) { |
| 429 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 421 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| 430 | 422 |
| 431 rv = callback.WaitForResult(); | 423 rv = callback.WaitForResult(); |
| 432 EXPECT_EQ(net::OK, rv); | 424 EXPECT_EQ(net::OK, rv); |
| 433 } | 425 } |
| 434 | 426 |
| 435 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; | 427 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 468 TestCompletionCallback callback; | 460 TestCompletionCallback callback; |
| 469 net::ClientSocket* transport = new net::TCPClientSocket( | 461 net::ClientSocket* transport = new net::TCPClientSocket( |
| 470 addr, NULL, net::NetLog::Source()); | 462 addr, NULL, net::NetLog::Source()); |
| 471 int rv = transport->Connect(&callback); | 463 int rv = transport->Connect(&callback); |
| 472 if (rv == net::ERR_IO_PENDING) | 464 if (rv == net::ERR_IO_PENDING) |
| 473 rv = callback.WaitForResult(); | 465 rv = callback.WaitForResult(); |
| 474 EXPECT_EQ(net::OK, rv); | 466 EXPECT_EQ(net::OK, rv); |
| 475 | 467 |
| 476 scoped_ptr<net::SSLClientSocket> sock( | 468 scoped_ptr<net::SSLClientSocket> sock( |
| 477 socket_factory_->CreateSSLClientSocket(transport, | 469 socket_factory_->CreateSSLClientSocket(transport, |
| 478 test_server.host_port_pair().host(), kDefaultSSLConfig, | 470 test_server.host_port_pair().host(), kDefaultSSLConfig)); |
| 479 NULL /* ssl_host_info */)); | |
| 480 | 471 |
| 481 rv = sock->Connect(&callback); | 472 rv = sock->Connect(&callback); |
| 482 if (rv != net::OK) { | 473 if (rv != net::OK) { |
| 483 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 474 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| 484 | 475 |
| 485 rv = callback.WaitForResult(); | 476 rv = callback.WaitForResult(); |
| 486 EXPECT_EQ(net::OK, rv); | 477 EXPECT_EQ(net::OK, rv); |
| 487 } | 478 } |
| 488 | 479 |
| 489 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; | 480 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 542 | 533 |
| 543 net::ClientSocket* transport = | 534 net::ClientSocket* transport = |
| 544 new net::MockTCPClientSocket(addr, NULL, &data); | 535 new net::MockTCPClientSocket(addr, NULL, &data); |
| 545 int rv = transport->Connect(&callback); | 536 int rv = transport->Connect(&callback); |
| 546 if (rv == net::ERR_IO_PENDING) | 537 if (rv == net::ERR_IO_PENDING) |
| 547 rv = callback.WaitForResult(); | 538 rv = callback.WaitForResult(); |
| 548 EXPECT_EQ(net::OK, rv); | 539 EXPECT_EQ(net::OK, rv); |
| 549 | 540 |
| 550 scoped_ptr<net::SSLClientSocket> sock( | 541 scoped_ptr<net::SSLClientSocket> sock( |
| 551 socket_factory_->CreateSSLClientSocket( | 542 socket_factory_->CreateSSLClientSocket( |
| 552 transport, test_server.host_port_pair().host(), kDefaultSSLConfig, | 543 transport, test_server.host_port_pair().host(), kDefaultSSLConfig)); |
| 553 NULL /* ssl_host_info */)); | |
| 554 | 544 |
| 555 rv = sock->Connect(&callback); | 545 rv = sock->Connect(&callback); |
| 556 EXPECT_EQ(net::ERR_SSL_PROTOCOL_ERROR, rv); | 546 EXPECT_EQ(net::ERR_SSL_PROTOCOL_ERROR, rv); |
| 557 } | 547 } |
| OLD | NEW |