line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Plack::Middleware::Proxy::AddVia; |
2
|
1
|
|
|
1
|
|
686
|
use strict; |
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
37
|
|
3
|
1
|
|
|
1
|
|
14
|
use parent 'Plack::Middleware'; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
9
|
|
4
|
|
|
|
|
|
|
|
5
|
1
|
|
|
1
|
|
1221
|
use Plack::Util; |
|
1
|
|
|
|
|
3
|
|
|
1
|
|
|
|
|
390
|
|
6
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
our $VERSION = '0.01'; |
8
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
sub add_via { |
10
|
0
|
|
|
0
|
0
|
|
my ( $self, $via, $protocol, $recieved_by ) = @_; |
11
|
|
|
|
|
|
|
|
12
|
0
|
|
|
|
|
|
$protocol =~ s|^HTTP/||; |
13
|
0
|
|
0
|
|
|
|
return join ', ', $via || (), "$protocol $recieved_by"; |
14
|
|
|
|
|
|
|
} |
15
|
|
|
|
|
|
|
|
16
|
|
|
|
|
|
|
sub make_recieved_by_from_env { |
17
|
0
|
|
|
0
|
0
|
|
my ( $self, $env ) = @_; |
18
|
0
|
0
|
|
|
|
|
my $host = $env->{SERVER_NAME} . ( |
19
|
|
|
|
|
|
|
$env->{SERVER_PORT} == 80 ? '' : ":$env->{SERVER_PORT}" |
20
|
|
|
|
|
|
|
) ; |
21
|
0
|
|
|
|
|
|
return $host . " (" . __PACKAGE__ . "/$VERSION)"; |
22
|
|
|
|
|
|
|
} |
23
|
|
|
|
|
|
|
|
24
|
|
|
|
|
|
|
sub call { |
25
|
0
|
|
|
0
|
1
|
|
my($self, $env) = @_; |
26
|
|
|
|
|
|
|
|
27
|
0
|
|
|
|
|
|
my $recieved_by = $self->make_recieved_by_from_env( $env ); |
28
|
|
|
|
|
|
|
|
29
|
0
|
|
|
|
|
|
$env->{HTTP_VIA} = $self->add_via( |
30
|
|
|
|
|
|
|
$env->{HTTP_VIA}, $env->{SERVER_PROTOCOL}, $recieved_by |
31
|
|
|
|
|
|
|
); |
32
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
|
return sub { |
34
|
0
|
|
|
0
|
|
|
my $orig_respond = shift; |
35
|
|
|
|
|
|
|
|
36
|
|
|
|
|
|
|
my $respond = sub { |
37
|
0
|
|
|
|
|
|
my $res = shift; |
38
|
0
|
|
|
|
|
|
my $via = Plack::Util::header_get($res->[1], 'Via'); |
39
|
0
|
|
|
|
|
|
Plack::Util::header_set( |
40
|
|
|
|
|
|
|
$res->[1], 'Via' => $self->add_via( |
41
|
|
|
|
|
|
|
$via, $env->{'plack.proxy.last_protocol'}, $recieved_by |
42
|
|
|
|
|
|
|
) |
43
|
|
|
|
|
|
|
); |
44
|
0
|
|
|
|
|
|
return $orig_respond->( $res ); |
45
|
0
|
|
|
|
|
|
}; |
46
|
|
|
|
|
|
|
|
47
|
0
|
|
|
|
|
|
my $res = $self->app->($env); |
48
|
0
|
0
|
|
|
|
|
ref $res eq 'CODE' ? $res->( $respond ) : $respond->( $res ); |
49
|
0
|
|
|
|
|
|
}; |
50
|
|
|
|
|
|
|
} |
51
|
|
|
|
|
|
|
|
52
|
|
|
|
|
|
|
1; |
53
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
__END__ |