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...