# License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
#
# Each instance of this represents a NNTP client socket
+# fields:
+# nntpd: PublicInbox::NNTPD ref
+# article: per-session current article number
+# ng: PublicInbox::Inbox ref
+# long_cb: long_response private data
package PublicInbox::NNTP;
use strict;
-use warnings;
-use base qw(PublicInbox::DS);
-use fields qw(nntpd article ng long_cb);
+use parent qw(PublicInbox::DS);
use PublicInbox::MID qw(mid_escape $MID_EXTRACT);
use PublicInbox::Eml;
use POSIX qw(strftime);
sub new ($$$) {
my ($class, $sock, $nntpd) = @_;
- my $self = fields::new($class);
+ my $self = bless { nntpd => $nntpd }, $class;
my $ev = EPOLLIN;
my $wbuf;
if ($sock->can('accept_SSL') && !$sock->accept_SSL) {
$wbuf = [ \&PublicInbox::DS::accept_tls_step, \&greet ];
}
$self->SUPER::new($sock, $ev | EPOLLONESHOT);
- $self->{nntpd} = $nntpd;
if ($wbuf) {
$self->{wbuf} = $wbuf;
} else {
if (!defined($oid)) {
# it's possible to have TOCTOU if an admin runs
# public-inbox-(edit|purge), just move onto the next message
+ warn "E: $smsg->{blob} missing in $self->{ng}->{inboxdir}\n";
return $self->requeue;
} elsif ($smsg->{blob} ne $oid) {
$self->close;
return $smsg unless ref $smsg;
set_art($self, $art);
$smsg->{nntp} = $self;
- git_async_cat($self->{ng}->git, $smsg->{blob}, \&blob_cb, $smsg);
- undef;
+ ${git_async_cat($self->{ng}->git, $smsg->{blob}, \&blob_cb, $smsg)};
}
sub cmd_head ($;$) {
set_art($self, $art);
$smsg->{nntp} = $self;
$smsg->{nntp_code} = 221;
- git_async_cat($self->{ng}->git, $smsg->{blob}, \&blob_cb, $smsg);
- undef;
+ ${git_async_cat($self->{ng}->git, $smsg->{blob}, \&blob_cb, $smsg)};
}
sub cmd_body ($;$) {
set_art($self, $art);
$smsg->{nntp} = $self;
$smsg->{nntp_code} = 222;
- git_async_cat($self->{ng}->git, $smsg->{blob}, \&blob_cb, $smsg);
- undef;
+ ${git_async_cat($self->{ng}->git, $smsg->{blob}, \&blob_cb, $smsg)};
}
sub cmd_stat ($;$) {