… | |
… | |
55 | our $httpevent = new Coro::Signal; |
55 | our $httpevent = new Coro::Signal; |
56 | |
56 | |
57 | our $queue_file = new transferqueue $MAX_TRANSFERS; |
57 | our $queue_file = new transferqueue $MAX_TRANSFERS; |
58 | our $queue_index = new transferqueue 10; |
58 | our $queue_index = new transferqueue 10; |
59 | |
59 | |
60 | our $tbf_top = new tbf rate => 200000; |
60 | our $tbf_top = new tbf rate => 100000; |
|
|
61 | |
|
|
62 | my $unused_bytes = 0; |
|
|
63 | my $unused_last = time; |
|
|
64 | |
|
|
65 | sub unused_bandwidth { |
|
|
66 | $unused_bytes += $_[0]; |
|
|
67 | if ($unused_last < $NOW - 30 && $unused_bytes / ($NOW - $unused_last) > 50000) { |
|
|
68 | $unused_last = $NOW; |
|
|
69 | $unused_bytes = 0; |
|
|
70 | $queue_file->force_wake_next; |
|
|
71 | slog 1, "forced filetransfer due to unused bandwidth"; |
|
|
72 | } |
|
|
73 | } |
61 | |
74 | |
62 | my @newcons; |
75 | my @newcons; |
63 | my @pool; |
76 | my @pool; |
64 | |
77 | |
65 | # one "execution thread" |
78 | # one "execution thread" |
… | |
… | |
219 | $hdr->{"Content-Length"} = length $content; |
232 | $hdr->{"Content-Length"} = length $content; |
220 | $GZ = sprintf "GZ%02d", 100 - 100*((length $content) / $orig); |
233 | $GZ = sprintf "GZ%02d", 100 - 100*((length $content) / $orig); |
221 | } |
234 | } |
222 | |
235 | |
223 | $res .= "Date: $HTTP_NOW\015\012"; |
236 | $res .= "Date: $HTTP_NOW\015\012"; |
|
|
237 | $res .= "Server: $::NAME\015\012"; |
224 | |
238 | |
225 | while (my ($h, $v) = each %$hdr) { |
239 | while (my ($h, $v) = each %$hdr) { |
226 | $res .= "$h: $v\015\012" |
240 | $res .= "$h: $v\015\012" |
227 | } |
241 | } |
228 | $res .= "\015\012"; |
242 | $res .= "\015\012"; |
… | |
… | |
555 | |
569 | |
556 | $self->response(@code, $hdr, ""); |
570 | $self->response(@code, $hdr, ""); |
557 | |
571 | |
558 | if ($self->{method} eq "GET") { |
572 | if ($self->{method} eq "GET") { |
559 | $self->{time} = $::NOW; |
573 | $self->{time} = $::NOW; |
|
|
574 | $self->{written} = 0; |
560 | |
575 | |
561 | my $current = $Coro::current; |
576 | my $current = $Coro::current; |
562 | |
577 | |
563 | my ($fh, $buf, $r); |
578 | my ($fh, $buf, $r); |
564 | |
579 | |
… | |
… | |
580 | while ($h > 0) { |
595 | while ($h > 0) { |
581 | unless ($locked) { |
596 | unless ($locked) { |
582 | if ($locked ||= $transfer->try($::WAIT_INTERVAL)) { |
597 | if ($locked ||= $transfer->try($::WAIT_INTERVAL)) { |
583 | $bufsize = $::BUFSIZE; |
598 | $bufsize = $::BUFSIZE; |
584 | $self->{time} = $::NOW; |
599 | $self->{time} = $::NOW; |
|
|
600 | $self->{written} = 0; |
585 | } |
601 | } |
586 | } |
602 | } |
587 | |
603 | |
588 | if ($blocked{$self->{remote_id}}) { |
604 | if ($blocked{$self->{remote_id}}) { |
589 | $self->{h}{connection} = "close"; |
605 | $self->{h}{connection} = "close"; |