stas        2004/08/13 22:10:32

  Modified:    src/docs/2.0/api/Apache SubRequest.pod
  Log:
  finish the manpage
  
  Revision  Changes    Path
  1.5       +255 -91   modperl-docs/src/docs/2.0/api/Apache/SubRequest.pod
  
  Index: SubRequest.pod
  ===================================================================
  RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/Apache/SubRequest.pod,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -u -r1.4 -r1.5
  --- SubRequest.pod    22 May 2004 02:03:27 -0000      1.4
  +++ SubRequest.pod    14 Aug 2004 05:10:31 -0000      1.5
  @@ -8,15 +8,35 @@
   =head1 Synopsis
   
     use Apache::SubRequest ();
  -
  -META: to be completed
  +  
  +  # run internal redirects at once
  +  $r->internal_redirect($new_uri);
  +  $r->internal_redirect_handler($new_uri);
  +  
  +  # create internal redirect objects
  +  $subr = $r->lookup_uri("/foo");
  +  $subr = $r->lookup_method_uri("GET", "/tmp/bar")
  +  $subr = $r->lookup_file("/tmp/bar");
  +  # optionally manipulate the output through main request filters
  +  $subr = $r->lookup_uri("/foo", $r->output_filters);
  +  # now run them
  +  my $rc = $subr->run;
  +  # optional
  +  $subr->DESTROY;
   
   
   
   
   =head1 Description
   
  -META: to be completed
  +C<Apache::SubRequest> contains API for creating and running of Apache
  +sub-requests.
  +
  +C<Apache::SubRequest> is a sub-class of C<L<Apache::RequestRec
  +object|docs::2.0::api::Apache::RequestRec>>.
  +
  +
  +
   
   
   
  @@ -28,255 +48,399 @@
   
   
   
  -=head2 C<DESTROY>
   
  -META: Autogenerated - needs to be reviewed/completed
  +=head2 C<DESTROY>
   
   Free the memory associated with a sub request
   
  -  $r->DESTROY();
  +  $subr->DESTROY();
   
   =over 4
   
  -=item obj: C<$r> 
(C<L<Apache::RequestRec|docs::2.0::api::Apache::RequestRec>>)
  +=item obj: C<$subr> ( C<L<Apache::SubRequest
  +object|docs::2.0::api::Apache::SubRequest/Description>> )
   
   The sub request to finish
   
   =item ret: no return value
   
  +=item since: 1.99_12
  +
   =back
   
  +This method will be called automatically when C<$subr> goes out of
  +scope, so there is no need to call it explicitly, unless you want to
  +free the memory earlier than that (for example if you run several
  +subrequests).
  +
  +
  +
  +
   
   
   
   
  -=head2 C<internal_fast_redirect>
   
  -META: Autogenerated - needs to be reviewed/completed
   
  -Redirect the current request to a sub_req, merging the pools
   
  -  $r->internal_fast_redirect($sub_req);
  +
  +=head2 C<internal_redirect>
  +
  +Redirect the current request to some other uri internally
  +
  +  $r->internal_redirect($new_uri);
   
   =over 4
   
  -=item obj: C<$r> 
