| =head1 NAME |
| |
| APR::Request::Param - wrapper for libapreq2's param API. |
| |
| |
| =begin testing |
| use APR::Pool; |
| use APR::Brigade; |
| use APR::Bucket; |
| use APR::BucketAlloc; |
| use APR::Request; |
| use APR::Request::Parser; |
| $pool = APR::Pool->new; |
| $ba = APR::BucketAlloc->new($pool); |
| $bb = APR::Brigade->new($pool, $ba); |
| $content = <<EOT; |
| ---XYZ- |
| Content-Disposition: form-data; name="alpha" |
| Content-Type: text/plain; charset=us-ascii |
| |
| first |
| ---XYZ- |
| Content-Disposition: form-data; name="beta" filename="foo.txt" |
| Content-Type: text/plain; charset=us-ascii |
| |
| second |
| ---XYZ- |
| Content-Disposition: form-data; name="gamma" |
| Content-Type: text/plain; charset=us-ascii |
| |
| third |
| ---XYZ--- |
| EOT |
| s/(?<!\015)\012/\015\012/g for $content; |
| $bb->insert_tail(APR::Bucket->new($ba, $content)); |
| $parser = APR::Request::Parser->multipart($pool, $ba, |
| "multipart/form-data; boundary=-XYZ-"); |
| $req = APR::Request::Custom->handle($pool, "alpha=arg1&beta=arg2", |
| "foo=bar", |
| $parser, 1e6, $bb); |
| |
| =end testing |
| |
| |
| |
| |
| =head1 SYNOPSIS |
| |
| |
| =for example begin |
| |
| use APR::Request::Param; |
| |
| $arg1 = $req->args('alpha'); |
| $body = $req->body; |
| $body->param_class("APR::Request::Param"); |
| ok $_->isa("APR::Request::Param") for values %$body; |
| |
| @uploads = grep {$_->upload} values %$body; |
| $param = $body->get('beta'); |
| $param->upload_slurp(my $content); |
| |
| |
| =for example end |
| |
| =for example_testing |
| is $arg1, "arg1", 'alpha arg is "arg1"'; |
| ok @uploads == 1; |
| is $content, "second", 'contents of upload_slurp'; |
| |
| |
| |
| =head1 DESCRIPTION |
| |
| The C<< APR::Request::Param >> module provides base methods |
| for interfacing with libapreq2's param API. It also provides |
| a few utility functions and constants. |
| |
| This manpage documents version 2.10 |
| of the APR::Request::Param, APR::Request::Brigade, |
| and APR::Request::Brigade::IO packages. |
| |
| |
| =head1 OVERLOADS |
| |
| APR::Request::Param |
| |
| |
| |
| |
| =head2 "" |
| |
| "$param" |
| |
| The double-quote interpolation operator maps to |
| C<< APR::Request::Param::value() >>. |
| |
| =for example begin |
| |
| =for example end |
| |
| =for example_testing |
| is "$param", $param->value, "quotes"; |
| |
| |
| |
| |
| =head1 METHODS |
| |
| APR::Request::Param |
| |
| |
| |
| |
| =head2 name |
| |
| $param->name() |
| |
| Returns the param's name. |
| This attribute cannot be modified. |
| |
| =for example begin |
| |
| =for example end |
| |
| =for example_testing |
| is $param->name, "beta", "name"; |
| |
| |
| |
| |
| =head2 value |
| |
| $param->value() |
| |
| Returns the param's value. |
| This attribute cannot be modified. |
| |
| =for example begin |
| |
| =for example end |
| |
| =for example_testing |
| is $param->value, "foo.txt", "value"; |
| |
| |
| |
| |
| =head2 is_tainted |
| |
| $param->is_tainted() |
| $param->is_tainted($set) |
| |
| |
| Get/set the param's internal tainted flag. |
| Note: if the param's charset is APREQ_CHARSET_UTF8 (8), |
| this also activates the SvUTF8_on flag during calls |
| to name() and/or value(). |
| |
| =for example begin |
| |
| $tainted = $param->is_tainted; |
| $param->is_tainted(0); |
| ok $param->is_tainted == 0; |
| |
| =for example end |
| |
| =for example_testing |
| $param->is_tainted($tainted); |
| is $param->is_tainted, $tainted, "tainted"; |
| |
| |
| |
| |
| =head2 charset |
| |
| $param->charset() |
| $param->charset($set) |
| |
| Get/set the param's internal charset. The charset |
| is a number between 0 and 255; the current recognized |
| values are |
| |
| =over 4 |
| |
| =item 0 APREQ_CHARSET_ASCII (7-bit us-ascii) |
| |
| =item 1 APREQ_CHARSET_LATIN1 (8-bit iso-8859-1) |
| |
| =item 2 APREQ_CHARSET_CP1252 (8-bit Windows-1252) |
| |
| =item 8 APREQ_CHARSET_UTF8 (utf8 encoded Unicode) |
| |
| =back |
| |
| See L<is_tainted> above for info about how APREQ_CHARSET_UTF8 |
| relates to perl's UTF-8 flag. |
| |
| =for example begin |
| |
| $charset = $param->charset; |
| $param->charset(2); |
| ok $param->charset == 2; |
| |
| =for example end |
| |
| =for example_testing |
| $param->charset($charset); |
| is $param->charset, $charset, "charset"; |
| |
| |
| |
| |
| =head2 make |
| |
| APR::Request::Param->make($pool, $name, $value) |
| |
| Fast XS param constructor. |
| |
| |
| |
| |
| =head2 info |
| |
| $param->info() |
| $param->info($set) |
| |
| Get/set the APR::Table headers for this param. |
| |
| |
| |
| |
| =head2 upload |
| |
| $param->upload() |
| $param->upload($set) |
| |
| Get/set the APR::Brigade file-upload content for this param. |
| |
| |
| |
| |
| =head2 upload_filename |
| |
| $param->upload_filename() |
| |
| Returns the client-side filename associated with this param. |
| |
| |
| |
| |
| =head2 upload_link |
| |
| $param->upload_link($path) |
| |
| Links the file-upload content with the local file named C<< $path >>. |
| Creates a hard-link if the spoolfile's (see L<upload_tempname>) |
| temporary directory is on the same device as C<< $path >>; |
| otherwise this writes a copy. |
| |
| |
| |
| |
| =head2 upload_slurp |
| |
| $param->upload_slurp($data) |
| |
| Reads the entire file-upload content into C<< $data >>. |
| |
| |
| |
| |
| =head2 upload_size |
| |
| $param->upload_size() |
| |
| Returns the size of the param's file-upload content. |
| |
| |
| |
| |
| =head2 upload_type |
| |
| $param->upload_type() |
| |
| Returns the MIME-type of the param's file-upload content. |
| |
| |
| |
| |
| =head2 upload_tempname |
| |
| $param->upload_tempname() |
| |
| Returns the name of the local spoolfile for this param. |
| |
| |
| |
| |
| =head2 upload_io |
| |
| $param->upload_io() |
| |
| Returns an L<APR::Request::Brigade::IO> object, which can |
| be treated as a non-seekable IO stream. |
| |
| |
| |
| |
| =head2 upload_fh |
| |
| |
| $param->upload_fh() |
| |
| Returns a seekable filehandle representing the file-upload content. |
| |
| |
| |
| |
| =head1 METHODS |
| |
| APR::Request::Brigade |
| |
| This class is derived from APR::Brigade, providing additional |
| methods for TIEHANDLE, READ and READLINE. To be memory efficient, |
| these methods delete buckets from the brigade as soon as their |
| data is actually read, so you cannot C<seek> on handles tied to |
| this class. Such handles have semantics similar to that of a |
| read-only socket. |
| |
| |
| |
| |
| =head2 new, TIEHANDLE |
| |
| APR::Request::Brigade->TIEHANDLE($bb) |
| |
| Creates a copy of the bucket brigade represented by $bb, and |
| blesses that copy into the APR::Request::Brigade class. This |
| provides syntactic sugar for using perl's builtin C<read>, C<readline>, |
| and C<< <> >> operations on handles tied to this package: |
| |
| =for example begin |
| |
| use Symbol; |
| $fh = gensym; |
| tie *$fh, "APR::Request::Brigade", $bb; |
| print while <$fh>; |
| |
| =for example end |
| |
| |
| |
| =head2 READ |
| |
| $bb->READ($contents) |
| $bb->READ($contents, $length) |
| $bb->READ($contents, $length, $offset) |
| |
| Reads data from the brigade $bb into $contents. When omitted |
| $length defaults to C<-1>, which reads the first bucket into $contents. |
| A positive $length will read in $length bytes, or the remainder of the |
| brigade, whichever is greater. $offset represents the index in $context |
| to read the new data. |
| |
| |
| |
| |
| =head2 READLINE |
| |
| $bb->READLINE() |
| |
| Returns the first line of data from the bride. Lines are terminated by |
| linefeeds (the '\012' character), but we may eventually use C<$/> instead. |
| |
| |
| |
| =head1 METHODS |
| |
| APR::Request::Brigade::IO |
| |
| |
| |
| |
| =head2 read |
| |
| OO interface to APR::Request::Brigade::READ. |
| |
| |
| |
| |
| =head2 readline |
| |
| |
| OO interface to APR::Request::Brigade::READLINE. |
| |
| |
| |
| |
| =head1 SEE ALSO |
| |
| L<APR::Request>, L<APR::Table>, L<APR::Brigade>. |
| |
| |
| |
| |
| =head1 COPYRIGHT |
| |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |