Annotation of loncom/lonnet/perl/lonrep.pm, revision 1.1.1.1

1.1       albertel    1: # The LearningOnline Network
                      2: # Replication Manager
                      3: # (Access Handler for File Transfers
                      4: # (lonacc: Cookie Based Access Handler
                      5: # 5/21/99,5/22,5/29,5/31,6/15 Gerd Kortemeyer)
                      6: # 6/16,6/18 Gerd Kortemeyer)
                      7: # 6/18,6/21,6/26,6/28,6/29,6/30,
                      8: # 7/2,7/3,7/9,7/10,7/12 Gerd Kortemeyer
                      9: 
                     10: package Apache::lonrep;
                     11: 
                     12: use strict;
                     13: use Apache::Constants qw(:common :http);
                     14: use LWP::UserAgent();
                     15: use Apache::lonnet();
                     16: use Apache::File();
                     17: 
                     18: sub handler {
                     19:     my $r = shift;
                     20:     if (-e $r->finfo) {
                     21:       return OK;
                     22:     } else {
                     23:       my $filename=$r->filename.$r->path_info;
                     24:       my $transname="$filename.in.transfer";
                     25:       if (-e $transname) {
                     26: 	sleep 10;
                     27:         $r->filename($filename);
                     28:         if (-e $r->finfo) {
                     29: 	   return OK;
                     30:         } else {
                     31: 	   $r->log_reason("Waiting for file transfer timed out",$filename);
                     32: 	   return HTTP_SERVICE_UNAVAILABLE;
                     33:         }
                     34:       } else {
                     35:         my $remoteurl=Apache::lonnet::subscribe($filename);
                     36:         if ($remoteurl eq 'con_lost') {
                     37: 	   $r->log_reason("Subscribe returned con_lost",$filename);
                     38:            return HTTP_SERVICE_UNAVAILABLE;
                     39: 	} elsif ($remoteurl eq 'not_found') {
                     40: 	   $r->log_reason("Subscribe returned not_found",$filename);
                     41: 	   return HTTP_NOT_FOUND;
                     42:         } elsif ($remoteurl eq 'forbidden') {
                     43: 	   $r->log_reason("Subscribe returned forbidden",$filename);
                     44:            return FORBIDDEN;
                     45:         } else {
                     46:            my @parts=split(/\//,$filename);
                     47:            my $path="/$parts[1]/$parts[2]/$parts[3]/$parts[4]";
                     48:            my $count;
                     49:            for ($count=5;$count<$#parts;$count++) {
                     50:                $path.="/$parts[$count]";
                     51:                if ((-e $path)!=1) {
                     52: 		   mkdir($path,0777);
                     53:                }
                     54:            }
                     55:            my $ua=new LWP::UserAgent;
                     56:            my $request=new HTTP::Request('GET',"$remoteurl");
                     57:            my $response=$ua->request($request,$transname);
                     58:            if ($response->is_error()) {
                     59: 	       unlink($transname);
                     60:                my $message=$response->status_line;
                     61:                $r->log_reason("LWP GET: $message",$filename);
                     62:                return HTTP_SERVICE_UNAVAILABLE;
                     63:            } else {
                     64:                rename($transname,$filename);
                     65:                $r->filename($filename);
                     66:                return OK;
                     67:            }
                     68:         }
                     69:       }
                     70:    }
                     71: }
                     72: 
                     73: 1;
                     74: __END__
                     75: 
                     76: 
                     77: 
                     78: 
                     79: 
                     80: 
                     81: 
                     82: 

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