Branch Coverage

blib/lib/PAGI/Server/Connection.pm
Criterion Covered Total %
branch 723 1216 59.4


line true false branch
47 1 42 if ($value =~ /[\r\n\0]/)
56 0 43 if ($name =~ /[\r\n\0]/)
59 0 43 if ($name =~ /[[:cntrl:]]/)
69 1 0 if ($value =~ /[\r\n\0\s]/)
73 0 0 unless ($value =~ /^[\w\-\.]+$/)
202 45 241 if ($self->{'tls_enabled'})
219 207 75 if ($self->{'transport_type'} eq "tcp" and $handle and $handle->can("setsockopt"))
227 2 282 if ($self->{'transport_type'} eq 'unix') { }
206 76 elsif ($handle and $handle->can('peerhost')) { }
244 29 0 if ($self->{'alpn_protocol'} and $self->{'alpn_protocol'} eq "h2" and $self->{'h2_protocol'})
249 284 0 if ($self->{'timeout'} and $self->{'timeout'} > 0 and $self->{'server'})
253 0 0 unless $weak_self
254 0 0 if $weak_self->{'closed'}
268 2 537 unless $weak_self
274 73 464 if $weak_self->{'handling_request'}
279 12 525 if ($eof)
286 44 481 if ($weak_self->{'h2c_enabled'} and not $weak_self->{'is_h2'})
287 44 0 if (length $weak_self->{'buffer'} >= 24) { }
288 43 1 if ($weak_self->{'h2_protocol'} and 'PAGI::Server::Protocol::HTTP2'->detect_preface($weak_self->{'buffer'})) { }
305 235 290 if ($weak_self->{'is_h2'})
311 57 233 if ($weak_self->{'websocket_mode'})
317 12 221 if ($weak_self->{'receive_pending'} and not $weak_self->{'receive_pending'}->is_ready)
325 1 524 if (my $error = $@)
328 0 1 unless $weak_self
334 61 220 unless $weak_self
344 60 477 unless $self->{'idle_timer'}
352 143 334 if defined $self->{'_idle_reset_at'} and $now - $self->{'_idle_reset_at'} < "0.05"
356 0 334 unless $self->{'idle_timer'}->is_running
362 43 284 unless $self->{'idle_timer'}
363 284 0 if $self->{'idle_timer'}->is_running
366 284 0 if ($self->{'server'})
386 0 71 unless $weak_self
391 0 22 unless $weak_self
396 0 43 unless $weak_self
407 0 236 unless $self->{'h2_session'}
409 235 1 if (length $self->{'buffer'} > 0)
417 2 234 if ($self->{'h2_session'} and not $self->{'h2_session'}->want_read)
425 0 498 unless $self->{'h2_session'}
428 498 302 unless defined $data and length $data > 0
442 17 55 if (($pseudo->{':method'} // "") eq "CONNECT")
443 16 1 if (($pseudo->{':protocol'} // '') eq 'websocket') { }
451 0 1 unless $ws
452 0 1 if $ws->{'closed'}
466 55 16 unless ($is_websocket)
468 17 46 if ($h->[0] eq "accept" and $h->[1] =~ m[text/event-stream])
494 6 65 if ($self->{'max_body_size'} and $has_body)
496 1 11 if ($h->[0] eq "content-length")
497 1 0 if ($h->[1] > $self->{'max_body_size'})
501 0 1 unless $ws
502 0 1 if $ws->{'closed'}
520 0 70 unless $weak_self
521 0 70 if $weak_self->{'closed'}
530 1 21 unless $stream
532 16 0 if ($stream->{'is_websocket'} and $stream->{'ws_accepted'})
534 16 0 if length $data
536 0 16 if ($eof)
548 3 2 if (length $data > 0)
552 1 2 if ($self->{'max_body_size'} and length $stream->{'body'} > $self->{'max_body_size'})
573 2 2 if ($eof)
582 15 45 if ($stream->{'body_pending'} and not $stream->{'body_pending'}->is_ready)
593 2 41 unless $stream
599 0 41 if ($stream->{'is_websocket'}) { }
5 36 elsif ($stream->{'is_sse'}) { }
629 0 41 unless $weak_self
642 1 69 unless $stream_state
646 16 53 if ($stream_state->{'is_websocket'}) { }
17 36 elsif ($stream_state->{'is_sse'}) { }
671 5 64 if ($weak_self and not $stream_state->{'response_started'}) { }
0 64 elsif ($error) { }
672 1 4 $error ? :
685 3 2 if $stream_state->{'connection_state'}
693 69 0 if $weak_self and $weak_self->{'server'}
748 39 0 defined $self->{'client_host'} ? :
0 39 keys %{$$self{'state'};} ? :
758 0 35 unless $weak_self
759 0 35 if $weak_self->{'closed'}
762 0 35 unless $ss
765 0 35 unless $weak_self
768 0 35 unless $ss
771 0 35 if (@{$ss->{'receive_queue'};})
776 35 0 if ($ss->{'body_complete'})
787 0 0 unless ($ss->{'body_pending'})
794 0 0 unless $ss
797 0 0 if (@{$ss->{'receive_queue'};})
806 0 0 $ss->{'body_complete'} ? :
835 0 132 unless $ss
838 98 34 if (@$q)
841 15 83 if (length $chunk > $max_len)
853 5 49 if (($ss->{'send_queue_bytes'} // 0) < $weak_self->{'write_low_watermark'} and $ss->{'stream_drain_waiters'} and @{$ss->{'stream_drain_waiters'};})
867 4 50 if (($ss->{'send_queue_bytes'} // 0) < $weak_self->{'write_low_watermark'} and $ss->{'transport_drain_fires'} and @{$ss->{'transport_drain_fires'};})
875 8 90 !@$q && $eof_pending ? :
880 2 32 if ($eof_pending)
890 0 141 unless $weak_self
891 0 141 if $weak_self->{'closed'}
895 33 108 if ($type eq 'http.response.start') { }
108 0 elsif ($type eq 'http.response.body') { }
896 0 33 unless my $ss = $weak_self->{'h2_streams'}{$stream_id}
897 0 33 if $ss->{'response_started'}
899 33 0 if $ss->{'connection_state'}
906 33 0 unless (grep {lc $_->[0] eq "date";} @response_headers)
911 0 108 unless my $ss = $weak_self->{'h2_streams'}{$stream_id}
912 0 108 unless $ss->{'response_started'}
917 75 33 if ($more) { }
918 10 65 if (not $streaming_started) { }
923 10 0 if (length $body)
930 10 0 if $ss->{'transport_state'}
943 5 60 if (($ss->{'send_queue_bytes'} // 0) >= $weak_self->{'write_high_watermark'})
945 0 5 unless $weak_self
946 0 5 if $weak_self->{'closed'}
947 0 5 unless $weak_self->{'h2_streams'}{$stream_id}
949 65 0 if (length $body)
954 65 0 if $ss->{'transport_state'}
959 10 23 if ($streaming_started) { }
962 0 10 if (($ss->{'send_queue_bytes'} // 0) >= $weak_self->{'write_high_watermark'})
964 0 0 unless $weak_self
965 0 0 if $weak_self->{'closed'}
966 0 0 unless $weak_self->{'h2_streams'}{$stream_id}
969 8 2 if (length $body)
974 10 0 if $ss->{'transport_state'}
1017 1 33 if ($name eq "sec-websocket-protocol")
1042 17 0 defined $self->{'client_host'} ? :
0 17 keys %{$$self{'state'};} ? :
1052 0 31 unless $weak_self
1055 0 31 if $weak_self->{'closed'}
1058 0 31 unless $ss
1062 0 31 unless $weak_self
1066 0 31 unless $ss
1070 0 31 if (@{$ss->{'receive_queue'};})
1075 15 16 unless ($ss->{'ws_connect_sent'})
1082 9 29 if (@{$ss->{'receive_queue'};})
1087 7 22 if $weak_self->{'closed'}
1089 22 0 unless ($ss->{'body_pending'})
1095 0 22 unless $ss
1111 0 25 unless $weak_self
1112 0 25 if $weak_self->{'closed'}
1115 0 25 unless $ss
1119 12 13 if ($type eq 'websocket.accept') { }
5 8 elsif ($type eq 'websocket.send') { }
2 6 elsif ($type eq 'websocket.http.response.start') { }
3 3 elsif ($type eq 'websocket.http.response.body') { }
3 0 elsif ($type eq 'websocket.close') { }
1120 0 12 if $ss->{'ws_accepted'}
1124 0 12 if (my $subprotocol = $event->{'subprotocol'})
1128 0 12 if (my $extra = $event->{'headers'})
1149 0 12 if (length $ss->{'body'} > 0)
1156 0 5 unless $ss->{'ws_accepted'}
1159 4 1 if (defined $event->{'text'}) { }
1 0 elsif (defined $event->{'bytes'}) { }
1180 0 2 if $ss->{'ws_accepted'}
1181 0 2 if $ss->{'ws_denial_started'}
1191 0 3 unless $ss->{'ws_denial_started'}
1192 0 3 if $ss->{'response_started'}
1194 1 2 if $event->{'more'}
1205 2 1 unless ($ss->{'ws_accepted'})
1276 18 0 defined $self->{'client_host'} ? :
0 18 keys %{$$self{'state'};} ? :
1293 0 14 unless $weak_self
1294 0 14 if $weak_self->{'closed'}
1297 0 14 unless $ss
1300 0 14 unless $weak_self
1303 0 14 unless $ss
1306 0 14 if (@{$ss->{'receive_queue'};})
1311 12 2 unless ($ss->{'sse_request_sent'})
1322 0 4 if (@{$ss->{'receive_queue'};})
1327 2 2 if $weak_self->{'closed'}
1329 2 0 unless ($ss->{'body_pending'})
1335 0 2 unless $ss
1361 0 79 unless $ss
1364 34 45 if (@$q)
1367 4 30 if (length $chunk > $max_len)
1378 0 31 if (($ss->{'send_queue_bytes'} // 0) < $weak_self->{'write_low_watermark'} and $ss->{'stream_drain_waiters'} and @{$ss->{'stream_drain_waiters'};})
1389 1 30 if (($ss->{'send_queue_bytes'} // 0) < $weak_self->{'write_low_watermark'} and $ss->{'transport_drain_fires'} and @{$ss->{'transport_drain_fires'};})
1402 1 44 if $ss->{'sse_closing'}
1410 0 52 unless $weak_self
1413 0 52 unless $ss
1420 1 51 if ($ss->{'sse_close_sent'})
1421 0 1 if $type eq "sse.close"
1427 1 50 if ($ss->{'sse_decline_started'} and not $type =~ /^sse\.http\.response\./)
1431 0 50 if $weak_self->{'closed'}
1437 0 50 if ($weak_self->{'validate_events'})
1442 14 36 if ($type eq 'sse.start') { }
24 12 elsif ($type eq 'sse.send') { }
1 11 elsif ($type eq 'sse.comment') { }
2 9 elsif ($type eq 'sse.keepalive') { }
1 8 elsif ($type eq 'sse.close') { }
4 4 elsif ($type eq 'sse.http.response.start') { }
4 0 elsif ($type eq 'sse.http.response.body') { }
1443 0 14 if $ss->{'response_started'}
1452 1 1 if (lc $h->[0] eq "content-type")
1462 13 1 unless ($has_content_type)
1468 14 0 unless (grep {lc $_->[0] eq "date";} @final_headers)
1489 0 6 unless $weak_self
1490 0 6 if $weak_self->{'closed'}
1491 0 6 unless my $ss = $weak_self->{'h2_streams'}{$stream_id}
1502 0 24 unless $ss->{'response_started'}
1506 0 24 if (($ss->{'send_queue_bytes'} // 0) >= $weak_self->{'write_high_watermark'})
1508 0 0 unless $weak_self
1509 0 0 if $weak_self->{'closed'}
1510 0 0 unless $weak_self->{'h2_streams'}{$stream_id}
1518 24 0 if $ss->{'transport_state'}
1523 0 1 unless $ss->{'response_started'}
1528 1 0 if $ss->{'transport_state'}
1536 2 0 if ($interval > 0) { }
1550 1 0 if defined $event->{'reason'}
1556 1 3 if $ss->{'response_started'}
1557 0 3 if $ss->{'sse_decline_started'}
1567 0 4 unless $ss->{'sse_decline_started'}
1568 0 4 if $ss->{'response_started'}
1570 1 3 if $event->{'more'}
1592 0 16 unless $frame
1599 5 5 if ($opcode == 1) { }
1 4 elsif ($opcode == 2) { }
4 0 elsif ($opcode == 8) { }
0 0 elsif ($opcode == 9) { }
1602 1 4 unless (defined $text)
1623 1 3 if (length $bytes == 1)
1634 3 0 if (length $bytes >= 2)
1640 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) { }
1649 1 2 unless ($valid_code)
1661 2 0 if (length $reason > 0)
1664 1 1 unless (defined $decoded)
1721 172 0 unless $self->{'request_timeout'} and $self->{'request_timeout'} > 0
1722 0 0 unless $self->{'server'}
1723 0 0 if $self->{'stall_timer'}
1730 0 0 unless $weak_self
1731 0 0 if $weak_self->{'closed'}
1733 0 0 if ($weak_self->{'server'} and $weak_self->{'server'}->can("_log"))
1748 401 0 unless $self->{'stall_timer'}
1750 0 0 unless $self->{'stall_timer'}->is_running
1756 439 0 unless $self->{'stall_timer'}
1757 0 0 if $self->{'stall_timer'}->is_running
1758 0 0 if ($self->{'server'})
1768 22 0 unless $self->{'ws_idle_timeout'} and $self->{'ws_idle_timeout'} > 0
1769 0 0 unless $self->{'server'}
1770 0 0 if $self->{'ws_idle_timer'}
1777 0 0 unless $weak_self
1778 0 0 if $weak_self->{'closed'}
1779 0 0 if ($weak_self->{'server'} and $weak_self->{'server'}->can("_log"))
1794 99 0 unless $self->{'ws_idle_timer'}
1796 0 0 unless $self->{'ws_idle_timer'}->is_running
1802 284 0 unless $self->{'ws_idle_timer'}
1803 0 0 if $self->{'ws_idle_timer'}->is_running
1804 0 0 if ($self->{'server'})
1814 35 0 unless $self->{'sse_idle_timeout'} and $self->{'sse_idle_timeout'} > 0
1815 0 0 unless $self->{'server'}
1816 0 0 if $self->{'sse_idle_timer'}
1823 0 0 unless $weak_self
1824 0 0 if $weak_self->{'closed'}
1825 0 0 if ($weak_self->{'server'} and $weak_self->{'server'}->can("_log"))
1841 97 0 unless $self->{'sse_idle_timer'}
1843 0 0 unless $self->{'sse_idle_timer'}->is_running
1849 284 0 unless $self->{'sse_idle_timer'}
1850 0 0 if $self->{'sse_idle_timer'}->is_running
1851 0 0 if ($self->{'server'})
1872 0 388 unless $self->{'stream'}
1881 261 0 if (defined $data and not ref $data)
1896 187 0 $w ? :
1897 187 0 $w ? :
1898 3 0 $w ? :
1899 1 0 if $w
1917 93 0 $w ? :
1918 0 0 $w ? :
1928 183 0 if $ts
1934 0 1 unless @{$self->{'_drain_waiters'};}
1935 0 1 unless $self->{'stream'}
1940 1 0 if ($buffered < $self->{'write_low_watermark'})
1943 1 0 unless $f->is_ready
1954 0 1 if $self->{'_drain_check_active'}
1966 0 1 unless $weak_self
1969 0 1 if $prev_on_empty
1979 0 1 if ($buffered < $self->{'write_low_watermark'})
2000 0 0 unless $f->is_ready
2012 0 5 unless my $ss = $self->{'h2_streams'}{$stream_id}
2015 0 5 if (($ss->{'send_queue_bytes'} // 0) < $self->{'write_low_watermark'})
2035 71 1 unless $ss and $ss->{'stream_drain_waiters'}
2037 1 0 unless @waiters
2052 0 0 unless $interval and $interval > 0
2053 0 0 unless $self->{'server'}
2063 0 0 unless $weak_self
2064 0 0 if $weak_self->{'closed'}
2065 0 0 unless $weak_self->{'websocket_mode'}
2075 0 0 if ($weak_self->{'ws_keepalive_timeout'} > 0)
2091 0 0 if $self->{'ws_pong_timeout'}
2092 0 0 unless $self->{'ws_keepalive_timeout'} > 0
2093 0 0 unless $self->{'server'}
2100 0 0 unless $weak_self
2101 0 0 if $weak_self->{'closed'}
2103 0 0 if ($weak_self->{'ws_waiting_pong'})
2105 0 0 if ($weak_self->{'server'} and $weak_self->{'server'}->can("_log"))
2124 284 0 unless $self->{'ws_pong_timeout'}
2125 0 0 if $self->{'ws_pong_timeout'}->is_running
2126 0 0 if ($self->{'server'})
2138 284 0 unless $self->{'ws_keepalive_timer'}
2139 0 0 if $self->{'ws_keepalive_timer'}->is_running
2140 0 0 if ($self->{'server'})
2155 0 2 unless $interval and $interval > 0
2156 0 2 unless $self->{'server'}
2165 0 6 unless $weak_self
2166 0 6 if $weak_self->{'closed'}
2169 6 0 unless $text =~ /^:/
2172 6 0 if (my $writer = $weak_self->{'sse_keepalive_writer'})
2186 284 2 unless $self->{'sse_keepalive_timer'}
2187 2 0 if $self->{'sse_keepalive_timer'}->is_running
2188 2 0 if ($self->{'server'})
2198 0 234 if $self->{'closed'}
2199 11 223 if $self->{'handling_request'}
2204 2 221 unless $request
2210 5 216 if ($request->{'error'})
2219 6 210 if ($self->{'max_body_size'} and defined $request->{'content_length'})
2220 1 5 if ($request->{'content_length'} > $self->{'max_body_size'})
2239 22 193 if ($is_websocket) { }
21 172 elsif ($is_sse) { }
2264 22 636 if ($name eq 'upgrade' and lc $value eq 'websocket') { }
193 443 elsif ($name eq 'connection') { }
22 421 elsif ($name eq 'sec-websocket-key') { }
2269 22 171 if lc($value) =~ /upgrade/
2290 21 495 if ($name eq "accept")
2292 21 0 if $value =~ m[text/event-stream]
2310 15 156 if (my $error = $@)
2313 2 13 if ($self->{'response_started'}) { }
2323 15 0 if $self->{'server'}
2336 1 155 unless ($self->{'response_started'})
2337 1 0 unless ($self->{'closed'})
2342 1 0 if $self->{'server'}
2356 155 0 if $self->{'server'}
2367 155 0 if (my $conn_state = $self->{'current_connection_state'})
2374 142 13 if ($keep_alive) { }
2388 1 141 if (length $self->{'buffer'} > 0)
2405 146 133 if ($header->[0] eq "connection")
2412 152 3 if ($http_version eq "1.1")
2413 11 141 if $connection_header and $connection_header =~ /close/
2418 3 0 if ($http_version eq "1.0")
2419 1 2 if $connection_header and $connection_header =~ /keep-alive/
2464 170 2 defined $self->{'client_host'} ? :
3 169 keys %{$$self{'state'};} ? :
2488 0 57 unless $weak_self
2489 0 57 if $weak_self->{'closed'}
2493 0 57 unless $weak_self
2494 0 57 if $weak_self->{'closed'}
2497 0 57 if (@{$weak_self->{'receive_queue'};})
2502 1 56 if ($body_complete)
2503 1 0 unless ($weak_self->{'receive_pending'})
2507 0 1 if ($weak_self->{'closed'})
2515 1 0 if ref $result eq "HASH"
2517 0 0 if (@{$weak_self->{'receive_queue'};})
2524 39 17 unless ($has_body)
2534 0 17 if ($expect_continue and not $continue_sent)
2540 1 16 if ($is_chunked)
2543 0 0 unless ($weak_self->{'receive_pending'})
2550 0 0 if (@{$weak_self->{'receive_queue'};})
2559 0 0 if (ref $data eq "HASH" and $data->{'error'})
2566 1 0 if ($consumed > 0)
2573 0 1 if ($weak_self->{'max_body_size'} and $bytes_read > $weak_self->{'max_body_size'})
2581 1 0 if ($complete)
2586 1 0 $complete ? :
2593 0 0 unless ($weak_self->{'receive_pending'})
2601 0 0 if $weak_self->{'closed'}
2609 0 16 if ($remaining <= 0)
2620 12 0 unless ($weak_self->{'receive_pending'})
2627 0 12 if (@{$weak_self->{'receive_queue'};})
2633 0 16 if ($weak_self->{'closed'} and length $weak_self->{'buffer'} == 0)
2638 11 5 $remaining < $chunk_size ? :
2639 12 4 if length $weak_self->{'buffer'} < $to_read
2645 12 4 $bytes_read < $content_length ? :
2647 4 12 unless ($more)
2681 3 169 if ($is_http10)
2683 1 2 if ($h->[0] eq "connection" and lc($h->[1]) =~ /keep-alive/)
2694 0 328 unless $weak_self
2695 0 328 if $weak_self->{'closed'}
2703 0 328 if ($weak_self->{'validate_events'})
2708 158 170 if ($type eq 'http.response.start') { }
166 4 elsif ($type eq 'http.response.body') { }
1 3 elsif ($type eq 'http.response.trailers') { }
3 0 elsif ($type eq 'http.fullflush') { }
2709 0 158 if $response_started
2713 158 0 if $weak_self->{'current_connection_state'}
2723 16 146 if (lc $h->[0] eq "content-length")
2735 4 154 if ($is_head_request or $is_http10) { }
2737 3 1 if ($is_http10)
2738 1 2 if (not $has_content_length) { }
1 1 elsif ($client_wants_keepalive) { }
2762 0 166 unless $response_started
2763 1 165 if $body_complete
2766 1 164 if ($is_head_request)
2770 1 0 unless ($more)
2779 0 164 if ($weak_self->_get_write_buffer_size >= $weak_self->{'write_high_watermark'})
2782 0 0 unless $weak_self
2783 0 0 if $weak_self->{'closed'}
2794 10 154 if (defined $file) { }
6 148 elsif (defined $fh) { }
2820 9 139 unless defined $out
2823 142 6 if ($chunked) { }
2824 142 0 if (length $body)
2828 131 1 unless ($more or $expects_trailers)
2836 148 0 if length $out
2840 138 10 unless ($more)
2846 0 1 unless $response_started
2847 0 1 unless $expects_trailers
2848 0 1 unless $chunked
2870 1 2 unless (exists $weak_self->{'extensions'}{'fullflush'})
2877 2 0 if ($handle and $handle->can("setsockopt"))
2902 156 18 unless defined $pending and length $pending
2910 0 23 if $self->{'closed'}
2911 0 23 if $self->{'response_started'}
2927 14 9 if $self->{'current_connection_state'}
2934 8 205 unless $self->{'access_log'}
2935 0 205 unless $self->{'current_request'}
2941 205 0 if ($self->{'request_start'})
2947 77 128 if ($now != $_cached_log_time)
2966 2 0 $self->{'transport_type'} eq 'unix' ? :
2970 205 0 if ($formatter) { }
2977 0 0 if defined $query and length $query
3009 172 284 if $self->{'_disconnect_handled'}
3017 0 2 if (not $reason and $self->{'server'} and $self->{'server'}{'shutting_down'})
3029 30 0 if ($self->{'current_connection_state'} and not $self->{'websocket_mode'} and not $self->{'sse_mode'})
3030 17 13 unless $is_completion
3037 16 268 if ($self->{'websocket_mode'} and not $is_completion)
3043 18 266 if ($self->{'websocket_mode'}) { }
21 245 elsif ($self->{'sse_mode'}) { }
3058 16 268 if ($self->{'receive_pending'} and not $self->{'receive_pending'}->is_ready)
3074 0 4 unless $self->{'stream'}
3075 0 4 if $self->{'close_sent'}
3093 174 284 if $self->{'closed'}
3100 284 0 if ($self->{'h2_streams'})
3102 9 21 if ($stream->{'body_pending'} and not $stream->{'body_pending'}->is_ready)
3104 2 7 $stream->{'is_sse'} ? :
3119 72 212 if ($self->{'h2_session'})
3128 284 0 if ($self->{'server'})
3132 1 122 if ($self->{'server'}{'shutting_down'} and keys %{$$self{"server"}{"connections"};} == 0 and $self->{'server'}{'drain_complete'} and not $self->{'server'}{'drain_complete'}->is_ready)
3160 18 266 if ($self->{'websocket_mode'}) { }
21 245 elsif ($self->{'sse_mode'}) { }
3173 0 18 unless ($future->is_ready)
3181 284 0 if ($self->{'stream'})
3206 0 45 unless $handle and $handle->isa("IO::Socket::SSL")
3218 45 0 if (my $version_str = $handle->get_sslversion)
3236 45 0 if (my $cipher_name = $handle->get_cipher)
3245 45 0 if exists $tls13_cipher_suites{$cipher_name}
3252 45 0 if ($cert)
3257 0 45 if ($@)
3264 8 37 if ($client_cert)
3272 8 0 if (my $ssl = $handle->_get_ssl_object)
3274 0 8 if ($chain_obj)
3277 0 0 if $cert
3287 8 0 if $subject
3292 8 0 if (my $ssl = $handle->_get_ssl_object)
3294 0 8 if ($result != 0)
3300 0 45 if ($@)
3310 44 149 $self->{'tls_enabled'} ? :
3316 0 39 $self->{'tls_enabled'} ? :
3325 45 242 if ($self->{'tls_enabled'} and $self->{'tls_info'}) { }
242 0 elsif (not $self->{'tls_enabled'}) { }
3355 0 21 if (my $error = $@)
3357 0 0 unless ($self->{'sse_started'})
3372 1 21 if $self->{'sse_finished'}
3376 17 1 if ($self->{'sse_started'} and not $self->{'closed'} and $self->{'stream'} and $self->{'stream'}->write_handle)
3416 21 0 defined $self->{'client_host'} ? :
0 21 keys %{$$self{'state'};} ? :
3436 0 0 $weak_self ? :
3441 0 7 unless $weak_self
3444 0 7 if $weak_self->{'closed'}
3447 0 7 unless $weak_self
3450 0 7 if $weak_self->{'closed'}
3453 0 7 if (@{$weak_self->{'receive_queue'};})
3458 1 6 if ($has_body and not $body_complete)
3463 0 0 unless ($weak_self->{'receive_pending'})
3469 0 0 if (@{$weak_self->{'receive_queue'};})
3474 0 1 if $weak_self->{'closed'}
3479 0 1 $remaining < length $weak_self->{'buffer'} ? :
3484 0 1 $bytes_read < $content_length ? :
3485 1 0 unless $more
3495 3 3 unless ($body_complete)
3506 2 3 if (@{$weak_self->{'receive_queue'};})
3511 0 3 if $weak_self->{'closed'}
3513 3 0 unless ($weak_self->{'receive_pending'})
3533 20 32 if (defined $event->{'event'} and length $event->{'event'})
3535 1 19 if $event->{'event'} =~ /[\r\n]/
3544 7 44 if (defined $event->{'id'} and length $event->{'id'})
3546 1 6 if $event->{'id'} =~ /[\r\n]/
3550 7 43 if (defined $event->{'retry'})
3552 2 5 unless $event->{'retry'} =~ /\A[0-9]+\z/
3565 8 1 unless $line =~ /^:/
3579 0 49 unless $weak_self
3586 1 48 if ($weak_self->{'sse_close_sent'})
3587 0 1 if $type eq "sse.close"
3592 0 48 if $weak_self->{'closed'}
3596 1 47 if ($weak_self->{'sse_decline_started'} and not $type =~ /^sse\.http\.response\./)
3604 0 47 if ($weak_self->{'validate_events'})
3609 18 29 if ($type eq 'sse.start') { }
18 11 elsif ($type eq 'sse.send') { }
2 9 elsif ($type eq 'sse.comment') { }
0 9 elsif ($type eq 'sse.keepalive') { }
1 8 elsif ($type eq 'sse.close') { }
4 4 elsif ($type eq 'sse.http.response.start') { }
3 1 elsif ($type eq 'sse.http.response.body') { }
1 0 elsif ($type eq 'http.fullflush') { }
3610 0 18 if $weak_self->{'sse_started'}
3621 9 0 if (lc $h->[0] eq "content-type")
3628 9 9 unless ($has_content_type)
3647 0 0 unless $weak_self
3648 0 0 if $weak_self->{'closed'}
3654 0 18 unless $weak_self->{'sse_started'}
3657 0 18 if ($weak_self->_get_write_buffer_size >= $weak_self->{'write_high_watermark'})
3659 0 0 unless $weak_self
3660 0 0 if $weak_self->{'closed'}
3672 0 2 unless $weak_self->{'sse_started'}
3684 0 0 if ($interval > 0) { }
3698 1 0 if defined $event->{'reason'}
3705 1 3 if $weak_self->{'sse_started'}
3706 0 3 if $weak_self->{'sse_decline_started'}
3716 0 3 unless $weak_self->{'sse_decline_started'}
3717 0 3 if $weak_self->{'response_started'}
3719 0 3 if $event->{'more'}
3739 0 1 unless (exists $weak_self->{'extensions'}{'fullflush'})
3746 1 0 if ($handle and $handle->can("setsockopt"))
3781 2 19 if (my $error = $@)
3783 2 0 unless ($self->{'websocket_accepted'})
3805 22 101 if ($name eq 'sec-websocket-key') { }
2 99 elsif ($name eq 'sec-websocket-protocol') { }
3842 22 0 defined $self->{'client_host'} ? :
0 22 keys %{$$self{'state'};} ? :
3855 0 155 unless $weak_self
3859 113 42 if (@{$weak_self->{'receive_queue'};})
3864 0 42 if $weak_self->{'closed'}
3867 0 42 unless $weak_self
3871 0 42 if (@{$weak_self->{'receive_queue'};})
3876 0 42 if $weak_self->{'closed'}
3879 19 23 unless ($connect_sent)
3886 0 0 unless ($weak_self->{'receive_pending'})
3892 0 0 if (@{$weak_self->{'receive_queue'};})
3898 0 23 if $weak_self->{'closed'}
3902 23 23 if (@{$weak_self->{'receive_queue'};})
3907 0 23 if $weak_self->{'closed'}
3909 23 0 unless ($weak_self->{'receive_pending'})
3932 0 42 unless $weak_self
3933 0 42 if $weak_self->{'closed'}
3941 0 42 if ($weak_self->{'validate_events'})
3946 20 22 if ($type eq 'websocket.accept') { }
17 5 elsif ($type eq 'websocket.send') { }
1 4 elsif ($type eq 'websocket.http.response.start') { }
1 3 elsif ($type eq 'websocket.http.response.body') { }
3 0 elsif ($type eq 'websocket.close') { }
0 0 elsif ($type eq 'websocket.keepalive') { }
3947 0 20 if $weak_self->{'websocket_accepted'}
3963 1 19 if (my $subprotocol = $event->{'subprotocol'})
3969 1 18 if (my $extra_headers = $event->{'headers'})
3991 0 18 if ($weak_self->{'receive_pending'} and not $weak_self->{'receive_pending'}->is_ready)
3998 0 18 if (length $weak_self->{'buffer'} > 0)
4003 0 17 unless $weak_self->{'websocket_mode'}
4006 0 17 if ($weak_self->_get_write_buffer_size >= $weak_self->{'write_high_watermark'})
4008 0 0 unless $weak_self
4009 0 0 if $weak_self->{'closed'}
4014 15 2 if (defined $event->{'text'}) { }
2 0 elsif (defined $event->{'bytes'}) { }
4038 0 1 if $weak_self->{'websocket_accepted'}
4039 0 1 if $weak_self->{'ws_denial_started'}
4049 0 1 unless $weak_self->{'ws_denial_started'}
4050 0 1 if $weak_self->{'response_started'}
4052 0 1 if $event->{'more'}
4071 1 2 unless ($weak_self->{'websocket_accepted'})
4090 0 2 if ($weak_self->{'close_received'})
4095 0 0 unless $weak_self->{'websocket_mode'}
4100 0 0 if ($interval > 0) { }
4119 0 57 unless $self->{'websocket_mode'}
4120 0 57 if $self->{'closed'}
4139 130 0 if ($rsv and ref $rsv eq "ARRAY")
4140 0 130 if (grep {$_;} @$rsv)
4149 0 130 if ($opcode >= 3 and $opcode <= 7 or $opcode >= 11 and $opcode <= 15)
4157 0 130 if ($opcode == 8 || $opcode == 9 || $opcode == 10 and length $bytes > 125)
4163 129 1 if ($opcode == 1) { }
1 0 elsif ($opcode == 2) { }
0 0 elsif ($opcode == 8) { }
0 0 elsif ($opcode == 9) { }
0 0 elsif ($opcode == 10) { }
4166 2 127 unless (defined $text)
4173 2 125 if (@{$self->{'receive_queue'};} >= $self->{'max_receive_queue'})
4186 0 1 if (@{$self->{'receive_queue'};} >= $self->{'max_receive_queue'})
4203 0 0 if (length $bytes == 1)
4209 0 0 if (length $bytes >= 2)
4217 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) { }
4226 0 0 unless ($valid_code)
4233 0 0 if (length $reason > 0)
4236 0 0 unless (defined $decoded)
4245 0 0 unless ($self->{'close_sent'})
4275 10 0 if ($self->{'receive_pending'} and not $self->{'receive_pending'}->is_ready and @{$self->{'receive_queue'};})
4290 0 10 unless defined $file_size
4297 7 3 if ($self->{'sync_file_threshold'} > 0 and $length <= $self->{'sync_file_threshold'}) { }
4300 0 7 unless open my $fh, "<:raw", $file
4301 2 5 if $offset
4305 0 7 unless defined $bytes_read
4307 1 6 if ($chunked) { }
4318 3 0 $self->{'server'} ? :
4319 0 3 unless $loop
4325 2 4 if ($chunked) { }
4340 1 2 if ($chunked)
4353 1 5 if ($offset and $offset > 0)
4354 0 1 unless seek $fh, $offset, 0
4366 4 8 if (defined $remaining)
4367 4 0 if $remaining < $to_read
4368 2 2 if $to_read <= 0
4373 0 10 unless defined $bytes_read
4374 4 6 if $bytes_read == 0
4378 3 3 if ($chunked) { }
4386 2 4 if (defined $remaining)
4392 3 3 if ($chunked)