(C<L<Apache::RequestRec|docs::2.0::api::Apache::RequestRec>>)
  +=item obj: C<$r>
  +( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
   The current request
   
  -=item arg1: C<$sub_req> (string)
  +=item arg1: C<$new_uri> ( string )
   
  -A subrequest created from this request
  +The URI to replace the current request with
   
   =item ret: no return value
   
  +=item since: 1.99_12
  +
   =back
   
  +In case that you want some other request to be served as the top-level
  +request instead of what the client requested directly, call this
  +method from a handler, and then immediately return C<Apache::OK>. The
  +client will be unaware the a different request was served to her
  +behind the scenes.
   
   
   
   
  -=head2 C<internal_redirect>
   
  -META: Autogenerated - needs to be reviewed/completed
   
  -Then there's the case that you want some other request to be served as
  -the top-level request INSTEAD of what the client requested directly.
  -If so, call this from a handler, and then immediately return OK.
   
  -Redirect the current request to some other uri
   
  -  $r->internal_redirect($new_uri);
  +=head2 C<internal_redirect_handler>
  +
  +Identical to C<internal_redirect|/C_internal_redirect_>, plus
  +automatically sets
  +C<L<$r-E<gt>content_type|docs::2.0::api::Apache::RequestRec/C_content_type_>>
  +is of the sub-request to be the same as of the main request, if
  +C<L<$r-E<gt>handler|docs::2.0::api::Apache::RequestRec/C_handler_>> is
  +true.
  +
  +  $r->internal_redirect_handler($new_uri);
   
   =over 4
   
  -=item obj: C<$r> 
(C<L<Apache::RequestRec|docs::2.0::api::Apache::RequestRec>>)
  +=item obj: C<$r>
  +( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
   The current request
   
  -=item arg1: C<$new_uri> (string)
  +=item arg1: C<$new_uri> ( string )
   
  -The URI to replace the current request with
  +The URI to replace the current request with.
   
   =item ret: no return value
   
  +=item since: 1.99_12
  +
   =back
   
  +This function is designed for things like actions or CGI scripts, when
  +using C<AddHandler>, and you want to preserve the content type across
  +an internal redirect.
   
   
   
   
  -=head2 C<internal_redirect_handler>
   
  -META: Autogenerated - needs to be reviewed/completed
   
  -This function is designed for things like actions or CGI scripts, when
  -using AddHandler, and you want to preserve the content type across an
  -internal redirect.
   
  -  $r->internal_redirect_handler($new_uri);
  +
  +
  +
  +=head2 C<lookup_file>
  +
  +Create a subrequest for the given file.  This sub request can be
  +inspected to find information about the requested file
  +
  +  $ret = $r->lookup_file($new_file);
  +  $ret = $r->lookup_file($new_file, $next_filter);
   
   =over 4
   
  -=item obj: C<$r> 
(C<L<Apache::RequestRec|docs::2.0::api::Apache::RequestRec>>)
  +=item obj: C<$r>
  +( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
   The current request
   
  -=item arg1: C<$new_uri> (string)
  +=item arg1: C<$new_file> ( string )
   
  -The URI to replace the current request with.
  +The file to lookup
   
  -=item ret: no return value
  +=item opt arg2: C<$next_filter>
  +( C<L<Apache::Filter|docs::2.0::api::Apache::Filter>> )
   
  -=back
  +See C<L<$r-E<gt>lookup_uri|/C_lookup_uri_>> for details.
   
  +=item ret: C<$ret> ( C<L<Apache::SubRequest
  +object|docs::2.0::api::Apache::SubRequest/Description>> )
   
  +The sub request record.
   
  +=item since: 1.99_15
   
  +=back
   
  -=head2 C<lookup_dirent>
  +See C<L<$r-E<gt>lookup_uri|/C_lookup_uri_>> for further discussion.
   
  -META: Autogenerated - needs to be reviewed/completed
   
  -Create a sub request for the given apr_dir_read result.  This sub request
  -can be inspected to find information about the requested file
   
  -  $lr = $r->lookup_dirent($finfo, $subtype, $next_filter);
  +
  +=head2 C<lookup_method_uri>
  +
  +Create a sub request for the given URI using a specific method.  This
  +sub request can be inspected to find information about the requested
  +URI
  +
  +  $ret = $r->lookup_method_uri($method, $new_uri);
  +  $ret = $r->lookup_method_uri($method, $new_uri, $next_filter);
   
   =over 4
   
  -=item obj: C<$r> 
(C<L<Apache::RequestRec|docs::2.0::api::Apache::RequestRec>>)
  +=item obj: C<$r>
  +( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
   The current request
   
  -=item arg1: C<$finfo> (C<L<APR::Finfo|docs::2.0::api::APR::Finfo>>)
  +=item arg1: C<$method> ( string )
   
  -The apr_dir_read result to lookup
  +The method to use in the new sub request (e.g. C<"GET">)
   
  -=item arg2: C<$subtype> (integer)
  +=item arg2: C<$new_uri> ( string )
   
  -What type of subrequest to perform, one of;
  +The URI to lookup
   
  -  Apache::SUBREQ_NO_ARGS     ignore r->args and r->path_info
  -  Apache::SUBREQ_MERGE_ARGS  merge  r->args and r->path_info
  +=item opt arg3: C<$next_filter>
  +( C<L<Apache::Filter object|docs::2.0::api::Apache::Filter>> )
   
  -=item arg3: C<$next_filter> (integer)
  +See C<L<$r-E<gt>lookup_uri|/C_lookup_uri_>> for details.
   
  -The first filter the sub_request should use.  If this is
  -NULL, it defaults to the first filter for the main request
  +=item ret: C<$ret> ( C<L<Apache::SubRequest
  +object|docs::2.0::api::Apache::SubRequest/Description>> )
   
  -=item ret: C<$lr> 
(C<L<Apache::RequestRec|docs::2.0::api::Apache::RequestRec>>)
  +The sub request record.
   
  -The new request record
  +=item since: 1.99_15
   
   =back
   
  +See C<L<$r-E<gt>lookup_uri|/C_lookup_uri_>> for further discussion.
   
   
   
   
  -=head2 C<lookup_file>
   
  -META: Autogenerated - needs to be reviewed/completed
  +=head2 C<lookup_uri>
   
  -Create a sub request for the given file.  This sub request can be
  -inspected to find information about the requested file
  +Create a sub request from the given URI.  This sub request can be
  +inspected to find information about the requested URI.
   
  -  $ret = $r->lookup_file($new_file, $next_filter);
  +  $ret = $r->lookup_uri($new_uri);
  +  $ret = $r->lookup_uri($new_uri, $next_filter);
   
   =over 4
   
  -=item obj: C<$r> 
(C<L<Apache::RequestRec|docs::2.0::api::Apache::RequestRec>>)
  +=item obj: C<$r>
  +( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
   The current request
   
  -=item arg1: C<$new_file> (string)
  +=item arg1: C<$new_uri> ( string )
   
   The URI to lookup
   
  -=item arg2: C<$next_filter> 
(C<L<Apache::Filter|docs::2.0::api::Apache::Filter>>)
  +=item opt arg2: C<$next_filter>
  +( C<L<Apache::Filter object|docs::2.0::api::Apache::Filter>> )
   
  -The first filter the sub_request should use.  If this is NULL, it
  -defaults to the first filter for the main request
  +The first filter the subrequest should pass the data through.  If not
  +specified it defaults to the first connection output filter for the
  +main request
  
+C<L<$r-E<gt>proto_output_filters|docs::2.0::api::Apache::RequestRec/C_proto_output_filters_>>.
 So
  +if the subrequest sends any output it will be filtered only once. If
  +for example you desire to apply the main request's output filters to
  +the sub-request output as well pass
  
+C<L<$r-E<gt>output_filters|docs::2.0::api::Apache::RequestRec/C_output_filters_>>
  +as an argument.
   
  -=item ret: C<$ret> 
(C<L<Apache::SubRequest|docs::2.0::api::Apache::SubRequest>>)
  +=item ret: C<$ret> ( C<L<Apache::SubRequest
  +object|docs::2.0::api::Apache::SubRequest/Description>> )
   
  -The new request record
  +The sub request record
  +
  +=item since: 1.99_15
   
   =back
   
  +Here is an example of a simple subrequest which serves uri
  +I</new_uri>:
   
  +  sub handler {
  +      my $r = shift;
  +  
  +      my $subr = $r->lookup_uri("/new_uri");
  +      $sub->run;
  +  
  +      return Apache::OK;
  +  }
   
  +If let's say you have three request output filters registered to run
  +for the main request:
  +
  +  PerlOutputFilterHandler MyApache::SubReqExample::filterA
  +  PerlOutputFilterHandler MyApache::SubReqExample::filterB
  +  PerlOutputFilterHandler MyApache::SubReqExample::filterC
  +
  +and you wish to run them all, the code needs to become:
  +
  +      my $subr = $r->lookup_uri("/new_uri", $r->output_filters);
  +
  +and if you wish to run them all, but the first one (C<filterA>), the
  +code needs to be adjusted to be:
  +
  +      my $subr = $r->lookup_uri("/new_uri", $r->output_filters->next);
  +
  +
  +
  +
  +
  +=head2 C<run>
  +
  +Run a sub-request
  +
  +  $rc = $subr->run();
  +
  +=over 4
  +
  +=item obj: C<$subr>
  +( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
  +
  +The sub-request (e.g. returned by C<L<lookup_uri|/C_lookup_uri_>>)
  +
  +=item ret: C<$rc> ( integer )
  +
  +The return code of the handler (C<Apache::OK>, C<Apache::DECLINED>,
  +etc.)
  +
  +=item since: 1.99_12
  +
  +=back
  +
  +
  +
  +
  +
  +
  +=head1 Unsupported API
  +
  +C<Apache::SubRequest> also provides auto-generated Perl interface for
  +a few other methods which aren't tested at the moment and therefore
  +their API is a subject to change. These methods will be finalized
  +later as a need arises. If you want to rely on any of the following
  +methods please contact the L<the mod_perl development mailing
  +list|maillist::dev> so we can help each other take the steps necessary
  +to shift the method to an officially supported API.
   
   
  -=head2 C<lookup_uri>
  +
  +
  +
  +
  +=head2 C<internal_fast_redirect>
   
   META: Autogenerated - needs to be reviewed/completed
   
  -Create a sub request from the given URI.  This sub request can be
  -inspected to find information about the requested URI.
  +Redirect the current request to a sub_req, merging the pools
   
  -  $ret = $r->lookup_uri($new_file, $next_filter);
  +  $r->internal_fast_redirect($sub_req);
   
   =over 4
   
  -=item obj: C<$r> 
(C<L<Apache::RequestRec|docs::2.0::api::Apache::RequestRec>>)
  +=item obj: C<$r>
  +( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
   The current request
   
  -=item arg1: C<$new_file> (string)
  +=item arg1: C<$sub_req> ( string )
   
  -The URI to lookup
  +A subrequest created from this request
   
  -=item arg2: C<$next_filter> 
(C<L<Apache::Filter|docs::2.0::api::Apache::Filter>>)
  +=item ret: no return value
   
  -The first filter the sub_request should use.  If this is NULL, it
  -defaults to the first filter for the main request
  +=item since: 1.99_12
   
  -=item ret: C<$ret> 
(C<L<Apache::SubRequest|docs::2.0::api::Apache::SubRequest>>)
  +=back
   
  -The new request record
   
  -=back
  +META: httpd-2.0/modules/http/http_request.c declares this function as:
   
  +  /* XXX: Is this function is so bogus and fragile that we deep-6 it? */
  +
  +do we really want to expose it to mod_perl users?
   
   
   
   
  -=head2 C<lookup_method_uri>
  +
  +
  +=head2 C<lookup_dirent>
   
   META: Autogenerated - needs to be reviewed/completed
   
  -Create a sub request for the given URI using a specific method.  This
  -sub request can be inspected to find information about the requested
  -URI
  +Create a sub request for the given apr_dir_read result.  This sub request
  +can be inspected to find information about the requested file
   
  -  $ret = $r->lookup_method_uri($method, $new_file, $next_filter);
  +  $lr = $r->lookup_dirent($finfo);
  +  $lr = $r->lookup_dirent($finfo, $subtype);
  +  $lr = $r->lookup_dirent($finfo, $subtype, $next_filter);
   
   =over 4
   
  -=item obj: C<$r> 
(C<L<Apache::RequestRec|docs::2.0::api::Apache::RequestRec>>)
  +=item obj: C<$r>
  +( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
   The current request
   
  -=item arg1: C<$method> (string)
  +=item arg1: C<$finfo>
  +( C<L<APR::Finfo object|docs::2.0::api::APR::Finfo>> )
   
  -The method to use in the new sub request
  +The apr_dir_read result to lookup
   
  -=item arg2: C<$new_file> (string)
  +=item arg2: C<$subtype> ( integer )
   
  -The URI to lookup
  +What type of subrequest to perform, one of;
   
  -=item arg3: C<$next_filter> 
(C<L<Apache::Filter|docs::2.0::api::Apache::Filter>>)
  +  Apache::SUBREQ_NO_ARGS     ignore r->args and r->path_info
  +  Apache::SUBREQ_MERGE_ARGS  merge  r->args and r->path_info
   
  -The first filter the sub_request should use.  If this is NULL, it
  -defaults to the first filter for the main request
  +=item arg3: C<$next_filter> ( integer )
   
  -=item ret: C<$ret> 
(C<L<Apache::SubRequest|docs::2.0::api::Apache::SubRequest>>)
  +The first filter the sub_request should use.  If this is
  +NULL, it defaults to the first filter for the main request
  +
  +=item ret: C<$lr>
  +( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
   The new request record
   
  +=item since: 1.99_12
  +
   =back
  +
  +META: where do we take the apr_dir_read result from?
  +
   
   
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to