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