comparison lib/Test/Nginx/HTTP2.pm @ 1733:e306bd77321d

Tests: handling of HTTP/2 PUSH_PROMISE frames with CONTINUATION.
author Sergey Kandaurov <pluknet@nginx.com>
date Fri, 17 Sep 2021 18:56:36 +0300
parents 3fe652bc9dae
children 6d3a8f4eb9b2
comparison
equal deleted inserted replaced
1732:41ca4b00c2d0 1733:e306bd77321d
436 { headers => hunpack($ctx, $buf, $len) }; 436 { headers => hunpack($ctx, $buf, $len) };
437 } 437 }
438 438
439 sub continuation { 439 sub continuation {
440 my ($ctx, $buf, $len, $flags) = @_; 440 my ($ctx, $buf, $len, $flags) = @_;
441 my %payload;
442
441 $ctx->{headers} .= substr($buf, 0, $len); 443 $ctx->{headers} .= substr($buf, 0, $len);
442 return unless $flags & 0x4; 444 $payload{promised} = $ctx->{promised} if $ctx->{promised};
443 { headers => hunpack($ctx, $ctx->{headers}, length($ctx->{headers})) }; 445 return \%payload unless $flags & 0x4;
446
447 $ctx->{promised} = undef;
448 return { %payload, headers => hunpack($ctx, $ctx->{headers},
449 length($ctx->{headers})) };
444 } 450 }
445 451
446 sub data { 452 sub data {
447 my ($ctx, $buf, $len) = @_; 453 my ($ctx, $buf, $len) = @_;
448 return { data => substr($buf, 0, $len) }; 454 return { data => substr($buf, 0, $len) };
462 return \%payload; 468 return \%payload;
463 } 469 }
464 470
465 sub push_promise { 471 sub push_promise {
466 my ($ctx, $buf, $len, $flags) = @_; 472 my ($ctx, $buf, $len, $flags) = @_;
473 my %payload;
467 $len -= 4; 474 $len -= 4;
468 475
469 { promised => unpack("N", $buf), 476 $ctx->{promised} = $payload{promised} = unpack("N", $buf);
470 headers => hunpack($ctx, substr($buf, 4, $len), $len) }; 477 $ctx->{headers} = substr($buf, 4, $len);
478 return \%payload unless $flags & 0x4;
479 return { %payload, headers => hunpack($ctx, $ctx->{headers}, $len) };
471 } 480 }
472 481
473 sub ping { 482 sub ping {
474 my ($ctx, $buf, $len) = @_; 483 my ($ctx, $buf, $len) = @_;
475 return { value => unpack "A$len", $buf }; 484 return { value => unpack "A$len", $buf };