You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axkit-dev@xml.apache.org by ma...@sergeant.org on 2006/08/02 21:24:35 UTC
[SVN] [28] Allow transformers access to $client
Revision: 28
Author: matt
Date: 2006-08-02 19:24:16 +0000 (Wed, 02 Aug 2006)
Log Message:
-----------
Allow transformers access to $client
Beginnings of parsing querystring code
Allow transformers to log
Make XSP not recompile every hit
Modified Paths:
--------------
trunk/lib/AxKit2/Connection.pm
trunk/lib/AxKit2/HTTPHeaders.pm
trunk/lib/AxKit2/Processor.pm
trunk/lib/AxKit2/Transformer/XSP.pm
trunk/lib/AxKit2/Transformer.pm
Added Paths:
-----------
trunk/lib/AxKit2/Utils.pm
Modified: trunk/lib/AxKit2/Connection.pm
===================================================================
--- trunk/lib/AxKit2/Connection.pm 2006-08-02 19:02:27 UTC (rev 27)
+++ trunk/lib/AxKit2/Connection.pm 2006-08-02 19:24:16 UTC (rev 28)
@@ -19,6 +19,7 @@
server_config
http_headers_sent
notes
+ sock_closed
);
use constant CLEANUP_TIME => 5; # every N seconds
@@ -40,6 +41,7 @@
$self->{alive_time} = $self->{create_time} = $now;
$self->{headers_string} = '';
+ $self->{closed} = 0;
$self->{ditch_leading_rn} = 0; # TODO - work out how to set that...
$self->{server_config} = $servconf;
$self->{notes} = {};
@@ -70,6 +72,7 @@
sub max_connect_time { 180 }
sub event_err { my AxKit2::Connection $self = shift; $self->close("Error") }
sub event_hup { my AxKit2::Connection $self = shift; $self->close("Disconnect (HUP)") }
+sub close { my AxKit2::Connection $self = shift; $self->{sock_closed}++; $self->SUPER::close(@_) }
sub event_read {
my AxKit2::Connection $self = shift;
@@ -166,7 +169,7 @@
$self->hook_fixup($hd)
&&
(
- $self->hook_xmlresponse(AxKit2::Processor->new($hd->filename))
+ $self->hook_xmlresponse(AxKit2::Processor->new($self, $hd->filename))
||
$self->hook_response($hd)
);
@@ -180,6 +183,8 @@
sub http_response_sent {
my AxKit2::Connection $self = $_[0];
+ return 0 if $self->{sock_closed};
+
# close if we're supposed to
if (
! defined $self->{headers_out} ||
Modified: trunk/lib/AxKit2/HTTPHeaders.pm
===================================================================
--- trunk/lib/AxKit2/HTTPHeaders.pm 2006-08-02 19:02:27 UTC (rev 27)
+++ trunk/lib/AxKit2/HTTPHeaders.pm 2006-08-02 19:24:16 UTC (rev 28)
@@ -6,6 +6,8 @@
use warnings;
no warnings qw(deprecated);
+use AxKit2::Utils qw(uri_decode);
+
use fields (
'headers', # href; lowercase header -> comma-sep list of values
'origcase', # href; lowercase header -> provided case
@@ -88,6 +90,7 @@
if ($self->{uri} =~ m!^http://([^/:]+?)(?::\d+)?(/.*)?$!) {
$absoluteURIHost = lc($1);
$self->{uri} = $2 || "/"; # "http://www.foo.com" yields no path, so default to "/"
+ $self->parse_uri;
}
# default to HTTP/0.9
@@ -165,6 +168,10 @@
return $self;
}
+sub parse_uri {
+ my AxKit2::HTTPHeaders $self = shift;
+}
+
sub http_code_english {
my AxKit2::HTTPHeaders $self = shift;
if (@_) {
Modified: trunk/lib/AxKit2/Processor.pm
===================================================================
--- trunk/lib/AxKit2/Processor.pm 2006-08-02 19:02:27 UTC (rev 27)
+++ trunk/lib/AxKit2/Processor.pm 2006-08-02 19:24:16 UTC (rev 28)
@@ -18,9 +18,10 @@
# ->new($path [, $input]);
sub new {
my $class = shift; $class = ref($class) if ref($class);
+ my $client = shift || die "A processor needs a client";
my $path = shift || die "A processor needs source document path";
- my $self = bless {path => $path}, $class;
+ my $self = bless {client => $client, path => $path}, $class;
@_ and $self->{input} = shift;
@_ and $self->{output} = shift;
@@ -38,6 +39,11 @@
$self->{input};
}
+sub client {
+ my $self = shift;
+ $self->{client};
+}
+
sub dom {
my $self = shift;
@_ and $self->{input} = shift;
@@ -92,10 +98,11 @@
my $pos = 0;
my ($dom, $outfunc);
for my $trans (@transforms) {
+ $trans->client($self->client);
($dom, $outfunc) = $trans->transform($pos, $self);
}
- return $self->new($self->path, $dom, $outfunc);
+ return $self->new($self->client, $self->path, $dom, $outfunc);
}
sub XSP {
Modified: trunk/lib/AxKit2/Transformer/XSP.pm
===================================================================
--- trunk/lib/AxKit2/Transformer/XSP.pm 2006-08-02 19:02:27 UTC (rev 27)
+++ trunk/lib/AxKit2/Transformer/XSP.pm 2006-08-02 19:24:16 UTC (rev 28)
@@ -5,6 +5,8 @@
use base qw(AxKit2::Transformer);
+use AxKit2::Constants;
+
sub new {
my $class = shift;
@@ -17,8 +19,7 @@
my $self = shift;
my ($pos, $processor) = @_;
- # TODO: figure out how to get this...
- my $cgi = undef;
+ $self->log(LOGINFO, "Transformer::XSP running");
# always need this
my $dom = XML::LibXML::Document->createDocument("1.0", "UTF-8");
@@ -26,13 +27,16 @@
my $key = $processor->path . $pos;
my $package = get_package_name($key);
- if ($processor->input || !defined &{"${package}::handler"}) {
+ if ($processor->input || !defined &{"${package}::xml_generator"}) {
# not already compiled or we have "input" so we need to recompile
+ $self->log(LOGDEBUG, "XSP (re)compiling $key");
+ $processor->input ? $self->log(LOGDEBUG, "... because we have input")
+ : $self->log(LOGDEBUG, "... because we can't see the function");
$self->compile($key, $package, $processor);
}
my $cv = $package->can("handler") || die "Unable to get handler method";
- my $rc = eval { $package->$cv($cgi, $dom); };
+ my $rc = eval { $package->$cv($self->client, $dom); };
die $@ if $@;
return $dom;
Modified: trunk/lib/AxKit2/Transformer.pm
===================================================================
--- trunk/lib/AxKit2/Transformer.pm 2006-08-02 19:02:27 UTC (rev 27)
+++ trunk/lib/AxKit2/Transformer.pm 2006-08-02 19:24:16 UTC (rev 28)
@@ -10,4 +10,15 @@
# returns a dom
sub transform {}
+sub client {
+ my $self = shift;
+ @_ and $self->{client} = shift;
+ $self->{client};
+}
+
+sub log {
+ my $self = shift;
+ ($self->client || "AxKit2::Client")->log(@_);
+}
+
1;
\ No newline at end of file
Added: trunk/lib/AxKit2/Utils.pm
===================================================================
--- trunk/lib/AxKit2/Utils.pm 2006-08-02 19:02:27 UTC (rev 27)
+++ trunk/lib/AxKit2/Utils.pm 2006-08-02 19:24:16 UTC (rev 28)
@@ -0,0 +1,18 @@
+package AxKit2::Utils;
+
+use strict;
+use warnings;
+
+use Exporter ();
+
+our @EXPORT_OK = qw(uri_decode);
+
+sub uri_decode {
+ my $uri = shift;
+ return '' unless defined $uri;
+ $uri =~ s/\+/ /g;
+ $uri =~ s/%([A-F0-9][A-F0-9])/pack("C", hex($1))/eig;
+ return $uri;
+}
+
+1;
\ No newline at end of file