You are viewing a plain text version of this content. The canonical link for it is here.
Posted to site-cvs@tcl.apache.org by mx...@apache.org on 2018/01/17 22:31:49 UTC
svn commit: r1821429 [8/9] - in /tcl/site/rivet: ./ html/ manual3.0/
manual3.0/images/
Added: tcl/site/rivet/manual3.0/request.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/request.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/request.html (added)
+++ tcl/site/rivet/manual3.0/request.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,173 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Apache Child Processes Lifecycle and Request Processing</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="index.html" title="Apache Rivet 3.0"><link rel="prev" href="processing.html" title="Apache Rivet HTTP Request Processing"><link rel="next" href="commands.html" title="Rivet Tcl Commands and Variables"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Apache Child Processes Lifecycle and Request Processing</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="processing.html"><img src="images/prev.png" alt="Prev"></a>Â </td><th width="60%" align="center">Â </th><td width="20%" align
="right">Â <a accesskey="n" href="commands.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="request"></a>Apache Child Processes Lifecycle and Request Processing</h2></div></div></div><div class="simplesect"><div class="titlepage"><div><div><h3 class="title"><a name="idm606"></a>Apache Child Process Lifecycle</h3></div></div></div><p style="width:90%">
+ Apache Rivet delegates to the <a class="ulink" href="" target="_top">Multi-Processing Module (MPM)</a>
+ the task of managing the agents responding to network requests.
+ An MPM is responsible for creating such agents during the start-up,
+ and is in charge for terminating existing ones and recreating new
+ agents when the workload is requiring it.
+ </p><p style="width:90%">
+ Apache Rivet is currently supporting only the
+ <a class="ulink" href="http://httpd.apache.org/docs/2.2/mod/prefork.html" target="_top">prefork</a>
+ MPM which creates full fledged child processes as independent agents
+ responding to network requests.
+ Efforts are under way to extend the support to
+ the <a class="ulink" href="http://httpd.apache.org/docs/2.2/mod/worker.html" target="_top">worker</a> MPM,
+ a hybrid model where forked child processes in turn create threads as real
+ network agents. If we can achieve this the goal would open the possibility of
+ supporting also the Windows© specific
+ <a class="ulink" href="http://httpd.apache.org/docs/2.2/mod/mpm_winnt.html" target="_top">winnt</a> MPM,
+ where a single process creates and manages a large number of thread agents.
+ </p><p style="width:90%">
+ Configuration parameters about this critical point can be read in the
+ <a class="ulink" href="http://httpd.apache.org/docs/2.2/misc/perf-tuning.html" target="_top">Apache
+ documentation</a>.
+ </p><p style="width:90%">
+ There are 4 stages in the lifetime of an Apache webserver that are relevant
+ to Rivet:
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><h4><a name="idm619"></a>Server Initialization</h4><div style="margin-bottom:1.5ex ; padding .5ex">
+ Apaches starts up as a single process. During this stage Apache performs
+ various preliminary tasks including reading and parsing the configuration.
+ After the configuration has been read Rivet sets up some internal resources
+ and if a Tcl script is set as argument of a <span style="font-family:monospace"><span class="command"><strong>ServerInitScript</strong></span></span> directive
+ the script is executed.
+ Variables, arrays or dictionaries created during the execution of this script
+ will be preserved and later replicated in the child process intepreters,
+ since the prefork MPM creates new child processes with a fork() system call (which
+ involves only in memory copy of sections of a process address space). Thus
+ <span style="font-family:monospace"><span class="command"><strong>ServerInitScript</strong></span></span>
+ is a good place to do global initialization that doesn't involve
+ creation of private data. Example of tasks that can be done
+ in this context are importing namespace commands and loading packages
+ providing code of general interest for every application to
+ be served. Also IPC methods can be initialized in this stage.
+ </div></li><li class="listitem"><h4><a name="idm624"></a>Child Process Initialization</h4><div style="margin-bottom:1.5ex ; padding .5ex">
+ Right after the webserver has forked its child processes
+ there is a chance to perform specific initialization of their Tcl interpreters.
+ This is the stage where most likely you want to open I/O channels,
+ database connections or any other resource that has to be private to an
+ interpreter. When the option <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterps</strong></span></span> is
+ turned off child processes will have a single interpreter regardless
+ the number of virtual hosts configured. The
+ <span style="font-family:monospace"><span class="command"><strong>GlobalInitScript</strong></span></span> is the configuration script
+ the child process will run once before getting ready to
+ serve requests
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ When <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterps</strong></span></span> is turned on
+ each configured virtual host will have its own slave interpreter which
+ can will run the <span style="font-family:monospace"><span class="command"><strong>ChildInitScript</strong></span></span> directive as
+ initialization script. The
+ <span style="font-family:monospace"><span class="command"><strong>ChildInitScript</strong></span></span> has to be
+ placed within a <VirtualHost...>...</VirtualHost ...>
+ stanza to associate a script to a specific virtual host initialization.
+ This scenario of interpreter separation is extremely useful to
+ prevent resource conflicts when different virtual hosts are
+ serving different web applications.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top"><span style="font-family:monospace"><span class="command"><strong>GlobalInitScript</strong></span></span> has no effect to working interpreters
+ when <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterps</strong></span></span> is set.
+ </td></tr></table></div>
+ <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ The lazy MPM bridge implements a model where
+ every worker thread has exactly one interpreter and belongs to
+ a single virtual host, therefore <span style="font-family:monospace"><span class="command"><strong>SeparateVirtualInterps</strong></span></span>
+ is ignored and you can't share the same interpreter among virtual host
+ </td></tr></table></div>
+ </div></li><li class="listitem"><h4><a name="idm639"></a>Request Processing and Content Generation</h4><div style="margin-bottom:1.5ex ; padding .5ex">
+ After a child has been initialized it's ready to serve requests.
+ A child process' lifetime is almost entirely spent in this phase, waiting
+ for connections and responding to requests. At every request the URL
+ goes through filter processing and, in case, rewritten
+ (mod_rewrite, Alias directives, etc).
+ Parameter values encoded in the request are made available to the
+ environment and finally the script encoded in the URL is run.
+ The developer can tell Rivet if optionally the execution has to
+ be preceded by a <span style="font-family:monospace"><span class="command"><strong>BeforeScript</strong></span></span> and followed by an
+ <span style="font-family:monospace"><span class="command"><strong>AfterScript</strong></span></span>. The real script mod_rivet will
+ execute is the result of the concatenation of the
+ <span style="font-family:monospace"><span class="command"><strong>BeforeScript</strong></span></span>,
+ the script encoded in the URL and the <span style="font-family:monospace"><span class="command"><strong>AfterScript</strong></span></span>.
+ Thus the whole ensemble of code that makes up a web application might
+ be running within the same "before" and "after" scripts to which
+ the programmer can devolve tasks common to every
+ page of an application.
+ </div></li><li class="listitem"><h4><a name="idm646"></a>Child Process Exit</h4><div style="margin-bottom:1.5ex ; padding .5ex">
+ If no error condition forces the child process to a premature exit, his
+ life is determined by the Apache configuration parameters. To reduce
+ the effects of memory leaks in buggy applications the Apache webserver
+ forces a child process to exit after a
+ certain number of requests served. A child process gets replaced
+ with a brand new one if the workload of webserver requires so.
+ Before the process quits an exit handler can be run
+ to do some housekeeping, just in case something the could have been
+ left behind has to be cleaned up. Like the initialization scripts
+ <span style="font-family:monospace"><span class="command"><strong>ChildExitScript</strong></span></span> too is a "one shot" script.
+ </div><div style="margin-bottom:1.5ex ; padding .5ex">
+ The Tcl <span style="font-family:monospace"><span class="command"><strong>exit</strong></span></span> command forces an interpreter to
+ quit, thus removing the ability of the process embedding it
+ to run more Tcl scripts. The child process then is forced
+ to exit and be replaced by a new one when the workload demands it.
+ This operation implies the <span style="font-family:monospace"><span class="command"><strong>ChildExitScript</strong></span></span> be
+ run before the interpreter is actually deleted.
+ </div></li></ol></div></div><div class="simplesect"><div class="titlepage"><div><div><h3 class="title"><a name="idm652"></a>Apache Rivet Error and Exception Scripts Directives</h3></div></div></div><p style="width:90%">
+ Rivet is highly configurable and each of the webserver lifecycle stages
+ can be exploited to control a web application.
+ Not only the orderly sequence of stages
+ in a child lifecycle can be controlled with Tcl scripts, but also
+ Tcl error or abnormal conditions taking place during
+ the execution can be caught and handled with specific scripts.
+ </p><p style="width:90%">
+ Tcl errors (conditions generated when a command exits with code TCL_ERROR)
+ usually result in the printing of a backtrace of the code fragment
+ relevant to the error.
+ Rivet can set up scripts to trap these errors and run instead
+ an <span style="font-family:monospace"><span class="command"><strong>ErrorScript</strong></span></span> to handle it and conceal details
+ that usually have no interest for the end user and it
+ may show lines of code that ought to remain private. The ErrorScript
+ handler might create a polite error page where things
+ can be explained in human readable form, thus enabling the end user
+ to provide meaningful feedback information.
+ </p><p style="width:90%">
+ In other cases an unmanageable conditions might take place in the data and
+ this could demand an immediate interruption of the content generation. These abort
+ conditions can be fired by the <a class="xref" href="abort_page.html" title="abort_page">abort_page</a> command, which
+ in turn fires the execution of an <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span> to handle
+ the abnormal condition. Starting with Rivet 2.1.0 <a class="xref" href="abort_page.html" title="abort_page">abort_page</a>
+ accepts a free form parameter that can be retrieved later with the command
+ <a class="xref" href="abort_code.html" title="abort_code">abort_code</a>
+ </p></div><div class="simplesect"><div class="titlepage"><div><div><h3 class="title"><a name="idm662"></a>Tcl Namespaces in Rivet and the <span style="font-family:monospace"><span class="command"><strong>::request</strong></span></span> Namespace</h3></div></div></div><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ This paragraph applies to the standard mod_rivet way of handling requests. This
+ method is explained in the <a class="xref" href="processing.html" title="Apache Rivet HTTP Request Processing">the section called âApache Rivet HTTP Request Processingâ</a>.
+ If you write your own processing root procedure you have entire
+ freedom on how to manage namespaces of your applications
+ </td></tr></table></div><p style="width:90%">
+ With the sole exception of .rvt templates, mod_rivet runs pure Tcl scripts
+ at the global namespace. That means that every variable or procedure
+ created in Tcl scripts resides by default in the
+ "::" namespace (just like in traditional Tcl scripting) and they
+ are persistent across different requests until explicitly unset or
+ until the interpreter is deleted.
+ You can create your own application namespaces to store data but
+ it is important to remember that subsequent requests will in general be served
+ by different child processes. Your application can rely on the fact that
+ certain application data will be in the interpreter, but you shouldn't
+ assume the state of a transaction spanning several pages
+ can be stored in this way and be safely kept available to a
+ specific client. Sessions exist for this purpose and Rivet ships its own
+ session package with support for most of popular DBMS. Nonetheless
+ storing data in the global namespace can be useful, even though scoping
+ data in a namespace is recommended. I/O channels and
+ database connections are examples of information usually specific
+ to a process for which you don't want to pay the overhead of creating them
+ at every request, probably causing a dramatic loss in the application
+ performance.
+ </p><p style="width:90%">
+ A special role in the interpreter is played by the <span style="font-family:monospace"><span class="command"><strong>::request</strong></span></span>
+ namespace. The <span style="font-family:monospace"><span class="command"><strong>::request</strong></span></span> namespace is deleted and recreated
+ at every request and Rivet templates (.rvt files) are executed within it.
+ </p><p style="width:90%">
+ Unless you're fully qualifying variable names outside the <span style="font-family:monospace"><span class="command"><strong>::request</strong></span></span>
+ namespace, every variable and procedure created in .rvt files is by default placed in
+ it and deleted before any other requests gets processed. It is therefore safe to
+ create variables or object instances in template files and foresake about them: Rivet
+ will take care of cleaning the namespace up and everything created inside the namespace
+ will be destroyed.
+ </p><div class="table"><table align="center" title="Apache Rivet Scripts" class="namespaces"><thead><td>Stage</td><td>Script</td><td>Namespace</td></thead><tbody><tr class="init"><td>Apache Initialization</td><td>ServerInitScript</td><td>::</td></tr><tr class="childinit"><td rowspan="2">Child Initialization</td><td>GlobalInitScript</td><td>::</td></tr><tr class="childinit"><td>ChildInitScript</td><td>::</td></tr><tr class="processing"><td rowspan="6">Request Processing</td><td>BeforeScript</td><td>::</td></tr><tr class="processing"><td>.rvt</td><td>::request</td></tr><tr class="processing"><td>.tcl</td><td>::</td></tr><tr class="processing"><td>AfterScript</td><td>::</td></tr><tr class="processing"><td>AbortScript</td><td>::</td></tr><tr class="processing"><td>AfterEveryScript</td><td>::</td></tr><tr class="childexit"><td>Child Termination</td><td>ChildExitScript</td><td>::</td></tr><tr class="processing"><td>Error Handling</td><td>ErrorScript</td><td>::</td></tr></tbody></table><
/div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="processing.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="commands.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Apache Rivet HTTP Request Processing </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Rivet Tcl Commands and Variables</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual3.0/rivet.css
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/rivet.css?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/rivet.css (added)
+++ tcl/site/rivet/manual3.0/rivet.css Wed Jan 17 22:31:48 2018
@@ -0,0 +1,391 @@
+BODY
+{
+ font-family: verdana;
+ background-color: #fbfcfc;
+}
+
+DIV.ABSTRACT
+{
+ border: solid 2px;
+ padding-left: 10pt;
+ padding-right: 10pt;
+}
+PRE.SCREEN
+{
+ font-family:monospace;
+ white-space: pre;
+ width: 100%;
+ background-color: #ffffcc;
+ border:solid;
+ color: #000000;
+ border-color: #009999;
+ border-left: solid #009999 2px;
+ border-right: solid #009999 2px;
+ border-top: solid #009999 2px;
+ border-bottom: solid #009999 2px;
+ padding-left: 15pt;
+}
+
+PRE.PROGRAMLISTING
+{
+ font-family: monospace;
+ white-space: pre;
+ width: 95%;
+ background-color: #e8ecf2;
+ border: solid;
+ color: #000000;
+ border-color: #a3b1bc;
+ border-left: solid #a3b1bc 1px;
+ border-right: solid #a3b1bc 1px;
+ border-top: solid #a3b1bc 1px;
+ border-bottom: solid #a3b1bc 1px;
+ font-size: normal;
+ padding-top: 1em;
+ padding-left: 1em;
+ padding-bottom: 1em;
+ font-size: 0.9em;
+}
+
+H1
+{
+ color: #ffffff;
+ border: solid 3px #1d252b;
+ background-color: #a3b1bc;
+ font-variant: small-caps;
+ width: 100%;
+}
+
+H1.TITLE
+{
+ color: #ffffff;
+ border: solid 3px #1d252b;
+ background-color: #a3b1bc;
+ font-variant: small-caps;
+ width: 100%;
+}
+
+.TITLE a {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+.TITLE a:active {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+.TITLE a:visited {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+H2
+{
+ COLOR: #ffffff ;
+ font-style: italic;
+ border: solid 3px #1d252b;
+ background-color: #a3b1bc;
+ PADDING: 0.5em;
+}
+
+TABLE.IMPORTANT
+{
+ font-style:italic;
+ border: solid 2px #ff0000;
+ width: 70%;
+ margin-left: 15%;
+}
+TABLE.CAUTION
+{
+ font-style:italic;
+ border: ridge 2px #ffff00;
+ width: 70%;
+ margin-left: 15%;
+}
+
+TABLE.NOTE
+{
+ font-style:italic;
+ border: solid 1px #000000;
+ width: 70%;
+ margin-left: 15%;
+}
+TABLE.TIP
+{
+ font-style:italic;
+ border: solid 1px #000000;
+ width: 70%;
+ margin-left: 15%;
+}
+
+TABLE.WARNING
+{
+ font-style:italic;
+ font-weight: bold;
+ border: ridge 4px #ff0000;
+ width: 70%;
+ margin-left: 15%;
+}
+
+DIV.VARIABLELIST {
+ font-family: sans-serif;
+ font-style: normal;
+ font-weight: normal;
+ padding-left: 20px;
+ font-size: small;
+}
+
+.VARLISTENTRY {
+ font-weight: bold;
+ margin-top: 10px;
+ color: #ffffff ;
+ background-color: #e8ecf2;
+ border: solid 1px #a3b1bc;
+ padding: 1px
+}
+
+/*
+ * See http://diveintoaccessibility.org/day_26_using_relative_font_sizes.html
+ * for an explanation of the following few commands.
+ * They are really too complicated to explain here in all depth. ;-)
+*/
+
+P {
+ font-size: 12px;
+}
+
+/*/*/A{}
+BODY P {
+
+/* font-size: x-small; */
+ voice-family: "\"}\"";
+ voice-family: inherit;
+ font-size: normal;
+}
+
+HTML>BODY P {
+ font-size: normal;
+}
+/* */
+
+/* Add an external-link icon to absolute links */
+a[href^="http:"] {
+ background: url(images/remote.png) right center no-repeat;
+ padding-right: 12px;
+}
+
+a[href^="http:"]:hover {
+ background: url(images/remote.png) right center no-repeat;
+}
+
+/* Add a note icon to footnote links */
+a[href^="#FTN"] {
+ background: url(images/qbullet-note.png) right center no-repeat;
+ padding-right: 12px;
+}
+
+a[href^="#FTN"]:hover {
+ background: url(images/qbullet-note.png) right center no-repeat;
+}
+
+/* ...and a back icon to the backlinks in the footnotes themselves */
+a[name^="FTN"] {
+ background: url(images/scrollup.png) right center no-repeat;
+ padding-right: 12px;
+}
+
+a[name^="FTN"]:hover {
+ background: url(images/scrollup.png) right center no-repeat;
+}
+
+/* Add a download icon to .gz links */
+a[href$=".gz"],a[href$=".tar"],a[href$=".zip"] {
+ background: url(images/disk.png) right center no-repeat;
+ padding-right: 12px;
+}
+
+
+/* Add an Acrobat Reader icon to PDF links */
+a[href$=".pdf"] {
+ background: url(images/acrobat.png) right center no-repeat;
+ padding-right: 12px;
+}
+
+a[href$=".pdf"]:hover {
+ background: url(images/acrobat.png) right center no-repeat;
+}
+
+/* Add a Word icon to RTF links */
+a[href$=".rtf"] {
+ background: url(images/word.png) right center no-repeat;
+ padding-right: 12px;
+}
+
+
+/* ...but not to absolute links in this domain... */
+a[href^="http://www.karakas-online.de"] {
+ background: transparent;
+ padding-right: 0px;
+}
+
+a[href^="http://www.karakas-online.de"]:hover {
+ background: transparent;
+}
+
+/* ...or to the translation links on each page */
+DIV.translatelink > a[href^="http:"] {
+ background: transparent;
+ padding-right: 0px;
+}
+
+DIV.translatelink > a[href^="http:"]:hover {
+ background: transparent;
+}
+
+/* ...or to any images */
+DIV.imagelink a[href^="http:"] {
+ background: transparent;
+ padding-right: 0px;
+}
+
+DIV.imagelink a[href^="http:"]:hover {
+ background: transparent;
+}
+
+
+P.C2 {
+ COLOR: #ffffff ;
+ BACKGROUND-color: #a0a0d0;
+ BORDER: solid 1px #606090;
+ PADDING: 1px
+}
+
+
+DIV.NAVFOOTER {
+ color: #000000;
+ background-color: #e8ecf2;
+ padding: 5px;
+ margin-top: 10px;
+ width: 100%;
+ border: 2px solid #a3b1bc;
+}
+
+DIV.NUKEFOOTER {
+ color: #000000;
+ background-color: #e8ecf2;
+ padding: 5px;
+ margin-top: 10px;
+ width: 100%;
+ border: thin solid #a3b1bc;
+}
+
+DIV.NAVHEADER {
+ color: #000000;
+ background-color: #e8ecf2;
+ padding: 5px;
+ margin-bottom: 10px;
+ width: 100%;
+ border: 2px solid #a3b1bc;
+}
+
+DIV.SECT1,DIV.SECT2,DIV.SECT3 {
+ margin-left: 20px;
+}
+
+DIV.EXAMPLE,DIV.TOC {
+ border: thin dotted #4e5f6e;
+ padding-left: 10px;
+ padding-right: 10px;
+ color: #000000;
+ background-color: #e8ecf2;
+}
+DIV.EXAMPLE {
+ border: thin dotted #22AA22;
+ background-color: #EEE;
+}
+
+DIV.TOC {
+ margin-left: 20px;
+ margin-right: 20px;
+ width: 95%;
+}
+
+UL {
+ /* list-style: url("images/tux-bullet.png") disc; */
+ }
+
+.namespaces {
+ border: 1px solid black;
+}
+
+.namespaces td {
+ padding: 0.2em 1em;
+ /* font-weight: bold; */
+}
+
+.namespaces thead {
+ background-color: #aaf;
+}
+
+.namespaces tr.init {
+ background-color: #e88;
+}
+
+.namespaces tr.childinit {
+ background-color: #eee;
+}
+
+.namespaces tr.processing {
+ background-color: #e88;
+}
+
+.namespaces tr.childexit {
+ background-color: #eee;
+}
+
+table.directives {
+ border-collapse: collapse;
+}
+.directives thead {
+ background-color: #bbf;
+ font-size: 1em;
+ text-decoration: none;
+}
+
+.directives thead td {
+ padding: 8px;
+}
+
+.directives tbody tr > :first-child {
+ background-color: #eee;
+ padding-left: 2em;
+ padding-right: 2em;
+ text-align: left;
+}
+
+.directives tbody tr > :last-child {
+ text-decoration: none;
+ font-weight: normal;
+ font-size: small;
+ border-left: 1px solid black;
+ text-align: left;
+}
+
+.directives tbody tr td {
+ text-align: center;
+ text-decoration: none;
+ font-weight: normal;
+ padding-left: 1em;
+ padding-right: 1em;
+ padding-bottom: 4px;
+ padding-top: 4px;
+ border-bottom: 1px solid black;
+}
+
+.note td {
+ font-size: small;
+}
+
+li.listitem {
+ font-size: small;
+}
Added: tcl/site/rivet/manual3.0/session_package.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/session_package.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/session_package.html (added)
+++ tcl/site/rivet/manual3.0/session_package.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,182 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Session Package</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="index.html" title="Apache Rivet 3.0"><link rel="prev" href="diodisplay_package.html" title="DIODisplay"><link rel="next" href="form.html" title="Form: An HTML Form Fields Generation Utility"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Session Package</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="diodisplay_package.html"><img src="images/prev.png" alt="Prev"></a>Â </td><th width="60%" align="center">Â </th><td width="20%" align="right">Â <a accesskey="n" href="form.html"><img src="images/next.png" alt="Nex
t"></a></td></tr></table></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="session_package"></a>Session Package</h2></div></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3234"></a>Introduction</h3></div></div></div><p style="width:90%">
+ This is session management code. It provides an interface
+ to allow you to generate and track a browser's visit as a
+ "session", giving you a unique session ID and an interface
+ for storing and retrieving data for that session on the
+ server.
+ </p><p style="width:90%">
+ This is an alpha/beta release -- documentation is not in
+ final form, but everything you need should be in this file.
+ </p><p style="width:90%">
+ Using sessions and their included ability to store and
+ retrieve session-related data on the server, programmers can
+ generate more secure and higher-performance websites. For
+ example, hidden fields do not have to be included in forms
+ (and the risk of them being manipulated by the user
+ mitigated) since data that would be stored in hidden fields
+ can now be stored in the session cache on the server. Forms
+ are then faster since no hidden data is transmitted --
+ hidden fields must be sent twice, once in the form to the
+ broswer and once in the response from it.
+ </p><p style="width:90%">
+ Robust login systems, etc, can be built on top of this code.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="requirements"></a>Requirements</h3></div></div></div><p style="width:90%">
+ Currently has only been tested with Postgresql, MySql and Oracle.
+ All DB interfacing is done through DIO, though, so it
+ should be relatively easy to add support for other
+ databases.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3243"></a>Preparing To Use It</h3></div></div></div><p style="width:90%">Create the tables in your SQL server. With Postgres,
+ do a <span style="font-family:monospace"><span class="command"><strong>psql www</strong></span></span> or whatever DB you
+ connect as, then a backslash-i on
+ <code class="filename">session-create.sql</code></p><p style="width:90%">(If you need to delete the tables, use <code class="filename">session-drop.sql</code>)</p><p style="width:90%">The session code by default requires a DIO handle
+ called <code class="varname">DIO</code> (the name of which can be
+ overridden). We get it by doing a</p><pre class="programlisting">RivetServerConf ChildInitScript "package require DIO"
+RivetServerConf ChildInitScript "::DIO::handle Postgresql DIO -user www"</pre></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3253"></a>Example Usage</h3></div></div></div><p style="width:90%">In your httpd.conf, add:</p><pre class="programlisting">RivetServerConf ChildInitScript "package require Session; Session SESSION"</pre><p style="width:90%">
+ This tells Rivet you want to create a session object named
+ SESSION in every child process Apache creates.</p><p style="width:90%">
+ You can configure the session at this point using numerous
+ key-value pairs (which are defined later in this doc).
+ Here's a quick example:</p><pre class="programlisting">RivetServerConf ChildInitScript "package require Session; Session SESSION \
+ -cookieLifetime 120 -debugMode 1"</pre><p style="width:90%">
+ Turn debugging on -debugMode 1 to figure
+ out what's going on -- it's really useful, if
+ verbose.</p><p style="width:90%">
+ In your .rvt file, when you're generating the <HEAD>
+ section:
+ </p><pre class="programlisting">SESSION activate</pre><p style="width:90%">
+ Activate handles everything for you with respect to
+ creating new sessions, and for locating, validating, and
+ updating existing sessions. Activate will either locate
+ an existing session, or create a new one. Sessions will
+ automatically be refreshed (their lifetimes extended) as
+ additional requests are received during the session, all
+ under the control of the key-value pairs controlling the
+ session object.
+ </p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3265"></a>Using Sessions From Your Code</h3></div></div></div><p style="width:90%">The main methods your code will use are:</p><div class="variablelist"><dl class="variablelist"><dt></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION</span> <span style="font-weight:bold ; font-family:monospace">id</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ After doing a <span style="font-family:monospace"><span class="command"><strong>SESSION activate</strong></span></span>,
+ this will return a 32-byte ASCII-encoded random
+ hexadecimal string. Every time this browser comes
+ to us with a request within the timeout period, this
+ same string will be returned (assuming they have
+ cookies enabled).
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION</span> <span style="font-weight:bold ; font-family:monospace">is_new_session</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">returns 1 if it's a new session or 0 if it has
+ previously existed (i.e. it's a zero if this request
+ represents a "return" or subsequent visit to a
+ current session.)</div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION new_session_reason</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ This will return why this request is the first
+ request of a new session, either "no_cookie" saying
+ the browser didn't give us a session cookie,
+ "no_session" indicating we got a cookie but couldn't
+ find it in our session table, or "timeout" where
+ they had a cookie and we found the matching session
+ but the session has timed out.
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION store</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>packageName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>data</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Given the name of a package, a key, and some data.
+ Stores the data in the rivet session cache table.
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION fetch</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>packageName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Given a package name and a key, return the data
+ stored by the store method, or an empty string if
+ none was set. (Status is set to the DIO error that
+ occurred, it can be fetched using the status
+ method.)
+ </div></div></dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3311"></a>Session Configuration Options</h3></div></div></div><p style="width:90%">The following key-value pairs can be specified when a
+ session object (like SESSION above) is created:</p><div class="variablelist"><dl class="variablelist"><dt><span class="term">sessionLifetime</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">how many seconds the session will live for.
+ 7200 == 2 hours
+ </div></div></dd><dt><span class="term">sessionRefreshInterval</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ If a request is processed for a browser that
+ currently has a session and this long has elapsed
+ since the session update time was last updated,
+ update it. 900 == 15 minutes. so if at least 15
+ minutes has elapsed and we've gotten a new request
+ for a page, update the session update time,
+ extending the session lifetime (sessions that are in
+ use keep getting extended).
+ </div></div></dd><dt><span class="term">cookieName</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex"></div>
+ name of the cookie stored on the user's web browser
+ default rivetSession
+ </div></dd><dt><span class="term">dioObject</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ The name of the DIO object we'll use to access the
+ database (default DIO)
+ </div></div></dd><dt><span class="term">gcProbability</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ The probability that garbage collection will occur
+ in percent. (default 1%, i.e. 1)</div></div></dd><dt><span class="term">gcMaxLifetime</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">the number of seconds after which
+ data will be seen as "garbage" and cleaned up --
+ defaults to 1 day (86400)</div></div></dd><dt><span class="term">refererCheck</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">The substring you want to check each
+ HTTP referer for. If the referer was sent by the
+ browser and the substring is not found, the session
+ will be deleted. (not coded yet)</div></div></dd><dt><span class="term">entropyFile</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">The
+ name of a file that random binary data can be read
+ from. (<code class="filename">/dev/urandom</code>) Data will
+ be used from this file to help generate a
+ super-hard-to-guess session ID.</div></div></dd><dt><span class="term">entropyLength</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">The number of bytes which will be
+ read from the entropy file. If 0, the entropy file
+ will not be read (default 0)</div></div></dd><dt><span class="term">scrambleCode</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Set the scramble code to something unique for the
+ site or your app or whatever, to slightly increase
+ the unguessability of session ids (default "some
+ random string")</div></div></dd><dt><span class="term">cookieLifetime</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">The lifetime of the cookie in
+ minutes. 0 means until the browser is closed (I
+ think). (default 0)</div></div></dd><dt><span class="term">cookiePath</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">The
+ webserver subpath that the session cookie applies to
+ (defaults to
+ <code class="filename">/</code>)</div></div></dd><dt><span class="term">cookieSecure</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">Specifies whether the cookie should
+ only be sent over secure connections, 0 = any, 1 =
+ secure connections only (default
+ 0)</div></div></dd><dt><span class="term">sessionTable</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">The name of the table that session
+ info will be stored in (default
+ <code class="varname">rivet_session</code>)</div></div></dd><dt><span class="term">sessionCacheTable</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">The name of the table that contains
+ cached session data (default
+ <code class="varname">rivet_session_cache</code>)</div></div></dd><dt><span class="term">debugMode</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">Set
+ debug mode to 1 to trace through and see the session
+ object do its thing (default 0)</div></div></dd><dt><span class="term">debugFile</span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">The
+ file handle that debugging messages will be written
+ to (default
+ <code class="varname">stdout</code>)
+ </div></div></dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3389"></a>Session Methods</h3></div></div></div><p style="width:90%">
+ The following methods can be invoked to find out
+ information about the current session, store and fetch
+ server data identified with this session, etc:
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION status</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Return the status of the last operation
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION id</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Get the session ID of the current browser. Returns
+ an empty string if there's no session (will not
+ happen is SESSION activate has been issued.)
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION new_session_reason</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns the reason why there wasn't a previous
+ session, either "no_cookie" saying the browser
+ didn't give us a session cookie, "no_session"
+ indicating we got a cookie but couldn't find it in
+ the session table, or "timeout" when we had a cookie
+ and a session but the session had timed out.
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION store</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>packageName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>data</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Given a package name, a key string, and a data
+ string, store the data in the rivet session
+ cache.
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION fetch</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>packageName</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>key</code></em></span>?</div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Given a package name and a key, return the data
+ stored by the store method, or an empty string if
+ none was set. Status is set to the DIO error that
+ occurred, it can be fetched using the status
+ method.
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION delete</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Given a user ID and looking at their IP address we
+ inherited from the environment (thanks, Apache),
+ remove them from the session table. (the session
+ table is how the server remembers stuff about
+ sessions). If the session ID was not specified the
+ current session is deleted.
+ </div></div></dd><dt><span class="term"></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">SESSION activate</span> </div></div><div style="margin-bottom:1.5ex ; padding .5ex">
+ Find and validate the session ID if they have one.
+ If they don't have one or it isn't valid (timed out,
+ etc), create a session and drop a cookie on
+ them.
+ </div></div></dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="idm3445"></a>Getting Additional Randomness From The Entropy File</h3></div></div></div><pre class="programlisting">RivetServerConf ChildInitScript "Session SESSION -entropyFile /dev/urandom \
+ -entropyLength 10 -debugMode 1"</pre><p style="width:90%">
+ This options say we want to get randomness from an entropy
+ file (random data pseudo-device) of /dev/urandom, to get ten
+ bytes of random data from that entropy device, and to turn
+ on debug mode, which will cause the SESSION object to output
+ all manner of debugging information as it does stuff. This
+ has been tested on FreeBSD and appears to work.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="diodisplay_package.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="form.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">DIODisplay </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> Form: An HTML Form Fields Generation Utility</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual3.0/shorthand.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/shorthand.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/shorthand.html (added)
+++ tcl/site/rivet/manual3.0/shorthand.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,13 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title><?= ... ?></title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="next" href="abort_code.html" title="abort_code"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center"><?= ... ?></th></tr><tr><td width="20%" align="left"><a accesskey="p" href="commands.html"><img src="images/prev.png" alt="Prev"></a>Â </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right">Â <a accesskey="n" href="abort_code.html"><img s
rc="images/next.png" alt="Next"></a></td></tr></table></div><div class="refentry"><a name="shorthand"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p><?= ... ?> â
+ Shorthand construct for single strings output
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace"><?= <span style="font-family:monospace; font-weight: bold;">$string</span> ?></span> </div></div></div><div class="refsect1"><a name="idm736"></a><h2>Description</h2><p style="width:90%">
+ This construct is a simplified form to print a single string wherever
+ needed in a ?<span style="font-family:monospace; font-weight: bold;">.rvt</span>? template. The contruct is equivalent to
+ writing the following line of Tcl code
+ </p><pre class="programlisting">puts -nonewline $string</pre><p style="width:90%">
+ The ?<span style="font-family:monospace; font-weight: bold;">string</span>? argument to the shorthand construct can
+ be any Tcl command returning a value
+ </p><p style="width:90%">
+ See <a class="xref" href="examples.html#hello_world" title="Example 1. Hello World">Example 1, âHello Worldâ</a> or
+ <a class="xref" href="examples.html#variable_access" title="Example 3. Variable Access">Example 3, âVariable Accessâ</a>
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="commands.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="abort_code.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Rivet Tcl Commands and Variables </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> abort_code</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual3.0/tcl_packages.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/tcl_packages.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/tcl_packages.html (added)
+++ tcl/site/rivet/manual3.0/tcl_packages.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,4 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Rivet Tcl Packages</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="index.html" title="Apache Rivet 3.0"><link rel="prev" href="examples.html" title="Examples and Usage"><link rel="next" href="dio.html" title="DIO - Database Interface Objects"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Rivet Tcl Packages</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="examples.html"><img src="images/prev.png" alt="Prev"></a>Â </td><th width="60%" align="center">Â </th><td width="20%" align="right">Â <a accesskey="n" href="dio.html"><img src="images/next.png" alt="Next"></a></td></tr></t
able></div><div class="section"><div class="titlepage"><div><div><hr><h2 class="title" style="clear: both"><a name="tcl_packages"></a>Rivet Tcl Packages</h2></div></div></div><p style="width:90%">
+ In addition to the core Apache module, Rivet provides a number
+ of Tcl packages that include potentially useful code.
+ </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">dio is a database abstraction layer.</div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">form - for creating forms.</div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">calendar - a package providing a simple configurable calendar generator</div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">rivet entities - an UTF-8 / HTML entities converter</div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">formbroker - a form data validators broker</div></li><li class="listitem"><div style="margin-bottom:1.5ex ; padding .5ex">ASCII Glyphs - prints most of the ASCII character set as large ASCII art glyphs</div></li></ul></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="le
ft"><a accesskey="p" href="examples.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="dio.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">Examples and Usage </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> DIO - Database Interface Objects</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual3.0/toglyphs.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/toglyphs.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/toglyphs.html (added)
+++ tcl/site/rivet/manual3.0/toglyphs.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,6 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>toGlyphs</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="asciiglyphs.html" title="AsciiGlyphs"><link rel="prev" href="asciiglyphs.html" title="AsciiGlyphs"><link rel="next" href="formbroker.html" title="The Form Broker"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">toGlyphs</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="asciiglyphs.html"><img src="images/prev.png" alt="Prev"></a>Â </td><th width="60%" align="center">AsciiGlyphs</th><td width="20%" align="right">Â <a accesskey="n" href="formbroker.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><div
class="refentry"><a name="toglyphs"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>toGlyphs â
+ print large ASCII glyphs
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::AsciiGlyphs toGlyphs</span> <span style="font-family:monospace; font-weight: bold;">string</span> </div></div></div><div class="refsect1"><a name="idm4173"></a><h2>Description</h2><p style="width:90%">
+ prints the ASCII glyphs corresponding to the characters forming
+ the argument <span style="font-family:monospace; font-weight: bold;">string</span>
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="asciiglyphs.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="asciiglyphs.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="formbroker.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">AsciiGlyphs </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> The Form Broker</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual3.0/try.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/try.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/try.html (added)
+++ tcl/site/rivet/manual3.0/try.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,57 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>try</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="read_file.html" title="read_file"><link rel="next" href="unescape_string.html" title="unescape_string"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">try</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="read_file.html"><img src="images/prev.png" alt="Prev"></a>Â </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right">Â <a accesskey="n" href="unescape_string.html"><img src="images/next.png" alt="Next">
</a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="try"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>try â
+ Catch error and exception conditions
+ </p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::try</span> ?<span style="font-family:monospace; font-weight: bold;">script</span>? ?<span style="font-family:monospace; font-weight: bold;">script</span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>handlers</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>finally script</code></em></span>?</div></div></div><div class="refsect1"><a name="idm1603"></a><h2>Description</h2><p style="width:90%">
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::try</strong></span></span> wraps the core language
+ command and simply traps exceptions that might have raised
+ by <span style="font-family:monospace"><span class="command"><strong>::rivet::abort_page</strong></span></span> and
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span> to throw them again and
+ thus causing <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span> to be executed.
+ </p><p style="width:90%">
+ If neither <span style="font-family:monospace"><span class="command"><strong>::rivet::abort_page</strong></span></span> nor
+ <span style="font-family:monospace"><span class="command"><strong>::rivet::exit</strong></span></span> are called from ?<span style="font-family:monospace; font-weight: bold;">script</span>?
+ then any handlers specified in the command are tested for execution.
+ Thus <span style="font-family:monospace"><span class="command"><strong>::rivet::try</strong></span></span> can transparently be used
+ as a replacement for Tcl's own <span style="font-family:monospace"><span class="command"><strong>try</strong></span></span> and it's needed
+ if you want ?<span style="font-family:monospace; font-weight: bold;">script</span>? to safely bail out to <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span>
+ </p><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td><th align="left">Note</th></tr><tr><td align="left" valign="top">
+ This command is not exported from the <span style="font-family:monospace"><span class="command"><strong>::rivet</strong></span></span> namespace and therefore has
+ to be fully qualified.
+ </td></tr></table></div><p style="width:90%">
+ This script shows how <span style="font-family:monospace"><span class="command"><strong>::rivet:try</strong></span></span>
+ handles different exceptions or errors. You can drive this script
+ within mod_rivet adding the arguments fail or abort or exit to its URL.
+ You can handle the <span class="quote">â<span class="quote">exit</span>â</span> and <span class="quote">â<span class="quote">abort</span>â</span> cases with
+ an <span style="font-family:monospace"><span class="command"><strong>AbortScript</strong></span></span>.
+ See <a class="xref" href="directives.html" title="Apache Rivet 3.0 Configuration">the section called âApache Rivet 3.0 Configurationâ</a>
+ </p><pre class="programlisting"><html><?::rivet::try {
+ if {[::rivet::var_qs exists exit]} {
+ ::rivet::exit [::rivet::var_qs get exit]
+ } elseif {[::rivet::var_qs exists abort]} {
+ ::rivet::abort_page [::rivet::var_qs get abort]
+ } elseif {[::rivet::var_qs exists fail]} {
+ # this is just a non existent command
+ wrong_command
+ } else {
+ puts "<b>OK</b>"
+ }
+
+} on error {e o} {
+ puts "catching error -&gt; $e<br/>"
+ dict for {fd fv} $o {
+
+ puts "$fd --&gt;&gt; $fv<br/>"
+
+ }
+ }
+?></html></pre><p style="width:90%">
+ Placing this code in a file (try.rvt) on the
+ web server <span class="emphasis"><em>DocumentRoot</em></span>
+ directory and setting for example the browser
+ to <span style="font-family:monospace"><span class="command"><strong>http://localhost/try.rvt?fail=1</strong></span></span>.
+ </p><pre class="programlisting">catching error -> invalid command name "wrong_command"
+-errorcode -->> TCL LOOKUP COMMAND wrong_command
+-code -->> 1
+-level -->> 0
+-errorstack -->> INNER {invokeStk1 wrong_command} UP 1
+-errorinfo -->> invalid command name "wrong_command" while executing "wrong_command" ("::try" body line 9)
+-errorline -->> 9</pre></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="read_file.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="unescape_string.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">read_file </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> unescape_string</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual3.0/unescape_string.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/unescape_string.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/unescape_string.html (added)
+++ tcl/site/rivet/manual3.0/unescape_string.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,10 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>unescape_string</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="try.html" title="try"><link rel="next" href="upload.html" title="upload"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">unescape_string</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="try.html"><img src="images/prev.png" alt="Prev"></a>Â </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right">Â <a accesskey="n" href="upload.html"><img src="images/next.png" alt="Next"></a></td></tr></table
></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="unescape_string"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>unescape_string â unescape escaped characters in a string.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::unescape_string</span> ?<span style="font-family:monospace; font-weight: bold;">string</span>?</div></div></div><div class="refsect1"><a name="idm1640"></a><h2>Description</h2><p style="width:90%">
+ Scans through each character in the specified string looking
+ for escaped character sequences (characters containing a
+ percent sign and two hexadecimal characters), unescaping them
+ back to their original character values, as needed, also mapping
+ plus signs to spaces, and returning the result.
+ </p><p style="width:90%">
+ This is useful for unquoting strings that have been quoted to
+ be part of a URL.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="try.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="upload.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">try </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> upload</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual3.0/upload.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/upload.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/upload.html (added)
+++ tcl/site/rivet/manual3.0/upload.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,53 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>upload</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="unescape_string.html" title="unescape_string"><link rel="next" href="url_script.html" title="url_script"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">upload</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="unescape_string.html"><img src="images/prev.png" alt="Prev"></a>Â </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right">Â <a accesskey="n" href="url_script.html"><img src="images/next.png" al
t="Next"></a></td></tr></table></div><div class="refentry"><div class="refentry.separator"><hr></div><a name="upload"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>upload â handle a file uploaded by a client.</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> (<span style="font-family:monospace; font-weight: bold;">channel</span> | <span style="font-family:monospace; font-weight: bold;">save</span> | <span style="font-family:monospace; font-weight: bold;">data</span> | <span style="font-family:monospace; font-weight: bold;">exists</span> | <span style="font-family:monospace; font-weight: bold;">size</span> | <span style="font-family:monospace; font-weight: bold;">type</span> | <span style="font-family:monospace; font-weight:
bold;">filename</span>)</div></div></div><div class="refsect1"><a name="idm1659"></a><h2>Description</h2><p style="width:90%">
+ The upload command is for file upload manipulation.
+ See the relevant Apache Directives to further configure the
+ behavior of this Rivet feature.
+ </p><div class="variablelist"><dl class="variablelist"><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">channel</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ When given the name of a file upload
+ <em class="replaceable"><code>uploadname</code></em>,
+ returns a Tcl channel that can be used to access the
+ uploaded file.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">save</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>? ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>filename</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Saves the <em class="replaceable"><code>uploadname</code></em> in
+ the file <em class="replaceable"><code>filename</code></em>.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">data</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns data uploaded to the server. This is binary clean
+ - in other words, it will work even with files like
+ images, executables, compressed files, and so on.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">exists</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns true if an upload named ?<span style="font-family:monospace; font-weight: bold;">uploadname</span>?
+ exists. This can be used in scripts that are meant to
+ be run by different forms that send over uploads that
+ might need specific processing.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">size</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns the size of the file uploaded.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">type</span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ If the <code class="varname">Content-type</code> is set, it is
+ returned, otherwise, an empty string.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">filename</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns the filename on the remote host that uploaded the file.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">tempname</span> ?<span style="font-family:monospace; font-weight: bold;"><em class="replaceable"><code>uploadname</code></em></span>?</div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns the name of the temporary file on the local host that the file was uploaded into.
+ </div></div></dd><dt><span class="term">
+ <div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::upload</span> <span style="font-family:monospace; font-weight: bold;">names</span> </div></div>
+ </span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:1.5ex ; padding .5ex">
+ Returns the variable names, as a list, of all the files uploaded.
+ </div></div></dd></dl></div><p style="width:90%">
+ See <a class="xref" href="examples.html#file_upload" title="Example 4. File Upload">Example 4, âFile Uploadâ</a>.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="unescape_string.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="url_script.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">unescape_string </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> url_script</td></tr></table></div></body></html>
Added: tcl/site/rivet/manual3.0/url_script.html
URL: http://svn.apache.org/viewvc/tcl/site/rivet/manual3.0/url_script.html?rev=1821429&view=auto
==============================================================================
--- tcl/site/rivet/manual3.0/url_script.html (added)
+++ tcl/site/rivet/manual3.0/url_script.html Wed Jan 17 22:31:48 2018
@@ -0,0 +1,7 @@
+<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>url_script</title><link rel="stylesheet" type="text/css" href="rivet.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><link rel="home" href="index.html" title="Apache Rivet 3.0"><link rel="up" href="commands.html" title="Rivet Tcl Commands and Variables"><link rel="prev" href="upload.html" title="upload"><link rel="next" href="var.html" title="var"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">url_script</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="upload.html"><img src="images/prev.png" alt="Prev"></a>Â </td><th width="60%" align="center">Rivet Tcl Commands and Variables</th><td width="20%" align="right">Â <a accesskey="n" href="var.html"><img src="images/next.png" alt="Next"></a></td></tr></table></div><di
v class="refentry"><div class="refentry.separator"><hr></div><a name="url_script"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>url_script â get the code of the URL referenced Tcl script or Rivet template</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><div class="cmdsynopsis" style="width:80%"><div style="border: 1px solid #282; margin:1ex ; padding:.4ex; padding-left: 0.8ex; word-spacing:1ex "><span style="font-weight:bold ; font-family:monospace">::rivet::url_script</span> </div></div></div><div class="refsect1"><a name="idm1759"></a><h2>Description</h2><p style="width:90%">
+ This command is used internally by the rivet central Tcl
+ procedure (::Rivet::request_handling) executed by
+ the default traditional code for HTTP requests processing.
+ Unless you're implementing your own ::Rivet::request_handling
+ procedure it's unlikely it can be of any use.
+ </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="upload.html"><img src="images/prev.png" alt="Prev"></a> </td><td width="20%" align="center"><a accesskey="u" href="commands.html"><img src="images/up.png" alt="Up"></a></td><td width="40%" align="right"> <a accesskey="n" href="var.html"><img src="images/next.png" alt="Next"></a></td></tr><tr><td width="40%" align="left" valign="top">upload </td><td width="20%" align="center"><a accesskey="h" href="index.html"><img src="images/home.png" alt="Home"></a></td><td width="40%" align="right" valign="top"> var</td></tr></table></div></body></html>
---------------------------------------------------------------------
To unsubscribe, e-mail: site-cvs-unsubscribe@tcl.apache.org
For additional commands, e-mail: site-cvs-help@tcl.apache.org