package Apache::PassThru;
# file: Apache/PassThru.pm;
use strict;
use vars qw($VERSION);
use Apache::Constants qw(:common);
use Apache::ModuleConfig ();
use DynaLoader ();

$VERSION = '1.00';

if($ENV{MOD_PERL}) {
  no strict;
  @ISA = qw(DynaLoader);
  __PACKAGE__->bootstrap;
}

sub handler {
    my $r = shift;
    return DECLINED if $r->proxyreq;
    my $uri = $r->uri;
    my %mappings = ();

    if(my $cfg = Apache::ModuleConfig->get($r)) {
	%mappings = %{ $cfg->{PassThru} } if $cfg->{PassThru};
    }

    for my $src (keys %mappings) {
	next unless $uri =~ s/^$src/$mappings{$src}/;
	$r->proxyreq(1);
	$r->uri($uri);
	$r->filename("proxy:$uri");
	$r->handler('proxy-server');
	return OK;
    }
    return DECLINED;
}

sub PerlPassThru ($$$$) {
    my($cfg, $parms, $local, $remote) = @_;
    unless ($remote =~ /^http:/) {
	die "Argument `$remote' is not a URL\n";
    }
    $cfg->{PassThru}{$local} = $remote;
}

my $Class = __PACKAGE__;

sub test {
    my $r = shift;
    $r->send_http_header('text/plain');
    require Data::Dumper;
    my $cfg = Apache::ModuleConfig->get($r);
    print "$Class configuration:\n";
    print Data::Dumper::Dumper($cfg) if $cfg;
}

$Apache::ReadConfig::Location{"/$Class/test"} = {
    SetHandler => "perl-script",
    PerlHandler => join '::', $Class, "test",
};

1;
__END__
