Annotation of nsdl/lib/perl/Apache/GATEWAY/Common.pm, revision 1.1

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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>