]> matita.cs.unibo.it Git - helm.git/commitdiff
# bugfix: rdf tie that proxies rdf_urls_of_uris.db now works even after
authorStefano Zacchiroli <zack@upsilon.cc>
Wed, 27 Jun 2001 07:07:02 +0000 (07:07 +0000)
committerStefano Zacchiroli <zack@upsilon.cc>
Wed, 27 Jun 2001 07:07:02 +0000 (07:07 +0000)
  invocation of /update method

helm/http_getter/configure.in
helm/http_getter/http_getter.pl.in

index 0a7da2a8168591ac839521bdedad006788f8dee5..eef0bcf3255d530fd998de6420dc6c6e275e6f5c 100644 (file)
@@ -3,7 +3,7 @@ AC_INIT(http_getter.pl.in)
 PACKAGE=helm_http_getter
 MAJOR_VERSION=0
 MINOR_VERSION=1
-MICRO_VERSION=46
+MICRO_VERSION=48
 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION
 
 DEFAULT_HELM_LIB_DIR=/usr/local/lib/helm
index 3e0db46dbdb24f961b39553a585039daf3cddd86..9c71fce076a1e4cd6e69f95f2713e269c1fd5d3d 100755 (executable)
@@ -57,8 +57,8 @@ require $HELM_LIB_PATH;
 
 # TEMP: TODO put these vars in configuration file configuration.xml
 # <move_to_conf_file>
-$helm_rdf_dir = "/projects/helm/shared/V7/rdf_library";
-$rdf_dbm = "/projects/helm/shared/V7/rdf_urls_of_uris";
+$helm_rdf_dir = "/usr/local/helm/rdf_library";
+$rdf_dbm = "/usr/local/helm/rdf_urls_of_uris";
 $rdf_indexname = "rdf_index.txt";
 # </move_to_conf_file>
 
@@ -101,7 +101,8 @@ print "helm_dir: $helm_dir\n";
 print "helm_rdf_dir: $helm_rdf_dir\n";
 print "style_dir: $style_dir\n";
 print "dtd_dir: $dtd_dir\n";
-print "urls_of_uris.db: $uris_dbm.db\n";
+print "urls_of_uris db: $uris_dbm.db\n";
+print "rdf db: $rdf_dbm.db\n";
 print "cache mode: $cachemode\n";
 print "indexname: $indexname\n";
 print "rdf_indexname: $rdf_indexname\n";
@@ -109,6 +110,7 @@ print "\n";
 
 $SIG{CHLD} = "IGNORE"; # do not accumulate defunct processes
 $SIG{USR1} = \&update; # sent by the child to make the parent update
