class Frame::Server::Request :isa(Net::Async::HTTP::Server::Request)
:does(Frame::Base);
method protocol :
override
{
$self
->{req}{SERVER_PROTOCOL}
}
method method :
override
{
$self
->{req}{REQUEST_METHOD}
}
method keep_alive {
my
$c
=
lc
(
$self
->{req}{HTTP_CONNECTION} //
''
);
return
1
if
$c
eq
'keep-alive'
&&
$self
->protocol eq
'HTTP/1.0'
;
return
0
if
$c
eq
'close'
||
$self
->protocol eq
'HTTP/1.0'
;
1
}
method _write_to_stream :
override
(
$stream
) {
while
(
defined
(
my
$next
=
shift
$self
->{pending}->@*)) {
$stream
->
write
(
$next
,
on_write
=>
sub
{
$self
->{bytes_written} +=
$_
[1];
},
$self
->keep_alive
? ()
: (
on_flush
=>
sub
{
$stream
->
close
} )
);
}
$stream
->
write
(
""
,
on_write
=>
sub
{
$self
->{conn}->parent->_done_request(
$self
)
}
)
if
$self
->{is_done};
$self
->{is_done}
}
method done :
override
{
$self
->{conn}->inactivity_timeout->stop;
$self
->SUPER::done
}
1