comparison h2.t @ 735:832cd7cc8f53

Tests: made h2.t inner functions anonymous. No functional changes.
author Sergey Kandaurov <pluknet@nginx.com>
date Tue, 06 Oct 2015 14:47:49 +0300
parents 63c45a158cde
children dcbe4c3d6871
comparison
equal deleted inserted replaced
734:78b4e12e6efe 735:832cd7cc8f53
2660 my $table = $ctx->{dynamic_decode}; 2660 my $table = $ctx->{dynamic_decode};
2661 my %headers; 2661 my %headers;
2662 my $skip = 0; 2662 my $skip = 0;
2663 my ($index, $name, $value); 2663 my ($index, $name, $value);
2664 2664
2665 sub field { 2665 my $field = sub {
2666 my ($b) = @_; 2666 my ($b) = @_;
2667 my ($len, $s, $huff) = iunpack(7, @_); 2667 my ($len, $s, $huff) = iunpack(7, @_);
2668 2668
2669 my $field = substr($b, $s, $len); 2669 my $field = substr($b, $s, $len);
2670 $field = $huff ? dehuff($field) : $field; 2670 $field = $huff ? dehuff($field) : $field;
2671 $s += $len; 2671 $s += $len;
2672 return ($field, $s); 2672 return ($field, $s);
2673 } 2673 };
2674 2674
2675 sub add { 2675 my $add = sub {
2676 my ($h, $n, $v) = @_; 2676 my ($h, $n, $v) = @_;
2677 return $h->{$n} = $v unless exists $h->{$n}; 2677 return $h->{$n} = $v unless exists $h->{$n};
2678 $h->{$n} = [ $h->{$n} ] unless ref $h->{$n}; 2678 $h->{$n} = [ $h->{$n} ] unless ref $h->{$n};
2679 push @{$h->{$n}}, $v; 2679 push @{$h->{$n}}, $v;
2680 } 2680 };
2681 2681
2682 while ($skip < $length) { 2682 while ($skip < $length) {
2683 my $ib = unpack("\@$skip B8", $data); 2683 my $ib = unpack("\@$skip B8", $data);
2684 2684
2685 if (substr($ib, 0, 1) eq '1') { 2685 if (substr($ib, 0, 1) eq '1') {
2686 ($index, $skip) = iunpack(7, $data, $skip); 2686 ($index, $skip) = iunpack(7, $data, $skip);
2687 add(\%headers, 2687 $add->(\%headers,
2688 $table->[$index][0], $table->[$index][1]); 2688 $table->[$index][0], $table->[$index][1]);
2689 next; 2689 next;
2690 } 2690 }
2691 2691
2692 if (substr($ib, 0, 2) eq '01') { 2692 if (substr($ib, 0, 2) eq '01') {
2693 ($index, $skip) = iunpack(6, $data, $skip); 2693 ($index, $skip) = iunpack(6, $data, $skip);
2694 $name = $table->[$index][0]; 2694 $name = $table->[$index][0];
2695 2695
2696 ($name, $skip) = field($data, $skip) unless $name; 2696 ($name, $skip) = $field->($data, $skip) unless $name;
2697 ($value, $skip) = field($data, $skip); 2697 ($value, $skip) = $field->($data, $skip);
2698 2698
2699 splice @$table, 2699 splice @$table,
2700 $ctx->{static_table_size}, 0, [ $name, $value ]; 2700 $ctx->{static_table_size}, 0, [ $name, $value ];
2701 add(\%headers, $name, $value); 2701 $add->(\%headers, $name, $value);
2702 next; 2702 next;
2703 } 2703 }
2704 2704
2705 if (substr($ib, 0, 4) eq '0000') { 2705 if (substr($ib, 0, 4) eq '0000') {
2706 ($index, $skip) = iunpack(4, $data, $skip); 2706 ($index, $skip) = iunpack(4, $data, $skip);
2707 $name = $table->[$index][0]; 2707 $name = $table->[$index][0];
2708 2708
2709 ($name, $skip) = field($data, $skip) unless $name; 2709 ($name, $skip) = $field->($data, $skip) unless $name;
2710 ($value, $skip) = field($data, $skip); 2710 ($value, $skip) = $field->($data, $skip);
2711 2711
2712 add(\%headers, $name, $value); 2712 $add->(\%headers, $name, $value);
2713 next; 2713 next;
2714 } 2714 }
2715 } 2715 }
2716 2716
2717 return \%headers; 2717 return \%headers;