Branch Coverage

blib/lib/PAGI/Server/Connection.pm
Criterion Covered Total %
branch 614 1066 57.6


line true false branch
43 1 36 if ($value =~ /[\r\n\0]/)
52 0 37 if ($name =~ /[\r\n\0]/)
55 0 37 if ($name =~ /[[:cntrl:]]/)
65 1 0 if ($value =~ /[\r\n\0\s]/)
69 0 0 unless ($value =~ /^[\w\-\.]+$/)
196 44 280 if ($self->{'tls_enabled'})
213 256 64 if ($self->{'transport_type'} eq "tcp" and $handle and $handle->can("setsockopt"))
221 2 320 if ($self->{'transport_type'} eq 'unix') { }
255 65 elsif ($handle and $handle->can('peerhost')) { }
238 26 0 if ($self->{'alpn_protocol'} and $self->{'alpn_protocol'} eq "h2" and $self->{'h2_protocol'})
243 322 0 if ($self->{'timeout'} and $self->{'timeout'} > 0 and $self->{'server'})
247 0 0 unless $weak_self
248 0 0 if $weak_self->{'closed'}
262 2 549 unless $weak_self
268 56 493 if $weak_self->{'handling_request'}
273 13 536 if ($eof)
280 37 499 if ($weak_self->{'h2c_enabled'} and not $weak_self->{'is_h2'})
281 37 0 if (length $weak_self->{'buffer'} >= 24) { }
282 36 1 if ($weak_self->{'h2_protocol'} and 'PAGI::Server::Protocol::HTTP2'->detect_preface($weak_self->{'buffer'})) { }
299 204 332 if ($weak_self->{'is_h2'})
305 40 292 if ($weak_self->{'websocket_mode'})
311 12 280 if ($weak_self->{'receive_pending'} and not $weak_self->{'receive_pending'}->is_ready)
319 1 535 if (my $error = $@)
322 0 1 unless $weak_self
328 55 265 unless $weak_self
338 43 506 unless $self->{'idle_timer'}
340 0 506 unless $self->{'idle_timer'}->is_running
346 35 322 unless $self->{'idle_timer'}
347 322 0 if $self->{'idle_timer'}->is_running
350 322 0 if ($self->{'server'})
370 0 66 unless $weak_self
375 0 28 unless $weak_self
380 0 43 unless $weak_self
391 0 205 unless $self->{'h2_session'}
393 204 1 if (length $self->{'buffer'} > 0)
401 2 203 if ($self->{'h2_session'} and not $self->{'h2_session'}->want_read)
409 0 438 unless $self->{'h2_session'}
412 438 269 unless defined $data and length $data > 0
426 14 53 if (($pseudo->{':method'} // "") eq "CONNECT")
427 13 1 if (($pseudo->{':protocol'} // '') eq 'websocket') { }
435 0 1 unless $ws
436 0 1 if $ws->{'closed'}
450 53 13 unless ($is_websocket)
452 9 52 if ($h->[0] eq "accept" and $h->[1] =~ m[text/event-stream])
478 6 60 if ($self->{'max_body_size'} and $has_body)
480 1 11 if ($h->[0] eq "content-length")
481 1 0 if ($h->[1] > $self->{'max_body_size'})
485 0 1 unless $ws
486 0 1 if $ws->{'closed'}
504 0 65 unless $weak_self
505 0 65 if $weak_self->{'closed'}
514 1 27 unless $stream
516 16 0 if ($stream->{'is_websocket'} and $stream->{'ws_accepted'})
518 16 0 if length $data
520 0 16 if ($eof)
532 6 5 if (length $data > 0)
536 1 5 if ($self->{'max_body_size'} and length $stream->{'body'} > $self->{'max_body_size'})
549 5 5 if ($eof)
558 15 51 if ($stream->{'body_pending'} and not $stream->{'body_pending'}->is_ready)
569 2 41 unless $stream
575 0 41 if ($stream->{'is_websocket'}) { }
0 41 elsif ($stream->{'is_sse'}) { }
595 0 41 unless $weak_self
608 1 64 unless $stream_state
612 13 51 if ($stream_state->{'is_websocket'}) { }
9 42 elsif ($stream_state->{'is_sse'}) { }
632 2 62 if (my $error = $@)
634 2 0 if ($weak_self and not $stream_state->{'response_started'})
647 64 0 if $weak_self and $weak_self->{'server'}
694 42 0 defined $self->{'client_host'} ? :
0 42 keys %{$$self{'state'};} ? :
706 0 40 unless $weak_self
707 0 40 if $weak_self->{'closed'}
710 0 40 unless $ss
713 0 40 unless $weak_self
716 0 40 unless $ss
719 0 40 if (@{$ss->{'receive_queue'};})
724 40 0 if ($ss->{'body_complete'})
735 0 0 unless ($ss->{'body_pending'})
742 0 0 unless $ss
745 0 0 if (@{$ss->{'receive_queue'};})
754 0 0 $ss->{'body_complete'} ? :
780 88 35 if (@data_queue)
783 11 77 if (length $chunk > $max_len)
787 6 82 !@data_queue && $eof_pending ? :
792 2 33 if ($eof_pending)
802 0 149 unless $weak_self
803 0 149 if $weak_self->{'closed'}
807 39 110 if ($type eq 'http.response.start') { }
110 0 elsif ($type eq 'http.response.body') { }
808 0 39 unless my $ss = $weak_self->{'h2_streams'}{$stream_id}
809 0 39 if $ss->{'response_started'}
818 0 110 unless my $ss = $weak_self->{'h2_streams'}{$stream_id}
819 0 110 unless $ss->{'response_started'}
824 71 39 if ($more) { }
825 8 63 if (not $streaming_started) { }
828 8 0 if length $body
838 1 62 if ($weak_self->_get_write_buffer_size >= $weak_self->{'write_high_watermark'})
840 0 1 unless $weak_self
841 0 1 if $weak_self->{'closed'}
842 0 1 unless $weak_self->{'h2_streams'}{$stream_id}
844 63 0 if length $body
849 8 31 if ($streaming_started) { }
851 0 8 if ($weak_self->_get_write_buffer_size >= $weak_self->{'write_high_watermark'})
853 0 0 unless $weak_self
854 0 0 if $weak_self->{'closed'}
855 0 0 unless $weak_self->{'h2_streams'}{$stream_id}
858 6 2 if length $body
901 1 27 if ($name eq "sec-websocket-protocol")
930 13 0 defined $self->{'client_host'} ? :
0 13 keys %{$$self{'state'};} ? :
942 0 28 unless $weak_self
945 0 28 if $weak_self->{'closed'}
948 0 28 unless $ss
952 0 28 unless $weak_self
956 0 28 unless $ss
960 0 28 if (@{$ss->{'receive_queue'};})
965 12 16 unless ($ss->{'ws_connect_sent'})
972 9 29 if (@{$ss->{'receive_queue'};})
977 7 22 if $weak_self->{'closed'}
979 22 0 unless ($ss->{'body_pending'})
985 0 22 unless $ss
1001 0 19 unless $weak_self
1002 0 19 if $weak_self->{'closed'}
1005 0 19 unless $ss
1009 12 7 if ($type eq 'websocket.accept') { }
5 2 elsif ($type eq 'websocket.send') { }
2 0 elsif ($type eq 'websocket.close') { }
1010 0 12 if $ss->{'ws_accepted'}
1014 0 12 if (my $subprotocol = $event->{'subprotocol'})
1018 0 12 if (my $extra = $event->{'headers'})
1039 0 12 if (length $ss->{'body'} > 0)
1046 0 5 unless $ss->{'ws_accepted'}
1049 4 1 if (defined $event->{'text'}) { }
1 0 elsif (defined $event->{'bytes'}) { }
1070 1 1 unless ($ss->{'ws_accepted'})
1141 9 0 defined $self->{'client_host'} ? :
0 9 keys %{$$self{'state'};} ? :
1160 0 10 unless $weak_self
1161 0 10 if $weak_self->{'closed'}
1164 0 10 unless $ss
1167 0 10 unless $weak_self
1170 0 10 unless $ss
1173 0 10 if (@{$ss->{'receive_queue'};})
1178 8 2 unless ($ss->{'sse_request_sent'})
1189 0 4 if (@{$ss->{'receive_queue'};})
1194 2 2 if $weak_self->{'closed'}
1196 2 0 unless ($ss->{'body_pending'})
1202 0 2 unless $ss
1222 25 34 if (@data_queue)
1224 0 25 if (length $chunk > $max_len)
1237 0 30 unless $weak_self
1238 0 30 if $weak_self->{'closed'}
1241 0 30 unless $ss
1249 0 30 if ($weak_self->{'validate_events'})
1254 9 21 if ($type eq 'sse.start') { }
18 3 elsif ($type eq 'sse.send') { }
1 2 elsif ($type eq 'sse.comment') { }
2 0 elsif ($type eq 'sse.keepalive') { }
1255 0 9 if $ss->{'response_started'}
1264 1 1 if (lc $h->[0] eq "content-type")
1274 8 1 unless ($has_content_type)
1291 0 6 unless $weak_self
1292 0 6 if $weak_self->{'closed'}
1293 0 6 unless $weak_self->{'h2_streams'}{$stream_id}
1303 0 18 unless $ss->{'response_started'}
1306 0 18 if ($weak_self->_get_write_buffer_size >= $weak_self->{'write_high_watermark'})
1308 0 0 unless $weak_self
1309 0 0 if $weak_self->{'closed'}
1310 0 0 unless $weak_self->{'h2_streams'}{$stream_id}
1319 0 1 unless $ss->{'response_started'}
1330 2 0 if ($interval > 0) { }
1349 0 16 unless $frame
1356 5 5 if ($opcode == 1) { }
1 4 elsif ($opcode == 2) { }
4 0 elsif ($opcode == 8) { }
0 0 elsif ($opcode == 9) { }
1359 1 4 unless (defined $text)
1380 1 3 if (length $bytes == 1)
1391 3 0 if (length $bytes >= 2)
1397 2 1 if ($code == 1000 or $code == 1001 or $code == 1002 or $code == 1003) { }
0 1 elsif ($code >= 1007 and $code <= 1011) { }
0 2 elsif ($code >= 3000 and $code <= 4999) { }
1406 1 2 unless ($valid_code)
1418 2 0 if (length $reason > 0)
1421 1 1 unless (defined $decoded)
1478 239 0 unless $self->{'request_timeout'} and $self->{'request_timeout'} > 0
1479 0 0 unless $self->{'server'}
1480 0 0 if $self->{'stall_timer'}
1487 0 0 unless $weak_self
1488 0 0 if $weak_self->{'closed'}
1490 0 0 if ($weak_self->{'server'} and $weak_self->{'server'}->can("_log"))
1505 525 0 unless $self->{'stall_timer'}
1507 0 0 unless $self->{'stall_timer'}->is_running
1513 545 0 unless $self->{'stall_timer'}
1514 0 0 if $self->{'stall_timer'}->is_running
1515 0 0 if ($self->{'server'})
1525 21 0 unless $self->{'ws_idle_timeout'} and $self->{'ws_idle_timeout'} > 0
1526 0 0 unless $self->{'server'}
1527 0 0 if $self->{'ws_idle_timer'}
1534 0 0 unless $weak_self
1535 0 0 if $weak_self->{'closed'}
1536 0 0 if ($weak_self->{'server'} and $weak_self->{'server'}->can("_log"))
1551 82 0 unless $self->{'ws_idle_timer'}
1553 0 0 unless $self->{'ws_idle_timer'}->is_running
1559 322 0 unless $self->{'ws_idle_timer'}
1560 0 0 if $self->{'ws_idle_timer'}->is_running
1561 0 0 if ($self->{'server'})
1571 23 0 unless $self->{'sse_idle_timeout'} and $self->{'sse_idle_timeout'} > 0
1572 0 0 unless $self->{'server'}
1573 0 0 if $self->{'sse_idle_timer'}
1580 0 0 unless $weak_self
1581 0 0 if $weak_self->{'closed'}
1582 0 0 if ($weak_self->{'server'} and $weak_self->{'server'}->can("_log"))
1598 62 0 unless $self->{'sse_idle_timer'}
1600 0 0 unless $self->{'sse_idle_timer'}->is_running
1606 322 0 unless $self->{'sse_idle_timer'}
1607 0 0 if $self->{'sse_idle_timer'}->is_running
1608 0 0 if ($self->{'server'})
1629 0 361 unless $self->{'stream'}
1638 586 0 if (defined $data and not ref $data)
1649 1 1 unless @{$self->{'_drain_waiters'};}
1650 0 1 unless $self->{'stream'}
1655 1 0 if ($buffered < $self->{'write_low_watermark'})
1658 1 0 unless $f->is_ready
1669 0 1 if $self->{'_drain_check_active'}
1681 0 2 unless $weak_self
1684 0 2 if $prev_on_empty
1694 0 1 if ($buffered < $self->{'write_low_watermark'})
1715 0 0 unless $f->is_ready
1729 0 0 unless $interval and $interval > 0
1730 0 0 unless $self->{'server'}
1740 0 0 unless $weak_self
1741 0 0 if $weak_self->{'closed'}
1742 0 0 unless $weak_self->{'websocket_mode'}
1752 0 0 if ($weak_self->{'ws_keepalive_timeout'} > 0)
1768 0 0 if $self->{'ws_pong_timeout'}
1769 0 0 unless $self->{'ws_keepalive_timeout'} > 0
1770 0 0 unless $self->{'server'}
1777 0 0 unless $weak_self
1778 0 0 if $weak_self->{'closed'}
1780 0 0 if ($weak_self->{'ws_waiting_pong'})
1782 0 0 if ($weak_self->{'server'} and $weak_self->{'server'}->can("_log"))
1801 322 0 unless $self->{'ws_pong_timeout'}
1802 0 0 if $self->{'ws_pong_timeout'}->is_running
1803 0 0 if ($self->{'server'})
1815 322 0 unless $self->{'ws_keepalive_timer'}
1816 0 0 if $self->{'ws_keepalive_timer'}->is_running
1817 0 0 if ($self->{'server'})
1832 0 2 unless $interval and $interval > 0
1833 0 2 unless $self->{'server'}
1842 0 6 unless $weak_self
1843 0 6 if $weak_self->{'closed'}
1846 6 0 unless $text =~ /^:/
1849 6 0 if (my $writer = $weak_self->{'sse_keepalive_writer'})
1863 322 2 unless $self->{'sse_keepalive_timer'}
1864 2 0 if $self->{'sse_keepalive_timer'}->is_running
1865 2 0 if ($self->{'server'})
1875 0 293 if $self->{'closed'}
1876 11 282 if $self->{'handling_request'}
1881 2 280 unless $request
1887 5 275 if ($request->{'error'})
1896 8 267 if ($self->{'max_body_size'} and defined $request->{'content_length'})
1897 1 7 if ($request->{'content_length'} > $self->{'max_body_size'})
1916 21 253 if ($is_websocket) { }
14 239 elsif ($is_sse) { }
1941 21 829 if ($name eq 'upgrade' and lc $value eq 'websocket') { }
258 571 elsif ($name eq 'connection') { }
21 550 elsif ($name eq 'sec-websocket-key') { }
1946 21 237 if lc($value) =~ /upgrade/
1967 15 708 if ($name eq "accept")
1969 14 1 if $value =~ m[text/event-stream]
1987 15 223 if (my $error = $@)
1990 2 13 if ($self->{'response_started'}) { }
1999 15 0 if $self->{'server'}
2010 223 0 if $self->{'server'}
2018 208 15 if ($keep_alive) { }
2030 1 207 if (length $self->{'buffer'} > 0)
2047 214 245 if ($header->[0] eq "connection")
2054 220 3 if ($http_version eq "1.1")
2055 13 207 if $connection_header and $connection_header =~ /close/
2060 3 0 if ($http_version eq "1.0")
2061 1 2 if $connection_header and $connection_header =~ /keep-alive/
2100 237 2 defined $self->{'client_host'} ? :
3 236 keys %{$$self{'state'};} ? :
2127 0 59 unless $weak_self
2128 0 59 if $weak_self->{'closed'}
2132 0 59 unless $weak_self
2133 0 59 if $weak_self->{'closed'}
2136 0 59 if (@{$weak_self->{'receive_queue'};})
2141 1 58 if ($body_complete)
2142 1 0 unless ($weak_self->{'receive_pending'})
2146 0 1 if ($weak_self->{'closed'})
2154 1 0 if ref $result eq "HASH"
2156 0 0 if (@{$weak_self->{'receive_queue'};})
2163 40 18 unless ($has_body)
2173 0 18 if ($expect_continue and not $continue_sent)
2179 1 17 if ($is_chunked)
2182 0 0 unless ($weak_self->{'receive_pending'})
2189 0 0 if (@{$weak_self->{'receive_queue'};})
2198 0 0 if (ref $data eq "HASH" and $data->{'error'})
2205 1 0 if ($consumed > 0)
2212 0 1 if ($weak_self->{'max_body_size'} and $bytes_read > $weak_self->{'max_body_size'})
2220 1 0 if ($complete)
2225 1 0 $complete ? :
2232 0 0 unless ($weak_self->{'receive_pending'})
2240 0 0 if $weak_self->{'closed'}
2248 0 17 if ($remaining <= 0)
2259 12 0 unless ($weak_self->{'receive_pending'})
2266 0 12 if (@{$weak_self->{'receive_queue'};})
2272 0 17 if ($weak_self->{'closed'} and length $weak_self->{'buffer'} == 0)
2277 12 5 $remaining < $chunk_size ? :
2278 12 5 if length $weak_self->{'buffer'} < $to_read
2284 12 5 $bytes_read < $content_length ? :
2286 5 12 unless ($more)
2320 3 236 if ($is_http10)
2322 1 1 if ($h->[0] eq "connection" and lc($h->[1]) =~ /keep-alive/)
2333 0 469 unless $weak_self
2334 0 469 if $weak_self->{'closed'}
2342 0 469 if ($weak_self->{'validate_events'})
2347 226 243 if ($type eq 'http.response.start') { }
239 4 elsif ($type eq 'http.response.body') { }
1 3 elsif ($type eq 'http.response.trailers') { }
3 0 elsif ($type eq 'http.fullflush') { }
2348 0 226 if $response_started
2360 62 255 if (lc $h->[0] eq "content-length")
2372 5 221 if ($is_head_request or $is_http10) { }
2374 3 2 if ($is_http10)
2375 1 2 if (not $has_content_length) { }
1 1 elsif ($client_wants_keepalive) { }
2396 0 239 unless $response_started
2397 1 238 if $body_complete
2400 2 236 if ($is_head_request)
2402 2 0 unless ($more)
2411 0 236 if ($weak_self->_get_write_buffer_size >= $weak_self->{'write_high_watermark'})
2414 0 0 unless $weak_self
2415 0 0 if $weak_self->{'closed'}
2426 29 207 if (defined $file) { }
6 201 elsif (defined $fh) { }
2445 169 32 if ($chunked) { }
2446 161 8 if (length $body)
2452 32 0 if length $body
2456 186 15 unless ($more)
2458 153 33 if ($chunked and not $expects_trailers)
2465 0 1 unless $response_started
2466 0 1 unless $expects_trailers
2467 0 1 unless $chunked
2487 1 2 unless (exists $weak_self->{'extensions'}{'fullflush'})
2494 2 0 if ($handle and $handle->can("setsockopt"))
2517 0 22 if $self->{'closed'}
2518 0 22 if $self->{'response_started'}
2538 9 263 unless $self->{'access_log'}
2539 0 263 unless $self->{'current_request'}
2545 263 0 if ($self->{'request_start'})
2551 66 197 if ($now != $_cached_log_time)
2570 2 0 $self->{'transport_type'} eq 'unix' ? :
2574 263 0 if ($formatter) { }
2581 0 0 if defined $query and length $query
2591 223 322 if $self->{'_disconnect_handled'}
2599 0 2 if (not $reason and $self->{'server'} and $self->{'server'}{'shutting_down'})
2608 31 0 if ($self->{'current_connection_state'} and not $self->{'websocket_mode'} and not $self->{'sse_mode'})
2614 18 304 if ($self->{'websocket_mode'}) { }
14 290 elsif ($self->{'sse_mode'}) { }
2629 16 306 if ($self->{'receive_pending'} and not $self->{'receive_pending'}->is_ready)
2645 0 3 unless $self->{'stream'}
2646 0 3 if $self->{'close_sent'}
2660 225 322 if $self->{'closed'}
2667 322 0 if ($self->{'h2_streams'})
2669 9 16 if ($stream->{'body_pending'} and not $stream->{'body_pending'}->is_ready)
2671 2 7 $stream->{'is_sse'} ? :
2678 62 260 if ($self->{'h2_session'})
2687 322 0 if ($self->{'server'})
2691 1 177 if ($self->{'server'}{'shutting_down'} and keys %{$$self{"server"}{"connections"};} == 0 and $self->{'server'}{'drain_complete'} and not $self->{'server'}{'drain_complete'}->is_ready)
2719 18 304 if ($self->{'websocket_mode'}) { }
14 290 elsif ($self->{'sse_mode'}) { }
2732 0 18 unless ($future->is_ready)
2740 322 0 if ($self->{'stream'})
2765 0 44 unless $handle and $handle->isa("IO::Socket::SSL")
2777 44 0 if (my $version_str = $handle->get_sslversion)
2790 44 0 if (my $cipher = $handle->get_cipher)
2796 0 44 if ($ssl and $ssl->can("get_cipher_bits"))
2804 0 0 if ($current_cipher)
2810 0 0 if defined $id
2813 0 0 if ($@)
2824 44 0 if ($cert)
2829 0 44 if ($@)
2837 8 36 if ($client_cert)
2845 8 0 if (my $ssl = $handle->_get_ssl_object)
2847 0 8 if ($chain_obj)
2850 0 0 if $cert
2860 8 0 if $subject
2865 8 0 if (my $ssl = $handle->_get_ssl_object)
2867 0 8 if ($result != 0)
2873 0 44 if ($@)
2884 42 211 $self->{'tls_enabled'} ? :
2890 0 34 $self->{'tls_enabled'} ? :
2899 44 294 if ($self->{'tls_enabled'} and $self->{'tls_info'}) { }
294 0 elsif (not $self->{'tls_enabled'}) { }
2929 0 14 if (my $error = $@)
2931 0 0 unless ($self->{'sse_started'})
2939 13 1 if ($self->{'sse_started'} and not $self->{'closed'} and $self->{'stream'} and $self->{'stream'}->write_handle)
2975 14 0 defined $self->{'client_host'} ? :
0 14 keys %{$$self{'state'};} ? :
2996 0 0 $weak_self ? :
3001 0 5 unless $weak_self
3004 0 5 if $weak_self->{'closed'}
3007 0 5 unless $weak_self
3010 0 5 if $weak_self->{'closed'}
3013 0 5 if (@{$weak_self->{'receive_queue'};})
3018 1 4 if ($has_body and not $body_complete)
3023 0 0 unless ($weak_self->{'receive_pending'})
3029 0 0 if (@{$weak_self->{'receive_queue'};})
3034 0 1 if $weak_self->{'closed'}
3039 0 1 $remaining < length $weak_self->{'buffer'} ? :
3044 0 1 $bytes_read < $content_length ? :
3045 1 0 unless $more
3055 2 2 unless ($body_complete)
3066 1 2 if (@{$weak_self->{'receive_queue'};})
3071 0 2 if $weak_self->{'closed'}
3073 2 0 unless ($weak_self->{'receive_pending'})
3093 17 26 if (defined $event->{'event'} and length $event->{'event'})
3095 1 16 if $event->{'event'} =~ /[\r\n]/
3104 7 35 if (defined $event->{'id'} and length $event->{'id'})
3106 1 6 if $event->{'id'} =~ /[\r\n]/
3110 7 34 if (defined $event->{'retry'})
3112 2 5 unless $event->{'retry'} =~ /\A[0-9]+\z/
3125 8 1 unless $line =~ /^:/
3139 0 32 unless $weak_self
3140 0 32 if $weak_self->{'closed'}
3148 0 32 if ($weak_self->{'validate_events'})
3153 14 18 if ($type eq 'sse.start') { }
15 3 elsif ($type eq 'sse.send') { }
2 1 elsif ($type eq 'sse.comment') { }
0 1 elsif ($type eq 'sse.keepalive') { }
1 0 elsif ($type eq 'http.fullflush') { }
3154 0 14 if $weak_self->{'sse_started'}
3165 7 0 if (lc $h->[0] eq "content-type")
3172 7 7 unless ($has_content_type)
3191 0 0 unless $weak_self
3192 0 0 if $weak_self->{'closed'}
3198 0 15 unless $weak_self->{'sse_started'}
3201 0 15 if ($weak_self->_get_write_buffer_size >= $weak_self->{'write_high_watermark'})
3203 0 0 unless $weak_self
3204 0 0 if $weak_self->{'closed'}
3215 0 2 unless $weak_self->{'sse_started'}
3227 0 0 if ($interval > 0) { }
3237 0 1 unless (exists $weak_self->{'extensions'}{'fullflush'})
3244 1 0 if ($handle and $handle->can("setsockopt"))
3279 2 18 if (my $error = $@)
3281 2 0 unless ($self->{'websocket_accepted'})
3303 21 97 if ($name eq 'sec-websocket-key') { }
2 95 elsif ($name eq 'sec-websocket-protocol') { }
3336 21 0 defined $self->{'client_host'} ? :
0 21 keys %{$$self{'state'};} ? :
3350 0 154 unless $weak_self
3354 108 46 if (@{$weak_self->{'receive_queue'};})
3359 0 46 if $weak_self->{'closed'}
3362 0 46 unless $weak_self
3366 0 46 if (@{$weak_self->{'receive_queue'};})
3371 0 46 if $weak_self->{'closed'}
3374 19 27 unless ($connect_sent)
3381 0 0 unless ($weak_self->{'receive_pending'})
3387 0 0 if (@{$weak_self->{'receive_queue'};})
3393 0 27 if $weak_self->{'closed'}
3397 27 27 if (@{$weak_self->{'receive_queue'};})
3402 0 27 if $weak_self->{'closed'}
3404 27 0 unless ($weak_self->{'receive_pending'})
3427 0 42 unless $weak_self
3428 0 42 if $weak_self->{'closed'}
3436 0 42 if ($weak_self->{'validate_events'})
3441 20 22 if ($type eq 'websocket.accept') { }
19 3 elsif ($type eq 'websocket.send') { }
3 0 elsif ($type eq 'websocket.close') { }
0 0 elsif ($type eq 'websocket.keepalive') { }
3442 0 20 if $weak_self->{'websocket_accepted'}
3458 1 19 if (my $subprotocol = $event->{'subprotocol'})
3464 1 18 if (my $extra_headers = $event->{'headers'})
3486 0 18 if ($weak_self->{'receive_pending'} and not $weak_self->{'receive_pending'}->is_ready)
3493 0 18 if (length $weak_self->{'buffer'} > 0)
3498 0 19 unless $weak_self->{'websocket_mode'}
3501 0 19 if ($weak_self->_get_write_buffer_size >= $weak_self->{'write_high_watermark'})
3503 0 0 unless $weak_self
3504 0 0 if $weak_self->{'closed'}
3509 18 1 if (defined $event->{'text'}) { }
1 0 elsif (defined $event->{'bytes'}) { }
3530 1 2 unless ($weak_self->{'websocket_accepted'})
3549 0 2 if ($weak_self->{'close_received'})
3554 0 0 unless $weak_self->{'websocket_mode'}
3559 0 0 if ($interval > 0) { }
3578 0 40 unless $self->{'websocket_mode'}
3579 0 40 if $self->{'closed'}
3598 128 0 if ($rsv and ref $rsv eq "ARRAY")
3599 0 128 if (grep {$_;} @$rsv)
3608 0 128 if ($opcode >= 3 and $opcode <= 7 or $opcode >= 11 and $opcode <= 15)
3616 0 128 if ($opcode == 8 || $opcode == 9 || $opcode == 10 and length $bytes > 125)
3622 127 1 if ($opcode == 1) { }
1 0 elsif ($opcode == 2) { }
0 0 elsif ($opcode == 8) { }
0 0 elsif ($opcode == 9) { }
0 0 elsif ($opcode == 10) { }
3625 2 125 unless (defined $text)
3632 1 124 if (@{$self->{'receive_queue'};} >= $self->{'max_receive_queue'})
3645 0 1 if (@{$self->{'receive_queue'};} >= $self->{'max_receive_queue'})
3662 0 0 if (length $bytes == 1)
3668 0 0 if (length $bytes >= 2)
3676 0 0 if ($code == 1000 or $code == 1001 or $code == 1002 or $code == 1003) { }
0 0 elsif ($code >= 1007 and $code <= 1011) { }
0 0 elsif ($code >= 3000 and $code <= 4999) { }
3685 0 0 unless ($valid_code)
3692 0 0 if (length $reason > 0)
3695 0 0 unless (defined $decoded)
3704 0 0 unless ($self->{'close_sent'})
3734 13 0 if ($self->{'receive_pending'} and not $self->{'receive_pending'}->is_ready and @{$self->{'receive_queue'};})
3749 0 29 unless defined $file_size
3756 25 4 if ($self->{'sync_file_threshold'} > 0 and $length <= $self->{'sync_file_threshold'}) { }
3759 0 25 unless open my $fh, "<:raw", $file
3760 3 22 if $offset
3764 0 25 unless defined $bytes_read
3766 1 24 if ($chunked) { }
3777 4 0 $self->{'server'} ? :
3778 0 4 unless $loop
3784 2 6 if ($chunked) { }
3799 1 3 if ($chunked)
3812 1 5 if ($offset and $offset > 0)
3813 0 1 unless seek $fh, $offset, 0
3825 4 8 if (defined $remaining)
3826 4 0 if $remaining < $to_read
3827 2 2 if $to_read <= 0
3832 0 10 unless defined $bytes_read
3833 4 6 if $bytes_read == 0
3837 3 3 if ($chunked) { }
3845 2 4 if (defined $remaining)
3851 3 3 if ($chunked)