DTA::CAB::Server::HTTP - DTA::CAB standalone HTTP server using HTTP::Daemon
##========================================================================
## PRELIMINARIES
use DTA::CAB::Server::HTTP;
##========================================================================
## Constructors etc.
$obj = CLASS_OR_OBJ->new(%args);
##========================================================================
## Methods: subclass API (abstractions for HTTP::UNIX)
$str = $srv->socketLabel();
$str = $srv->daemonLabel();
$bool = $srv->canBindSocket();
$class = $srv->daemonClass();
$class_or_undef = $srv->clientClass();
##========================================================================
## Methods: Generic Server API
$rc = $srv->prepareLocal();
$rc = $srv->run();
##========================================================================
## Methods: Local: Path Handlers
$handler = $srv->registerPathHandler($pathStr, \%handlerSpec);
($handler,$localPath) = $srv->getPathHandler($hreq_uri);
##========================================================================
## Methods: Local: Access Control
$bool = $srv->clientAllowed($clientSock);
undef = $srv->denyClient($clientSock);
##========================================================================
## Methods: Local: error handling
undef = $srv->clientError($clientSock,$status,@message);
DTA::CAB::Server::HTTP inherits from DTA::CAB::Server, and supports the DTA::CAB::Server API.
$srv = CLASS_OR_OBJ->new(%args);
(
##-- Underlying HTTP::Daemon server
daemonMode => $daemonMode, ##-- one of 'serial', or 'fork' [default='serial']
daemonArgs => \%daemonArgs, ##-- args to HTTP::Daemon->new()
paths => \%path2handler, ##-- maps local URL paths to handlers
daemon => $daemon, ##-- underlying HTTP::Daemon object
cxsrv => $cxsrv, ##-- associated DTA::CAB::Server::XmlRpc object (for XML-RPC handlers)
xopt => \%xmlRpcOpts, ##-- options for RPC::XML::Server sub-object (for XML-RPC handlers; default: {no_http=>1,logRegisterProc=>'off'})
##
##-- caching
cacheSize => $nelts, ##-- maximum number of responses to cache (default=1024; undef for no cache)
cacheLimit => $nbytes, ##-- max number of content bytes for cached responses (default=undef: no limit)
cache => $lruCache, ##-- response cache: (key = $url, value = $response), a DTA::CAB::Cache::LRU object
##
##-- security
allowUserOptions => $bool, ##-- allow client-specified analysis options? (default: true)
allow => \@allow_ip_regexes, ##-- allow queries from these clients (default=none)
deny => \@deny_ip_regexes, ##-- deny queries from these clients (default=none)
_allow => $allow_ip_regex, ##-- single allow regex (compiled by 'prepare()')
_deny => $deny_ip_regex, ##-- single deny regex (compiled by 'prepare()')
maxRequestSize => $bytes, ##-- maximum request content-length in bytes (default: undef//-1: no max)
##
##-- forking
forkOnGet => $bool, ##-- fork() handler for HTTP GET requests? (default=0)
forkOnPost => $bool, ##-- fork() handler for HTTP POST requests? (default=1)
forkMax => $n, ##-- maximum number of subprocess to spwan (default=4; 0~no limit)
children => \%pids, ##-- child PIDs
pid => $pid, ##-- PID of parent server process
##
##-- logging
logRegisterPath => $level, ##-- log registration of path handlers at $level (default='info')
logAttempt => $level, ##-- log connection attempts at $level (default=undef: none)
logConnect => $level, ##-- log successful connections (client IP and requested path) at $level (default='debug')
logRquestData => $level, ##-- log full client request data at $level (default=undef: none)
logResponse => $level, ##-- log full client response at $level (default=undef: none)
logCache => $level, ##-- log cache hit data at $level (default=undef: none)
logClientError => $level, ##-- log errors to client at $level (default='debug')
logClose => $level, ##-- log close client connections (default=undef: none)
logReap => $level, ##-- log harvesting of child pids (default=undef: none)
logSpawn => $level, ##-- log spawning of child pids (default=undef: none)
##
##-- (inherited from DTA::CAB::Server)
as => \%analyzers, ##-- ($name=>$cab_analyzer_obj, ...)
aos => \%anlOptions, ##-- ($name=>\%analyzeOptions, ...) : %opts passed to $anl->analyzeXYZ($xyz,%opts)
)
Each path handler specified in $opts{paths} should be one of the following:
An object descended from DTA::CAB::Server::HTTP::Handler.
A HASH ref of the form
{ class=>$subclass, %newArgs }
The handler will be instantiated by $subclass->new(%newArgs). $subclass may be specified as a suffix of DTA::CAB::Server::HTTP::Handler
, e.g. $subclass="Query" will instantiate a handler of class DTA::CAB::Server::HTTP::Handler::Query
.
An ARRAY ref of the form
[$subclass, @newArgs ]
The handler will be instantiated by $subclass->new(@newArgs). $subclass may be specified as a suffix of DTA::CAB::Server::HTTP::Handler
, e.g. $subclass="Query" will instantiate a handler of class DTA::CAB::Server::HTTP::Handler::Query
.
$str = $srv->socketLabel();
returns symbolic label for bound socket address; default returns string of the form "ADDR:PORT" using $srv->{daemonArgs}.
$str = $srv->daemonLabel();
returns symbolic label for running daemon; default returns string of the form "ADDR:PORT" using $srv->{daemon}.
$bool = $srv->canBindSocket();
returns true iff socket can be bound; should set $! on error; default tries to bind INET socket as specified in $srv->{daemonArgs}.
$class = $srv->daemonClass();
get underlying HTTP::Daemon class, default returns 'HTTP::Daemon'.
$class_or_undef = $srv->clientClass();
get class for client connections, or undef (default) if client sockets are not to be re-blessed into a different class.
$rc = $srv->prepareLocal();
Subclass-local initialization. This override initializes the underlying HTTP::Daemon object, sets up the path handlers, and compiles the server's _allow and _deny regexes.
$rc = $srv->run();
Run the server on the specified port until further notice.
$handler = $srv->registerPathHandler($pathStr, \%handlerSpec);
$handler = $srv->registerPathHandler($pathStr, \@handlerSpec)
$handler = $srv->registerPathHandler($pathStr, $handlerObject)
Registers a path handler for path $pathStr (and all sub-paths). See "new"() for a description of the allowed forms for handler specifications.
Sets $srv->{paths}{$pathStr} = $handler
($handler,$localPath) = $srv->getPathHandler($hreq_uri);
Gets the most specific path handler (and its local path) for the URI object $hreq_uri.
$bool = $srv->clientAllowed($clientSock);
Returns true iff $clientSock may access the server.
undef = $srv->denyClient($clientSock);
undef = $srv->denyClient($clientSock, $denyMessage)
Denies access to $clientSock and shuts down client socket.
undef = $srv->clientError($clientSock,$status,@message);
Sends an error message to the client and shuts down the client socket. $status defaults to RC_INTERNAL_SERVER_ERROR (see HTTP::Status).
Bryan Jurish <moocow@cpan.org>
Copyright (C) 2010-2019 by Bryan Jurish
This package is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.24.1 or, at your option, any later version of Perl 5 you may have available.
DTA::CAB::Server(3pm), DTA::CAB::Server::HTTP::Handler(3pm), DTA::CAB::Server::HTTP::UNIX(3pm), DTA::CAB::Client::HTTP(3pm), DTA::CAB(3pm), perl(1), ...