Continuity
view release on metacpan or search on metacpan
lib/Continuity/Adapt/FCGI.pm view on Meta::CPAN
sub debug_level { exists $_[1] ? $_[0]->{debug_level} = $_[1] : $_[0]->{debug_level} }
sub debug_callback { exists $_[1] ? $_[0]->{debug_callback} = $_[1] : $_[0]->{debug_callback} }
=head1 NAME
Continuity::Adapt::FCGI - Use HTTP::Daemon as a continuation server
=head1 DESCRIPTION
This module provides the glue between FastCGI Web and Continuity, translating FastCGI requests into HTTP::RequestWrapper
objects that are sent to applications running inside Continuity.
=head1 METHODS
=over
=item $server = new Continuity::Adapt::FCGI(...)
Create a new continuation adapter and HTTP::Daemon. This actually starts the
HTTP server which is embedded.
lib/Continuity/Adapt/FCGI.pm view on Meta::CPAN
#
#
#
#
package Continuity::Adapt::FCGI::Request;
use strict;
use CGI::Util qw(unescape);
use HTTP::Headers;
use base 'HTTP::Request';
use Continuity::Request;
use base 'Continuity::Request';
# CGI query params
sub cached_params { exists $_[1] ? $_[0]->{cached_params} = $_[1] : $_[0]->{cached_params} }
# The FCGI object
sub fcgi_request { exists $_[1] ? $_[0]->{fcgi_request} = $_[1] : $_[0]->{fcgi_request} }
sub debug_level :lvalue { $_[0]->{debug_level} }
sub debug_callback :lvalue { $_[0]->{debug_callback} }
=item $request = Continuity::Adapt::FCGI::Request->new($client, $id, $cgi, $query)
Creates a new C<Continuity::Adapt::FCGI::Request> object. This deletes values
from C<$cgi> while converting it into a L<HTTP::Request> object.
It also assumes $cgi contains certain CGI variables.
This code was borrowed from POE::Component::FastCGI
=cut
sub new {
my $class = shift;
my %args = @_;
my $fcgi_request = $args{fcgi_request};
lib/Continuity/Adapt/HttpDaemon.pm view on Meta::CPAN
package Continuity::Adapt::HttpDaemon::Request;
# Accessors
# List of cookies to send
sub cookies { exists $_[1] ? $_[0]->{cookies} = $_[1] : $_[0]->{cookies} }
# The actual connection
sub conn { exists $_[1] ? $_[0]->{conn} = $_[1] : $_[0]->{conn} }
# The HTTP::Request object
sub http_request { exists $_[1] ? $_[0]->{http_request} = $_[1] : $_[0]->{http_request} }
# Watch for writes to the conn
sub write_event { exists $_[1] ? $_[0]->{write_event} = $_[1] : $_[0]->{write_event} }
# Flag, never send type
sub no_content_type { exists $_[1] ? $_[0]->{no_content_type} = $_[1] : $_[0]->{no_content_type} }
# CGI query params
sub cached_params { exists $_[1] ? $_[0]->{cached_params} = $_[1] : $_[0]->{cached_params} }
lib/Continuity/Adapt/HttpDaemon.pm view on Meta::CPAN
process, and Continuity::Adapt::HttpDaemon::Request is individual requests sent
through.
=cut
sub new {
my $class = shift;
my %args = @_;
my $self = bless { @_ }, $class;
eval { $self->conn->isa('HTTP::Daemon::ClientConn') } or warn "\$self->conn isn't an HTTP::Daemon::ClientConn";
eval { $self->http_request->isa('HTTP::Request') } or warn "\$self->http_request isn't an HTTP::Request";
$self->Continuity::debug(2, "\n====== Got new request ======\n"
. " Conn: ".$self->conn."\n"
. " Request: $self"
);
return $self;
}
sub param {
my $self = shift;
my $req = $self->http_request;
lib/Continuity/Adapt/HttpDaemon.pm view on Meta::CPAN
if({peerhost=>1,send_basic_header=>1,'print'=>1,'send_redirect'=>1}->{$method}) {
$retval = eval { $self->conn->$method(@_) };
if($@) {
warn "Continuity::Adapt::HttpDaemon::Request::AUTOLOAD: "
. "Error calling conn method ``$method'', $@";
}
} else {
$retval = eval { $self->http_request->$method(@_) };
if($@) {
warn "Continuity::Adapt::HttpDaemon::Request::AUTOLOAD: "
. "Error calling HTTP::Request method ``$method'', $@";
}
}
return $retval;
}
=head1 HTTP::Daemon Overrides
Although HTTP::Daemon is lovely, we have to patch it a bit to work correctly
with Coro. Fortunately there are only two things that much be touched, the
'accept' method and the _needs_more_data in HTTP::Daemon::ClientConn.
lib/Continuity/Mapper.pm view on Meta::CPAN
return $self;
}
=head2 $mapper->get_session_id_from_hit($request)
Uses the defined strategies (ip, path, cookie) to create a session identifier
for the given request. This is what you'll most likely want to override, if
anything.
$request is generally an HTTP::Request, though technically may only have a
subset of the functionality.
=cut
sub get_session_id_from_hit {
my ($self, $request) = @_;
my $session_id = '';
my $sid;
$self->Continuity::debug(2," URI: ", $request->uri);
lib/Continuity/Request.pm view on Meta::CPAN
package Continuity::Request;
=head1 NAME
Continuity::Request - Simple HTTP::Request-like API for requests inside Continuity
=head1 SYNOPSIS
sub main {
my $request = shift;
$request->print("Hello!");
$request->next;
# ...
lib/Continuity/Request.pm view on Meta::CPAN
=head2 $request->set_cookie(CGI->cookie(...));
=head2 $request->set_cookie(name => 'value');
Set a cookie to be sent out with the headers, next time the headers go out
(next request if data has been written to the client already, otherwise this
request). (May not yet be supported by the FastCGI adapter yet.)
=head2 $request->uri;
Straight from L<HTTP::Request>, returns a URI object. (Probably not yet
supported by the FastCGI adapter.)
=head2 $request->method;
Returns 'GET', 'POST', or whatever other HTTP command was issued. Continuity
currently punts on anything but GET and POST out of paranoia.
=head2 $request->send_headers("X-HTTP-Header: blah\n", $h2)
Send this in the headers
lib/Continuity/RequestHolder.pm view on Meta::CPAN
package Continuity::RequestHolder;
use strict;
use vars qw( $AUTOLOAD );
=for comment
We've got three layers of abstraction here. Looking at things from the
perspective of the native Web serving platform and moving towards
Continuity's guts, we have:
* Either HTTP::Request or else the FastCGI equiv.
* Continuity::Adapter::HttpServer::Request and
Continuity::Adapter::FCGI::Request both present a uniform interface
to the first type of object, and do HTTP protocol stuff not implemented
by them, such as parsing GET parameters.
This of this as the "Continuity::Request" object, except
* Continuity::RequestHolder (this object) is a simple fixed object for
the Continuity code hold to hold onto, that knows how to read
the second sort of object (eg, C::A::H::Request) from a queue and
( run in 0.572 second using v1.01-cache-2.11-cpan-de7293f3b23 )