Update of /cvsroot/http-webtest/HTTP-WebTest-Recorder/bin
In directory sc8-pr-cvs1:/tmp/cvs-serv12205/bin
Modified Files:
rec-proxy
Log Message:
Rewriten via POE
Index: rec-proxy
===================================================================
RCS file: /cvsroot/http-webtest/HTTP-WebTest-Recorder/bin/rec-proxy,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** rec-proxy 15 Jan 2003 21:15:00 -0000 1.2
--- rec-proxy 27 Feb 2003 22:02:35 -0000 1.3
***************
*** 80,83 ****
--- 80,86 ----
use HTTP::WebTest::Utils qw(start_webserver);
use HTTP::WebTest::Recorder;
+ use HTTP::WebTest::Recorder::POE;
+ use POE qw(Component::Server::TCP Component::Client::HTTP
+ Filter::HTTPD Filter::Stream);
my %OPTIONS = ();
***************
*** 104,119 ****
sub main {
! my $recorder;
! my $server_sub = sub {
! my %param = @_;
! $recorder ||= HTTP::WebTest::Recorder->new(ui_path => $OPTIONS{path});
! my $response = $recorder->handle($param{request});
! $param{connect}->send_response($response);
! };
! start_webserver(port => $OPTIONS{port} || 8000,
! server_sub => $server_sub);
}
--- 107,157 ----
sub main {
! POE::Component::Server::TCP->new(Alias => 'web_server',
! Port => $OPTIONS{port} || 8000,
! ClientFilter => 'POE::Filter::HTTPD',
! ClientInput => \&client_input,
! InlineStates =>
! { proxy_response => \&proxy_response });
! my $recorder = HTTP::WebTest::Recorder->new(ui_path => $OPTIONS{path});
! HTTP::WebTest::Recorder::POE->new(Alias => 'recorder',
! Recorder => $recorder);
! $poe_kernel->run();
! }
! sub client_input {
! my ($kernel, $session, $heap, $request) = @_[KERNEL, SESSION, HEAP, ARG0];
!
! # if request is actually response it just means that we've got an
! # error
! if($request->isa('HTTP::Response')) {
! $heap->{client}->put($request);
! $kernel->yield('shutdown');
! return;
! }
!
! $kernel->post(recorder => incoming_request => proxy_response => $request);
! }
!
! sub proxy_response {
! my ($kernel, $heap, $request_packet, $response_packet)
! = @_[KERNEL, HEAP, ARG0, ARG1];
!
! my $request = $request_packet->[0];
! my($response, $data) = @$response_packet;
!
! unless($heap->{got_headers}) {
! $response->header(Connection => 'close');
! $heap->{client}->put($response);
! $heap->{got_headers}++;
! }
!
! if(defined $data) {
! $heap->{client}->set_output_filter(POE::Filter::Stream->new());
! $heap->{client}->put($data);
! } else {
! $kernel->yield('shutdown');
! }
}
|