about summary refs log tree commit homepage
path: root/lib/PublicInbox/Daemon.pm
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-06-10 07:04:00 +0000
committerEric Wong <e@yhbt.net>2020-06-13 07:55:45 +0000
commit90f11ce471c53365a77896c847d0a39b0995b5b5 (patch)
treeda22ca9fd8df2a85ed4245812999bd67f0577e49 /lib/PublicInbox/Daemon.pm
parenta7018ba43dec712675d21ace5ea1e19d901fdb0f (diff)
downloadpublic-inbox-90f11ce471c53365a77896c847d0a39b0995b5b5.tar.gz
It shares a bit of code with NNTP.  It's copy+pasted for now
since this provides new ground to experiment with APIs for
dealing with slow storage and many inboxes.
Diffstat (limited to 'lib/PublicInbox/Daemon.pm')
-rw-r--r--lib/PublicInbox/Daemon.pm24
1 files changed, 12 insertions, 12 deletions
diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm
index 4ff7cad4..2f63bd73 100644
--- a/lib/PublicInbox/Daemon.pm
+++ b/lib/PublicInbox/Daemon.pm
@@ -1,6 +1,6 @@
 # Copyright (C) 2015-2020 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
-# contains common daemon code for the nntpd and httpd servers.
+# contains common daemon code for the httpd, imapd, and nntpd servers.
 # This may be used for read-only IMAP server if we decide to implement it.
 package PublicInbox::Daemon;
 use strict;
@@ -29,8 +29,8 @@ my %tls_opt; # scheme://sockname => args for IO::Socket::SSL->start_SSL
 my $reexec_pid;
 my ($uid, $gid);
 my ($default_cert, $default_key);
-my %KNOWN_TLS = ( 443 => 'https', 563 => 'nntps' );
-my %KNOWN_STARTTLS = ( 119 => 'nntp' );
+my %KNOWN_TLS = ( 443 => 'https', 563 => 'nntps', 993 => 'imaps' );
+my %KNOWN_STARTTLS = ( 119 => 'nntp', 143 => 'imap' );
 
 sub accept_tls_opt ($) {
         my ($opt_str) = @_;
@@ -123,7 +123,7 @@ sub daemon_prepare ($) {
                         $tls_opt{"$scheme://$l"} = accept_tls_opt($1);
                 } elsif (defined($default_cert)) {
                         $tls_opt{"$scheme://$l"} = accept_tls_opt('');
-                } elsif ($scheme =~ /\A(?:nntps|https)\z/) {
+                } elsif ($scheme =~ /\A(?:https|imaps|imaps)\z/) {
                         die "$orig specified w/o cert=\n";
                 }
                 # TODO: use scheme to load either NNTP.pm or HTTP.pm
@@ -584,13 +584,13 @@ sub defer_accept ($$) {
 }
 
 sub daemon_loop ($$$$) {
-        my ($refresh, $post_accept, $nntpd, $af_default) = @_;
+        my ($refresh, $post_accept, $tlsd, $af_default) = @_;
         my %post_accept;
         while (my ($k, $v) = each %tls_opt) {
-                if ($k =~ s!\A(?:nntps|https)://!!) {
+                if ($k =~ s!\A(?:https|imaps|nntps)://!!) {
                         $post_accept{$k} = tls_start_cb($v, $post_accept);
-                } elsif ($nntpd) { # STARTTLS, $k eq '' is OK
-                        $nntpd->{accept_tls} = $v;
+                } elsif ($tlsd) { # STARTTLS, $k eq '' is OK
+                        $tlsd->{accept_tls} = $v;
                 }
         }
         my $sig = {
@@ -620,8 +620,8 @@ sub daemon_loop ($$$$) {
         @listeners = map {;
                 my $tls_cb = $post_accept{sockname($_)};
 
-                # NNTPS, HTTPS, HTTP, and POP3S are client-first traffic
-                # NNTP and POP3 are server-first
+                # NNTPS, HTTPS, HTTP, IMAPS and POP3S are client-first traffic
+                # IMAP, NNTP and POP3 are server-first
                 defer_accept($_, $tls_cb ? 'dataready' : $af_default);
 
                 # this calls epoll_create:
@@ -639,12 +639,12 @@ sub daemon_loop ($$$$) {
 }
 
 sub run ($$$;$) {
-        my ($default, $refresh, $post_accept, $nntpd) = @_;
+        my ($default, $refresh, $post_accept, $tlsd) = @_;
         local $SIG{PIPE} = 'IGNORE';
         daemon_prepare($default);
         my $af_default = $default =~ /:8080\z/ ? 'httpready' : undef;
         my $for_destroy = daemonize();
-        daemon_loop($refresh, $post_accept, $nntpd, $af_default);
+        daemon_loop($refresh, $post_accept, $tlsd, $af_default);
         PublicInbox::DS->Reset;
         # ->DESTROY runs when $for_destroy goes out-of-scope
 }