Index: lib/Perlbal/ClientProxy.pm =================================================================== --- lib/Perlbal/ClientProxy.pm (revision 771) +++ lib/Perlbal/ClientProxy.pm (working copy) @@ -20,6 +20,7 @@ 'high_priority', # boolean; 1 if we are or were in the high priority queue 'low_priority', # boolean; 1 if we are or were in the low priority queue 'reproxy_uris', # arrayref; URIs to reproxy to, in order + 'reproxy_headers', # arrayref; extra headers for reproxy 'reproxy_expected_size', # int: size of response we expect to get back for reproxy 'currently_reproxying', # arrayref; the host info and URI we're reproxying right now 'content_length_remain', # int: amount of data we're still waiting for @@ -108,6 +109,7 @@ $self->{reproxy_uris} = undef; $self->{reproxy_expected_size} = undef; + $self->{reproxy_headers} = undef; $self->{currently_reproxying} = undef; $self->{retry_count} = 0; @@ -140,7 +142,6 @@ my Perlbal::ClientProxy $self = $_[0]; my Perlbal::HTTPHeaders $primary_res_hdrs = $_[1]; my $urls = $_[2]; - # at this point we need to disconnect from our backend $self->{backend} = undef; @@ -174,6 +175,17 @@ $self->{reproxy_expected_size} = $expected_size; } + # set extra headers + if ($primary_res_hdrs && (my $extra_headers = $primary_res_hdrs->header('X-REPROXY-HEADERS'))) { + my @hdrs = split /\s+/, $extra_headers; + $self->{reproxy_headers} = ""; + foreach my $hdr (@hdrs) { + if(my $val = $primary_res_hdrs->header($hdr)) { + $self->{reproxy_headers} .= "$hdr: $val\r\n"; + } + } + } + # pass ourselves off to the reproxy manager $self->state('wait_backend'); Perlbal::ReproxyManager::do_reproxy($self); @@ -233,7 +245,9 @@ if (my $host = $self->{req_headers}->header("Host")) { $extra_hdr .= "Host: $host\r\n"; } - + if($self->{reproxy_headers}) { + $extra_hdr .= $self->{reproxy_headers}; + } my $req_method = $self->{req_headers}->request_method eq 'HEAD' ? 'HEAD' : 'GET'; my $headers = "$req_method $datref->[2] HTTP/1.0\r\nConnection: keep-alive\r\n${extra_hdr}\r\n";