.\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .ie \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .el \{\ . de IX .. .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Continuity::Adapt::HttpDaemon 3" .TH Continuity::Adapt::HttpDaemon 3 "2011-03-20" "perl v5.14.1" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Continuity::Adapt::HttpDaemon \- Use HTTP::Daemon to get HTTP requests .PP Continuity::Adapt::HttpDaemon::Request \- an HTTP::Daemon based request .SH "DESCRIPTION" .IX Header "DESCRIPTION" This is the default and reference \s-1HTTP\s0 adapter for Continuity. The only thing a normal user of Continuity would want to do with this is in the \f(CW\*(C`new\*(C'\fR method, all the rest is for internal use. See Continuity::Request for the general request \s-1API\s0 used by an application. .PP An adapter interfaces between the continuation server (Continuity) and the web server (HTTP::Daemon, FastCGI, etc). It provides incoming \s-1HTTP\s0 requests to the continuation server. It comes in two parts, the server connector and the request interface. .PP This adapter interfaces with HTTP::Daemon. .PP This module was designed to be subclassed to fine-tune behavior. .SH "METHODS" .IX Header "METHODS" .ie n .SS """$adapter = Continuity::Adapt::HttpDaemon\->new(...)""" .el .SS "\f(CW$adapter = Continuity::Adapt::HttpDaemon\->new(...)\fP" .IX Subsection "$adapter = Continuity::Adapt::HttpDaemon->new(...)" Create a new continuation adapter and HTTP::Daemon. This actually starts the \&\s-1HTTP\s0 server, which is embeded. It takes the same arguments as the HTTP::Daemon module, and those arguments are passed along. It also takes the optional argument \f(CW\*(C`docroot => \*(Aq/path\*(Aq\*(C'\fR. This adapter may then be specified for use with the following code: .PP .Vb 1 \& my $server = Contuinity\->new(adapter => $adapter); .Ve .PP This method is required for all adapters. .ie n .SS """$adapter\->get_request()""" .el .SS "\f(CW$adapter\->get_request()\fP" .IX Subsection "$adapter->get_request()" Map a \s-1URL\s0 path to a filesystem path .PP Called in a loop from Contuinity. .PP Returns the empty list on failure, which aborts the server process. Aside from the constructor, this is the heart of this module. .PP This method is required for all adapters. .ie n .SS """$adapter\->map_path($path)""" .el .SS "\f(CW$adapter\->map_path($path)\fP" .IX Subsection "$adapter->map_path($path)" Decodes URL-encoding in the path and attempts to guard against malice. Returns the processed filesystem path. .ie n .SS """$adapter\->send_static($request)""" .el .SS "\f(CW$adapter\->send_static($request)\fP" .IX Subsection "$adapter->send_static($request)" Sends a static file off of the filesystem. The content-type is guessed by HTTP::Daemon, plus we specifically tell it how to do png, css, and js. .PP This may be obvious, but you can't send binary data as part of the same request that you've already sent text or \s-1HTML\s0 on, \s-1MIME\s0 aside. Thus either this is called \s-1OR\s0 we invoke a continuation, but not both. .PP See Continuity::Request for \s-1API\s0 documentation. .PP This is what gets passed through a queue to coroutines when new requests for them come in. It needs to encapsulate: .PP * The connection filehandle * \s-1CGI\s0 parameters cache .PP \&\s-1XXX\s0 todo: understands \s-1GET\s0 parameters and \s-1POST\s0 in application/x\-www\-form\-urlencoded format, but not \s-1POST\s0 data in multipart/form\-data format. Use the AsCGI thing if you actually really need that (it's used for file uploads). # \s-1XXX\s0 check request content-type, if it isn't x\-form-data then throw an error # \s-1XXX\s0 pass in multiple param names, get back multiple param values .PP Delegates requests off to the request object it was initialized from. .PP In other words: Continuity::Adapt::HttpDaemon is the ongoing running HttpDaemon process, and Continuity::Adapt::HttpDaemon::Request is individual requests sent through. .SH "HTTP::Daemon Overrides" .IX Header "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. .PP What we are doing is making these non-blocking using Coro::Event. .SH "SEE ALSO" .IX Header "SEE ALSO" Continuity .SH "AUTHOR" .IX Header "AUTHOR" .Vb 2 \& Brock Wilcox \- http://thelackthereof.org/ \& Scott Walters \- http://slowass.net/ .Ve .SH "COPYRIGHT" .IX Header "COPYRIGHT" .Vb 3 \& Copyright (c) 2004\-2009 Brock Wilcox . All rights \& reserved. This program is free software; you can redistribute it and/or \& modify it under the same terms as Perl itself. .Ve