[Http-webtest-commits] HTTP-WebTest-Recorder/bin rec-proxy,1.2,1.3
Brought to you by:
m_ilya,
richardanderson
From: Ilya M. <m_...@us...> - 2003-02-27 22:02:40
|
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'); ! } } |