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

Reply via email to