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.
DTA::CAB::Server::HTTP::Handler
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), ...
To install DTA::CAB, copy and paste the appropriate command in to your terminal.
cpanm
cpanm DTA::CAB
CPAN shell
perl -MCPAN -e shell install DTA::CAB
For more information on module installation, please visit the detailed CPAN module installation guide.