lib/PublicInbox/DS.pm | 6 +++--- lib/PublicInbox/HTTP.pm | 2 +- lib/PublicInbox/NNTP.pm | 6 +++--- diff --git a/lib/PublicInbox/DS.pm b/lib/PublicInbox/DS.pm index 01c8917eafedb6f509b0953ddf59c192b61ab86a..b7753e1a663148320e798aa606bfe0af1e9d4f7d 100644 --- a/lib/PublicInbox/DS.pm +++ b/lib/PublicInbox/DS.pm @@ -415,7 +415,7 @@ $written; } sub epbit ($$) { # (sock, default) - ref($_[0]) eq 'IO::Socket::SSL' ? PublicInbox::TLS::epollbit() : $_[1]; + $_[0]->can('stop_SSL') ? PublicInbox::TLS::epollbit() : $_[1]; } # returns 1 if done, 0 if incomplete @@ -569,7 +569,7 @@ my $sock = $self->{sock} or return 1; my $wbuf = $self->{wbuf}; if (MSG_MORE && (!defined($wbuf) || !scalar(@$wbuf)) && - ref($sock) ne 'IO::Socket::SSL') { + !$sock->can('stop_SSL')) { my $n = send($sock, $_[1], MSG_MORE); if (defined $n) { my $nlen = bytes::length($_[1]) - $n; @@ -619,7 +619,7 @@ # or fork w/o exec, so no inadvertent socket sharing sub shutdn ($) { my ($self) = @_; my $sock = $self->{sock} or return; - if (ref($sock) eq 'IO::Socket::SSL') { + if ($sock->can('stop_SSL')) { shutdn_tls_step($self); } else { $self->close; diff --git a/lib/PublicInbox/HTTP.pm b/lib/PublicInbox/HTTP.pm index b73ce2d733500f9f38a540806200183301d99079..6ccf20592405e2ee3732d79283b8ac262c26cd6f 100644 --- a/lib/PublicInbox/HTTP.pm +++ b/lib/PublicInbox/HTTP.pm @@ -59,7 +59,7 @@ my ($class, $sock, $addr, $httpd) = @_; my $self = fields::new($class); my $ev = EPOLLIN; my $wbuf; - if (ref($sock) eq 'IO::Socket::SSL' && !$sock->accept_SSL) { + if ($sock->can('accept_SSL') && !$sock->accept_SSL) { return CORE::close($sock) if $! != EAGAIN; $ev = PublicInbox::TLS::epollbit(); $wbuf = [ \&PublicInbox::DS::accept_tls_step ]; diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index bffd773cf9eb087c5d990fed67db0da10e2ff345..be3bddc3f5d2a230642b4bf2dc878f7b6c5aec73 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -47,7 +47,7 @@ my ($class, $sock, $nntpd) = @_; my $self = fields::new($class); my $ev = EPOLLIN; my $wbuf; - if (ref($sock) eq 'IO::Socket::SSL' && !$sock->accept_SSL) { + if ($sock->can('accept_SSL') && !$sock->accept_SSL) { return CORE::close($sock) if $! != EAGAIN; $ev = PublicInbox::TLS::epollbit(); $wbuf = [ \&PublicInbox::DS::accept_tls_step, \&greet ]; @@ -97,7 +97,7 @@ # The keyword argument is not used (rfc3977 5.2.2) sub cmd_capabilities ($;$) { my ($self, undef) = @_; my $res = $CAPABILITIES; - if (ref($self->{sock}) ne 'IO::Socket::SSL' && + if (!$self->{sock}->can('accept_SSL') && $self->{nntpd}->{accept_tls}) { $res .= "STARTTLS\r\n"; } @@ -896,7 +896,7 @@ sub cmd_starttls ($) { my ($self) = @_; my $sock = $self->{sock} or return; # RFC 4642 2.2.1 - return r502 if (ref($sock) eq 'IO::Socket::SSL' || $self->compressed); + return r502 if ($sock->can('accept_SSL') || $self->compressed); my $opt = $self->{nntpd}->{accept_tls} or return '580 can not initiate TLS negotiation'; res($self, '382 Continue with TLS negotiation');