128 int chunk_size, *hash<auto>
respHdr)
164 int chunk_size, *hash<auto>
respHdr)
181 class AbstractTemplate {
200 hash<HttpResponseInfo> render(date new_mtime, hash<auto> ctx,
int http_code = 200, *hash<auto> hdr);
216 abstract hash<HttpResponseInfo> renderImpl(date new_mtime, hash<auto> ctx,
int http_code = 200, *hash<auto> hdr);
225 const DefaultProgramOptions = PO_REQUIRE_OUR|PO_NO_TOP_LEVEL_STATEMENTS|PO_NO_INHERIT_USER_FUNC_VARIANTS|PO_NO_INHERIT_GLOBAL_VARS|PO_NO_USER_CLASSES|PO_NO_TERMINAL_IO;
258 static string getCode(
bool bare_refs,
string fmt);
264 static bool doBlock(
string end, reference<string> src,
string type, reference<int> i, reference<list<hash>> l);
345 hash<HttpResponseInfo>
renderImpl(date new_mtime, hash<auto> ctx,
int http_code = 200, *hash<auto> hdr);
350 setupTemplateIntern(date new_mtime);
367 hash<string, AbstractTemplate>
th;
403 hash<HttpResponseInfo>
render(
string tname,
string path, date mtime, hash<auto> ctx,
int code = 200, *hash<auto> hdr);
422 hash<string, TextTemplateBase>
toh;
425 hash<string, hash<auto>>
th;
465 string add(
string name,
string src, *
string ct);
490 hash<HttpResponseInfo>
render(
string tname, hash<auto> ctx,
int code = 200, *hash<auto> hdr);
509 *hash<HttpResponseInfo>
tryRender(
string tname, hash<auto> ctx,
int code = 200, *hash<auto> hdr);
556 const Unix = (PlatformOS !=
"Windows");
570 "IndexFile":
"index.html",
571 "IndexTemplate":
"index.qhtml",
572 "TemplateExtensions": {
575 "ChunkedThreshold": 10 * 1024,
611 string getDirlistingTemplate();
660 hash<auto> cx, hash<auto> hdr, *data body) {
665 hdr.params = parse_uri_query(hdr.path).params;
667 cx += {
"resource_path": path,
"url_root":
url_root,
"file_root":
file_root,
"isregex": False,
"hdr": hdr};
681 }
catch (hash<ExceptionInfo> ex) {
712 hash<HttpResponseInfo>
fileError(hash<auto> cx, hash<auto> sh);
726 hash<auto> cx, hash<auto> hdr, *data body) {
728 *hash<StatInfo> stat_hash = statPath(cx, hdr, \path);
733 if (cx.resource_path ==1);
737 if (stat_hash.type ==
'DIRECTORY');
738 else if (stat_hash.type !=
'REGULAR');
742 *
string ext = (cx.resource_path =~ x/\.([a-z0-9]+)$/i)[0];
746 return sendFilePath(listener, s, cx, hdr, body, path, stat_hash);
750 hash<auto> cx, hash<auto> hdr, *data body,
string path, hash<StatInfo> stat_hash) {
752 if (!stat_hash.size);
758 }
catch (hash<ExceptionInfo> ex) {
759 if (ex.err ==
"FILE-OPEN2-ERROR") {
767 if (!hdr.
'Content-Type');
775 *hash<StatInfo> statPath(hash<auto> cx, hash<auto> hdr, reference<string> path);
781 hash<auto> cx, hash<auto> hdr, *data body, InputStream
stream, *hash<auto> respHdr) {
810 hash<auto> cx, hash<auto> hdr, *data body, InputStream
stream, *hash<auto> respHdr) {
812 return cast<hash<HttpResponseInfo>>(fsr.handleRequest());
855 *hash<HttpResponseInfo>
handleRequestImpl(reference<hash<auto>> cx, hash<auto> hdr, *data body);
AbstractHttpRequestHandler handler
HttpListenerInterface listener
string getRelativePath(string path)
this class serves files from the file system based on a root location
Definition: WebUtil.qm.dox.h:526
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
Definition: WebUtil.qm.dox.h:725
softint error_level
set for error info level
Definition: WebUtil.qm.dox.h:553
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 ...
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 transf...
Definition: WebUtil.qm.dox.h:809
hash< HttpResponseInfo > serverError(hash< auto > cx, hash< auto > ex)
this method returns a 500 "Internal Server Error" error code when an exception occurs
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 ser...
const Defaults
default configuration values
Definition: WebUtil.qm.dox.h:568
softint chunk_size
HTTP chunk size in bytes.
Definition: WebUtil.qm.dox.h:545
logError(string fmt)
default implementation is empty; this method is called with error log messages; reimplement in subcla...
const DefaultFileReadTimeout
default read timeout for serving files
Definition: WebUtil.qm.dox.h:559
const Dirlisting
dirlisting template
Definition: WebUtil.qm.dox.h:580
StaticTemplateManager stm()
static templates
*hash< HttpResponseInfo > renderDirectory(hash< auto > cx, string path)
this method is called when a directory should be rendered
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 encodin...
Definition: WebUtil.qm.dox.h:780
logDebug(string fmt)
default implementation is empty; this method is called with debug log messages; reimplement in subcla...
const Unix
flag for UNIX operating systems
Definition: WebUtil.qm.dox.h:556
*string default_target
the default target if a URL cannot be satisfied
Definition: WebUtil.qm.dox.h:539
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 > 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,...
Definition: WebUtil.qm.dox.h:659
const DirSep
directory separator character
Definition: WebUtil.qm.dox.h:565
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 co...
softlist indexes
indexes for directories; handled in order of appearance
Definition: WebUtil.qm.dox.h:533
string file_root
root directory for serving files
Definition: WebUtil.qm.dox.h:530
softint chunked_threshold
minimum size in bytes for plain files to be sent with a chnked transfer
Definition: WebUtil.qm.dox.h:542
logInfo(string fmt)
default implementation is empty; this method is called with informational log messages; reimplement i...
hash template_extensions
file extensions handled as templates
Definition: WebUtil.qm.dox.h:536
constructor(string new_file_root, string url_root='/', *hash< auto > opt)
create the object optionally with the given HttpServer::AbstractAuthenticator
*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 automatica...
this class handles chunked file sends
Definition: WebUtil.qm.dox.h:108
hash< HttpResponseInfo > getResponseHeaderMessageImpl()
returns the reponse headers
bool txt
text flag
Definition: WebUtil.qm.dox.h:117
constructor(HttpServer::HttpListenerInterface listener, HttpServer::AbstractHttpRequestHandler handler, Qore::Socket s, hash< auto > cx, hash< auto > hdr, *data body, Qore::ReadOnlyFile file, bool textflag, int chunk_size, *hash< auto > respHdr)
creates the object
auto sendImpl()
returns data to send
int cs
chunk size
Definition: WebUtil.qm.dox.h:119
*hash< auto > respHdr
response headers
Definition: WebUtil.qm.dox.h:121
ReadOnlyFile f
file object
Definition: WebUtil.qm.dox.h:115
manages a template resource that may need to be recompiled if the file is updated in the filesystem; ...
Definition: WebUtil.qm.dox.h:292
int po
parse options used on the program
Definition: WebUtil.qm.dox.h:297
string ct
the content type of the rendered template
Definition: WebUtil.qm.dox.h:303
RWLock rwl()
to ensure atomicity regarding contention between setup/recompiles and rendering requests
*code psetup
code to perform Program initialization when creating a new Program object (inport API,...
Definition: WebUtil.qm.dox.h:309
const TemplateFunc
the name of the template function
Definition: WebUtil.qm.dox.h:306
string path
the path to the template
Definition: WebUtil.qm.dox.h:300
*date mtime
file's modification time
Definition: WebUtil.qm.dox.h:315
constructor(string resource_path, int parse_opts=DefaultProgramOptions, *code pgm_setup)
creates the object based on the pathname and Program options
hash< HttpResponseInfo > renderImpl(date new_mtime, hash< auto > ctx, int http_code=200, *hash< auto > hdr)
explicitly renders the given template with the given argument
A container for holding static text templates (ie that do not change once created in the template man...
Definition: WebUtil.qm.dox.h:417
Sequence seq()
Sequence for template function names.
int po
parse options for template containers
Definition: WebUtil.qm.dox.h:431
constructor(int po=DefaultProgramOptions)
sets up the object
hash< string, hash< auto > > th
Maps template names to function names.
Definition: WebUtil.qm.dox.h:425
*hash< string, bool > getTemplateHash()
returns a hash of template names, values are True or NOTHING if no templates are currently cached
setupProgram(Program p)
override in subclasses to customize the setup of template Programs; this method performs no action
string add(string name, string src, *string ct)
adds a template to the object
list< string > getTemplateList()
returns a list of template names, an empty list is returned if there are no templates
bool hasTemplate(string tname)
returns True if the given template exists, False if not
hash< string, TextTemplateBase > toh
Maps template names to TextTemplateBase objects.
Definition: WebUtil.qm.dox.h:422
*hash< HttpResponseInfo > tryRender(string tname, hash< auto > ctx, int code=200, *hash< auto > hdr)
explicitly renders the given template with the given argument context hash if the template exists; if...
hash< HttpResponseInfo > render(string tname, hash< auto > ctx, int code=200, *hash< auto > hdr)
explicitly renders the given template with the given argument
this is the static base class for all template Program container classes
Definition: WebUtil.qm.dox.h:221
const DefaultProgramOptions
default parse options for template Programs
Definition: WebUtil.qm.dox.h:225
static string getContentType(string name)
returns the content type from the file name, ignores any leading "q" in the extensions,...
static string add(Qore::Program p, string fn, string name, string src)
adds a template function to a template Program object
static bool doBlock(string end, reference< string > src, string type, reference< int > i, reference< list< hash > > l)
a helper method used in parsing
static string getCode(bool bare_refs, string fmt)
a helper method that strips dollar signs from code when PO_ALLOW_BARE_REFS is set in the template pro...
this class manages templates based on files
Definition: WebUtil.qm.dox.h:359
hash< string, AbstractTemplate > th
hash for template storage
Definition: WebUtil.qm.dox.h:367
purge(string tname)
this method can be called when a resource is requested that no longer exists in case a template is st...
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
RWLock rwl()
read-write lock for managing template access
*code psetup
code to perform Program initialization when creating a new Program object (inport API,...
Definition: WebUtil.qm.dox.h:373
int po
parse options used on the program
Definition: WebUtil.qm.dox.h:370
constructor(int parse_opts=StaticTextTemplateBase::DefaultProgramOptions, *code pgm_setup)
creates the object with optional Program options
this is the base class for all template Program container classes
Definition: WebUtil.qm.dox.h:273
Program p
Holds the template generation function.
Definition: WebUtil.qm.dox.h:278
Program getProgram()
returns the contained Program object
constructor(int po=DefaultProgramOptions)
sets up the object
the WebUtil namespace contains all the objects in the WebUtil module
Definition: WebUtil.qm.dox.h:106