use POSIX qw(strftime);
use Time::HiRes qw(clock_gettime CLOCK_MONOTONIC);
use URI::Escape qw(uri_escape_utf8);
-use Encode qw(find_encoding);
-my $enc_utf8 = find_encoding('UTF-8');
use constant {
r501 => '501 command syntax error',
r221 => '221 Header follows',
foreach my $ng (@{$self->{nntpd}->{grouplist}}) {
$ng->{newsgroup} =~ $wildmat or next;
my $c = eval { $ng->mm->created_at } || time;
- more($self, "$ng->{newsgroup} $c $ng->{address}");
+ more($self, "$ng->{newsgroup} $c $ng->{-primary_address}");
}
}
sub cmd_post ($) {
my ($self) = @_;
my $ng = $self->{ng};
- $ng ? "440 mailto:$ng->{address} to post" : '440 posting not allowed'
+ $ng ? "440 mailto:$ng->{-primary_address} to post"
+ : '440 posting not allowed'
}
sub cmd_quit ($) {
# clobber some
$hdr->header_set('Newsgroups', $ng->{newsgroup});
$hdr->header_set('Xref', xref($ng, $n));
- header_append($hdr, 'List-Post', "<mailto:$ng->{address}>");
- if (my $url = $ng->{url}) {
+ header_append($hdr, 'List-Post', "<mailto:$ng->{-primary_address}>");
+ if (my $url = $ng->base_url) {
$mid = uri_escape_utf8($mid);
header_append($hdr, 'Archived-At', "<$url$mid/>");
header_append($hdr, 'List-Archive', "<$url>");
found:
my $o = 'HEAD:' . mid2path($mid);
my $bytes;
- my $s = eval { Email::Simple->new($ng->gcf->cat_file($o, \$bytes)) };
+ my $s = eval { Email::Simple->new($ng->git->cat_file($o, \$bytes)) };
return $err unless $s;
my $lines;
if ($set_headers) {
$self->{article} = $art if defined $art && $art =~ /\A\d+\z/;
}
+sub _header ($) {
+ my $hdr = $_[0]->header_obj->as_string;
+ utf8::encode($hdr);
+ $hdr
+}
+
sub cmd_article ($;$) {
my ($self, $art) = @_;
my $r = art_lookup($self, $art, 1);
my ($n, $mid, $s) = @$r;
set_art($self, $art);
more($self, "220 $n <$mid> article retrieved - head and body follow");
- do_more($self, $s->header_obj->as_string);
+ do_more($self, _header($s));
do_more($self, "\r\n");
simple_body_write($self, $s);
}
my ($n, $mid, $s) = @$r;
set_art($self, $art);
more($self, "221 $n <$mid> article retrieved - head follows");
- do_more($self, $s->header_obj->as_string);
+ do_more($self, _header($s));
'.'
}
foreach my $s (@$msgs) {
$tmp .= $s->num . ' ' . $s->$field . "\r\n";
}
+ utf8::encode($tmp);
do_more($self, $tmp);
# -1 to adjust for implicit increment in long_response
$$i = $nr ? $$i + $nr - 1 : long_response_limit;
my ($num, $smsg) = @_;
# n.b. field access and procedural calls can be
# 10%-15% faster than OO method calls:
- join("\t", $num,
+ my $s = join("\t", $num,
$smsg->{subject},
$smsg->{from},
PublicInbox::SearchMsg::date($smsg),
$smsg->{references},
PublicInbox::SearchMsg::bytes($smsg),
PublicInbox::SearchMsg::lines($smsg));
+ utf8::encode($s);
+ $s
}
sub cmd_over ($;$) {
sub res ($$) {
my ($self, $line) = @_;
- $line = $enc_utf8->encode($line);
do_write($self, $line . "\r\n");
}
sub do_more ($$) {
my ($self, $data) = @_;
- $data = $enc_utf8->encode($data);
if (MSG_MORE && !$self->{write_buf_size}) {
my $n = send($self->{sock}, $data, MSG_MORE);
if (defined $n) {