diff options
author | Eric Wong <e@80x24.org> | 2016-02-27 21:57:57 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2016-02-27 21:57:57 +0000 |
commit | 052f26f3ada1042afa5acadbecc48b487f4e2d52 (patch) | |
tree | b6b30f94cdb20534ffc074359db30084c9858fa6 /script/public-inbox-nntpd | |
parent | 617f35dacbd4e5972bf2d82411b45009bbc79a42 (diff) | |
download | public-inbox-052f26f3ada1042afa5acadbecc48b487f4e2d52.tar.gz |
This seems to match more closely with what is expected of Perl packages based on how blib is used. Hopefully makes the top-level source tree less cluttered and things easier-to-find.
Diffstat (limited to 'script/public-inbox-nntpd')
-rwxr-xr-x | script/public-inbox-nntpd | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/script/public-inbox-nntpd b/script/public-inbox-nntpd new file mode 100755 index 00000000..23d269d4 --- /dev/null +++ b/script/public-inbox-nntpd @@ -0,0 +1,69 @@ +#!/usr/bin/perl -w +# Copyright (C) 2015 all contributors <meta@public-inbox.org> +# License: AGPLv3 or later (https://www.gnu.org/licenses/agpl-3.0.txt) +# +# Standalone NNTP server for public-inbox. +use strict; +use warnings; +require PublicInbox::Daemon; +require PublicInbox::NewsGroup; +require PublicInbox::NNTP; +require PublicInbox::Config; +my $nntpd = PublicInbox::NNTPD->new; +daemon_run('0.0.0.0:119', + sub { $nntpd->refresh_groups }, # refresh + sub ($$$) { PublicInbox::NNTP->new($_[0], $nntpd) }); # post_accept + +1; +package PublicInbox::NNTPD; +use strict; +use warnings; + +sub new { + my ($class) = @_; + bless { + groups => {}, + err => \*STDERR, + out => \*STDOUT, + grouplist => [], + }, $class; +} + +sub refresh_groups () { + my ($self) = @_; + my $pi_config = PublicInbox::Config->new; + my $new = {}; + my @list; + foreach my $k (keys %$pi_config) { + $k =~ /\Apublicinbox\.([^\.]+)\.mainrepo\z/ or next; + my $g = $1; + my $git_dir = $pi_config->{$k}; + my $addr = $pi_config->{"publicinbox.$g.address"}; + my $ngname = $pi_config->{"publicinbox.$g.newsgroup"}; + if (defined $ngname) { + next if ($ngname eq ''); # disabled + $g = $ngname; + } + my $ng = PublicInbox::NewsGroup->new($g, $git_dir, $addr); + my $old_ng = $self->{groups}->{$g}; + + # Reuse the old one if possible since it can hold + # references to valid mm and gcf objects + if ($old_ng) { + $old_ng->update($ng); + $ng = $old_ng; + } + + # Only valid if msgmap and search works + if ($ng->usable) { + $new->{$g} = $ng; + push @list, $ng; + } + } + @list = sort { $a->{name} cmp $b->{name} } @list; + $self->{grouplist} = \@list; + # this will destroy old groups that got deleted + %{$self->{groups}} = %$new; +} + +1; |