matts 2003/01/24 08:08:02
Modified: lib AxKit.pm
Log:
Fixes for axkit:// URI scheme
Revision Changes Path
1.35 +64 -9 xml-axkit/lib/AxKit.pm
Index: AxKit.pm
===================================================================
RCS file: /home/cvs/xml-axkit/lib/AxKit.pm,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -r1.34 -r1.35
--- AxKit.pm 21 Jan 2003 16:11:57 -0000 1.34
+++ AxKit.pm 24 Jan 2003 16:08:02 -0000 1.35
@@ -478,12 +478,31 @@
my $apache = AxKit::Apache->request;
my $r;
- if ($uri =~ /^axkit:\/(\/.*)$/) {
- my $abs_uri = $1;
- $r = $apache->lookup_uri(AxKit::FromUTF8($abs_uri));
+ if ($uri =~ m|^axkit:(/.*)$|) {
+ my $blurb = $1;
+ # got "axkit:/..."
+ # first check if it's actually "axkit://host[:port]/..."
+ if ($blurb =~ m|^//(?:([\w\.-]+)(:\d+)?)?(/.*)$|) {
+ my $host = $1;
+ my $port = $2;
+ my $abs_uri = $3;
+ if ($host) {
+ throw Apache::AxKit::Exception (
+ -text => "axkit://host[:port]/ requests not supported
($uri)"
+ );
+ }
+ AxKit::Debug(4, "get_axkit_uri looking up abs (host):
'$abs_uri'");
+ $r = $apache->lookup_uri(AxKit::FromUTF8($abs_uri));
+ }
+ else {
+ my $abs_uri = $blurb;
+ AxKit::Debug(4, "get_axkit_uri looking up abs: '$abs_uri'");
+ $r = $apache->lookup_uri(AxKit::FromUTF8($abs_uri));
+ }
}
elsif ($uri =~ /^axkit:(.*)$/) {
my $rel_uri = $1;
+ AxKit::Debug(4, "get_axkit_uri looking up '$rel_uri'");
$r = $apache->lookup_uri(AxKit::FromUTF8($rel_uri));
}
else {
@@ -495,11 +514,47 @@
my $provider = Apache::AxKit::Provider->new_content_provider($r);
- my $result_code = run_axkit_engine(
- $r,
- $provider,
- 1, # no output
- );
+ my $result_code = eval {
+ run_axkit_engine(
+ $r,
+ $provider,
+ 1, # no output
+ );
+ };
+ if ($@) {
+ my $E = $@;
+ if ($E->isa('Apache::AxKit::Exception::Declined')) {
+ if ($AxKit::Cfg && $AxKit::Cfg->LogDeclines()) {
+ $r->log->warn("[AxKit] [DECLINED] $E->{reason}")
+ if $E->{reason};
+ }
+ AxKit::Debug(4, "[DECLINED] From: $E->{-file} : $E->{-line}");
+
+ my $str = '';
+ eval {
+ my $fh = $provider->get_fh;
+ local $/;
+ $str = <$fh>;
+ $r->pnotes('xml_string', $str);
+ $result_code = OK;
+ };
+ if ($@) {
+ eval {
+ my $pstr = $provider->get_strref;
+ $str = $$pstr;
+ $r->pnotes('xml_string', $str);
+ $result_code = OK;
+ };
+ if ($@) {
+ $result_code = 'provider_declined';
+ }
+ }
+ }
+ else {
+ # Some other type of exception
+ $E->throw;
+ }
+ }
if ($result_code == OK) {
# results now in $r->pnotes('xml_string') - probably...