summaryrefslogtreecommitdiffhomepage
path: root/docs/api/modules/luci.http.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/api/modules/luci.http.html')
-rw-r--r--docs/api/modules/luci.http.html1267
1 files changed, 1267 insertions, 0 deletions
diff --git a/docs/api/modules/luci.http.html b/docs/api/modules/luci.http.html
new file mode 100644
index 0000000000..4731727849
--- /dev/null
+++ b/docs/api/modules/luci.http.html
@@ -0,0 +1,1267 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+ <title>Reference</title>
+ <link rel="stylesheet" href="../luadoc.css" type="text/css" />
+ <!--meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/-->
+</head>
+
+<body>
+<div id="container">
+
+<div id="product">
+ <div id="product_logo"></div>
+ <div id="product_name"><big><b></b></big></div>
+ <div id="product_description"></div>
+</div> <!-- id="product" -->
+
+<div id="main">
+
+<div id="navigation">
+
+
+<h1>LuaDoc</h1>
+<ul>
+
+ <li><a href="../index.html">Index</a></li>
+
+</ul>
+
+
+<!-- Module list -->
+
+<h1>Modules</h1>
+<ul>
+
+ <li>
+ <a href="../modules/luci.dispatcher.html">luci.dispatcher</a>
+ </li>
+
+ <li><strong>luci.http</strong></li>
+
+ <li>
+ <a href="../modules/luci.http.conditionals.html">luci.http.conditionals</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.http.date.html">luci.http.date</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.http.mime.html">luci.http.mime</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.i18n.html">luci.i18n</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.ip.html">luci.ip</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.ip.cidr.html">luci.ip.cidr</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.json.html">luci.json</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.jsonc.html">luci.jsonc</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.jsonc.parser.html">luci.jsonc.parser</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.model.ipkg.html">luci.model.ipkg</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.model.uci.html">luci.model.uci</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.rpcc.html">luci.rpcc</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.rpcc.ruci.html">luci.rpcc.ruci</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.sys.html">luci.sys</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.sys.init.html">luci.sys.init</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.sys.iptparser.html">luci.sys.iptparser</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.sys.net.html">luci.sys.net</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.sys.process.html">luci.sys.process</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.sys.user.html">luci.sys.user</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.sys.wifi.html">luci.sys.wifi</a>
+ </li>
+
+ <li>
+ <a href="../modules/luci.util.html">luci.util</a>
+ </li>
+
+ <li>
+ <a href="../modules/nixio.html">nixio</a>
+ </li>
+
+ <li>
+ <a href="../modules/nixio.CHANGELOG.html">nixio.CHANGELOG</a>
+ </li>
+
+ <li>
+ <a href="../modules/nixio.CryptoHash.html">nixio.CryptoHash</a>
+ </li>
+
+ <li>
+ <a href="../modules/nixio.File.html">nixio.File</a>
+ </li>
+
+ <li>
+ <a href="../modules/nixio.README.html">nixio.README</a>
+ </li>
+
+ <li>
+ <a href="../modules/nixio.Socket.html">nixio.Socket</a>
+ </li>
+
+ <li>
+ <a href="../modules/nixio.TLSContext.html">nixio.TLSContext</a>
+ </li>
+
+ <li>
+ <a href="../modules/nixio.TLSSocket.html">nixio.TLSSocket</a>
+ </li>
+
+ <li>
+ <a href="../modules/nixio.UnifiedIO.html">nixio.UnifiedIO</a>
+ </li>
+
+ <li>
+ <a href="../modules/nixio.bin.html">nixio.bin</a>
+ </li>
+
+ <li>
+ <a href="../modules/nixio.bit.html">nixio.bit</a>
+ </li>
+
+ <li>
+ <a href="../modules/nixio.crypto.html">nixio.crypto</a>
+ </li>
+
+ <li>
+ <a href="../modules/nixio.fs.html">nixio.fs</a>
+ </li>
+
+</ul>
+
+
+
+<!-- File list -->
+
+
+
+
+
+
+
+</div><!-- id="navigation" -->
+
+<div id="content">
+
+<h1>Class <code>luci.http</code></h1>
+
+<p></p>
+
+
+
+
+
+
+
+<h2>Functions</h2>
+<table class="function_list">
+
+ <tr>
+ <td class="name" nowrap><a href="#build_querystring">build_querystring</a>&nbsp;(table)</td>
+ <td class="summary">
+
+Create a querystring out of a table of key - value pairs.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#close">close</a>&nbsp;()</td>
+ <td class="summary">
+
+Close the HTTP-Connection.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#content">content</a>&nbsp;()</td>
+ <td class="summary">
+
+Return the request content if the request was of unknown type.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#formvalue">formvalue</a>&nbsp;(name, noparse)</td>
+ <td class="summary">
+
+Get a certain HTTP input value or a table of all input values.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#formvaluetable">formvaluetable</a>&nbsp;(prefix)</td>
+ <td class="summary">
+
+Get a table of all HTTP input values with a certain prefix.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#getcookie">getcookie</a>&nbsp;(name)</td>
+ <td class="summary">
+
+Get the value of a certain HTTP-Cookie.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#getenv">getenv</a>&nbsp;(name)</td>
+ <td class="summary">
+
+Get the value of a certain HTTP environment variable
+or the environment table itself.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#header">header</a>&nbsp;(key, value)</td>
+ <td class="summary">
+
+Send a HTTP-Header.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#mimedecode_message_body">mimedecode_message_body</a>&nbsp;(src, msg, filecb)</td>
+ <td class="summary">
+
+Decode a mime encoded http message body with multipart/form-data Content-Type.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#parse_message_body">parse_message_body</a>&nbsp;(src, msg, filecb)</td>
+ <td class="summary">
+
+Try to extract and decode a http message body from the given ltn12 source.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#prepare_content">prepare_content</a>&nbsp;(mime)</td>
+ <td class="summary">
+
+Set the mime type of following content data.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#redirect">redirect</a>&nbsp;(url)</td>
+ <td class="summary">
+
+Redirects the client to a new URL and closes the connection.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#setfilehandler">setfilehandler</a>&nbsp;(callback)</td>
+ <td class="summary">
+
+Set a handler function for incoming user file uploads.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#source">source</a>&nbsp;()</td>
+ <td class="summary">
+
+Get the RAW HTTP input source
+ </td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#splice">splice</a>&nbsp;(fp, size)</td>
+ <td class="summary">
+
+Splice data from a filedescriptor to the client.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#status">status</a>&nbsp;(code, message)</td>
+ <td class="summary">
+
+Set the HTTP status code and status message.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#urldecode">urldecode</a>&nbsp;(str, no_plus)</td>
+ <td class="summary">
+
+Return the URL-decoded equivalent of a string.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#urldecode_message_body">urldecode_message_body</a>&nbsp;(src, msg)</td>
+ <td class="summary">
+
+Decode an urlencoded http message body with application/x-www-urlencoded
+Content-Type.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#urldecode_params">urldecode_params</a>&nbsp;(url, tbl)</td>
+ <td class="summary">
+
+Extract and split urlencoded data pairs, separated bei either "&" or ";"
+from given url or string.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#urlencode">urlencode</a>&nbsp;(str)</td>
+ <td class="summary">
+
+Return the URL-encoded equivalent of a string.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#urlencode_params">urlencode_params</a>&nbsp;(tbl)</td>
+ <td class="summary">
+
+Encode each key-value-pair in given table to x-www-urlencoded format,
+separated by "&".</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#write">write</a>&nbsp;(content, src_err)</td>
+ <td class="summary">
+
+Send a chunk of content data to the client.</td>
+ </tr>
+
+ <tr>
+ <td class="name" nowrap><a href="#write_json">write_json</a>&nbsp;(data)</td>
+ <td class="summary">
+
+Send the given data as JSON encoded string.</td>
+ </tr>
+
+</table>
+
+
+
+
+
+
+<br/>
+<br/>
+
+
+<h2><a name="functions"></a>Functions</h2>
+<dl class="function">
+
+
+
+<dt><a name="build_querystring"></a><strong>build_querystring</strong>&nbsp;(table)</dt>
+<dd>
+
+
+Create a querystring out of a table of key - value pairs.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ table: Query string source table
+ </li>
+
+</ul>
+
+
+
+
+
+
+<h3>Return value:</h3>
+Encoded HTTP query string
+
+
+
+</dd>
+
+
+
+
+<dt><a name="close"></a><strong>close</strong>&nbsp;()</dt>
+<dd>
+
+
+Close the HTTP-Connection.
+
+
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+
+<dt><a name="content"></a><strong>content</strong>&nbsp;()</dt>
+<dd>
+
+
+Return the request content if the request was of unknown type.
+
+
+
+
+
+
+
+
+<h3>Return values:</h3>
+<ol>
+
+ <li>HTTP request body
+
+ <li>HTTP request body length
+
+</ol>
+
+
+
+</dd>
+
+
+
+
+<dt><a name="formvalue"></a><strong>formvalue</strong>&nbsp;(name, noparse)</dt>
+<dd>
+
+
+Get a certain HTTP input value or a table of all input values.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ name: Name of the GET or POST variable to fetch
+ </li>
+
+ <li>
+ noparse: Don't parse POST data before getting the value
+ </li>
+
+</ul>
+
+
+
+
+
+
+<h3>Return value:</h3>
+HTTP input value or table of all input value
+
+
+
+</dd>
+
+
+
+
+<dt><a name="formvaluetable"></a><strong>formvaluetable</strong>&nbsp;(prefix)</dt>
+<dd>
+
+
+Get a table of all HTTP input values with a certain prefix.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ prefix: Prefix
+ </li>
+
+</ul>
+
+
+
+
+
+
+<h3>Return value:</h3>
+Table of all HTTP input values with given prefix
+
+
+
+</dd>
+
+
+
+
+<dt><a name="getcookie"></a><strong>getcookie</strong>&nbsp;(name)</dt>
+<dd>
+
+
+Get the value of a certain HTTP-Cookie.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ name: Cookie Name
+ </li>
+
+</ul>
+
+
+
+
+
+
+<h3>Return value:</h3>
+String containing cookie data
+
+
+
+</dd>
+
+
+
+
+<dt><a name="getenv"></a><strong>getenv</strong>&nbsp;(name)</dt>
+<dd>
+
+
+Get the value of a certain HTTP environment variable
+or the environment table itself.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ name: Environment variable
+ </li>
+
+</ul>
+
+
+
+
+
+
+<h3>Return value:</h3>
+HTTP environment value or environment table
+
+
+
+</dd>
+
+
+
+
+<dt><a name="header"></a><strong>header</strong>&nbsp;(key, value)</dt>
+<dd>
+
+
+Send a HTTP-Header.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ key: Header key
+ </li>
+
+ <li>
+ value: Header value
+ </li>
+
+</ul>
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+
+<dt><a name="mimedecode_message_body"></a><strong>mimedecode_message_body</strong>&nbsp;(src, msg, filecb)</dt>
+<dd>
+
+
+Decode a mime encoded http message body with multipart/form-data Content-Type.
+
+Stores all extracted data associated with its parameter name
+in the params table within the given message object. Multiple parameter
+values are stored as tables, ordinary ones as strings.
+
+If an optional file callback function is given then it is fed with the
+file contents chunk by chunk and only the extracted file name is stored
+within the params table. The callback function will be called subsequently
+with three arguments:
+ o Table containing decoded (name, file) and raw (headers) mime header data
+ o String value containing a chunk of the file data
+ o Boolean which indicates whether the current chunk is the last one (eof)
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ src: Ltn12 source function
+ </li>
+
+ <li>
+ msg: HTTP message object
+ </li>
+
+ <li>
+ filecb: File callback function (optional)
+ </li>
+
+</ul>
+
+
+
+
+
+
+<h3>Return values:</h3>
+<ol>
+
+ <li>Value indicating successful operation (not nil means "ok")
+
+ <li>String containing the error if unsuccessful
+
+</ol>
+
+
+
+<h3>See also:</h3>
+<ul>
+
+ <li><a href="">
+ parse_message_header
+ </a>
+
+</ul>
+
+</dd>
+
+
+
+
+<dt><a name="parse_message_body"></a><strong>parse_message_body</strong>&nbsp;(src, msg, filecb)</dt>
+<dd>
+
+
+Try to extract and decode a http message body from the given ltn12 source.
+This function will examine the Content-Type within the given message object
+to select the appropriate content decoder.
+
+Currently the application/x-www-urlencoded and application/form-data
+mime types are supported. If the encountered content encoding can't be
+handled then the whole message body will be stored unaltered as "content"
+property within the given message object.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ src: Ltn12 source function
+ </li>
+
+ <li>
+ msg: HTTP message object
+ </li>
+
+ <li>
+ filecb: File data callback (optional, see mimedecode_message_body())
+ </li>
+
+</ul>
+
+
+
+
+
+
+<h3>Return values:</h3>
+<ol>
+
+ <li>Value indicating successful operation (not nil means "ok")
+
+ <li>String containing the error if unsuccessful
+
+</ol>
+
+
+
+<h3>See also:</h3>
+<ul>
+
+ <li><a href="">
+ parse_message_header
+ </a>
+
+</ul>
+
+</dd>
+
+
+
+
+<dt><a name="prepare_content"></a><strong>prepare_content</strong>&nbsp;(mime)</dt>
+<dd>
+
+
+Set the mime type of following content data.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ mime: Mimetype of following content
+ </li>
+
+</ul>
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+
+<dt><a name="redirect"></a><strong>redirect</strong>&nbsp;(url)</dt>
+<dd>
+
+
+Redirects the client to a new URL and closes the connection.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ url: Target URL
+ </li>
+
+</ul>
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+
+<dt><a name="setfilehandler"></a><strong>setfilehandler</strong>&nbsp;(callback)</dt>
+<dd>
+
+
+Set a handler function for incoming user file uploads.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ callback: Handler function
+ </li>
+
+</ul>
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+
+<dt><a name="source"></a><strong>source</strong>&nbsp;()</dt>
+<dd>
+
+
+Get the RAW HTTP input source
+
+
+
+
+
+
+
+
+<h3>Return value:</h3>
+HTTP LTN12 source
+
+
+
+</dd>
+
+
+
+
+<dt><a name="splice"></a><strong>splice</strong>&nbsp;(fp, size)</dt>
+<dd>
+
+
+Splice data from a filedescriptor to the client.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ fp: File descriptor
+ </li>
+
+ <li>
+ size: Bytes to splice (optional)
+ </li>
+
+</ul>
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+
+<dt><a name="status"></a><strong>status</strong>&nbsp;(code, message)</dt>
+<dd>
+
+
+Set the HTTP status code and status message.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ code: Status code
+ </li>
+
+ <li>
+ message: Status message
+ </li>
+
+</ul>
+
+
+
+
+
+
+
+
+</dd>
+
+
+
+
+<dt><a name="urldecode"></a><strong>urldecode</strong>&nbsp;(str, no_plus)</dt>
+<dd>
+
+
+Return the URL-decoded equivalent of a string.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ str: URL-encoded string
+ </li>
+
+ <li>
+ no_plus: Don't decode + to " "
+ </li>
+
+</ul>
+
+
+
+
+
+
+<h3>Return value:</h3>
+URL-decoded string
+
+
+
+<h3>See also:</h3>
+<ul>
+
+ <li><a href="#urlencode">
+ urlencode
+ </a>
+
+</ul>
+
+</dd>
+
+
+
+
+<dt><a name="urldecode_message_body"></a><strong>urldecode_message_body</strong>&nbsp;(src, msg)</dt>
+<dd>
+
+
+Decode an urlencoded http message body with application/x-www-urlencoded
+Content-Type.
+
+Stores all extracted data associated with its parameter name in the params
+table within the given message object. Multiple parameter values are stored
+as tables, ordinary ones as strings.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ src: Ltn12 source function
+ </li>
+
+ <li>
+ msg: HTTP message object
+ </li>
+
+</ul>
+
+
+
+
+
+
+<h3>Return values:</h3>
+<ol>
+
+ <li>Value indicating successful operation (not nil means "ok")
+
+ <li>String containing the error if unsuccessful
+
+</ol>
+
+
+
+<h3>See also:</h3>
+<ul>
+
+ <li><a href="">
+ parse_message_header
+ </a>
+
+</ul>
+
+</dd>
+
+
+
+
+<dt><a name="urldecode_params"></a><strong>urldecode_params</strong>&nbsp;(url, tbl)</dt>
+<dd>
+
+
+Extract and split urlencoded data pairs, separated bei either "&" or ";"
+from given url or string. Returns a table with urldecoded values.
+
+Simple parameters are stored as string values associated with the parameter
+name within the table. Parameters with multiple values are stored as array
+containing the corresponding values.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ url: The url or string which contains x-www-urlencoded form data
+ </li>
+
+ <li>
+ tbl: Use the given table for storing values (optional)
+ </li>
+
+</ul>
+
+
+
+
+
+
+<h3>Return value:</h3>
+Table containing the urldecoded parameters
+
+
+
+<h3>See also:</h3>
+<ul>
+
+ <li><a href="#urlencode_params">
+ urlencode_params
+ </a>
+
+</ul>
+
+</dd>
+
+
+
+
+<dt><a name="urlencode"></a><strong>urlencode</strong>&nbsp;(str)</dt>
+<dd>
+
+
+Return the URL-encoded equivalent of a string.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ str: Source string
+ </li>
+
+</ul>
+
+
+
+
+
+
+<h3>Return value:</h3>
+URL-encoded string
+
+
+
+<h3>See also:</h3>
+<ul>
+
+ <li><a href="#urldecode">
+ urldecode
+ </a>
+
+</ul>
+
+</dd>
+
+
+
+
+<dt><a name="urlencode_params"></a><strong>urlencode_params</strong>&nbsp;(tbl)</dt>
+<dd>
+
+
+Encode each key-value-pair in given table to x-www-urlencoded format,
+separated by "&".
+
+Tables are encoded as parameters with multiple values by repeating the
+parameter name with each value.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ tbl: Table with the values
+ </li>
+
+</ul>
+
+
+
+
+
+
+<h3>Return value:</h3>
+String containing encoded values
+
+
+
+<h3>See also:</h3>
+<ul>
+
+ <li><a href="#urldecode_params">
+ urldecode_params
+ </a>
+
+</ul>
+
+</dd>
+
+
+
+
+<dt><a name="write"></a><strong>write</strong>&nbsp;(content, src_err)</dt>
+<dd>
+
+
+Send a chunk of content data to the client.
+
+This function is as a valid LTN12 sink.
+If the content chunk is nil this function will automatically invoke close.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ content: Content chunk
+ </li>
+
+ <li>
+ src_err: Error object from source (optional)
+ </li>
+
+</ul>
+
+
+
+
+
+
+
+
+<h3>See also:</h3>
+<ul>
+
+ <li><a href="#close">
+ close
+ </a>
+
+</ul>
+
+</dd>
+
+
+
+
+<dt><a name="write_json"></a><strong>write_json</strong>&nbsp;(data)</dt>
+<dd>
+
+
+Send the given data as JSON encoded string.
+
+
+
+<h3>Parameters</h3>
+<ul>
+
+ <li>
+ data: Data to send
+ </li>
+
+</ul>
+
+
+
+
+
+
+
+
+</dd>
+
+
+</dl>
+
+
+
+
+
+</div> <!-- id="content" -->
+
+</div> <!-- id="main" -->
+
+<div id="about">
+ <p><a href="http://validator.w3.org/check?uri=referer"><img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /></a></p>
+</div> <!-- id="about" -->
+
+</div> <!-- id="container" -->
+</body>
+</html>