diff options
author | Eric Wong <e@80x24.org> | 2022-07-23 04:41:48 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2022-07-23 14:22:29 +0000 |
commit | b5371f1053676a4a551140739582070df773dc9c (patch) | |
tree | 7276ab3b42205a2454774adb6446bcd20473a590 /lib/PublicInbox/DS.pm | |
parent | 806b83f28401901daaf9170b030fca6fd2fd930e (diff) | |
download | public-inbox-b5371f1053676a4a551140739582070df773dc9c.tar.gz |
We can share some common code between IMAP, NNTP, and POP3 without too much trouble, so cut down our LoC.
Diffstat (limited to 'lib/PublicInbox/DS.pm')
-rw-r--r-- | lib/PublicInbox/DS.pm | 18 |
1 files changed, 18 insertions, 0 deletions
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 |