Branch Coverage

blib/lib/PAGI/Server/Connection.pm
Criterion Covered Total %
branch 682 1164 58.5


line true false branch
47 1 39 if ($value =~ /[\r\n\0]/)
56 0 40 if ($name =~ /[\r\n\0]/)
59 0 40 if ($name =~ /[[:cntrl:]]/)
69 1 0 if ($value =~ /[\r\n\0\s]/)
73 0 0 unless ($value =~ /^[\w\-\.]+$/)
202 45 230 if ($self->{'tls_enabled'})
219 201 70 if ($self->{'transport_type'} eq "tcp" and $handle and $handle->can("setsockopt"))
227 2 271 if ($self->{'transport_type'} eq 'unix') { }
200 71 elsif ($handle and $handle->can('peerhost')) { }
244 25 0 if ($self->{'alpn_protocol'} and $self->{'alpn_protocol'} eq "h2" and $self->{'h2_protocol'})
249 273 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 498 unless $weak_self
274 55 443 if $weak_self->{'handling_request'}
279 12 486 if ($eof)
286 43 443 if ($weak_self->{'h2c_enabled'} and not $weak_self->{'is_h2'})
287 43 0 if (length $weak_self->{'buffer'} >= 24) { }
288 42 1 if ($weak_self->{'h2_protocol'} and 'PAGI::Server::Protocol::HTTP2'->detect_preface($weak_self->{'buffer'})) { }
305 220 266 if ($weak_self->{'is_h2'})
311 39 227 if ($weak_self->{'websocket_mode'})
317 12 215 if ($weak_self->{'receive_pending'} and not $weak_self->{'receive_pending'}->is_ready)
325 1 485 if (my $error = $@)
328 0 1 unless $weak_self
334 55 215 unless $weak_self
344 42 456 unless $self->{'idle_timer'}
352 135 321 if defined $self->{'_idle_reset_at'} and $now - $self->{'_idle_reset_at'} < "0.05"
356 0 321 unless $self->{'idle_timer'}->is_running
362 37 273 unless $self->{'idle_timer'}
363 273 0 if $self->{'idle_timer'}->is_running
366 273 0 if ($self->{'server'})
386 0 66 unless $weak_self
391 0 22 unless $weak_self
396 0 39 unless $weak_self
407 0 221 unless $self->{'h2_session'}
409 220 1 if (length $self->{'buffer'} > 0)
417 2 219 if ($self->{'h2_session'} and not $self->{'h2_session'}->want_read)
425 0 471 unless $self->{'h2_session'}
428 471 285 unless defined $data and length $data > 0
442 17 50 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 50 16 unless ($is_websocket)
468 12 46 if ($h->[0] eq "accept" and $h->[1] =~ m[text/event-stream])
494 6 60 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 65 unless $weak_self
521 0 65 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 41 if ($stream->{'body_pending'} and not $stream->{'body_pending'}->is_ready)
593 2 37 unless $stream
599 0 37 if ($stream->{'is_websocket'}) { }
1 36 elsif ($stream->{'is_sse'}) { }
629 0 37 unless $weak_self
642 1 64 unless $stream_state
646 16 48 if ($stream_state->{'is_websocket'}) { }
12 36 elsif ($stream_state->{'is_sse'}) { }
671 5 59 if ($weak_self and not $stream_state->{'response_started'}) { }
0 59 elsif ($error) { }
672 1 4 $error ? :
685 3 2 if $stream_state->{'connection_state'}
693 64 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 13 0 defined $self->{'client_host'} ? :
0 13 keys %{$$self{'state'};} ? :
1293 0 13 unless $weak_self
1294 0 13 if $weak_self->{'closed'}
1297 0 13 unless $ss
1300 0 13 unless $weak_self
1303 0 13 unless $ss
1306 0 13 if (@{$ss->{'receive_queue'};})
1311 11 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 74 unless $ss
1364 33 41 if (@$q)
1367 4 29 if (length $chunk > $max_len)
1378 0 30 if (($ss->{'send_queue_bytes'} // 0) < $weak_self->{'write_low_watermark'} and $ss->{'stream_drain_waiters'} and @{$ss->{'stream_drain_waiters'};})
1389 1 29 if (($ss->{'send_queue_bytes'} // 0) < $weak_self->{'write_low_watermark'} and $ss->{'transport_drain_fires'} and @{$ss->{'transport_drain_fires'};})
1406 0 38 unless $weak_self
1407 0 38 if $weak_self->{'closed'}
1410 0 38 unless $ss
1418 0 38 if ($weak_self->{'validate_events'})
1423 12 26 if ($type eq 'sse.start') { }
23 3 elsif ($type eq 'sse.send') { }
1 2 elsif ($type eq 'sse.comment') { }
2 0 elsif ($type eq 'sse.keepalive') { }
1424 0 12 if $ss->{'response_started'}
1433 1 1 if (lc $h->[0] eq "content-type")
1443 11 1 unless ($has_content_type)
1449 12 0 unless (grep {lc $_->[0] eq "date";} @final_headers)
1470 0 6 unless $weak_self
1471 0 6 if $weak_self->{'closed'}
1472 0 6 unless my $ss = $weak_self->{'h2_streams'}{$stream_id}
1483 0 23 unless $ss->{'response_started'}
1487 0 23 if (($ss->{'send_queue_bytes'} // 0) >= $weak_self->{'write_high_watermark'})
1489 0 0 unless $weak_self
1490 0 0 if $weak_self->{'closed'}
1491 0 0 unless $weak_self->{'h2_streams'}{$stream_id}
1499 23 0 if $ss->{'transport_state'}
1504 0 1 unless $ss->{'response_started'}
1509 1 0 if $ss->{'transport_state'}
1517 2 0 if ($interval > 0) { }
1536 0 16 unless $frame
1543 5 5 if ($opcode == 1) { }
1 4 elsif ($opcode == 2) { }
4 0 elsif ($opcode == 8) { }
0 0 elsif ($opcode == 9) { }
1546 1 4 unless (defined $text)
1567 1 3 if (length $bytes == 1)
1578 3 0 if (length $bytes >= 2)
1584 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) { }
1593 1 2 unless ($valid_code)
1605 2 0 if (length $reason > 0)
1608 1 1 unless (defined $decoded)
1665 172 0 unless $self->{'request_timeout'} and $self->{'request_timeout'} > 0
1666 0 0 unless $self->{'server'}
1667 0 0 if $self->{'stall_timer'}
1674 0 0 unless $weak_self
1675 0 0 if $weak_self->{'closed'}
1677 0 0 if ($weak_self->{'server'} and $weak_self->{'server'}->can("_log"))
1692 383 0 unless $self->{'stall_timer'}
1694 0 0 unless $self->{'stall_timer'}->is_running
1700 428 0 unless $self->{'stall_timer'}
1701 0 0 if $self->{'stall_timer'}->is_running
1702 0 0 if ($self->{'server'})
1712 22 0 unless $self->{'ws_idle_timeout'} and $self->{'ws_idle_timeout'} > 0
1713 0 0 unless $self->{'server'}
1714 0 0 if $self->{'ws_idle_timer'}
1721 0 0 unless $weak_self
1722 0 0 if $weak_self->{'closed'}
1723 0 0 if ($weak_self->{'server'} and $weak_self->{'server'}->can("_log"))
1738 81 0 unless $self->{'ws_idle_timer'}
1740 0 0 unless $self->{'ws_idle_timer'}->is_running
1746 273 0 unless $self->{'ws_idle_timer'}
1747 0 0 if $self->{'ws_idle_timer'}->is_running
1748 0 0 if ($self->{'server'})
1758 27 0 unless $self->{'sse_idle_timeout'} and $self->{'sse_idle_timeout'} > 0
1759 0 0 unless $self->{'server'}
1760 0 0 if $self->{'sse_idle_timer'}
1767 0 0 unless $weak_self
1768 0 0 if $weak_self->{'closed'}
1769 0 0 if ($weak_self->{'server'} and $weak_self->{'server'}->can("_log"))
1785 72 0 unless $self->{'sse_idle_timer'}
1787 0 0 unless $self->{'sse_idle_timer'}->is_running
1793 273 0 unless $self->{'sse_idle_timer'}
1794 0 0 if $self->{'sse_idle_timer'}->is_running
1795 0 0 if ($self->{'server'})
1816 0 384 unless $self->{'stream'}
1825 255 0 if (defined $data and not ref $data)
1840 185 0 $w ? :
1841 185 0 $w ? :
1842 3 0 $w ? :
1843 1 0 if $w
1861 92 0 $w ? :
1862 0 0 $w ? :
1872 181 0 if $ts
1878 0 1 unless @{$self->{'_drain_waiters'};}
1879 0 1 unless $self->{'stream'}
1884 1 0 if ($buffered < $self->{'write_low_watermark'})
1887 1 0 unless $f->is_ready
1898 0 1 if $self->{'_drain_check_active'}
1910 0 1 unless $weak_self
1913 0 1 if $prev_on_empty
1923 0 1 if ($buffered < $self->{'write_low_watermark'})
1944 0 0 unless $f->is_ready
1956 0 5 unless my $ss = $self->{'h2_streams'}{$stream_id}
1959 0 5 if (($ss->{'send_queue_bytes'} // 0) < $self->{'write_low_watermark'})
1979 66 1 unless $ss and $ss->{'stream_drain_waiters'}
1981 1 0 unless @waiters
1996 0 0 unless $interval and $interval > 0
1997 0 0 unless $self->{'server'}
2007 0 0 unless $weak_self
2008 0 0 if $weak_self->{'closed'}
2009 0 0 unless $weak_self->{'websocket_mode'}
2019 0 0 if ($weak_self->{'ws_keepalive_timeout'} > 0)
2035 0 0 if $self->{'ws_pong_timeout'}
2036 0 0 unless $self->{'ws_keepalive_timeout'} > 0
2037 0 0 unless $self->{'server'}
2044 0 0 unless $weak_self
2045 0 0 if $weak_self->{'closed'}
2047 0 0 if ($weak_self->{'ws_waiting_pong'})
2049 0 0 if ($weak_self->{'server'} and $weak_self->{'server'}->can("_log"))
2068 273 0 unless $self->{'ws_pong_timeout'}
2069 0 0 if $self->{'ws_pong_timeout'}->is_running
2070 0 0 if ($self->{'server'})
2082 273 0 unless $self->{'ws_keepalive_timer'}
2083 0 0 if $self->{'ws_keepalive_timer'}->is_running
2084 0 0 if ($self->{'server'})
2099 0 2 unless $interval and $interval > 0
2100 0 2 unless $self->{'server'}
2109 0 6 unless $weak_self
2110 0 6 if $weak_self->{'closed'}
2113 6 0 unless $text =~ /^:/
2116 6 0 if (my $writer = $weak_self->{'sse_keepalive_writer'})
2130 273 2 unless $self->{'sse_keepalive_timer'}
2131 2 0 if $self->{'sse_keepalive_timer'}->is_running
2132 2 0 if ($self->{'server'})
2142 0 228 if $self->{'closed'}
2143 11 217 if $self->{'handling_request'}
2148 2 215 unless $request
2154 5 210 if ($request->{'error'})
2163 6 204 if ($self->{'max_body_size'} and defined $request->{'content_length'})
2164 1 5 if ($request->{'content_length'} > $self->{'max_body_size'})
2183 22 187 if ($is_websocket) { }
15 172 elsif ($is_sse) { }
2208 22 624 if ($name eq 'upgrade' and lc $value eq 'websocket') { }
193 431 elsif ($name eq 'connection') { }
22 409 elsif ($name eq 'sec-websocket-key') { }
2213 22 171 if lc($value) =~ /upgrade/
2234 15 492 if ($name eq "accept")
2236 15 0 if $value =~ m[text/event-stream]
2254 15 156 if (my $error = $@)
2257 2 13 if ($self->{'response_started'}) { }
2267 15 0 if $self->{'server'}
2280 1 155 unless ($self->{'response_started'})
2281 1 0 unless ($self->{'closed'})
2286 1 0 if $self->{'server'}
2300 155 0 if $self->{'server'}
2311 155 0 if (my $conn_state = $self->{'current_connection_state'})
2318 142 13 if ($keep_alive) { }
2332 1 141 if (length $self->{'buffer'} > 0)
2349 146 162 if ($header->[0] eq "connection")
2356 152 3 if ($http_version eq "1.1")
2357 11 141 if $connection_header and $connection_header =~ /close/
2362 3 0 if ($http_version eq "1.0")
2363 1 2 if $connection_header and $connection_header =~ /keep-alive/
2408 170 2 defined $self->{'client_host'} ? :
3 169 keys %{$$self{'state'};} ? :
2432 0 57 unless $weak_self
2433 0 57 if $weak_self->{'closed'}
2437 0 57 unless $weak_self
2438 0 57 if $weak_self->{'closed'}
2441 0 57 if (@{$weak_self->{'receive_queue'};})
2446 1 56 if ($body_complete)
2447 1 0 unless ($weak_self->{'receive_pending'})
2451 0 1 if ($weak_self->{'closed'})
2459 1 0 if ref $result eq "HASH"
2461 0 0 if (@{$weak_self->{'receive_queue'};})
2468 39 17 unless ($has_body)
2478 0 17 if ($expect_continue and not $continue_sent)
2484 1 16 if ($is_chunked)
2487 0 0 unless ($weak_self->{'receive_pending'})
2494 0 0 if (@{$weak_self->{'receive_queue'};})
2503 0 0 if (ref $data eq "HASH" and $data->{'error'})
2510 1 0 if ($consumed > 0)
2517 0 1 if ($weak_self->{'max_body_size'} and $bytes_read > $weak_self->{'max_body_size'})
2525 1 0 if ($complete)
2530 1 0 $complete ? :
2537 0 0 unless ($weak_self->{'receive_pending'})
2545 0 0 if $weak_self->{'closed'}
2553 0 16 if ($remaining <= 0)
2564 12 0 unless ($weak_self->{'receive_pending'})
2571 0 12 if (@{$weak_self->{'receive_queue'};})
2577 0 16 if ($weak_self->{'closed'} and length $weak_self->{'buffer'} == 0)
2582 11 5 $remaining < $chunk_size ? :
2583 12 4 if length $weak_self->{'buffer'} < $to_read
2589 12 4 $bytes_read < $content_length ? :
2591 4 12 unless ($more)
2625 3 169 if ($is_http10)
2627 1 2 if ($h->[0] eq "connection" and lc($h->[1]) =~ /keep-alive/)
2638 0 328 unless $weak_self
2639 0 328 if $weak_self->{'closed'}
2647 0 328 if ($weak_self->{'validate_events'})
2652 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') { }
2653 0 158 if $response_started
2657 158 0 if $weak_self->{'current_connection_state'}
2667 16 146 if (lc $h->[0] eq "content-length")
2679 4 154 if ($is_head_request or $is_http10) { }
2681 3 1 if ($is_http10)
2682 1 2 if (not $has_content_length) { }
1 1 elsif ($client_wants_keepalive) { }
2706 0 166 unless $response_started
2707 1 165 if $body_complete
2710 1 164 if ($is_head_request)
2714 1 0 unless ($more)
2723 0 164 if ($weak_self->_get_write_buffer_size >= $weak_self->{'write_high_watermark'})
2726 0 0 unless $weak_self
2727 0 0 if $weak_self->{'closed'}
2738 10 154 if (defined $file) { }
6 148 elsif (defined $fh) { }
2764 9 139 unless defined $out
2767 142 6 if ($chunked) { }
2768 142 0 if (length $body)
2772 131 1 unless ($more or $expects_trailers)
2780 148 0 if length $out
2784 138 10 unless ($more)
2790 0 1 unless $response_started
2791 0 1 unless $expects_trailers
2792 0 1 unless $chunked
2814 1 2 unless (exists $weak_self->{'extensions'}{'fullflush'})
2821 2 0 if ($handle and $handle->can("setsockopt"))
2846 156 18 unless defined $pending and length $pending
2854 0 23 if $self->{'closed'}
2855 0 23 if $self->{'response_started'}
2871 14 9 if $self->{'current_connection_state'}
2878 8 199 unless $self->{'access_log'}
2879 0 199 unless $self->{'current_request'}
2885 199 0 if ($self->{'request_start'})
2891 67 132 if ($now != $_cached_log_time)
2910 2 0 $self->{'transport_type'} eq 'unix' ? :
2914 199 0 if ($formatter) { }
2921 0 0 if defined $query and length $query
2953 169 273 if $self->{'_disconnect_handled'}
2961 0 2 if (not $reason and $self->{'server'} and $self->{'server'}{'shutting_down'})
2973 30 0 if ($self->{'current_connection_state'} and not $self->{'websocket_mode'} and not $self->{'sse_mode'})
2974 17 13 unless $is_completion
2981 16 257 if ($self->{'websocket_mode'} and not $is_completion)
2987 18 255 if ($self->{'websocket_mode'}) { }
15 240 elsif ($self->{'sse_mode'}) { }
3002 16 257 if ($self->{'receive_pending'} and not $self->{'receive_pending'}->is_ready)
3018 0 4 unless $self->{'stream'}
3019 0 4 if $self->{'close_sent'}
3037 171 273 if $self->{'closed'}
3044 273 0 if ($self->{'h2_streams'})
3046 9 20 if ($stream->{'body_pending'} and not $stream->{'body_pending'}->is_ready)
3048 2 7 $stream->{'is_sse'} ? :
3063 67 206 if ($self->{'h2_session'})
3072 273 0 if ($self->{'server'})
3076 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)
3104 18 255 if ($self->{'websocket_mode'}) { }
15 240 elsif ($self->{'sse_mode'}) { }
3117 0 18 unless ($future->is_ready)
3125 273 0 if ($self->{'stream'})
3150 0 45 unless $handle and $handle->isa("IO::Socket::SSL")
3162 45 0 if (my $version_str = $handle->get_sslversion)
3180 45 0 if (my $cipher_name = $handle->get_cipher)
3189 45 0 if exists $tls13_cipher_suites{$cipher_name}
3196 45 0 if ($cert)
3201 0 45 if ($@)
3208 8 37 if ($client_cert)
3216 8 0 if (my $ssl = $handle->_get_ssl_object)
3218 0 8 if ($chain_obj)
3221 0 0 if $cert
3231 8 0 if $subject
3236 8 0 if (my $ssl = $handle->_get_ssl_object)
3238 0 8 if ($result != 0)
3244 0 45 if ($@)
3254 44 143 $self->{'tls_enabled'} ? :
3260 0 39 $self->{'tls_enabled'} ? :
3269 45 231 if ($self->{'tls_enabled'} and $self->{'tls_info'}) { }
231 0 elsif (not $self->{'tls_enabled'}) { }
3299 0 15 if (my $error = $@)
3301 0 0 unless ($self->{'sse_started'})
3309 14 1 if ($self->{'sse_started'} and not $self->{'closed'} and $self->{'stream'} and $self->{'stream'}->write_handle)
3349 15 0 defined $self->{'client_host'} ? :
0 15 keys %{$$self{'state'};} ? :
3369 0 0 $weak_self ? :
3374 0 7 unless $weak_self
3377 0 7 if $weak_self->{'closed'}
3380 0 7 unless $weak_self
3383 0 7 if $weak_self->{'closed'}
3386 0 7 if (@{$weak_self->{'receive_queue'};})
3391 1 6 if ($has_body and not $body_complete)
3396 0 0 unless ($weak_self->{'receive_pending'})
3402 0 0 if (@{$weak_self->{'receive_queue'};})
3407 0 1 if $weak_self->{'closed'}
3412 0 1 $remaining < length $weak_self->{'buffer'} ? :
3417 0 1 $bytes_read < $content_length ? :
3418 1 0 unless $more
3428 3 3 unless ($body_complete)
3439 2 3 if (@{$weak_self->{'receive_queue'};})
3444 0 3 if $weak_self->{'closed'}
3446 3 0 unless ($weak_self->{'receive_pending'})
3466 17 32 if (defined $event->{'event'} and length $event->{'event'})
3468 1 16 if $event->{'event'} =~ /[\r\n]/
3477 7 41 if (defined $event->{'id'} and length $event->{'id'})
3479 1 6 if $event->{'id'} =~ /[\r\n]/
3483 7 40 if (defined $event->{'retry'})
3485 2 5 unless $event->{'retry'} =~ /\A[0-9]+\z/
3498 8 1 unless $line =~ /^:/
3512 0 34 unless $weak_self
3513 0 34 if $weak_self->{'closed'}
3521 0 34 if ($weak_self->{'validate_events'})
3526 15 19 if ($type eq 'sse.start') { }
16 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') { }
3527 0 15 if $weak_self->{'sse_started'}
3538 7 0 if (lc $h->[0] eq "content-type")
3545 8 7 unless ($has_content_type)
3564 0 0 unless $weak_self
3565 0 0 if $weak_self->{'closed'}
3571 0 16 unless $weak_self->{'sse_started'}
3574 0 16 if ($weak_self->_get_write_buffer_size >= $weak_self->{'write_high_watermark'})
3576 0 0 unless $weak_self
3577 0 0 if $weak_self->{'closed'}
3589 0 2 unless $weak_self->{'sse_started'}
3601 0 0 if ($interval > 0) { }
3611 0 1 unless (exists $weak_self->{'extensions'}{'fullflush'})
3618 1 0 if ($handle and $handle->can("setsockopt"))
3653 2 19 if (my $error = $@)
3655 2 0 unless ($self->{'websocket_accepted'})
3677 22 101 if ($name eq 'sec-websocket-key') { }
2 99 elsif ($name eq 'sec-websocket-protocol') { }
3714 22 0 defined $self->{'client_host'} ? :
0 22 keys %{$$self{'state'};} ? :
3727 0 155 unless $weak_self
3731 113 42 if (@{$weak_self->{'receive_queue'};})
3736 0 42 if $weak_self->{'closed'}
3739 0 42 unless $weak_self
3743 0 42 if (@{$weak_self->{'receive_queue'};})
3748 0 42 if $weak_self->{'closed'}
3751 19 23 unless ($connect_sent)
3758 0 0 unless ($weak_self->{'receive_pending'})
3764 0 0 if (@{$weak_self->{'receive_queue'};})
3770 0 23 if $weak_self->{'closed'}
3774 23 23 if (@{$weak_self->{'receive_queue'};})
3779 0 23 if $weak_self->{'closed'}
3781 23 0 unless ($weak_self->{'receive_pending'})
3804 0 42 unless $weak_self
3805 0 42 if $weak_self->{'closed'}
3813 0 42 if ($weak_self->{'validate_events'})
3818 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') { }
3819 0 20 if $weak_self->{'websocket_accepted'}
3835 1 19 if (my $subprotocol = $event->{'subprotocol'})
3841 1 18 if (my $extra_headers = $event->{'headers'})
3863 0 18 if ($weak_self->{'receive_pending'} and not $weak_self->{'receive_pending'}->is_ready)
3870 0 18 if (length $weak_self->{'buffer'} > 0)
3875 0 17 unless $weak_self->{'websocket_mode'}
3878 0 17 if ($weak_self->_get_write_buffer_size >= $weak_self->{'write_high_watermark'})
3880 0 0 unless $weak_self
3881 0 0 if $weak_self->{'closed'}
3886 15 2 if (defined $event->{'text'}) { }
2 0 elsif (defined $event->{'bytes'}) { }
3910 0 1 if $weak_self->{'websocket_accepted'}
3911 0 1 if $weak_self->{'ws_denial_started'}
3921 0 1 unless $weak_self->{'ws_denial_started'}
3922 0 1 if $weak_self->{'response_started'}
3924 0 1 if $event->{'more'}
3943 1 2 unless ($weak_self->{'websocket_accepted'})
3962 0 2 if ($weak_self->{'close_received'})
3967 0 0 unless $weak_self->{'websocket_mode'}
3972 0 0 if ($interval > 0) { }
3991 0 39 unless $self->{'websocket_mode'}
3992 0 39 if $self->{'closed'}
4011 130 0 if ($rsv and ref $rsv eq "ARRAY")
4012 0 130 if (grep {$_;} @$rsv)
4021 0 130 if ($opcode >= 3 and $opcode <= 7 or $opcode >= 11 and $opcode <= 15)
4029 0 130 if ($opcode == 8 || $opcode == 9 || $opcode == 10 and length $bytes > 125)
4035 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) { }
4038 2 127 unless (defined $text)
4045 2 125 if (@{$self->{'receive_queue'};} >= $self->{'max_receive_queue'})
4058 0 1 if (@{$self->{'receive_queue'};} >= $self->{'max_receive_queue'})
4075 0 0 if (length $bytes == 1)
4081 0 0 if (length $bytes >= 2)
4089 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) { }
4098 0 0 unless ($valid_code)
4105 0 0 if (length $reason > 0)
4108 0 0 unless (defined $decoded)
4117 0 0 unless ($self->{'close_sent'})
4147 10 0 if ($self->{'receive_pending'} and not $self->{'receive_pending'}->is_ready and @{$self->{'receive_queue'};})
4162 0 10 unless defined $file_size
4169 7 3 if ($self->{'sync_file_threshold'} > 0 and $length <= $self->{'sync_file_threshold'}) { }
4172 0 7 unless open my $fh, "<:raw", $file
4173 2 5 if $offset
4177 0 7 unless defined $bytes_read
4179 1 6 if ($chunked) { }
4190 3 0 $self->{'server'} ? :
4191 0 3 unless $loop
4197 2 4 if ($chunked) { }
4212 1 2 if ($chunked)
4225 1 5 if ($offset and $offset > 0)
4226 0 1 unless seek $fh, $offset, 0
4238 4 8 if (defined $remaining)
4239 4 0 if $remaining < $to_read
4240 2 2 if $to_read <= 0
4245 0 10 unless defined $bytes_read
4246 4 6 if $bytes_read == 0
4250 3 3 if ($chunked) { }
4258 2 4 if (defined $remaining)
4264 3 3 if ($chunked)