Annotation of nsdl/lib/perl/Apache/GATEWAY/Common.pm, revision 1.2
1.1 harris41 1: # Apache::GATEWAY::Common
2: #
3: # Common.pm
4: # API for common gateway routines.
5: #
6: # For more documentation, read the POD documentation
7: # of this module with the perldoc command:
8: #
9: # perldoc ./Common.pm
10: #
11: # Year 2002
12: # Scott Harrison
13: #
14: ###
15:
16: package Apache::GATEWAY::Common;
17:
1.2 ! harris41 18: use Date::Format;
! 19:
! 20: sub responseDate {
! 21: my $responseDate=Date::Format::time2str("%Y-%m-%dT%T%z",time);
! 22: $responseDate=~s/(..)$/\:$1/;
! 23: return $responseDate;
! 24: }
! 25:
1.1 harris41 26: sub readCGI {
27: my $r=shift;
28: # -------------------------------------------------------- Load POST parameters
29: my $buffer;
30:
31: $r->read($buffer,$r->header_in('Content-length'));
32:
33: unless ($buffer=~/^(\-+\w+)\s+Content\-Disposition\:\s*form\-data/si) {
34: my @pairs=split(/&/,$buffer);
35: my $pair;
36: foreach $pair (@pairs) {
37: my ($name,$value) = split(/=/,$pair);
38: $value =~ tr/+/ /;
39: $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
40: $name =~ tr/+/ /;
41: $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
42: &add_to_env("form.$name",$value);
43: }
44: } else {
45: my $contentsep=$1;
46: my @lines = split (/\n/,$buffer);
47: my $name='';
48: my $value='';
49: my $fname='';
50: my $fmime='';
51: my $i;
52: for ($i=0;$i<=$#lines;$i++) {
53: if ($lines[$i]=~/^$contentsep/) {
54: if ($name) {
55: chomp($value);
56: if ($fname) {
57: $ENV{"form.$name.filename"}=$fname;
58: $ENV{"form.$name.mimetype"}=$fmime;
59: } else {
60: $value=~s/\s+$//s;
61: }
62: &add_to_env("form.$name",$value);
63: }
64: if ($i<$#lines) {
65: $i++;
66: $lines[$i]=~
67: /Content\-Disposition\:\s*form\-data\;\s*name\=\"([^\"]+)\"/i;
68: $name=$1;
69: $value='';
70: if ($lines[$i]=~/filename\=\"([^\"]+)\"/i) {
71: $fname=$1;
72: if
73: ($lines[$i+1]=~/Content\-Type\:\s*([\w\-\/]+)/i) {
74: $fmime=$1;
75: $i++;
76: } else {
77: $fmime='';
78: }
79: } else {
80: $fname='';
81: $fmime='';
82: }
83: $i++;
84: }
85: } else {
86: $value.=$lines[$i]."\n";
87: }
88: }
89: }
90: my $query=$r->args;
91: foreach (split(/&/,$query)) {
92: my ($name, $value) = split(/=/,$_);
93: # $name = &Apache::lonnet::unescape($name);
94: $value =~ tr/+/ /;
95: $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
96: unless (defined($ENV{'form.'.$name})) { &add_to_env('form.'.$name,$value) };
97: }
98: }
99:
100: sub add_to_env {
101: my ($name,$value)=@_;
102: if (defined($ENV{$name})) {
103: if (ref($ENV{$name})) {
104: #already have multiple values
105: push(@{ $ENV{$name} },$value);
106: } else {
107: #first time seeing multiple values, convert hash entry to an arrayref
108: my $first=$ENV{$name};
109: undef($ENV{$name});
110: push(@{ $ENV{$name} },$first,$value);
111: }
112: } else {
113: $ENV{$name}=$value;
114: }
115: }
116:
117: 1;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>