X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fgraphs%2Ftools%2Furi_set_queue.cgi;h=d84cdfde33f5b42b75148d325d53de9d354e7a3c;hb=a05716c63c91f282f72cc2397dd7ab8ca056ab20;hp=4c66515288a269f352bde72483c4cc25eb2e81aa;hpb=e85bc43c20254aa85463748eeb95e2e60ed0ccf1;p=helm.git
diff --git a/helm/graphs/tools/uri_set_queue.cgi b/helm/graphs/tools/uri_set_queue.cgi
index 4c6651528..d84cdfde3 100755
--- a/helm/graphs/tools/uri_set_queue.cgi
+++ b/helm/graphs/tools/uri_set_queue.cgi
@@ -12,14 +12,15 @@ $SIG{CHLD} = "IGNORE"; # do not accumulate defunct processes
my %uri_sets;
my %uri_queues;
+my %overflowed;
+my %size;
-#NOT REENTRANT: CAN NOT FORK DUE TO THE GLOBAL VARIABLES %uri_sets & %uri_queues
+#NOT REENTRANT: CAN NOT FORK DUE TO THE GLOBAL VARIABLES %uri_sets & ...
#HENCE, THE "PID" ARGUMENT OF EVERY REQUEST MUST IDENTIFY THE SET OF URI
#IT WANTS TO WORK WITH. MOREOVER, EVERY CLIENT MUST WORK WITH A DIFFERENT SET
#OF URI, I.E. EVERY PID MUST BE UNIQUE.
#CSC: WHAT IF THE CLIENTS ARE ON DIFFERENT MACHINES AND HAVE THE SAME PID?
-#CSC: CGI MODULE REQUIRED TO PROCESS PARAMETERS BETTER
while (my $c = $d->accept) {
while (my $r = $c->get_request) {
@@ -32,14 +33,14 @@ while (my $c = $d->accept) {
print(@{$uri_queues{$pid}} + 0);
print "/";
my $tot = keys(%{$uri_sets{$pid}}) + 0;
+ $tot .= "*" if defined($overflowed{$pid});
print "$tot $uri: ";
my $res;
if (!(defined($uri_sets{$pid}->{$uri}))) {
- if ($tot + 1 > 20) {
- $uri_sets{$pid}->{$uri} = -1;
- push @{$uri_queues{$pid}},$uri;
- $res = "added_with_mark";
+ if ($tot + 1 > $size{$pid}) {
+ $res = "not_added_because_already_too_many";
+ $overflowed{$pid} = 1;
} else {
$uri_sets{$pid}->{$uri} = 1;
push @{$uri_queues{$pid}},$uri;
@@ -54,6 +55,32 @@ while (my $c = $d->accept) {
$response->content("\n<$res/>\n");
$response->content_type('text/xml');
$c->send_response($response);
+ } elsif ($r->method eq 'GET' and $r->url->path eq '/is_overflowed') {
+ my $http_query = $r->url->equery;
+ my $cgi = new CGI("$http_query");
+ my $pid = $cgi->param('PID');
+ print "$pid: ";
+ print(@{$uri_queues{$pid}} + 0);
+ print "/";
+ print(keys(%{$uri_sets{$pid}}) + 0);
+ print "*" if defined($overflowed{$pid});
+ my $res = defined($overflowed{$pid}) ? "true" : "false";
+ print " is_overflowed: $res\n";
+ my $response = new HTTP::Response;
+ $response->content("\n<$res/>\n");
+ $response->content_type('text/xml');
+ $c->send_response($response);
+ } elsif ($r->method eq 'GET' and $r->url->path eq '/set_uri_set_size') {
+ my $http_query = $r->url->equery;
+ my $cgi = new CGI("$http_query");
+ my $pid = $cgi->param('PID');
+ my $size = $cgi->param('size');
+ print "$pid: size := $size\n";
+ $size{$pid} = $size;
+ my $response = new HTTP::Response;
+ $response->content("\n\n");
+ $response->content_type('text/xml');
+ $c->send_response($response);
} elsif ($r->method eq 'GET' and $r->url->path eq '/get_next') {
my $http_query = $r->url->equery;
my $cgi = new CGI("$http_query");
@@ -62,22 +89,23 @@ while (my $c = $d->accept) {
print(@{$uri_queues{$pid}} + 0);
print "/";
print(keys(%{$uri_sets{$pid}}) + 0);
+ print "*" if defined($overflowed{$pid});
print " ";
my $elem = shift @{$uri_queues{$pid}};
- my $mark = $uri_sets{$pid}->{$elem};
+ my $mark = $overflowed{$pid};
my $response = new HTTP::Response;
my $xml_header = "\n";
- if ($mark == 1) {
- print "$elem removed\n";
- $response->content("$xml_header\n");
- } elsif ($mark == -1) {
+ if (!defined($elem)) {
+ print "is now empty\n";
+ $response->content("$xml_header\n");
+ } elsif ($mark == 1) {
print "$elem (marked) removed\n";
$response->content("$xml_header\n");
} else {
- print "is now empty\n";
- $response->content("$xml_header\n");
+ print "$elem removed\n";
+ $response->content("$xml_header\n");
}
$response->content_type('text/xml');
$c->send_response($response);
@@ -92,10 +120,17 @@ while (my $c = $d->accept) {
}
print "************\nThe URI set $pid is now empty again\n";
delete($uri_sets{$pid});
+ delete($overflowed{$pid});
+ delete($size{$pid});
my $response = new HTTP::Response;
$response->content("\n\n");
$response->content_type('text/xml');
$c->send_response($response);
+ } elsif ($r->method eq 'GET' && $r->url->path eq "/help"){
+ print "Help requested!\n";
+ my $response = new HTTP::Response;
+ $response->content("URI-Set (Queue) Version: ???");
+ $c->send_response($response);
} else {
$c->send_error(RC_FORBIDDEN)
}