| 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 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 rv = sock->Connect(&callback); | 313 rv = sock->Connect(&callback); |
| 314 if (rv != net::OK) { | 314 if (rv != net::OK) { |
| 315 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 315 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| 316 | 316 |
| 317 rv = callback.WaitForResult(); | 317 rv = callback.WaitForResult(); |
| 318 EXPECT_EQ(net::OK, rv); | 318 EXPECT_EQ(net::OK, rv); |
| 319 } | 319 } |
| 320 EXPECT_TRUE(sock->IsConnected()); | 320 EXPECT_TRUE(sock->IsConnected()); |
| 321 | 321 |
| 322 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; | 322 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; |
| 323 scoped_refptr<net::IOBuffer> request_buffer = | 323 scoped_refptr<net::IOBuffer> request_buffer( |
| 324 new net::IOBuffer(arraysize(request_text) - 1); | 324 new net::IOBuffer(arraysize(request_text) - 1)); |
| 325 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); | 325 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); |
| 326 | 326 |
| 327 rv = sock->Write(request_buffer, arraysize(request_text) - 1, &callback); | 327 rv = sock->Write(request_buffer, arraysize(request_text) - 1, &callback); |
| 328 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); | 328 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); |
| 329 | 329 |
| 330 if (rv == net::ERR_IO_PENDING) | 330 if (rv == net::ERR_IO_PENDING) |
| 331 rv = callback.WaitForResult(); | 331 rv = callback.WaitForResult(); |
| 332 EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv); | 332 EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv); |
| 333 | 333 |
| 334 scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(4096); | 334 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(4096)); |
| 335 for (;;) { | 335 for (;;) { |
| 336 rv = sock->Read(buf, 4096, &callback); | 336 rv = sock->Read(buf, 4096, &callback); |
| 337 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); | 337 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); |
| 338 | 338 |
| 339 if (rv == net::ERR_IO_PENDING) | 339 if (rv == net::ERR_IO_PENDING) |
| 340 rv = callback.WaitForResult(); | 340 rv = callback.WaitForResult(); |
| 341 | 341 |
| 342 EXPECT_GE(rv, 0); | 342 EXPECT_GE(rv, 0); |
| 343 if (rv <= 0) | 343 if (rv <= 0) |
| 344 break; | 344 break; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 374 rv = sock->Connect(&callback); | 374 rv = sock->Connect(&callback); |
| 375 if (rv != net::OK) { | 375 if (rv != net::OK) { |
| 376 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 376 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| 377 | 377 |
| 378 rv = callback.WaitForResult(); | 378 rv = callback.WaitForResult(); |
| 379 EXPECT_EQ(net::OK, rv); | 379 EXPECT_EQ(net::OK, rv); |
| 380 } | 380 } |
| 381 EXPECT_TRUE(sock->IsConnected()); | 381 EXPECT_TRUE(sock->IsConnected()); |
| 382 | 382 |
| 383 // Issue a "hanging" Read first. | 383 // Issue a "hanging" Read first. |
| 384 scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(4096); | 384 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(4096)); |
| 385 rv = sock->Read(buf, 4096, &callback); | 385 rv = sock->Read(buf, 4096, &callback); |
| 386 // We haven't written the request, so there should be no response yet. | 386 // We haven't written the request, so there should be no response yet. |
| 387 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 387 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| 388 | 388 |
| 389 // Write the request. | 389 // Write the request. |
| 390 // The request is padded with a User-Agent header to a size that causes the | 390 // The request is padded with a User-Agent header to a size that causes the |
| 391 // memio circular buffer (4k bytes) in SSLClientSocketNSS to wrap around. | 391 // memio circular buffer (4k bytes) in SSLClientSocketNSS to wrap around. |
| 392 // This tests the fix for http://crbug.com/29815. | 392 // This tests the fix for http://crbug.com/29815. |
| 393 std::string request_text = "GET / HTTP/1.1\r\nUser-Agent: long browser name "; | 393 std::string request_text = "GET / HTTP/1.1\r\nUser-Agent: long browser name "; |
| 394 for (int i = 0; i < 3800; ++i) | 394 for (int i = 0; i < 3800; ++i) |
| 395 request_text.push_back('*'); | 395 request_text.push_back('*'); |
| 396 request_text.append("\r\n\r\n"); | 396 request_text.append("\r\n\r\n"); |
| 397 scoped_refptr<net::IOBuffer> request_buffer = | 397 scoped_refptr<net::IOBuffer> request_buffer( |
| 398 new net::StringIOBuffer(request_text); | 398 new net::StringIOBuffer(request_text)); |
| 399 | 399 |
| 400 rv = sock->Write(request_buffer, request_text.size(), &callback2); | 400 rv = sock->Write(request_buffer, request_text.size(), &callback2); |
| 401 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); | 401 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); |
| 402 | 402 |
| 403 if (rv == net::ERR_IO_PENDING) | 403 if (rv == net::ERR_IO_PENDING) |
| 404 rv = callback2.WaitForResult(); | 404 rv = callback2.WaitForResult(); |
| 405 EXPECT_EQ(static_cast<int>(request_text.size()), rv); | 405 EXPECT_EQ(static_cast<int>(request_text.size()), rv); |
| 406 | 406 |
| 407 // Now get the Read result. | 407 // Now get the Read result. |
| 408 rv = callback.WaitForResult(); | 408 rv = callback.WaitForResult(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 431 | 431 |
| 432 rv = sock->Connect(&callback); | 432 rv = sock->Connect(&callback); |
| 433 if (rv != net::OK) { | 433 if (rv != net::OK) { |
| 434 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 434 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| 435 | 435 |
| 436 rv = callback.WaitForResult(); | 436 rv = callback.WaitForResult(); |
| 437 EXPECT_EQ(net::OK, rv); | 437 EXPECT_EQ(net::OK, rv); |
| 438 } | 438 } |
| 439 | 439 |
| 440 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; | 440 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; |
| 441 scoped_refptr<net::IOBuffer> request_buffer = | 441 scoped_refptr<net::IOBuffer> request_buffer( |
| 442 new net::IOBuffer(arraysize(request_text) - 1); | 442 new net::IOBuffer(arraysize(request_text) - 1)); |
| 443 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); | 443 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); |
| 444 | 444 |
| 445 rv = sock->Write(request_buffer, arraysize(request_text) - 1, &callback); | 445 rv = sock->Write(request_buffer, arraysize(request_text) - 1, &callback); |
| 446 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); | 446 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); |
| 447 | 447 |
| 448 if (rv == net::ERR_IO_PENDING) | 448 if (rv == net::ERR_IO_PENDING) |
| 449 rv = callback.WaitForResult(); | 449 rv = callback.WaitForResult(); |
| 450 EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv); | 450 EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv); |
| 451 | 451 |
| 452 scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(1); | 452 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(1)); |
| 453 for (;;) { | 453 for (;;) { |
| 454 rv = sock->Read(buf, 1, &callback); | 454 rv = sock->Read(buf, 1, &callback); |
| 455 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); | 455 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); |
| 456 | 456 |
| 457 if (rv == net::ERR_IO_PENDING) | 457 if (rv == net::ERR_IO_PENDING) |
| 458 rv = callback.WaitForResult(); | 458 rv = callback.WaitForResult(); |
| 459 | 459 |
| 460 EXPECT_GE(rv, 0); | 460 EXPECT_GE(rv, 0); |
| 461 if (rv <= 0) | 461 if (rv <= 0) |
| 462 break; | 462 break; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 485 | 485 |
| 486 rv = sock->Connect(&callback); | 486 rv = sock->Connect(&callback); |
| 487 if (rv != net::OK) { | 487 if (rv != net::OK) { |
| 488 ASSERT_EQ(net::ERR_IO_PENDING, rv); | 488 ASSERT_EQ(net::ERR_IO_PENDING, rv); |
| 489 | 489 |
| 490 rv = callback.WaitForResult(); | 490 rv = callback.WaitForResult(); |
| 491 EXPECT_EQ(net::OK, rv); | 491 EXPECT_EQ(net::OK, rv); |
| 492 } | 492 } |
| 493 | 493 |
| 494 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; | 494 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; |
| 495 scoped_refptr<net::IOBuffer> request_buffer = | 495 scoped_refptr<net::IOBuffer> request_buffer( |
| 496 new net::IOBuffer(arraysize(request_text) - 1); | 496 new net::IOBuffer(arraysize(request_text) - 1)); |
| 497 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); | 497 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); |
| 498 | 498 |
| 499 rv = sock->Write(request_buffer, arraysize(request_text) - 1, &callback); | 499 rv = sock->Write(request_buffer, arraysize(request_text) - 1, &callback); |
| 500 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); | 500 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); |
| 501 | 501 |
| 502 if (rv == net::ERR_IO_PENDING) | 502 if (rv == net::ERR_IO_PENDING) |
| 503 rv = callback.WaitForResult(); | 503 rv = callback.WaitForResult(); |
| 504 EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv); | 504 EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv); |
| 505 | 505 |
| 506 // Do a partial read and then exit. This test should not crash! | 506 // Do a partial read and then exit. This test should not crash! |
| 507 scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(512); | 507 scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(512)); |
| 508 rv = sock->Read(buf, 512, &callback); | 508 rv = sock->Read(buf, 512, &callback); |
| 509 EXPECT_TRUE(rv > 0 || rv == net::ERR_IO_PENDING); | 509 EXPECT_TRUE(rv > 0 || rv == net::ERR_IO_PENDING); |
| 510 | 510 |
| 511 if (rv == net::ERR_IO_PENDING) | 511 if (rv == net::ERR_IO_PENDING) |
| 512 rv = callback.WaitForResult(); | 512 rv = callback.WaitForResult(); |
| 513 | 513 |
| 514 EXPECT_GT(rv, 0); | 514 EXPECT_GT(rv, 0); |
| 515 } | 515 } |
| 516 | 516 |
| 517 // Regression test for http://crbug.com/42538 | 517 // Regression test for http://crbug.com/42538 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 553 EXPECT_EQ(net::OK, rv); | 553 EXPECT_EQ(net::OK, rv); |
| 554 | 554 |
| 555 scoped_ptr<net::SSLClientSocket> sock( | 555 scoped_ptr<net::SSLClientSocket> sock( |
| 556 socket_factory_->CreateSSLClientSocket( | 556 socket_factory_->CreateSSLClientSocket( |
| 557 transport, test_server.host_port_pair().host(), kDefaultSSLConfig, | 557 transport, test_server.host_port_pair().host(), kDefaultSSLConfig, |
| 558 NULL /* ssl_host_info */)); | 558 NULL /* ssl_host_info */)); |
| 559 | 559 |
| 560 rv = sock->Connect(&callback); | 560 rv = sock->Connect(&callback); |
| 561 EXPECT_EQ(net::ERR_SSL_PROTOCOL_ERROR, rv); | 561 EXPECT_EQ(net::ERR_SSL_PROTOCOL_ERROR, rv); |
| 562 } | 562 } |
| OLD | NEW |