]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/NNTP.pm
get rid of unnecessary bytes::length usage
[public-inbox.git] / lib / PublicInbox / NNTP.pm
index 766ea89eec4cae031cf81720289f8f0787510fe2..aea04c05464b28b30d5e8d7a713e5da0446c9282 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2015-2020 all contributors <meta@public-inbox.org>
+# Copyright (C) 2015-2021 all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 #
 # Each instance of this represents a NNTP client socket
@@ -129,7 +129,7 @@ sub list_active_i { # "LIST ACTIVE" and also just "LIST" (no args)
        my ($self, $groupnames) = @_;
        my @window = splice(@$groupnames, 0, 100) or return 0;
        my $ibx;
-       my $groups = $self->{nntpd}->{pi_config}->{-by_newsgroup};
+       my $groups = $self->{nntpd}->{pi_cfg}->{-by_newsgroup};
        for my $ngname (@window) {
                $ibx = $groups->{$ngname} and group_line($self, $ibx);
        }
@@ -146,7 +146,7 @@ sub list_active ($;$) { # called by cmd_list
 sub list_active_times_i {
        my ($self, $groupnames) = @_;
        my @window = splice(@$groupnames, 0, 100) or return 0;
-       my $groups = $self->{nntpd}->{pi_config}->{-by_newsgroup};
+       my $groups = $self->{nntpd}->{pi_cfg}->{-by_newsgroup};
        for my $ngname (@window) {
                my $ibx = $groups->{$ngname} or next;
                my $c = eval { $ibx->uidvalidity } // time;
@@ -165,7 +165,7 @@ sub list_active_times ($;$) { # called by cmd_list
 sub list_newsgroups_i {
        my ($self, $groupnames) = @_;
        my @window = splice(@$groupnames, 0, 100) or return 0;
-       my $groups = $self->{nntpd}->{pi_config}->{-by_newsgroup};
+       my $groups = $self->{nntpd}->{pi_cfg}->{-by_newsgroup};
        my $ibx;
        for my $ngname (@window) {
                $ibx = $groups->{$ngname} and
@@ -202,7 +202,7 @@ sub cmd_list ($;$$) {
 
 sub listgroup_range_i {
        my ($self, $beg, $end) = @_;
-       my $r = $self->{ibx}->mm->msg_range($beg, $end, 'num');
+       my $r = $self->{ibx}->mm(1)->msg_range($beg, $end, 'num');
        scalar(@$r) or return;
        $self->msg_more(join('', map { "$_->[0]\r\n" } @$r));
        1;
@@ -210,7 +210,7 @@ sub listgroup_range_i {
 
 sub listgroup_all_i {
        my ($self, $num) = @_;
-       my $ary = $self->{ibx}->mm->ids_after($num);
+       my $ary = $self->{ibx}->mm(1)->ids_after($num);
        scalar(@$ary) or return;
        more($self, join("\r\n", @$ary));
        1;
@@ -241,7 +241,7 @@ sub parse_time ($$;$) {
                $gmt = 1;
        }
        my ($YYYY, $MM, $DD);
-       if (bytes::length($date) == 8) { # RFC 3977 allows YYYYMMDD
+       if (length($date) == 8) { # RFC 3977 allows YYYYMMDD
                ($YYYY, $MM, $DD) = unpack('A4A2A2', $date);
        } else { # legacy clients send YYMMDD
                my $YY;
@@ -261,14 +261,14 @@ sub parse_time ($$;$) {
 
 sub group_line ($$) {
        my ($self, $ibx) = @_;
-       my ($min, $max) = $ibx->mm->minmax;
+       my ($min, $max) = $ibx->mm(1)->minmax;
        more($self, "$ibx->{newsgroup} $max $min n");
 }
 
 sub newgroups_i {
        my ($self, $ts, $i, $groupnames) = @_;
        my $end = $$i + 100;
-       my $groups = $self->{nntpd}->{pi_config}->{-by_newsgroup};
+       my $groups = $self->{nntpd}->{pi_cfg}->{-by_newsgroup};
        while ($$i < $end) {
                my $ngname = $groupnames->[$$i++] // return;
                my $ibx = $groups->{$ngname} or next; # expired on reload
@@ -323,7 +323,7 @@ sub ngpat2re (;$) {
 sub newnews_i {
        my ($self, $names, $ts, $prev) = @_;
        my $ngname = $names->[0];
-       if (my $ibx = $self->{nntpd}->{pi_config}->{-by_newsgroup}->{$ngname}) {
+       if (my $ibx = $self->{nntpd}->{pi_cfg}->{-by_newsgroup}->{$ngname}) {
                if (my $over = $ibx->over) {
                        my $msgs = $over->query_ts($ts, $$prev);
                        if (scalar @$msgs) {
@@ -362,12 +362,12 @@ sub cmd_newnews ($$$$;$$) {
 sub cmd_group ($$) {
        my ($self, $group) = @_;
        my $nntpd = $self->{nntpd};
-       my $ibx = $nntpd->{pi_config}->{-by_newsgroup}->{$group} or
+       my $ibx = $nntpd->{pi_cfg}->{-by_newsgroup}->{$group} or
                return '411 no such news group';
        $nntpd->idler_start;
 
        $self->{ibx} = $ibx;
-       my ($min, $max) = $ibx->mm->minmax;
+       my ($min, $max) = $ibx->mm(1)->minmax;
        $self->{article} = $min;
        my $est_size = $max - $min;
        "211 $est_size $min $max $group";
@@ -381,7 +381,7 @@ sub article_adj ($$) {
        defined $n or return '420 no current article has been selected';
 
        $n += $off;
-       my $mid = $ibx->mm->mid_for($n);
+       my $mid = $ibx->mm(1)->mid_for($n);
        unless ($mid) {
                $n = $off > 0 ? 'next' : 'previous';
                return "421 no $n article in this group";
@@ -409,15 +409,6 @@ sub cmd_quit ($) {
        undef;
 }
 
-sub header_append ($$$) {
-       my ($hdr, $k, $v) = @_;
-       my @v = $hdr->header_raw($k);
-       foreach (@v) {
-               return if $v eq $_;
-       }
-       $hdr->header_set($k, @v, $v);
-}
-
 sub xref_by_tc ($$$) {
        my ($xref, $pi_cfg, $smsg) = @_;
        my $by_addr = $pi_cfg->{-by_addr};
@@ -427,9 +418,8 @@ sub xref_by_tc ($$$) {
                        $by_addr->{lc($_)} // ()
                } (PublicInbox::Address::emails($smsg->{$f} // ''));
                for my $ibx (@ibxs) {
-                       my $ngname = $ibx->{newsgroup} // next;
-                       next if defined $xref->{$ngname};
-                       $xref->{$ngname} = eval { $ibx->mm->num_for($mid) };
+                       $xref->{$ibx->{newsgroup}} //=
+                                               $ibx->mm(1)->num_for($mid);
                }
        }
 }
@@ -439,20 +429,22 @@ sub xref ($$$) {
        my $nntpd = $self->{nntpd};
        my $cur_ng = $cur_ibx->{newsgroup};
        my $xref;
-       if (my $ALL = $nntpd->{pi_config}->ALL) {
+       if (my $ALL = $nntpd->{pi_cfg}->ALL) {
                $xref = $ALL->nntp_xref_for($cur_ibx, $smsg);
-               xref_by_tc($xref, $nntpd->{pi_config}, $smsg);
+               xref_by_tc($xref, $nntpd->{pi_cfg}, $smsg);
        } else { # slow path
                $xref = { $cur_ng => $smsg->{num} };
                my $mid = $smsg->{mid};
-               for my $ibx (values %{$nntpd->{pi_config}->{-by_newsgroup}}) {
-                       next if defined($xref->{$ibx->{newsgroup}});
-                       my $num = eval { $ibx->mm->num_for($mid) } // next;
-                       $xref->{$ibx->{newsgroup}} = $num;
+               for my $ibx (values %{$nntpd->{pi_cfg}->{-by_newsgroup}}) {
+                       $xref->{$ibx->{newsgroup}} //=
+                                                $ibx->mm(1)->num_for($mid);
                }
        }
        my $ret = "$nntpd->{servername} $cur_ng:".delete($xref->{$cur_ng});
-       $ret .= " $_:$xref->{$_}" for (sort keys %$xref);
+       for my $ng (sort keys %$xref) {
+               my $num = $xref->{$ng} // next;
+               $ret .= " $ng:$num";
+       }
        $ret;
 }
 
@@ -487,13 +479,6 @@ sub set_nntp_headers ($$) {
        # *something* here is required for leafnode, try to follow
        # RFC 5536 3.1.5...
        $hdr->header_set('Path', $server_name . '!not-for-mail');
-
-       header_append($hdr, 'List-Post', "<mailto:$ibx->{-primary_address}>");
-       if (my $url = $ibx->base_url) {
-               $mid = mid_escape($mid);
-               header_append($hdr, 'Archived-At', "<$url$mid/>");
-               header_append($hdr, 'List-Archive', "<$url>");
-       }
 }
 
 sub art_lookup ($$$) {
@@ -520,7 +505,7 @@ find_ibx:
                                return '412 no newsgroup has been selected';
        }
 found:
-       my $smsg = $ibx->over->get_art($n) or return $err;
+       my $smsg = $ibx->over(1)->get_art($n) or return $err;
        $smsg->{-ibx} = $ibx;
        if ($code == 223) { # STAT
                set_art($self, $n);
@@ -531,7 +516,7 @@ found:
                $smsg->{nntp_code} = $code;
                set_art($self, $art);
                # this dereferences to `undef'
-               ${git_async_cat($ibx->git, $smsg->{blob}, \&blob_cb, $smsg)};
+               ${ibx_async_cat($ibx, $smsg->{blob}, \&blob_cb, $smsg)};
        }
 }
 
@@ -565,7 +550,7 @@ sub msg_hdr_write ($$) {
        $smsg->{nntp}->msg_more($$hdr);
 }
 
-sub blob_cb { # called by git->cat_async via git_async_cat
+sub blob_cb { # called by git->cat_async via ibx_async_cat
        my ($bref, $oid, $type, $size, $smsg) = @_;
        my $self = $smsg->{nntp};
        my $code = $smsg->{nntp_code};
@@ -634,7 +619,7 @@ sub get_range ($$) {
        my $ibx = $self->{ibx} or return '412 no news group has been selected';
        defined $range or return '420 No article(s) selected';
        my ($beg, $end);
-       my ($min, $max) = $ibx->mm->minmax;
+       my ($min, $max) = $ibx->mm(1)->minmax;
        if ($range =~ /\A([0-9]+)\z/) {
                $beg = $end = $1;
        } elsif ($range =~ /\A([0-9]+)-\z/) {
@@ -704,7 +689,7 @@ sub long_response ($$;@) {
 
 sub hdr_msgid_range_i {
        my ($self, $beg, $end) = @_;
-       my $r = $self->{ibx}->mm->msg_range($beg, $end);
+       my $r = $self->{ibx}->mm(1)->msg_range($beg, $end);
        @$r or return;
        $self->msg_more(join('', map { "$_->[0] <$_->[1]>\r\n" } @$r));
        1;
@@ -730,10 +715,10 @@ sub mid_lookup ($$) {
        my ($self, $mid) = @_;
        my $cur_ibx = $self->{ibx};
        if ($cur_ibx) {
-               my $n = $cur_ibx->mm->num_for($mid);
+               my $n = $cur_ibx->mm(1)->num_for($mid);
                return ($cur_ibx, $n) if defined $n;
        }
-       my $pi_cfg = $self->{nntpd}->{pi_config};
+       my $pi_cfg = $self->{nntpd}->{pi_cfg};
        if (my $ALL = $pi_cfg->ALL) {
                my ($id, $prev);
                while (my $smsg = $ALL->over->next_by_mid($mid, \$id, \$prev)) {
@@ -760,7 +745,7 @@ EOF
        } else { # slow path for non-ALL users
                for my $ibx (values %{$pi_cfg->{-by_newsgroup}}) {
                        next if defined $cur_ibx && $ibx eq $cur_ibx;
-                       my $n = $ibx->mm->num_for($mid);
+                       my $n = $ibx->mm(1)->num_for($mid);
                        return ($ibx, $n) if defined $n;
                }
        }
@@ -770,7 +755,7 @@ EOF
 sub xref_range_i {
        my ($self, $beg, $end) = @_;
        my $ibx = $self->{ibx};
-       my $msgs = $ibx->over->query_xover($$beg, $end);
+       my $msgs = $ibx->over(1)->query_xover($$beg, $end);
        scalar(@$msgs) or return;
        $$beg = $msgs->[-1]->{num} + 1;
        $self->msg_more(join('', map {
@@ -786,7 +771,7 @@ sub hdr_xref ($$$) { # optimize XHDR Xref [range] for rtin
                my $mid = $1;
                my ($ibx, $n) = mid_lookup($self, $mid);
                return r430 unless $n;
-               my $smsg = $ibx->over->get_art($n) or return;
+               my $smsg = $ibx->over(1)->get_art($n) or return;
                hdr_mid_response($self, $xhdr, $ibx, $n, $range,
                                xref($self, $ibx, $smsg));
        } else { # numeric range
@@ -799,16 +784,15 @@ sub hdr_xref ($$$) { # optimize XHDR Xref [range] for rtin
 }
 
 sub over_header_for {
-       my ($over, $num, $field) = @_;
-       my $smsg = $over->get_art($num) or return;
+       my ($ibx, $num, $field) = @_;
+       my $smsg = $ibx->over(1)->get_art($num) or return;
        return PublicInbox::Smsg::date($smsg) if $field eq 'date';
        $smsg->{$field};
 }
 
 sub smsg_range_i {
        my ($self, $beg, $end, $field) = @_;
-       my $over = $self->{ibx}->over;
-       my $msgs = $over->query_xover($$beg, $end);
+       my $msgs = $self->{ibx}->over(1)->query_xover($$beg, $end);
        scalar(@$msgs) or return;
        my $tmp = '';
 
@@ -832,7 +816,7 @@ sub hdr_smsg ($$$$) {
        if (defined $range && $range =~ $ONE_MSGID) {
                my ($ibx, $n) = mid_lookup($self, $1);
                return r430 unless defined $n;
-               my $v = over_header_for($ibx->over, $n, $field);
+               my $v = over_header_for($ibx, $n, $field);
                hdr_mid_response($self, $xhdr, $ibx, $n, $range, $v);
        } else { # numeric range
                $range = $self->{article} unless defined $range;
@@ -901,7 +885,7 @@ sub hdr_mid_response ($$$$$$) {
 
 sub xrover_i {
        my ($self, $beg, $end) = @_;
-       my $h = over_header_for($self->{ibx}->over, $$beg, 'references');
+       my $h = over_header_for($self->{ibx}, $$beg, 'references');
        more($self, "$$beg $h") if defined($h);
        $$beg++ < $end;
 }
@@ -941,7 +925,7 @@ sub cmd_over ($;$) {
        if ($range && $range =~ $ONE_MSGID) {
                my ($ibx, $n) = mid_lookup($self, $1);
                defined $n or return r430;
-               my $smsg = $ibx->over->get_art($n) or return r430;
+               my $smsg = $ibx->over(1)->get_art($n) or return r430;
                more($self, '224 Overview information follows (multi-line)');
 
                # Only set article number column if it's the current group
@@ -962,7 +946,7 @@ sub cmd_over ($;$) {
 sub xover_i {
        my ($self, $beg, $end) = @_;
        my $ibx = $self->{ibx};
-       my $msgs = $ibx->over->query_xover($$beg, $end);
+       my $msgs = $ibx->over(1)->query_xover($$beg, $end);
        my $nr = scalar @$msgs or return;
 
        # OVERVIEW.FMT
@@ -1014,7 +998,7 @@ sub cmd_xpath ($$) {
        return r501 unless $mid =~ $ONE_MSGID;
        $mid = $1;
        my @paths;
-       my $pi_cfg = $self->{nntpd}->{pi_config};
+       my $pi_cfg = $self->{nntpd}->{pi_cfg};
        my $groups = $pi_cfg->{-by_newsgroup};
        if (my $ALL = $pi_cfg->ALL) {
                my ($id, $prev, %seen);
@@ -1030,7 +1014,7 @@ sub cmd_xpath ($$) {
                }
        } else { # slow path, no point in using long_response
                for my $ibx (values %$groups) {
-                       my $n = $ibx->mm->num_for($mid) // next;
+                       my $n = $ibx->mm(1)->num_for($mid) // next;
                        push @paths, "$ibx->{newsgroup}/$n";
                }
        }