+
 while (my $c = $d->accept) {
  if (fork() == 0) {
     while (my $r = $c->get_request) {
@@ -121,7 +123,7 @@ while (my $c = $d->accept) {
         my $inputuri = $cgi->param('uri');
         print "\nRequest: ".$r->url."\n\n";
 
-       print "\nUnescaped query: ".$http_query."\n";
+        print "\nUnescaped query: ".$http_query."\n";
 
          # "getxml" works with rdf uris
         if ($http_method eq 'GET' and $http_path eq "/getxml") {
@@ -151,43 +153,39 @@ while (my $c = $d->accept) {
             }
 
             my $url = resolve ($inputuri); # resolve uri in url
-            if (not defined($url)) {
-             die "uri \"$inputuri\" can't be resolved\n";
-            }
-
-            my $extension; # file extension
-            if ($url =~ /\.xml$/) { # non gzipped file
-              $extension = ".xml";
-            } elsif ($url =~ /\.xml\.gz$/) { # gzipped file
-              $extension = ".xml.gz";
-            } else { # error: unknown extension
-             die "unexpected extension in url: $url, might be '.xml'".
-              "or '.xml.gz'";
-            }
-
-            if (not isRdfUri ($inputuri)) {
-             $filename = $helm_dir.$filename.$extension;
-            } else {
-             $filename = $helm_rdf_dir.$filename.$extension;
-            }
-
-            if (!defined($url)) {
-             print "\nNOT FOUND!!!!!\n";
+            if (not defined($url)) { # uri not found in uri2url map
+             die "NOT FOUND: uri \"$inputuri\" can't be resolved\n";
              $c->send_error(RC_NOT_FOUND)
-            } else {
-               print_request("cic",$inputuri,$url,$filename);
-
-               # Retrieves the file
-               my $ciccontent = download($patch_dtd,"cic",$url,$filename,$answerformat);
-
-               # Answering the client
-               if ($answerformat eq "normal") {
-                answer($c,$ciccontent,"text/xml","");
-               } else {
-                answer($c,$ciccontent,"text/xml","x-gzip");
-               }
+            } else { # uri found and mapped to url
+              my $extension; # file extension
+              if ($url =~ /\.xml$/) { # non gzipped file
+                $extension = ".xml";
+              } elsif ($url =~ /\.xml\.gz$/) { # gzipped file
+                $extension = ".xml.gz";
+              } else { # error: unknown extension
+               die "unexpected extension in url: $url, might be '.xml'".
+                "or '.xml.gz'";
+              }
+
+              if (not isRdfUri ($inputuri)) { # save in uri std cache dir
+               $filename = $helm_dir.$filename.$extension;
+              } else { # save in rdf metadata cache dir
+               $filename = $helm_rdf_dir.$filename.$extension;
+              }
+
+              print_request($inputuri,$url,$filename);
+
+              # Retrieves the file
+              my $ciccontent = download($patch_dtd,$url,$filename,$answerformat);
+
+              if ($answerformat eq "normal") { # answer the client in text/xml
+               answer($c,$ciccontent,"text/xml","");
+              } else { # answer the client in text/xml, gzip encoding
+               answer($c,$ciccontent,"text/xml","x-gzip");
+              }
             }
-          # "/register" does not work with rdf uris
+            
+                           # "/register" does not work with rdf uris
         } elsif ($http_method eq 'GET' and $http_path eq "/register") {
           my $inputurl = $cgi->param('url');
           print "Register requested...\n";
@@ -204,9 +202,10 @@ while (my $c = $d->accept) {
 
           kill(USR1,getppid()); # signal changes to parent
           untie %map;
-          print "done\n";
+          print "done.\n";
           html_nice_answer($c,"Register done");
-          # "/resolve" works with rdf uri
+
+                                  # "/resolve" works with rdf uri
         } elsif ($http_method eq 'GET' and $http_path eq "/resolve") {
           #my $outputurl = $map{$inputuri};
           my $outputurl = resolve($inputuri);
@@ -218,6 +217,7 @@ while (my $c = $d->accept) {
            $cont .= "<url value=\"$outputurl\" />\n";
           }
           answer($c,$cont,"text/xml","");
+
         } elsif ($http_method eq 'GET' and $http_path eq "/getdtd") {
             my $filename = $inputuri;
             $filename = $dtd_dir."/".$filename;
@@ -237,6 +237,7 @@ while (my $c = $d->accept) {
             } else {
                die "Could not find DTD!";
             }
+
         } elsif ($http_method eq 'GET' and $http_path eq "/getstyleconf") {
             my $filename = $inputuri;
             $filename = $style_dir."/config/".$filename;
@@ -252,6 +253,7 @@ while (my $c = $d->accept) {
             } else {
                die "Could not find Style Configuration File!";
             }
+
         } elsif ($http_method eq 'GET' and $http_path eq "/getxslt") {
             my $filename = $inputuri;
             $filename = $style_dir."/".$filename;
@@ -272,6 +274,8 @@ while (my $c = $d->accept) {
             } else {
                die "Could not find XSLT!";
             }
+
+                                    # "/update" works with rdf uri
         } elsif ($http_method eq 'GET' and $http_path eq "/update") {
             # rebuild urls_of_uris db and rdf uris db
            print "Update requested...\n";
@@ -279,13 +283,15 @@ while (my $c = $d->accept) {
            kill(USR1,getppid()); # signal changes to parent
            print " done\n";
            html_nice_answer($c,"Update done");
-          # "/ls" does not work with rdf uris
+
+                                 # "/ls" does not work with rdf uris
         } elsif ($http_method eq 'GET' and $http_path eq "/ls") {
             # send back keys that begin with a given uri
            my ($uritype,$uripattern,$uriprefix);
            my $baseuri = $cgi->param('baseuri');
            chop $baseuri if ($baseuri =~ /.*\/$/); # remove trailing "/"
-           my $outype = $cgi->param('format'); # output type, might be 'txt' or 'xml'
+                         # output type, might be 'txt' or 'xml':
+           my $outype = $cgi->param('format');
            $uripattern = $baseuri;
            $uripattern =~ s/^.*:(.*)/$1/;
            if ($baseuri =~ /^cic:/) {
@@ -317,10 +323,12 @@ while (my $c = $d->accept) {
             html_nice_answer($c,"Invalid uri , must begin with ".
              "'cic:' or 'theory:'");
            }
+
         } elsif ($http_method eq 'GET' and $http_path eq "/help") {
           # help request
            print "Help requested!\n";
            html_nice_answer($c,"HTTP Getter Version: $VERSION");
+
         } elsif ($http_method eq 'GET' and $http_path =~ /\.cgi$/) {
           # cgi handling
            print "CGI requested!\n";
@@ -343,6 +351,7 @@ while (my $c = $d->accept) {
             html_nice_answer($c,"CGI '$http_path' not found ".
              "in CGI dir '$cgi_dir'");
            }
+
         } else { # unsupported request
             print "\n";
             print "INVALID REQUEST!!!!!\n";
@@ -350,8 +359,10 @@ while (my $c = $d->accept) {
             print "QUERY: ",$http_query,")\n";
             $c->send_error(RC_FORBIDDEN)
         }
+
         print "\nRequest solved: ".$r->url."\n\n";
     }
+
     $c->close;
     undef($c);
     print "\nCONNECTION CLOSED\n\n";
@@ -378,10 +389,16 @@ sub isRdfUri { # return true if the uri is an rdf uri, false otherwise
 
 sub resolve { # resolve an uri in a url, work both with standard cic: or theory:
               # uris and rdf uris
+ print "RESOLVE subroutine\n";
  my ($uri) = @_;
+ print "GIVEN URI: \"$uri\"\n";
  if (isRdfUri ($uri)) { # rdf uri, resolve using rdf db
+  print "IS A RDF URI\n";
+  print "I WILL RETURN '$rdf_map{$uri}'\n";
   return ($rdf_map{$uri});
  } else { # standard cic: or theory: uri, resolve using std uri db
+  print "IS NOT A RDF URI\n";
+  print "I WILL RETURN '$map{$uri}'\n";
   return ($map{$uri});
  }
 }
@@ -392,7 +409,7 @@ sub finduris { # find uris for cic and theory trees generation
  my ($uri,$localpart,$basepart,$dirname,$suffix,$flags,$key);
  my (@itemz,@already_pushed_dir);
  my (%objects,%dirs); # map uris to suffixes' flags
#my $debug=1; # for debug
+ my $debug=1; # for debug
 
  print "FINDURIS, uritype: $uritype, uripattern: $uripattern, ".
   "format: $format\n\n" if defined($debug);
@@ -528,10 +545,12 @@ sub mkdirs
 
 sub print_request
 {
- my ($str,$uri,$url,$filename) = @_;
- print $str."uri: $uri\n";
- print $str."url: $url\n";
- print $str."filename: $filename\n\n";
+ my ($uri,$url,$filename) = @_;
+ print "<download_request>\n";
+ print "uri: $uri\n";
+ print "url: $url\n";
+ print "filename: $filename\n\n";
+ print "</download_request>\n";
 }
 
 sub callback
@@ -572,10 +591,11 @@ sub gzip {        # gzip the content argument and save it to filename argument
 }
 
 sub download {
- my ($patch_dtd,$str,$url,$filename,$format) = @_;
+ my ($patch_dtd,$url,$filename,$format) = @_;
  my ($gz, $buffer);
 
- #my $debug=1; # for DEBUG only
+# print "DOWNLOAD subs receives url: \"$url\"\n";
+$ print "DOWNLOAD subs receives filename: \"$filename\"\n";
 
  my $resourcetype;     # retrieve mode: "normal" (.xml) or "gzipped" (.xml.gz)
  if ($filename =~ /\.xml$/) {  # set retrieve mode
@@ -597,7 +617,7 @@ sub download {
  }
  if ($localfname ne "") { # we already have local copy of requested file
       # check both possible cache entry: gzipped or normal
-  print "Using local copy for the $str file\n";
+  print "Using local copy.\n";
   if ($localfname =~ /\.xml\.gz$/) { # deflating cached file and return it
    $cont = gunzip($localfname);
   } elsif ($localfname =~ /\.xml$/) { # just return cached file
@@ -609,7 +629,7 @@ sub download {
    ."must end with '.gz' or '.xml.gz'\n";
   }
  } else { # download file from net
-   print "Downloading the $str file\n"; # download file
+   print "Downloading file ...\n"; # download file
    my $ua = LWP::UserAgent->new;
    my $request = HTTP::Request->new(GET => "$url");
    my $response = $ua->request($request, \&callback);
@@ -617,18 +637,19 @@ sub download {
    # cache retrieved file to disk
    # <ZACK/> TODO: inefficent, I haven't yet undestood how to deflate
    #    in memory gzipped file, without call "gzopen"
-   print "Storing the $str file\n";
-   print "Making dirs ...\n" if (defined($debug));
+   print "Storing file ...\n";
+#   print "Making dirs ...\n";
    mkdirs($filename);
-   print "Opening tmp file for writing ...\n" if (defined($debug));
+#   print "Opening tmp file for writing ...\n";
    open(FD, ">".$filename.".tmp") or die "Cannot open $filename.tmp\n";
-   print "Writing on tmp file ...\n" if (defined($debug));
+#   print "Writing on tmp file ...\n";
    print FD $cont;
-   print "Closing tmp file ...\n" if (defined($debug));
+#   print "Closing tmp file ...\n";
    close(FD);
 
    # handle cache conversion normal->gzipped or gzipped->normal as user choice
-   print "cachemode:$cachemode, resourcetype:$resourcetype\n" if (defined($debug));
+   print "cachemode:$cachemode, resourcetype:$resourcetype\n"
+    if (defined($debug));
    if (($cachemode eq 'normal') and ($resourcetype eq 'normal')) {
      # cache the file as is
     rename "$filename.tmp", $filename; 
@@ -716,7 +737,7 @@ sub update {
  untie %map;
  tie(%map, 'DB_File', $uris_dbm.".db", O_RDWR, 0664);
  untie %rdf_map;
- tie(%rdf_map, 'DB_File', $uris_dbm.".db", O_RDWR, 0664);
+ tie(%rdf_map, 'DB_File', $rdf_dbm.".db", O_RDWR, 0664);
 }
 
 sub update_dbs {