App-HTTP_Proxy_IMP
view release on metacpan or search on metacpan
lib/App/HTTP_Proxy_IMP/IMP.pm view on Meta::CPAN
# no eof yet and no further data in ibuf
# we might get a replacement at the end of the
# buffer so put emptied buffer back
$ib0->[1] = '';
push @$ibuf, $ib0;
} else {
push @$ibuf, [ $offset,'' ];
}
last;
} elsif ( $ib0->[2] < 0 ) {
# streaming type:
# forward part of buf
push @$fwd, [
0, # not changed
substr($ib0->[1],0,$pass,''), # data
$ib0->[3], # callback
$ib0->[4], # args
];
# keep rest in ibuf
unshift @$ibuf,$ib0;
$ib0->[0] += $pass;
lib/App/HTTP_Proxy_IMP/IMP.pm view on Meta::CPAN
if ( $data eq '' ) {
# forward eof to analyzer
$fwd = $data;
$DEBUG && $self->{request}->xdebug("pass($dir) eof");
goto SEND2IMP;
}
$DEBUG && $self->{request}->xdebug(
"can pass($dir) all: pass($canpass)>=data.len($dlen)");
return $callback->($self,$encoded_data // $data,0,$args);
} elsif ( $type < 0 ) {
# can pass part of data, only for streaming types
# remove from data what can be passed
die "body might change" if $self->{pass_encoded}[$dir];
$ibuf->[0][0] += $canpass;
my $passed_data = substr($data,0,$canpass,'');
$eobuf += $canpass;
$dlen = length($data);
$DEBUG && $self->{request}->xdebug(
"can pass($dir) part: pass($canpass)<data.len($dlen)");
$callback->($self,$passed_data,0,$args); # callback but continue
}
lib/App/HTTP_Proxy_IMP/IMP.pm view on Meta::CPAN
# cannot prepass anything, prepass should have been reset already
die "prepass must be point into future";
} elsif ( $canprepass >= $dlen) {
# can prepass everything
$ibuf->[0][0] += $dlen;
$callback->($self,$encoded_data // $data,0,$args); # callback but continue
$DEBUG && $self->{request}->xdebug(
"can prepass($dir) all: pass($canprepass)>=data.len($dlen)");
goto SEND2IMP;
} elsif ( $type < 0 ) {
# can prepass part of data, only for streaming types
# remove from data what can be prepassed
die "body might change" if $self->{pass_encoded}[$dir];
$ibuf->[0][0] += $canprepass;
my $passed_data = substr($data,0,$canprepass,'');
$eobuf += $canprepass;
$dlen = length($data);
$DEBUG && $self->{request}->xdebug(
"can prepass($dir) part: prepass($canprepass)<data.len($dlen)");
$callback->($self,$passed_data,0,$args); # callback but continue
}
lib/App/HTTP_Proxy_IMP/IMP.pm view on Meta::CPAN
defined $ibuf->[0][2] and # we have still data in ibuf!
die "there can be no gaps in ibuf";
}
if ( ! defined $ibuf->[-1][2] ) {
# replace buf, because it was empty
$ibuf->[-1] = [ $offset||$eobuf,$data,$type,$callback,$args ];
} elsif ( $type < 0
and $type == $ibuf->[-1][2]
and $callback == $ibuf->[-1][3]
) {
# streaming data, concatinate to existing buf of same type
$ibuf->[-1][1] .= $data;
} else {
# different type or non-streaming data, add new buf
push @$ibuf,[ $offset||$eobuf,$data,$type,$callback,$args ];
}
$DEBUG && $self->{request}->xdebug( "ibuf.length=%d",
$ibuf->[-1][0] + length($ibuf->[-1][1]) - $ibuf->[0][0]);
SEND2IMP:
$DEBUG && $self->{request}->xdebug("forward(%d) %d bytes type=%s off=%d to analyzer",
$dir,length($fwd),$type,$offset);
$self->{imp}->data($dir,$fwd,$offset,$type);
return length($fwd);
( run in 0.239 second using v1.01-cache-2.11-cpan-a5abf4f5562 )