| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -294,7 +294,42 @@ Handle<Value> SecureContext::Close(const Arguments& args) { | |||
| 294 | 294 | #endif | |
| 295 | 295 | ||
| 296 | 296 | ||
| 297 | - int Connection::HandleError(const char* func, int rv, bool ignore_error) { | ||
| 297 | + int Connection::HandleBIOError(BIO *bio, | ||
| 298 | + const char* func, | ||
| 299 | + int rv, | ||
| 300 | + bool ignore_error) { | ||
| 301 | + if (rv >= 0) return rv; | ||
| 302 | + | ||
| 303 | + int retry = BIO_should_retry(bio); | ||
| 304 | + | ||
| 305 | + if (BIO_should_write(bio)) { | ||
| 306 | + DEBUG_PRINT("[%p] BIO: %s want write. should retry %d\n", ssl_, func, retry); | ||
| 307 | + return 0; | ||
| 308 | + | ||
| 309 | + } else if (BIO_should_read(bio)) { | ||
| 310 | + DEBUG_PRINT("[%p] BIO: %s want read. should retry %d\n", ssl_, func, retry); | ||
| 311 | + return 0; | ||
| 312 | + | ||
| 313 | + } else { | ||
| 314 | + static char ssl_error_buf[512]; | ||
| 315 | + ERR_error_string_n(rv, ssl_error_buf, sizeof(ssl_error_buf)); | ||
| 316 | + | ||
| 317 | + if (!ignore_error) { | ||
| 318 | + HandleScope scope; | ||
| 319 | + Local<Value> e = Exception::Error(String::New(ssl_error_buf)); | ||
| 320 | + handle_->Set(String::New("error"), e); | ||
| 321 | + } | ||
| 322 | + | ||
| 323 | + DEBUG_PRINT("[%p] BIO: %s failed: (%d) %s\n", ssl_, func, rv, ssl_error_buf); | ||
| 324 | + | ||
| 325 | + return rv; | ||
| 326 | + } | ||
| 327 | + | ||
| 328 | + return 0; | ||
| 329 | + } | ||
| 330 | + | ||
| 331 | + | ||
| 332 | + int Connection::HandleSSLError(const char* func, int rv, bool ignore_error) { | ||
| 298 | 333 | if (rv >= 0) return rv; | |
| 299 | 334 | ||
| 300 | 335 | int err = SSL_get_error(ssl_, rv); | |
@@ -510,8 +545,8 @@ Handle<Value> Connection::EncIn(const Arguments& args) { | |||
| 510 | 545 | String::New("Length is extends beyond buffer"))); | |
| 511 | 546 | } | |
| 512 | 547 | ||
| 513 | - int bytes_written = BIO_write(ss->bio_read_, (char*)buffer_data + off, len); | ||
| 514 | - ss->HandleError("BIO_write", bytes_written); | ||
| 548 | + int bytes_written = BIO_write(ss->bio_read_, buffer_data + off, len); | ||
| 549 | + ss->HandleBIOError(ss->bio_read_, "BIO_write", bytes_written); | ||
| 515 | 550 | ss->SetShutdownFlags(); | |
| 516 | 551 | ||
| 517 | 552 | return scope.Close(Integer::New(bytes_written)); | |
@@ -554,17 +589,17 @@ Handle<Value> Connection::ClearOut(const Arguments& args) { | |||
| 554 | 589 | ||
| 555 | 590 | if (ss->is_server_) { | |
| 556 | 591 | rv = SSL_accept(ss->ssl_); | |
| 557 | - ss->HandleError("SSL_accept:ClearOut", rv); | ||
| 592 | + ss->HandleSSLError("SSL_accept:ClearOut", rv); | ||
| 558 | 593 | } else { | |
| 559 | 594 | rv = SSL_connect(ss->ssl_); | |
| 560 | - ss->HandleError("SSL_connect:ClearOut", rv); | ||
| 595 | + ss->HandleSSLError("SSL_connect:ClearOut", rv); | ||
| 561 | 596 | } | |
| 562 | 597 | ||
| 563 | 598 | if (rv < 0) return scope.Close(Integer::New(rv)); | |
| 564 | 599 | } | |
| 565 | 600 | ||
| 566 | - int bytes_read = SSL_read(ss->ssl_, (char*)buffer_data + off, len); | ||
| 567 | - ss->HandleError("SSL_read:ClearOut", bytes_read); | ||
| 601 | + int bytes_read = SSL_read(ss->ssl_, buffer_data + off, len); | ||
| 602 | + ss->HandleSSLError("SSL_read:ClearOut", bytes_read); | ||
| 568 | 603 | ss->SetShutdownFlags(); | |
| 569 | 604 | ||
| 570 | 605 | return scope.Close(Integer::New(bytes_read)); | |
@@ -622,9 +657,9 @@ Handle<Value> Connection::EncOut(const Arguments& args) { | |||
| 622 | 657 | String::New("Length is extends beyond buffer"))); | |
| 623 | 658 | } | |
| 624 | 659 | ||
| 625 | - int bytes_read = BIO_read(ss->bio_write_, (char*)buffer_data + off, len); | ||
| 660 | + int bytes_read = BIO_read(ss->bio_write_, buffer_data + off, len); | ||
| 626 | 661 | ||
| 627 | - ss->HandleError("BIO_read:EncOut", bytes_read, true); | ||
| 662 | + ss->HandleBIOError(ss->bio_write_, "BIO_read:EncOut", bytes_read, true); | ||
| 628 | 663 | ss->SetShutdownFlags(); | |
| 629 | 664 | ||
| 630 | 665 | return scope.Close(Integer::New(bytes_read)); | |
@@ -666,18 +701,18 @@ Handle<Value> Connection::ClearIn(const Arguments& args) { | |||
| 666 | 701 | int rv; | |
| 667 | 702 | if (ss->is_server_) { | |
| 668 | 703 | rv = SSL_accept(ss->ssl_); | |
| 669 | - ss->HandleError("SSL_accept:ClearIn", rv); | ||
| 704 | + ss->HandleSSLError("SSL_accept:ClearIn", rv); | ||
| 670 | 705 | } else { | |
| 671 | 706 | rv = SSL_connect(ss->ssl_); | |
| 672 | - ss->HandleError("SSL_connect:ClearIn", rv); | ||
| 707 | + ss->HandleSSLError("SSL_connect:ClearIn", rv); | ||
| 673 | 708 | } | |
| 674 | 709 | ||
| 675 | 710 | if (rv < 0) return scope.Close(Integer::New(rv)); | |
| 676 | 711 | } | |
| 677 | 712 | ||
| 678 | - int bytes_written = SSL_write(ss->ssl_, (char*)buffer_data + off, len); | ||
| 713 | + int bytes_written = SSL_write(ss->ssl_, buffer_data + off, len); | ||
| 679 | 714 | ||
| 680 | - ss->HandleError("SSL_write:ClearIn", bytes_written); | ||
| 715 | + ss->HandleSSLError("SSL_write:ClearIn", bytes_written); | ||
| 681 | 716 | ss->SetShutdownFlags(); | |
| 682 | 717 | ||
| 683 | 718 | return scope.Close(Integer::New(bytes_written)); | |
@@ -766,10 +801,10 @@ Handle<Value> Connection::Start(const Arguments& args) { | |||
| 766 | 801 | int rv; | |
| 767 | 802 | if (ss->is_server_) { | |
| 768 | 803 | rv = SSL_accept(ss->ssl_); | |
| 769 | - ss->HandleError("SSL_accept:Start", rv); | ||
| 804 | + ss->HandleSSLError("SSL_accept:Start", rv); | ||
| 770 | 805 | } else { | |
| 771 | 806 | rv = SSL_connect(ss->ssl_); | |
| 772 | - ss->HandleError("SSL_connect:Start", rv); | ||
| 807 | + ss->HandleSSLError("SSL_connect:Start", rv); | ||
| 773 | 808 | } | |
| 774 | 809 | ||
| 775 | 810 | return scope.Close(Integer::New(rv)); | |
@@ -787,7 +822,7 @@ Handle<Value> Connection::Shutdown(const Arguments& args) { | |||
| 787 | 822 | if (ss->ssl_ == NULL) return False(); | |
| 788 | 823 | int rv = SSL_shutdown(ss->ssl_); | |
| 789 | 824 | ||
| 790 | - ss->HandleError("SSL_shutdown", rv); | ||
| 825 | + ss->HandleSSLError("SSL_shutdown", rv); | ||
| 791 | 826 | ss->SetShutdownFlags(); | |
| 792 | 827 | ||
| 793 | 828 | return scope.Close(Integer::New(rv)); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -74,7 +74,8 @@ class Connection : ObjectWrap { | |||
| 74 | 74 | static v8::Handle<v8::Value> Start(const v8::Arguments& args); | |
| 75 | 75 | static v8::Handle<v8::Value> Close(const v8::Arguments& args); | |
| 76 | 76 | ||
| 77 | - int HandleError(const char* func, int rv, bool ignore_error=false); | ||
| 77 | + int HandleBIOError(BIO *bio, const char* func, int rv, bool ignore_error=false); | ||
| 78 | + int HandleSSLError(const char* func, int rv, bool ignore_error=false); | ||
| 78 | 79 | void ClearError(); | |
| 79 | 80 | void SetShutdownFlags(); | |
| 80 | 81 | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments