EV-Etcd
view release on metacpan or search on metacpan
t/stream_status.t view on Meta::CPAN
send_frame($peer, 4, 0, 0, ''); # SETTINGS
while (defined(my $head = read_exact($peer, 9))) {
my ($a, $b, $c, $type, $flags, $stream) = unpack 'C3 C C N', $head;
my $payload = read_exact($peer, ($a << 16) | ($b << 8) | $c);
last unless defined $payload;
if ($type == 4 && !($flags & 1)) {
send_frame($peer, 4, 1, 0, ''); # SETTINGS ACK
} elsif ($type == 6 && !($flags & 1)) {
send_frame($peer, 6, 1, 0, $payload); # PING ACK
} elsif ($type == 1) {
# HPACK: indexed :status=200, literal content-type=application/grpc,
# then literal grpc-status and grpc-message; no Huffman coding.
(my $text = $message) =~ s/\{n\}/++$requests/e;
my $headers = "\x88\x0f\x10\x10application/grpc";
for my $field (['grpc-status', $status], ['grpc-message', $text]) {
$headers .= pack('CC', 0, length $field->[0]) . $field->[0]
. pack('C', length $field->[1]) . $field->[1];
}
send_frame($peer, 1, 5, $stream, $headers); # END_HEADERS | END_STREAM
}
}
( run in 1.861 second using v1.01-cache-2.11-cpan-99fa8243a42 )