Tests: handling of HTTP/2 PUSH_PROMISE frames with CONTINUATION.
diff --git a/lib/Test/Nginx/HTTP2.pm b/lib/Test/Nginx/HTTP2.pm
index 989a0d5..37debc6 100644
--- a/lib/Test/Nginx/HTTP2.pm
+++ b/lib/Test/Nginx/HTTP2.pm
@@ -438,9 +438,15 @@
sub continuation {
my ($ctx, $buf, $len, $flags) = @_;
+ my %payload;
+
$ctx->{headers} .= substr($buf, 0, $len);
- return unless $flags & 0x4;
- { headers => hunpack($ctx, $ctx->{headers}, length($ctx->{headers})) };
+ $payload{promised} = $ctx->{promised} if $ctx->{promised};
+ return \%payload unless $flags & 0x4;
+
+ $ctx->{promised} = undef;
+ return { %payload, headers => hunpack($ctx, $ctx->{headers},
+ length($ctx->{headers})) };
}
sub data {
@@ -464,10 +470,13 @@
sub push_promise {
my ($ctx, $buf, $len, $flags) = @_;
+ my %payload;
$len -= 4;
- { promised => unpack("N", $buf),
- headers => hunpack($ctx, substr($buf, 4, $len), $len) };
+ $ctx->{promised} = $payload{promised} = unpack("N", $buf);
+ $ctx->{headers} = substr($buf, 4, $len);
+ return \%payload unless $flags & 0x4;
+ return { %payload, headers => hunpack($ctx, $ctx->{headers}, $len) };
}
sub ping {