]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/DS.pm
ds: support greeting protocols
[public-inbox.git] / lib / PublicInbox / DS.pm
index bf8c4466218a37a43688aaaca2b063c65e98c86e..79f7046f87a4dbfe3732d221ecdbc05976336484 100644 (file)
@@ -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