Skip to content

Commit 7f9ffd1

Browse files
committed
Fix content-length setting for HTTP/2
The content length header is not set for http/2 requests, as described in #73. This fixes that by calling has-body before setting the headers, which has a side effect of setting the body serializer and the content-length header.
1 parent 58d8e4d commit 7f9ffd1

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

lib/Cro/HTTP2/RequestSerializer.rakumod

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ class Cro::HTTP2::RequestSerializer does Cro::Transform {
1212
whenever $in -> Cro::HTTP::Request $req {
1313
my $encoder = HTTP::HPACK::Encoder.new;
1414

15+
my $body-byte-stream;
16+
if $req.has-body {
17+
$body-byte-stream = $req.body-byte-stream;
18+
}
19+
1520
my $host;
1621
my @headers = $req.headers.map: {
1722
my $name = .name.lc;
@@ -46,7 +51,7 @@ class Cro::HTTP2::RequestSerializer does Cro::Transform {
4651
if $req.has-body {
4752
with $req.header('Content-Length') {
4853
my $counter = $_;
49-
whenever $req.body-byte-stream {
54+
whenever $body-byte-stream {
5055
$counter -= .elems;
5156
die 'Content-Length settings is incorrect: too small' if $counter < 0;
5257
emit Cro::HTTP2::Frame::Data.new(
@@ -60,7 +65,7 @@ class Cro::HTTP2::RequestSerializer does Cro::Transform {
6065
}
6166
}
6267
else {
63-
whenever $req.body-byte-stream {
68+
whenever $body-byte-stream {
6469
emit Cro::HTTP2::Frame::Data.new(
6570
flags => 0,
6671
stream-identifier => $req.http2-stream-id,

0 commit comments

Comments
 (0)