Changeset 816
- Timestamp:
- 08/25/08 04:49:49 (3 months ago)
- Files:
-
- trunk/DJabberd/lib/DJabberd/Connection.pm (modified) (1 diff)
- trunk/DJabberd/lib/DJabberd/Stanza/StartTLS.pm (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/DJabberd/lib/DJabberd/Connection.pm
r786 r816 505 505 # wasn't enough of an SSL packet for OpenSSL/etc to return 506 506 # any unencrypted data back to us. 507 if (++$self->{'ssl_empty_read_ct'} >= 10) { 507 # We call 'actual_error_on_empty_read' to avoid counting 508 # SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE as 'actual' errors 509 my $err = DJabberd::Stanza::StartTLS->actual_error_on_empty_read($ssl); 510 if($err && ++$self->{'ssl_empty_read_ct'} >= 10) { 511 $self->log->warn("SSL Read error: $err (assuming ssl_eof)"); 508 512 $self->close('ssl_eof'); 509 513 } trunk/DJabberd/lib/DJabberd/Stanza/StartTLS.pm
r463 r816 10 10 use constant SSL_ERROR_WANT_READ => 2; 11 11 use constant SSL_ERROR_WANT_WRITE => 3; 12 use constant SSL_ERROR_WANT_CONNECT => 4; 13 use constant SSL_ERROR_WANT_ACCEPT => 5; 12 14 13 15 sub on_recv_from_server { &process } … … 68 70 } 69 71 72 sub actual_error_on_empty_read { 73 my ($class, $ssl) = @_; 74 my $err = Net::SSLeay::get_error($ssl, -1); 75 if ($err == SSL_ERROR_WANT_READ || 76 $err == SSL_ERROR_WANT_WRITE || 77 $err == SSL_ERROR_WANT_CONNECT || 78 $err == SSL_ERROR_WANT_ACCEPT) { 79 # Not an actual error, SSL is busy doing something like renegotiating encryption 80 # just try again next time 81 return 0; 82 } 83 # This is actually an error (return the SSL err code) 84 # unlike the 'no-op' WANT_READ and WANT_WRITE 85 return $err; 86 } 87 88 70 89 sub danga_socket_writerfunc { 71 90 my ($class, $conn) = @_;
