AWS-Lambda
view release on metacpan or search on metacpan
lib/AWS/Lambda/ResponseWriter.pm view on Meta::CPAN
undef $handle;
}
}
$handle ||= $http->_open_handle( $request, $scheme, $host, $port, $peer );
$self->{handle} = $handle;
$handle->write_request_header(@{$request}{qw/method uri headers header_case/});
}
sub _handle_response {
my $self = shift;
if (!$self->{closed}) {
$self->close;
}
my $http = $self->{http};
my $handle = $self->{handle};
my $response;
do { $response = $handle->read_response_header }
until (substr($response->{status},0,1) ne '1');
my $data_cb = $http->_prepare_data_cb($response, {});
my $known_message_length = $handle->read_body($data_cb, $response);
$handle->close;
$response->{success} = substr( $response->{status}, 0, 1 ) eq '2';
$response->{url} = $self->{response_url};
return $response;
}
sub write {
my ($self, $data) = @_;
if ($self->{closed}) {
# already closed
croak "write failed: already closed";
}
if (!defined($data) || length($data) == 0) {
return "0E0";
}
my $chunk = sprintf '%X', length $data;
$chunk .= "\x0D\x0A";
$chunk .= $data;
$chunk .= "\x0D\x0A";
return $self->{handle}->write($chunk);
}
sub close {
my $self = shift;
if ($self->{closed}) {
# already closed
return;
}
my $handle = $self->{handle};
$self->{closed} = 1;
return $handle->write("0\x0D\x0A\x0D\x0A");
}
sub _close_with_error {
my ($self, $error) = @_;
if ($self->{closed}) {
# already closed
return;
}
$self->{closed} = 1;
my $handle = $self->{handle};
$handle->write("0\x0D\x0A");
my $type = blessed($error) // "Error";
return $handle->write_header_lines({
"lambda-runtime-function-error-type" => "$type",
"lambda-runtime-function-error-body" => encode_base64("$error", ""),
}, {
"lambda-runtime-function-error-type" => "Lambda-Runtime-Function-Error-Type",
"lambda-runtime-function-error-body" => "Lambda-Runtime-Function-Error-Body",
});
}
1;
( run in 0.482 second using v1.01-cache-2.11-cpan-39bf76dae61 )