The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

# Copyright 2008, 2010 Kevin Ryde
#
# This file is part of RSS2Leafnode.
#
# RSS2Leafnode is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 3, or (at your option) any later
# version.
#
# RSS2Leafnode is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License along
# with RSS2Leafnode.  If not, see <http://www.gnu.org/licenses/>.

use 5.010;
use strict;
use warnings;
use Net::NNTP;

{
  use IO::Socket::SSL qw(debug3);
  use IO::Socket::INET;
  use Net::NNTP;
  use Hook::LexWrap;
  wrap 'Net::NNTP::new', pre => sub { print "NNTP new\n"; };
  wrap 'IO::Socket::SSL::SSL_Context::new', pre => sub { print "SSL new\n"; };
  wrap 'IO::Socket::INET::new', pre => sub { print "INET new\n"; };

  {
    {
      package MyNNTPS;
      use Net::NNTP;
      use IO::Socket::SSL;
      our @ISA = ('IO::Socket::SSL', 'Net::NNTP');
      no warnings 'once';
      *new = \&Net::NNTP::new;
    }
    my $nntp = MyNNTPS->new ('localhost:12345', Debug => 1);
    print $nntp;
    exit 0;
  }

  {
    local @Net::NNTP::ISA = map {$_ eq 'IO::Socket::INET'
                                   ? 'IO::Socket::SSL' : $_} @Net::NNTP::ISA;
    my $nntp = Net::NNTP->new ('localhost:12345', Debug => 1);
    print $nntp;
    exit 0;
  }
}

{
  require Net::NNTP;
  my $nntp = Net::NNTP->new ('localhost:8119', Debug => 1);
  #print $nntp->ihave('fsjdkfds'),"\n";

  print $nntp->postok(),"\n";
  print $nntp->group('r2l.test'),"\n";
  my $time = time();
  my $msg = <<"HERE";
From: foo
Subject: test $time
Message-ID: <$time.tag:%2C2010-02-09:something\@foo.com>
Newsgroups: r2l.test

Hello
HERE
# Message-ID: <$time\@1080.0.0.0.8.800.200C.417A...ipv6>
# Message-ID: <$time\@1.2.3.4>
  print $nntp->post($msg),"\n";
  exit 0;
}

{
  require URI;
  my $uri;
  $uri = URI->new ('http://foo.com/r2l.test');
  $uri = URI->new ('urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6');
  $uri = URI->new ('news://foo.com/r2l.test');
  $uri = URI->new ('news://localhost:123/r2l.test');
  $uri = URI->new ('news://localhost:119/r2l.test');
  $uri = URI->new ('r2l.test','news');
  $uri = URI->new ('news://foo.com:8119/r2l.test');
  $uri = $uri->abs('news://localhost');
  $uri = $uri->canonical;

  print ref($uri),"\n";
  print $uri,"\n";
  print "scheme:    ",$uri->scheme,"\n";
  print "authority: ",($uri->can('authority') && $uri->authority//'undef'),"\n";
  print "host:      ",($uri->can('host') && $uri->host//'undef'),"\n";
  print "port:      ",($uri->can('port') && $uri->port//'undef'),"\n";
  print "group:     ",($uri->can('group') && $uri->group//'undef'),"\n";
  print "path:      ",$uri->path//'undef',"\n";
  exit 0;
}

{
  require URI;
  # my $uri = URI->new('tag:foo.com,2010-02-09:something');
  my $uri = URI->new('http://foo.com/2010-02-09/something.html');
  print ref($uri),"\n";
  print $uri->can('authority'),"\n";
  print $uri->authority,"\n";
  $uri->authority('');
  print $uri,"\n";
  exit 0;
}