App-HTTP_Proxy_IMP

 view release on metacpan or  search on metacpan

t/02_leak.t  view on Meta::CPAN

	Listen => 10,
	LocalAddr => '127.0.0.1:0'
    ) or die "failed to create server: $!";
    my $saddr = $socket->sockhost.':'.$socket->sockport;
    defined( $server_pid = fork() ) or die "failed to fork";
    if ( $server_pid ) {
	close($socket);
	return $saddr;
    }
    
    while (1) {
	my $cl = $socket->accept or next;
	while (<$cl>) {
	    last if m{^\s*$};
	}
	print $cl "HTTP/1.0 200 ok\r\n\r\n"
    }
    exit;
}

# create server in child process
sub create_proxy {
    my $saddr = shift;
    my $socket = IO::Socket::INET->new(
	Listen => 10,
	LocalAddr => '127.0.0.1:0'
    ) or die "failed to create listener for proxy: $!";
    my $paddr = $socket->sockhost.':'.$socket->sockport;

    my ($lh,$lf) = tempfile();
    defined( $proxy_pid = fork() ) or die "failed to fork";
    if ( $proxy_pid ) {
	close($socket);
	close($lh);
	return ($paddr,$lf);
    }
    
    open(STDERR,'>&',$lh);
    STDERR->autoflush;

    Devel::TrackObjects->import( qr/IMP/ );
    require App::HTTP_Proxy_IMP; # load after Devel::TrackObjects

    App::HTTP_Proxy_IMP->start({
	impns => ['App::HTTP_Proxy_IMP::IMP'],
	filter => [ DummyFilter->new_factory ],
	addr => [[ $socket,$saddr ]],
    });
    die "proxy exit";
    exit;
}

{
    package DummyFilter;
    use base 'Net::IMP::HTTP::Request';
    use Net::IMP;
    sub RTYPES { (IMP_PASS) }
    sub new_analyzer {
	Devel::TrackObjects->show_tracked;
	my $self = shift;
	my $obj = $self->SUPER::new_analyzer(@_);
	$obj->run_callback(
	    [ IMP_PASS,0,IMP_MAXOFFSET ],
	    [ IMP_PASS,1,IMP_MAXOFFSET ],
	);
	return $obj;
    }

    sub request_hdr {}
    sub request_body {}
    sub response_hdr {}
    sub response_body {}
    sub any_data {}
}



    



( run in 1.578 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )