|
| constructor (string new_file_root, string url_root='/', *hash< auto > opt) |
| create the object optionally with the given HttpServer::AbstractAuthenticator More...
|
|
private AbstractStreamRequest | getStreamRequestImpl (HttpServer::HttpListenerInterface listener, Qore::Socket s, hash< auto > cx, hash< auto > hdr, *data body, InputStream stream, *hash< auto > respHdr) |
| must return a AbstractStreamRequest object to stream the requested file with chunked transfer encoding
|
|
hash< HttpResponseInfo > | handleRequest (HttpServer::HttpListenerInterface listener, Qore::Socket s, hash< auto > cx, hash< auto > hdr, *data body) |
| this method calls handleRequestImpl() to service the request, if handleRequestImpl() returns NOTHING, then it tries to automatically serve a matching template or files from the filesystem or serve the default resource if no resource can be matched More...
|
|
| logDebug (string fmt) |
| default implementation is empty; this method is called with debug log messages; reimplement in subclasses to provide for logging
|
|
| logError (string fmt) |
| default implementation is empty; this method is called with error log messages; reimplement in subclasses to provide for logging
|
|
| logInfo (string fmt) |
| default implementation is empty; this method is called with informational log messages; reimplement in subclasses to provide for logging
|
|
*hash< HttpResponseInfo > | renderDirectory (hash< auto > cx, string path) |
| this method is called when a directory should be rendered More...
|
|
private hash< HttpResponseInfo > | sendFileChunked (HttpServer::HttpListenerInterface listener, Qore::Socket s, hash< auto > cx, hash< auto > hdr, *data body, InputStream stream, *hash< auto > respHdr) |
| returns a handler hash response with the file's data to be sent in a HTTP message with chunked transfer encoding
|
|
private *hash< HttpResponseInfo > | tryServeRequest (HttpServer::HttpListenerInterface listener, Qore::Socket s, hash< auto > cx, hash< auto > hdr, *data body) |
| tries to serve the request from the filesystem
|
|
|
softint | chunk_size = Defaults.ChunkSize |
| HTTP chunk size in bytes.
|
|
softint | chunked_threshold = Defaults.ChunkedThreshold |
| minimum size in bytes for plain files to be sent with a chnked transfer
|
|
*string | default_target |
| the default target if a URL cannot be satisfied
|
|
const | DefaultFileReadTimeout = 20s |
| default read timeout for serving files
|
|
const | Defaults |
| default configuration values
|
|
const | Dirlisting = ... |
| dirlisting template
|
|
const | DirSep = Qore::DirSep |
| directory separator character More...
|
|
softint | error_level = 0 |
| set for error info level More...
|
|
string | file_root |
| root directory for serving files
|
|
softlist | indexes = (Defaults.IndexTemplate, Defaults.IndexFile) |
| indexes for directories; handled in order of appearance
|
|
hash | template_extensions = Defaults.TemplateExtensions |
| file extensions handled as templates
|
|
const | Unix = (PlatformOS != "Windows") |
| flag for UNIX operating systems
|
|
|
hash< HttpResponseInfo > | fileError (hash< auto > cx, hash< auto > sh) |
| this method returns a 400 "Bad Request" error code when a file should be served that's not a regular file More...
|
|
hash< auto > | getResponseHeadersForFile (string path, hash< auto > cx, hash< auto > request_hdr) |
| this method returns a hash giving response headers with a default content type for the file to be served based on its extenion and can be subclassed to add headers to the response More...
|
|
*hash< HttpResponseInfo > | handleRequestImpl (reference< hash< auto > > cx, hash< auto > hdr, *data body) |
| this method is called by this class's handleRequest() before trying to service the request automatically based on file resources More...
|
|
hash< HttpResponseInfo > | sendFile (InputStream stream, *hash< auto > respHdr) |
| returns a handler hash response with the data to be sent in a monolithic message
|
|
hash< HttpResponseInfo > | serverError (hash< auto > cx, hash< auto > ex) |
| this method returns a 500 "Internal Server Error" error code when an exception occurs More...
|
|
StaticTemplateManager | stm () |
| static templates
|
|
hash< HttpResponseInfo > | unhandledRequest (hash< auto > cx, hash< auto > hdr, *data body) |
| this method returns a 404 "Not Found" error code to GET requests and a 501 "Not Implemented" error code to all other requests More...
|
|
RWLock | rwl () |
| read-write lock for managing template access
|
|
| constructor (int parse_opts=StaticTextTemplateBase::DefaultProgramOptions, *code pgm_setup) |
| creates the object with optional Program options More...
|
|
| purge (string tname) |
| this method can be called when a resource is requested that no longer exists in case a template is stored for a file that was deleted
|
|
hash< HttpResponseInfo > | render (string tname, string path, date mtime, hash< auto > ctx, int code=200, *hash< auto > hdr) |
| explicitly renders the given template with the given path and context argument More...
|
|
this class serves files from the file system based on a root location
this method calls handleRequestImpl() to service the request, if handleRequestImpl() returns NOTHING, then it tries to automatically serve a matching template or files from the filesystem or serve the default resource if no resource can be matched
- Parameters
-
listener | the listener handling the request |
s | the socket object for the connection |
cx | call context hash; this hash will have the following keys:
socket: the bind address used to bind the listener ("socket-info" provides more detailed information)
socket-info : a hash of socket information for the listening socket (as returned by Qore::Socket::getSocketInfo())
peer-info : a hash of socket information for the remote socket (as returned by Qore::Socket::getPeerInfo())
url: a hash of broken-down URL information (as returned from Qore::parse_url())
id: the unique HTTP connection ID
ssl: True if the request was encrypted with HTTPS, False if not
listener-id : the HTTP server listener ID (see HttpServer::HttpServer::getListenerInfo())
user: the current RBAC username (if any)
|
hdr | incoming header hash; all keys will be converted to lower-case, additionally the following keys will be present:
method: the HTTP method received (ie "GET" , "POST" , etc)
path: the HTTP path given in the request, after processing by Qore::decode_url()
http_version: the HTTP version number in the request (either "1.0" or "1.1" )
|
body | message body, if any |
- Returns
- a hash with the following keys:
"code"
: the HTTP return code (see HttpServer::HttpCodes)
"body"
: the message body to return in the response
"close"
: (optional) set this key to True if the connection should be unconditionally closed when the handler returns
"hdr"
: (optional) set this key to a hash of extra header information to be returned with the response
The following keys are added to the cx argument when calling handleRequestImpl():
resource_path:
the relative path without any query arguments and with the URL root stripped off (if the request was matched by the URL root, otherwise this will be the request path with any URI query arguments removed)
url_root:
the root URL
file_root:
the root directory for serving files
isregex:
if the url_root string is a regular expression or not (this is always False when this class is used)
hdr:
this is added to the cx argument directly from the hdr argument, however it also includes the "params"
key which holds the URI query parameters as returned in the params key from HttpServer::parse_uri_query()
If handleRequestImpl() returns NOTHING and the requested path cannot be matched and served, then unhandledRequest() is called to handle the error