From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-2.9 required=3.0 tests=ALL_TRUSTED,AWL,BAYES_00 shortcircuit=no autolearn=unavailable version=3.3.2 X-Original-To: meta@public-inbox.org Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 7714B1F454 for ; Tue, 22 Sep 2015 10:09:52 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 5/7] nntp: implement OVER from RFC 3977 Date: Tue, 22 Sep 2015 10:09:46 +0000 Message-Id: <20150922100948.8160-6-e@80x24.org> In-Reply-To: <20150922100948.8160-1-e@80x24.org> References: <20150922100948.8160-1-e@80x24.org> List-Id: This is just like the XOVER command, but allows a single Message-ID to be given. --- lib/PublicInbox/NNTP.pm | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index e5bb683..1286b70 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -383,7 +383,7 @@ found: # must be last $s->body_set('') if ($set_headers == 2); } - [ $n, $mid, $s, $bytes, $lines ]; + [ $n, $mid, $s, $bytes, $lines, $ng ]; } sub simple_body_write ($$) { @@ -701,6 +701,32 @@ sub cmd_xrover ($;$) { }); } +sub over_line { + my ($self, $r) = @_; + + more($self, join("\t", $r->[0], map { + my $h = xhdr($r, $_); + defined $h ? $h : ''; + } @OVERVIEW )); +} + +sub cmd_over ($;$) { + my ($self, $range) = @_; + if ($range && $range =~ /\A<.+>\z/) { + my $r = $self->art_lookup($range, 2); + return '430 No article with that message-id' unless ref $r; + more($self, '224 Overview information follows (multi-line)'); + + # Only set article number column if it's the current group + my $ng = $self->{ng}; + $r->[0] = 0 if (!$ng || $ng ne $r->[5]); + over_line($self, $r); + '.'; + } else { + cmd_xover($self, $range); + } +} + sub cmd_xover ($;$) { my ($self, $range) = @_; $range = $self->{article} unless defined $range; @@ -712,11 +738,7 @@ sub cmd_xover ($;$) { my ($i) = @_; my $r = $self->art_lookup($$i, 2); return unless ref $r; - more($self, join("\t", $r->[0], - map { - my $h = xhdr($r, $_); - defined $h ? $h : ''; - } @OVERVIEW )); + over_line($self, $r); }); } -- EW