Net-Squid-ReverseProxy
view release on metacpan or search on metacpan
lib/Net/Squid/ReverseProxy.pm view on Meta::CPAN
package Net::Squid::ReverseProxy;
use 5.006;
use strict;
use Carp qw/croak/;
use vars qw/$VERSION/;
$VERSION = '0.04';
sub new {
my $class = shift;
my %arg = @_;
unless (defined $arg{'squid_version'} &&
defined $arg{'squid_conf'} &&
defined $arg{'squid'} ) {
croak "the path to both squid and squid.conf as well as squid version are required";
}
unless (-f $arg{'squid_conf'} && -w $arg{'squid_conf'} ) {
croak "squid config file doesn't exist or isn't writable";
}
unless (-f $arg{'squid'} && -x $arg{'squid'} ) {
croak "squid program doesn't exist or isn't executable";
}
bless \%arg, $class;
}
sub init_reverseproxy {
my $self = shift;
my %arg = @_;
my $cfg = $self->{'squid_conf'};
my $squid = $self->{'squid'};
my $version = $self->{'squid_version'};
my $cache_mem = $arg{'cache_mem'} || 50;
my $maximum_object_size = $arg{'maximum_object_size'} || 2048;
my $maximum_object_size_in_memory = $arg{'maximum_object_size_in_memory'} || 64;
my $cache_dir_size = $arg{'cache_dir_size'} || 50;
my $visible_hostname = $arg{'visible_hostname'} || 'localhost.localdomain';
if ($arg{'cache_dir'} ) {
my $uid = (stat $arg{'cache_dir'})[4];
my $user = (getpwuid $uid)[0];
if ($user ne 'nobody') {
croak "init failed, $arg{'cache_dir'} must be owned by nobody";
}
}
my $cache_dir = $arg{'cache_dir'} || '/tmp/squidcache';
my $module_dir = $INC{'Net/Squid/ReverseProxy.pm'};
$module_dir =~ s/\.pm$//;
my @cfg; my $fd;
open $fd, "<", "$module_dir/squidcfg" or croak "can't open template file $!";
while (<$fd>) {
push @cfg,$_;
if (/ARG INPUT BEGIN/) {
push @cfg,
"cache_mem $cache_mem MB\n",
"maximum_object_size $maximum_object_size KB\n",
"maximum_object_size_in_memory $maximum_object_size_in_memory KB\n",
"cache_dir ufs $cache_dir $cache_dir_size 16 256\n",
"visible_hostname $visible_hostname\n";
if ( $version < 3.0 ) {
push @cfg, "acl all src all\n";
}
}
}
close $fd;
open $fd, "<", $cfg or croak $!;
my @oldcfg = <$fd>;
close $fd;
my $fdw;
open $fdw,">",$cfg or croak $!;
print $fdw @cfg;
close $fdw;
system "$squid -k kill >/dev/null 2>&1";
system "$squid -z >/dev/null 2>&1 && $squid";
if ($? == 0) {
return 1;
} else {
open $fdw,">",$cfg or croak $!;
print $fdw @oldcfg;
close $fdw;
croak "init failed, can't run 'squid -z' and startup squid";
}
}
sub add_dstdomain_proxy {
( run in 1.569 second using v1.01-cache-2.11-cpan-39bf76dae61 )