stas        2004/07/24 00:07:07

  Modified:    src/docs/2.0/api/Apache RequestRec.pod
  Log:
  working on the never ending Apache::RequestRec
  
  Revision  Changes    Path
  1.23      +120 -32   modperl-docs/src/docs/2.0/api/Apache/RequestRec.pod
  
  Index: RequestRec.pod
  ===================================================================
  RCS file: /home/cvs/modperl-docs/src/docs/2.0/api/Apache/RequestRec.pod,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -u -r1.22 -r1.23
  --- RequestRec.pod    24 Jul 2004 01:22:51 -0000      1.22
  +++ RequestRec.pod    24 Jul 2004 07:07:07 -0000      1.23
  @@ -125,7 +125,7 @@
   =item obj: C<$r>
   ( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
  -=item opt arg2: C<$newval> (string)
  +=item opt arg1: C<$newval> (string)
   
   If this argument is passed then a new auth type is assigned. For example:
   
  @@ -443,22 +443,26 @@
   
   =head2 C<filename>
   
  -META: Autogenerated - needs to be reviewed/completed
  -
  -The filename on disk corresponding to this response
  +Get/set the filename on disk corresponding to this response (the
  +result of the I<URI --E<gt> filename> translation).
   
  -  $filename = $r->filename();
  -  $r->filename($filename);
  +  $filename      = $r->filename();
  +  $prev_filename = $r->filename($new_filename);
   
   =over 4
   
   =item obj: C<$r>
   ( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
  -=item opt arg2: C<$filename> ( string )
  +=item opt arg1: C<$new_filename> ( string )
  +
  +new value
   
   =item ret: C<$filename> ( string )
   
  +the current filename, or the previous value if the optional
  +C<$new_filename> argument was passed
  +
   =item since: 1.99_12
   
   =back
  @@ -473,7 +477,7 @@
   Get and set the I<finfo> request record member:
   
     $finfo = $r->finfo();
  -  $finfo = $r->finfo($finfo);
  +  $r->finfo($finfo);
   
   =over 4
   
  @@ -532,22 +536,30 @@
   
   
   
  +
  +
   =head2 C<handler>
   
  -META: Autogenerated - needs to be reviewed/completed
  +Get/set the equivalent of the C<SetHandler> directive.
   
  -  $handler = $r->handler();
  -  $handler = $r->handler($new_handler);
  +  $handler      = $r->handler();
  +  $prev_handler = $r->handler($new_handler);
   
   =over 4
   
   =item obj: C<$r>
   ( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
  -=item opt arg2: C<$new_handler> ( string )
  +=item opt arg1: C<$new_handler> ( string )
  +
  +the new handler.
   
   =item ret: C<$handler> ( string )
   
  +the current handler.
  +
  +If C<$new_handler> is passed, the previous value is returned.
  +
   =item since: 1.99_12
   
   =back
  @@ -560,9 +572,8 @@
   
   =head2 C<header_only>
   
  -META: Autogenerated - needs to be reviewed/completed
  -
  -HEAD request, as opposed to GET
  +Did the client has asked for headers only? e.g. if the request method
  +was B<HEAD>.
   
     $status = $r->header_only();
   
  @@ -571,7 +582,9 @@
   =item obj: C<$r>
   ( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
  -=item ret: C<$status> (integer)
  +=item ret: C<$status> ( boolean )
  +
  +Returns true if the client is asking for headers only, false otherwise
   
   =item since: 1.99_12
   
  @@ -580,6 +593,8 @@
   
   
   
  +
  +
   =head2 C<headers_in>
   
   Get/set the request MIME headers:
  @@ -612,6 +627,7 @@
   
   
   
  +
   =head2 C<headers_out>
   
   Get/set MIME response headers, printed only on 2xx responses.
  @@ -640,9 +656,8 @@
   
   
   
  -=head2 C<hostname>
   
  -META: Autogenerated - needs to be reviewed/completed
  +=head2 C<hostname>
   
   Host, as set by full URI or Host:
   
  @@ -667,8 +682,6 @@
   
   =head2 C<input_filters>
   
  -META: Autogenerated - needs to be reviewed/completed
  -
   A list of input filters to be used for this request
   
     $input_filters = $r->input_filters();
  @@ -684,8 +697,57 @@
   
   =back
   
  +For example instead of using
  +C<L<$r-E<gt>read()|docs::2.0::api::Apache::RequestIO/C_read_>> to read
  +the POST data, one could use an explicit walk through incoming bucket
  +brigades to get that data. The following function C<read_post()> does
  +just that (in fact that's what
  +C<L<$r-E<gt>read()|docs::2.0::api::Apache::RequestIO/C_read_>> does
  +behind the scenes):
  +
  +  use APR::Brigade ();
  +  use APR::Bucket ();
  +  use Apache::Filter ();
  +  
  +  use Apache::Const -compile => qw(MODE_READBYTES);
  +  use APR::Const    -compile => qw(SUCCESS BLOCK_READ);
  +  
  +  use constant IOBUFSIZE => 8192;
  +  
  +  sub read_post {
  +      my $r = shift;
  +  
  +      my $bb = APR::Brigade->new($r->pool,
  +                                 $r->connection->bucket_alloc);
  +  
  +      my $data = '';
  +      my $seen_eos = 0;
  +      do {
  +          $r->input_filters->get_brigade($bb, Apache::MODE_READBYTES,
  +                                         APR::BLOCK_READ, IOBUFSIZE);
  +  
  +          for (my $b = $bb->first; $b; $b = $bb->next($b)) {
  +              if ($b->is_eos) {
  +                  $seen_eos++;
  +                  last;
  +              }
  +  
  +              if ($b->read(my $buf)) {
  +                  $data .= $buf;
  +              }
  +  
  +              $b->remove; # optimization to reuse memory
  +          }
  +  
  +      } while (!$seen_eos);
  +  
  +      $bb->destroy;
  +  
  +      return $data;
  +  }
   
  -
  +As you can see C<$r-E<gt>input_filters> gives us a pointer to the last
  +of the top of the incoming filters stack.
   
   
   
  @@ -781,7 +843,7 @@
   =item obj: C<$r>
   ( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
  -=item opt arg2: C<$new_mtime> (number)
  +=item opt arg1: C<$new_mtime> (number)
   
   =item ret: C<$mtime> (number)
   
  @@ -856,7 +918,7 @@
   =item obj: C<$r>
   ( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
  -=item opt arg2: C<$new_notes> ( C<L<APR::Table 
object|docs::2.0::api::APR::Table>> )
  +=item opt arg1: C<$new_notes> ( C<L<APR::Table 
object|docs::2.0::api::APR::Table>> )
   
   =item ret: C<$notes> ( C<L<APR::Table object|docs::2.0::api::APR::Table>> )
   
  @@ -874,9 +936,8 @@
   
   =head2 C<output_filters>
   
  -META: Autogenerated - needs to be reviewed/completed
  -
  -A list of output filters to be used for this request
  +A pointer to the first filter in the output filter stack for this
  +request:
   
     $output_filters = $r->output_filters();
   
  @@ -885,13 +946,40 @@
   =item obj: C<$r>
   ( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
  -=item ret: C<$output_filters> ( C<L<Apache::Filter 
object|docs::2.0::api::Apache::Filter>> )
  +=item ret: C<$output_filters>
  +( C<L<Apache::Filter object|docs::2.0::api::Apache::Filter>> )
   
   =item since: 1.99_12
   
   =back
   
  -
  +For example instead of using
  +C<L<$r-E<gt>print()|docs::2.0::api::Apache::RequestIO/C_print_>> to
  +send the response body, one could send the data directly to the first
  +output filter. The following function C<send_response_body()> does
  +just that:
  +
  +  use APR::Brigade ();
  +  use APR::Bucket ();
  +  use Apache::Filter ();
  +  
  +  sub send_response_body {
  +      my($r, $data) = @_;
  +  
  +      my $bb = APR::Brigade->new($r->pool,
  +                                 $r->connection->bucket_alloc);
  +  
  +      my $b = APR::Bucket->new($data);
  +      $bb->insert_tail($b);
  +      $r->output_filters->fflush($bb);
  +      $bb->destroy;
  +  }
  +
  +In fact that's what
  +C<L<$r-E<gt>read()|docs::2.0::api::Apache::RequestIO/C_read_>> does
  +behind the scenes. But it also knows to parse HTTP headers passed
  +together with the data and it also implements buffering, which the
  +above function does not.
   
   
   
  @@ -915,7 +1003,7 @@
   =item obj: C<$r>
   ( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
  -=item opt arg2: C<$path_info> ( string )
  +=item opt arg1: C<$path_info> ( string )
   
   =item ret: C<$path_info> ( string )
   
  @@ -1264,7 +1352,7 @@
   =item obj: C<$r>
   ( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
  -=item opt arg2: C<$new_status> (integer)
  +=item opt arg1: C<$new_status> (integer)
   
   If C<$new_status> is passed the new status is assigned.
   
  @@ -1379,7 +1467,7 @@
   =item obj: C<$r>
   ( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
  -=item opt arg2: C<$uri> ( string )
  +=item opt arg1: C<$uri> ( string )
   
   =item ret: C<$uri> ( string )
   
  @@ -1436,7 +1524,7 @@
   =item obj: C<$r>
   ( C<L<Apache::RequestRec object|docs::2.0::api::Apache::RequestRec>> )
   
  -=item opt arg2: C<$user> ( string )
  +=item opt arg1: C<$user> ( string )
   
   =item ret: C<$user> ( string )
   
  
  
  

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

Reply via email to