App-HTTP_Proxy_IMP
view release on metacpan or search on metacpan
- Tests
- more useful IMP plugins
- improve existing plugins, add timers etc
examples/DelayRequest.pm view on Meta::CPAN
$data =~m{^Referer:\s*\Q$base}mi # same origin
|| $data =~m{^Referer:\s*https?://}mi # at least from another site
) {
# no delay
$self->run_callback([ IMP_PASS,0,IMP_MAXOFFSET ]);
return;
}
}
weaken(my $wself = $self);
$self->{delayed} = $self->{factory_args}{eventlib}->timer(
$self->{factory_args}{delay} || 0.5,
sub {
# pass thru everything
$wself or return;
$wself->{delayed} = undef;
$wself->run_callback([ IMP_PASS,0,IMP_MAXOFFSET ]);
}
);
}
}
lib/App/HTTP_Proxy_IMP.pm view on Meta::CPAN
cb => $cb,
poll => 'w'
);
} else {
undef $watchw{$fn};
}
}
}
sub now { return AnyEvent->now }
sub timer {
my ($self,$after,$cb,$interval) = @_;
return AnyEvent->timer(
after => $after,
cb => $cb,
$interval ? ( interval => $interval ):()
);
}
1;
lib/App/HTTP_Proxy_IMP/Relay.pm view on Meta::CPAN
use App::HTTP_Proxy_IMP::Debug;
use Scalar::Util 'weaken';
use IO::Socket::SSL;
use AnyEvent;
use POSIX '_exit';
# set if the child should destroy itself after last connection closed
my $exit_if_no_relays;
sub exit_if_no_relays { $exit_if_no_relays = pop; }
# active relay, inserted in new, removed in $idlet timer
my @relays;
sub relays { return grep { $_ } @relays }
# creates new relay and puts it into @relays as weak reference
sub new {
my ($class,$cfd,$upstream,$conn) = @_;
my $self = fields::new($class);
debug("create relay $self");
if ( $upstream && ! ref($upstream)) {
lib/App/HTTP_Proxy_IMP/Relay.pm view on Meta::CPAN
push @st, sprintf("%d=%03b",$i,$fds->[$i]{status} || 0);
}
$msg .= " fd:".join(',',@st);
}
$msg = $conn->dump_state().$msg;
return $msg if defined wantarray;
debug($msg);
}
my $idlet = AnyEvent->timer(
after => 5,
interval => 5, cb => sub {
@relays = grep { $_ } @relays or return;
#debug("check timeouts for %d conn",+@relays);
my $now = AnyEvent->now;
RELAY: for my $r (@relays) {
# timeout depends on the state of the relay and child
# if there are active requests set it to 60, if not (e.g.
# idle keep-alive connections) to 30. If this is a forked
# child with no listener which should close after all
( run in 1.395 second using v1.01-cache-2.11-cpan-49f99fa48dc )