Apache-ASP
view release on metacpan or search on metacpan
lib/Apache/ASP/Request.pm view on Meta::CPAN
sub BinaryRead {
my($self, $length) = @_;
my $data;
return undef unless $self->{TotalBytes};
if(ref(tied(*STDIN)) && tied(*STDIN)->isa('Apache::ASP::Request')) {
if($self->{TotalBytes}) {
if(defined $length) {
return substr($self->{content}, 0, $length);
} else {
return $self->{content}
}
} else {
return undef;
}
} else {
defined($length) || ( $length = $self->{TotalBytes} );
my $asp = $self->{asp};
my $r = $asp->{r};
if(! $ENV{MOD_PERL}) {
my $rv = sysread(*STDIN, $data, $length, 0);
$asp->{dbg} && $asp->Debug("read $rv bytes from STDIN for CGI mode, tried $length bytes");
} else {
$r->read($data, $length);
$asp->{dbg} && $asp->Debug("read ".length($data)." bytes, tried $length bytes");
}
return $data;
}
}
sub Cookies {
my($self, $name, $key) = @_;
if(! $name) {
$self->{Cookies};
} elsif($key) {
$self->{Cookies}{$name}{$key};
} else {
# when we just have the name, are we expecting a dictionary or not
my $cookie = $self->{Cookies}{$name};
if(ref $cookie && wantarray) {
return %$cookie;
} else {
# CollectionItem support here one day, to not return
# an undef object, CollectionItem needs tied hash support
return $cookie;
}
}
}
sub ParseParams {
my($self, $string) = @_;
($string = $$string) if ref($string); ## faster if we pass a ref for a big string
my %params;
defined($string) || return(\%params);
my @params = split /[\&\;]/, $string, -1;
# we have to iterate through the params here to collect multiple values for
# the same param, say from a multiple select statement
for my $pair (@params) {
my($key, $value) = map {
# inline for greater efficiency
# &Unescape($self, $_)
my $todecode = $_;
$todecode =~ tr/+/ /; # pluses become spaces
$todecode =~ s/%([0-9a-fA-F]{2})/chr(hex($1))/ge;
$todecode;
} split (/\=/, $pair, 2);
if(defined $params{$key}) {
my $collect = $params{$key};
if(ref $collect) {
# we have already collected more than one param for that key
push(@{$collect}, $value);
} else {
# this is the second value for a key we've seen, start array
$params{$key} = [$collect, $value];
}
} else {
# normal use, one to one key value pairs, just set
$params{$key} = $value;
}
}
\%params;
}
# unescape URL-encoded data
sub Unescape {
my $todecode = $_[1];
$todecode =~ tr/+/ /; # pluses become spaces
$todecode =~ s/%([0-9a-fA-F]{2})/chr(hex($1))/ge;
$todecode;
}
*config = *Apache::ASP::config;
1;
( run in 0.665 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )