projects
/
ambdownload.git
/ commitdiff
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
2774c0a
)
Add content-length header; increase default block size; add timings; add IP address
master
author
Alex Bligh <alex@alex.org.uk>
Mon, 3 Sep 2012 14:34:24 +0000
(15:34 +0100)
committer
Alex Bligh <alex@alex.org.uk>
Mon, 3 Sep 2012 14:34:24 +0000
(15:34 +0100)
download.pl
patch
|
blob
|
history
diff --git
a/download.pl
b/download.pl
index
3f4c2ad
..
feadfa6
100755
(executable)
--- a/
download.pl
+++ b/
download.pl
@@
-27,13
+27,16
@@
my $secretfile="/etc/apache2/download.secret";
my $secret;
my $sentheader = 0;
my $maxdrift = 60;
my $secret;
my $sentheader = 0;
my $maxdrift = 60;
+my $remoteip;
+my $t0 = [gettimeofday];
+my $filesize;
sub lprintf
{
if (defined($log))
{
my $now = strftime "%a, %d %b %Y %T %z", localtime;
sub lprintf
{
if (defined($log))
{
my $now = strftime "%a, %d %b %Y %T %z", localtime;
- print $log "$now: [$$][$transaction]: ";
+ printf $log "$now: [$$:%s][$transaction]: ", defined($remoteip)?$remoteip:"unknown";
printf $log @_;
}
}
printf $log @_;
}
}
@@
-54,7
+57,8
@@
sub openlog
sub qdie
{
my $err = shift @_;
sub qdie
{
my $err = shift @_;
- lprintf "ERROR: $err\n";
+ my $elapsed = tv_interval ( $t0, [gettimeofday]);
+ lprintf "ERROR: $err after %.3f secs\n", $elapsed;
if (!$sentheader)
{
my $error = encode_entities( $err );
if (!$sentheader)
{
my $error = encode_entities( $err );
@@
-83,12
+87,13
@@
sub sendfile {
$sentheader = 1;
print CGI::header(
-type => 'application/octet-stream',
$sentheader = 1;
print CGI::header(
-type => 'application/octet-stream',
+ -Content_length=> $filesize,
-attachment => $name,
);
binmode STDOUT, ':raw';
-attachment => $name,
);
binmode STDOUT, ':raw';
- unless (copy $fh => \*STDOUT, 8192)
+ unless (copy $fh => \*STDOUT, 65536)
{
qdie "Cannot write to STDOUT";
}
{
qdie "Cannot write to STDOUT";
}
@@
-121,8
+126,9
@@
sub decodeparams
my $clientfile = CGI::url_param('file');
$clientfile = "default" unless(defined($clientfile));
qdie ("Bad parameters") unless (defined($clienttime) && defined($clientid) && defined($clienthash) && ($clienttime=~/^[0-9]+$/));
my $clientfile = CGI::url_param('file');
$clientfile = "default" unless(defined($clientfile));
qdie ("Bad parameters") unless (defined($clienttime) && defined($clientid) && defined($clienthash) && ($clienttime=~/^[0-9]+$/));
- my $drift = time()-$clienttime;
- qdie ("Client time has drifted - we have ".time()) if (($drift < -$maxdrift) || ($drift > $maxdrift));
+ my $now = time();
+ my $drift = $now-$clienttime;
+ qdie ("Client time has drifted - $now - $clienttime = $drift") if (($drift < -$maxdrift) || ($drift > $maxdrift));
qdie ("Bad ID") unless ($clientid=~/^[-+._\@a-zA-Z0-9]+$/);
qdie ("Bad filename") unless ($clientfile=~/^[-+._a-zA-Z0-9]+$/);
qdie ("Bad filename") if ($clientfile=~/^\./);
qdie ("Bad ID") unless ($clientid=~/^[-+._\@a-zA-Z0-9]+$/);
qdie ("Bad filename") unless ($clientfile=~/^[-+._a-zA-Z0-9]+$/);
qdie ("Bad filename") if ($clientfile=~/^\./);
@@
-182,12
+188,12
@@
else
doinfo($info);
exit 0;
}
doinfo($info);
exit 0;
}
+ $remoteip = CGI::remote_addr();
openlog;
my $file = decodeparams;
my $sb = stat($file);
openlog;
my $file = decodeparams;
my $sb = stat($file);
- my $size = $sb->size;
- my $t0 = [gettimeofday];
+ $filesize = $sb->size;
lprintf("STARTING\n");
$SIG{INT} = \&caughtsignal;
$SIG{QUIT} = \&caughtsignal;
lprintf("STARTING\n");
$SIG{INT} = \&caughtsignal;
$SIG{QUIT} = \&caughtsignal;
@@
-197,7
+203,8
@@
else
$SIG{TERM} = \&caughtsignal;
sendfile($file);
my $elapsed = tv_interval ( $t0, [gettimeofday]);
$SIG{TERM} = \&caughtsignal;
sendfile($file);
my $elapsed = tv_interval ( $t0, [gettimeofday]);
- lprintf("SUCCESS %d bytes %.3f MB/s\n", $size, $size/(1000000.0*(($elapsed<0.001)?0.001:$elapsed)));
+ my $rate = $filesize/(1000000.0*(($elapsed<0.001)?0.001:$elapsed));
+ lprintf("SUCCESS %d bytes %.3f MB/s %.3f secs\n", $filesize, $rate, $elapsed);
closelog;
exit(0);
closelog;
exit(0);