From b5371f1053676a4a551140739582070df773dc9c Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 23 Jul 2022 04:41:48 +0000 Subject: ds: support greeting protocols We can share some common code between IMAP, NNTP, and POP3 without too much trouble, so cut down our LoC. --- lib/PublicInbox/DS.pm | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'lib/PublicInbox/DS.pm') diff --git a/lib/PublicInbox/DS.pm b/lib/PublicInbox/DS.pm index bf8c4466..79f7046f 100644 --- a/lib/PublicInbox/DS.pm +++ b/lib/PublicInbox/DS.pm @@ -347,6 +347,24 @@ retry: $DescriptorMap{$fd} = $self; } +# for IMAP, NNTP, and POP3 which greet clients upon connect +sub greet { + my ($self, $sock) = @_; + my $ev = EPOLLIN; + my $wbuf; + if ($sock->can('accept_SSL') && !$sock->accept_SSL) { + return CORE::close($sock) if $! != EAGAIN; + $ev = PublicInbox::TLS::epollbit() or return CORE::close($sock); + $wbuf = [ \&accept_tls_step, $self->can('do_greet')]; + } + new($self, $sock, $ev | EPOLLONESHOT); + if ($wbuf) { + $self->{wbuf} = $wbuf; + } else { + $self->do_greet; + } + $self; +} ##################################################################### ### I N S T A N C E M E T H O D S -- cgit v1.2.3-24-ge0c7