<?xml version="1.0" encoding="UTF-8"?>

<!-- ====================================================================== -->
<!-- = appendix-i.xml                                                     = -->
<!-- = standard nwg services module guide - appendix i                    = -->
<!-- ====================================================================== -->
<!-- = This  program  is  free  software; you  can redistribute it and/or = -->
<!-- = modify it provided that this copyright notice is kept intact.      = -->
<!-- = This program is distributed in the hope that it will be useful but = -->
<!-- = without  any  warranty;  without  even  the  implied  warranty  of = -->
<!-- = merchantability or fitness for  a  particular purpose. In no event = -->
<!-- = shall  the  copyright  holder be liable for any  direct, indirect, = -->
<!-- = incidental  or special  damages arising  in any way out of the use = -->
<!-- = of this software.                                                  = -->
<!-- ====================================================================== -->
<!-- = copyright (c) 1999-2008 - amaury darsch                            = -->
<!-- ====================================================================== -->

<appendix module="nwg" number="ii">
  <title>Standard nwg services reference</title>

  <p>
  This appendix is a reference of the http protocol service, a
  sub-group of the <afnix/> standard nwg services module.
  </p>

  <!-- =================================================================== -->
  <!-- = http proto object                                               = -->
  <!-- =================================================================== -->

  <object nameset="afnix:nwg">
    <name>HttpProto</name>

    <!-- synopsis -->
    <p>
    The <code>HttpProto</code> class is a base class that ease the
    deployment of the http protocol. The base class is built with a
    property list which is used to define the message header. The
    class also defines the write methods which are used to write a
    message either on an output stream or into a buffer.
    </p>

    <!-- inheritance -->
    <inherit>
      <name>Object</name>
    </inherit>

    <!-- methods -->
    <methods>
     <meth>
      <name>set-header</name>
      <retn>none</retn>
      <args>String Literal</args>
      <p>
      The <code>set-header</code> method adds a new property to the
      http header. The first argument is the property name. The second
      argument is a literal object which is internally converted to a
      string.
      </p>
     </meth>

     <meth>
      <name>write</name>
      <retn>none</retn>
      <args>none|Output|Buffer</args>
      <p>
      The <code>write</code> method formats and writes the http header
      to an output stream or a buffer. Without argument, the default output
      stream is used.
      </p>
     </meth>
    </methods>
  </object>

  <!-- =================================================================== -->
  <!-- = http request object                                             = -->
  <!-- =================================================================== -->

  <object nameset="afnix:nwg">
    <name>HttpRequest</name>

    <!-- synopsis -->
    <p>
    The <code>HttpRequest</code> class class is a base class designed
    to format a http request. The class operates with the protocol
    version 1.1 as defined by RFC 2616. A request is formatted with a
    request command and a uri. 
    </p>

    <!-- predicate -->
    <pred>http-request-p</pred>

    <!-- inheritance -->
    <inherit>
      <name>HttpProto</name>
    </inherit>

    <!-- constructors -->
    <ctors>
     <ctor>
      <name>HttpRequest</name>
      <args>String</args>
      <p>
      The <code>HttpRequest</code> constructor creates a http request
      object with a specific command. The string argument is the
      request command to use.
      </p>
     </ctor>

     <ctor>
      <name>HttpRequest</name>
      <args>Uri</args>
      <p>
      The <code>HttpRequest</code> constructor creates a http request
      object with a uri. The default request command is "GET".
      </p>
     </ctor>

     <ctor>
      <name>HttpRequest</name>
      <args>String String</args>
      <p>
      The <code>HttpRequest</code> constructor creates a http request
      object with a specific command and a uri name. The first string
      argument is the request command to use. The second string
      argument is the uri attached to the command. Note that the term
      <em>uri</em> should be understood as a <em>request uri</em>
      those scope applies to the whole server with certain commands
      such like the option command.
      </p>
     </ctor>

     <ctor>
      <name>HttpRequest</name>
      <args>String Uri</args>
      <p>
      The <code>HttpRequest</code> constructor creates a http request
      object with a specific command and a uri. The first string
      argument is the request command to use. The second
      argument is the uri attached to the command.
      </p>
     </ctor>
    </ctors>

    <!-- methods -->
    <methods>
     <meth>
      <name>write</name>
      <retn>none</retn>
      <args>none|Output|Buffer</args>
      <p>
      The <code>write</code> method formats and writes the request to an
      output stream or a buffer. Without argument, the default output
      stream is used.
      </p>
     </meth>

     <meth>
      <name>set-command</name>
      <retn>none</retn>
      <args>String</args>
      <p>
      The <code>set-command</code> method sets the command
      request. This method does not check that the command is a valid
      HTTP command; thus leaving plenty of room for server
      development. As a matter of fact, RFC 2616 does not prohibit the
      existence of such extension.
      </p>
     </meth>

     <meth>
      <name>get-command</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>get-command</code> method returns the request command
      string.
      </p>
     </meth>

     <meth>
      <name>set-uri</name>
      <retn>none</retn>
      <args>String</args>
      <p>
      The <code>set-uri</code> method sets the request uri. The
      argument string does not have to be a valid uri string since
      some commands might accept special string such like "*" to
      indicate all applicable uri.
      </p>
     </meth>

     <meth>
      <name>get-uri</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>get-uri</code> method returns the request uri string.
      </p>
     </meth>
    </methods>
  </object>

  <!-- =================================================================== -->
  <!-- = http response object                                            = -->
  <!-- =================================================================== -->

  <object nameset="afnix:nwg">
    <name>HttpResponse</name>

    <!-- synopsis -->
    <p>
    The <code>HttpResponse</code> class class is a http protocol class
    that handle the response following a http request. The response
    from a request generally contains a status line followed by a
    header and the body. The class is bound to an input stream which
    is used to read characters. The object encoding mode is set
    automatically from the header if it is available.
    </p>

    <!-- predicate -->
    <pred>http-response-p</pred>

    <!-- inheritance -->
    <inherit>
      <name>Input</name>
    </inherit>

    <!-- constructors -->
    <ctors>
     <ctor>
      <name>HttpResponse</name>
      <args>none</args>
      <p>
      The <code>HttpResponse</code> constructor creates a default http
      response object. Without an input stream bound to it, the class
      operates like an input stream which operate on a character
      buffer.
      </p>
     </ctor>

     <ctor>
      <name>HttpResponse</name>
      <args>Input</args>
      <p>
      The <code>HttpResponse</code> constructor creates a http response
      object with a specific input stream. At construction, the local
      buffer is reset and the input stream is bound to the object. The
      input stream is subsequently read to determine the response
      nature.
      </p>
     </ctor>
    </ctors>

    <!-- methods -->
    <methods>
     <meth>
      <name>reset</name>
      <retn>none</retn>
      <args>none</args>
      <p>
      The <code>reset</code> method reset the http response stream by
      clearing the local input buffer and the response header. The
      bound input stream is not touched.
      </p>
     </meth>

     <meth>
      <name>get-status-code</name>
      <retn>Integer</retn>
      <args>none</args>
      <p>
      The <code>get-status-code</code> method returns the response
      status code. If the response was not succesfully read, the
      status code is 0.
      </p>
     </meth>

     <meth>
      <name>ok-p</name>
      <retn>Boolean</retn>
      <args>none</args>
      <p>
      The <code>ok-p</code> predicate returns true is the response
      status code is valid (aka status 200).
      </p>
     </meth>

     <meth>
      <name>encoding-mode-p</name>
      <retn>Boolean</retn>
      <args>none</args>
      <p>
      The <code>encoding-mode-p</code> predicate returns true is encoding
      mode is defined in the header. If not, it might be desirabe to
      set the stream encoding mode.
      </p>
     </meth>

     <meth>
      <name>location-p</name>
      <retn>Boolean</retn>
      <args>none</args>
      <p>
      The <code>location-p</code> predicate returns true is the response
      status code indicates that a request should be made at another
      location. The location can be found with the
      <code>get-location</code> method.
      </p>
     </meth>

     <meth>
      <name>get-location</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>get-location</code> method returns the loction uri
      found in the response header. This method is equivalent to a
      header query.
      </p>
     </meth>

     <meth>
      <name>get-media-type</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>get-media-type</code> method returns the media type
      found in the response header. This method is equivalent to a
      header query.
      </p>
     </meth>

     <meth>
      <name>set-input-stream</name>
      <retn>none</retn>
      <args>Input</args>
      <p>
      The <code>set-input-stream</code> method binds an input stream
      to the http response object. Once the stream is bound, the input
      stream is read to determine the nature of the response. In
      particular, the response header is parsed automatically and the
      stream is ready to operate like any other input stream. If the
      header contains a length attribute, the <code>read</code> method
      and the associated predicate will behave like a stream which has
      reached its end when the number of characters read reach the
      content length.
      </p>
     </meth>

     <meth>
      <name>header-length</name>
      <retn>Integer</retn>
      <args>none</args>
      <p>
      The <code>header-length</code> method returns the number of
      entries in the response header.
      </p>
     </meth>

     <meth>
      <name>header-get</name>
      <retn>Property</retn>
      <args>Integer</args>
      <p>
      The <code>header-get</code> method returns a header entry by
      index. The integer argument is the header index. The result is
      in the form of a property object.
      </p>
     </meth>

     <meth>
      <name>header-find</name>
      <retn>Property</retn>
      <args>String</args>
      <p>
      The <code>header-find</code> method returns a header entry by
      name. The string argument is the property name. The result is
      in the form of a property object. If the entry is not found, the
      nil object is returned.
      </p>
     </meth>

     <meth>
      <name>header-lookup</name>
      <retn>Property</retn>
      <args>String</args>
      <p>
      The <code>header-lookup</code> method returns a header entry by
      name. The string argument is the property name. The result is
      in the form of a property object. If the entry is not found, an
      exception is raised.
      </p>
     </meth>

     <meth>
      <name>header-get-value</name>
      <retn>String</retn>
      <args>String</args>
      <p>
      The <code>header-get-value</code> method returns a header value by
      name. The string argument is the header property name. If the
      entry is not found, an exception is raised.
      </p>
     </meth>
    </methods>
  </object>

  <!-- =================================================================== -->
  <!-- = http reply object                                               = -->
  <!-- =================================================================== -->

  <object nameset="afnix:nwg">
    <name>HttpReply</name>

    <!-- synopsis -->
    <p>
    The <code>HttpReply</code> class is a simple designed to format a
    http reply. The class holds a property list which is used to
    format the header and a buffer which is the reply content. When
    the write method is called, the header and the buffer is formatted
    to the output stream argument. The class creates initially the
    <em>content-type</em> property which is initialized to the
    <em>text/plain</em> mime value. 
    </p>

    <!-- predicate -->
    <pred>http-reply-p</pred>

    <!-- inheritance -->
    <inherit>
      <name>HttpProto</name>
    </inherit>

    <!-- constructors -->
    <ctors>
     <ctor>
      <name>HttpReply</name>
      <args>none</args>
      <p>
      The <code>HttpReply</code> constructor creates an empty http
      reply object.
      </p>
     </ctor>

     <ctor>
      <name>HttpReply</name>
      <args>String</args>
      <p>
      The <code>HttpReply</code> constructor creates a http reply
      object with a specific content type. The string argument is the
      mime content type to set.
      </p>
     </ctor>
    </ctors>

    <!-- methods -->
    <methods>
     <meth>
      <name>add-buffer</name>
      <retn>none</retn>
      <args>Literal|Buffer</args>
      <p>
      The <code>add-buffer</code> method adds some content to the HTTP
      reply buffer. The argument can be either a literal r a buffer
      object.
      </p>
     </meth>

     <meth>
      <name>write</name>
      <retn>none</retn>
      <args>none|Output|Buffer</args>
      <p>
      The <code>write</code> method formats and writes the reply to an
      output stream or a buffer. Without argument, the default output
      stream is used.
      </p>
     </meth>

     <meth>
      <name>set-cookie</name>
      <retn>none</retn>
      <args>Cookie</args>
      <p>
      The <code>set-cookie</code> method sets a cookie object to the
      http header. The cookie version is properly handled by the
      method.
      </p>
     </meth>

     <meth>
      <name>set-status</name>
      <retn>none</retn>
      <args>Integer</args>
      <p>
      The <code>set-status</code> method sets a reply status code. The code
      must be a valid http status code. The method takes care to format
      properly the status message. Note that a reply body can be attached
      to describe the message status. Note also that RFC 2616 prohibits
      the presence of a message body with the status code 1xx
      (informational), 204 (no content) and 304 (not modified). This
      rule is enforced by the class.      
      </p>
     </meth>

     <meth>
      <name>redirect</name>
      <retn>none</retn>
      <args>String</args>
      <p>
      The <code>redirect</code> method set the message status to
      indicate that the page should be redirected to the specified
      uri. The string argument is the target uri. The method operates
      by setting a status code 303 (see other) in the header. If a
      temporary redirection is preferable, the implementor is advised
      to set manually the appropriate status code.
      </p>
     </meth>
    </methods>
  </object>

  <!-- =================================================================== -->
  <!-- = cookie object                                                   = -->
  <!-- =================================================================== -->

  <object nameset="afnix:nwg">
    <name>Cookie</name>

    <!-- synopsis -->
    <p>
    The <code>Cookie</code> class is a special class designed to
    handle cookie setting within a http transaction. A cookie is
    <em>name/value</em> pair that is set by the server and stored by
    the http client. Further connection with the client will result
    with the cookie value transmitted by the client to the server. A
    cookie has various parameters that controls its existence and
    behavior. The most important one is the <em>cookie maximum age</em>
    that is defined in seconds. A null value tells the client to
    discard the cookie. A cookie without maximum age is valid only
    during the http client session. A cookie can be added to the 
    <code>HttpReply</code> object with the <code>set-cookie</code>
    method. A cookie can be constructed with a <em>name/value</em>
    pair. An optional third argument is the maximum age. The default
    cookie version is 1 as specified by RFC 2965. With a version 1,
    the maximum age is interpreted as the number of seconds before the
    cookie expires. With version 0, the maximum age is the absolute
    time.
    </p>

    <!-- predicate -->
    <pred>cookie-p</pred>

    <!-- inheritance -->
    <inherit>
      <name>Object</name>
    </inherit>

    <!-- constructors -->
    <ctors>
     <ctor>
      <name>Cookie</name>
      <args>String String</args>
      <p>
      The <code>Cookie</code> constructor creates a cookie with a name
      value pair. The first argument is the cookie name. The second
      argument is the cookie value.
      </p>
     </ctor>

     <ctor>
      <name>Cookie</name>
      <args>String String Integer</args>
      <p>
      The <code>Cookie</code> constructor creates a cookie with a name
      value pair and a maximum age. The first argument is the cookie
      name. The second argument is the cookie value. The third
      argument is the cookie maximum age.
      </p>
     </ctor>
    </ctors>

    <!-- methods -->
    <methods>
     <meth>
      <name>get-version</name>
      <retn>Integer</retn>
      <args>none</args>
      <p>
      The <code>get-version</code> method returns the cookie version.
      </p>
     </meth>

     <meth>
      <name>set-version</name>
      <retn>none</retn>
      <args>Integer</args>
      <p>
      The <code>set-version</code> method sets the cookie version. The
      version number can only be 0 or 1.
      </p>
     </meth>

     <meth>
      <name>get-name</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>get-name</code> method returns the cookie name. This
      is the name store on the http client.
      </p>
     </meth>

     <meth>
      <name>set-name</name>
      <retn>none</retn>
      <args>String</args>
      <p>
      The <code>set-name</code> method sets the cookie name. This is
      the name store on the http client.
      </p>
     </meth>

     <meth>
      <name>get-value</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>get-value</code> method returns the cookie value. This
      is the value stored on the http client bounded by the cookie name.
      </p>
     </meth>

     <meth>
      <name>set-value</name>
      <retn>none</retn>
      <args>String</args>
      <p>
      The <code>set-value</code> method sets the cookie value. This is
      the value store on the http client bounded by the cookie name.
      </p>
     </meth>

     <meth>
      <name>get-maximum-age</name>
      <retn>Integer</retn>
      <args>none</args>
      <p>
      The <code>get-maximum-age</code> method returns the cookie
      maximum age. The default value is -1, that is, no maximum age is
      set and the cookie is valid only for the http client session.
      </p>
     </meth>

     <meth>
      <name>set-maximum-age</name>
      <retn>none</retn>
      <args>Integer</args>
      <p>
      The <code>set-maximum-age</code> method sets the cookie maximum
      age. A negative value is reset to -1. A 0 value tells the http
      client to discard the cookie. A positive value tells the http
      client to store the cookie for the remaining seconds.
      </p>
     </meth>

     <meth>
      <name>get-path</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>get-path</code> method returns the cookie path
      value. The path determines for which http request the cookie is
      valid. 
      </p>
     </meth>

     <meth>
      <name>set-path</name>
      <retn>none</retn>
      <args>String</args>
      <p>
      The <code>set-path</code> method sets the cookie path value. The
      path determines for which http request the cookie is valid.
      </p>
     </meth>

     <meth>
      <name>get-domain</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>get-domain</code> method returns the cookie domain
      value.
      </p>
     </meth>

     <meth>
      <name>set-domain</name>
      <retn>none</retn>
      <args>String</args>
      <p>
      The <code>set-domain</code> method sets the cookie domain
      value. It is string recommended to use the originator domain
      name since many http client can reject cookie those domain name
      does not match the originator name.
      </p>
     </meth>

     <meth>
      <name>get-port</name>
      <retn>Integer</retn>
      <args>none</args>
      <p>
      The <code>get-port</code> method returns the cookie port number.
      </p>
     </meth>

     <meth>
      <name>set-port</name>
      <retn>none</retn>
      <args>Integer</args>
      <p>
      The <code>set-port</code> method sets the cookie port
      number. This value is not used with a cookie version 0.
      </p>
     </meth>

     <meth>
      <name>get-comment</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>get-comment</code> method returns the cookie comment
      value.
      </p>
     </meth>

     <meth>
      <name>set-comment</name>
      <retn>none</retn>
      <args>String</args>
      <p>
      The <code>set-comment</code> method sets the cookie comment value.
      </p>
     </meth>

     <meth>
      <name>get-comment-url</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>get-comment-url</code> method returns the cookie comment
      url value.
      </p>
     </meth>

     <meth>
      <name>set-comment-url</name>
      <retn>none</retn>
      <args>String</args>
      <p>
      The <code>set-comment-url</code> method sets the cookie comment
      url value. This value is not used with cookie version 0.
      </p>
     </meth>

     <meth>
      <name>get-discard</name>
      <retn>Boolean</retn>
      <args>none</args>
      <p>
      The <code>get-discard</code> method returns the cookie discard flag.
      </p>
     </meth>

     <meth>
      <name>set-discard</name>
      <retn>none</retn>
      <args>Boolean</args>
      <p>
      The <code>set-discard</code> method sets the cookie discard
      flag. The discard flag the tells the user agent to destroy the
      cookie when it terminates. This value is not used with cookie
      version 0.
      </p>
     </meth>

     <meth>
      <name>get-secure</name>
      <retn>Boolean</retn>
      <args>none</args>
      <p>
      The <code>get-secure</code> method returns the cookie secure flag.
      </p>
     </meth>

     <meth>
      <name>set-secure</name>
      <retn>none</retn>
      <args>Boolean</args>
      <p>
      The <code>set-secure</code> method sets the cookie secure
      flag. When a cookie is secured, it is only returned by the http
      client if a connection has been secured (i.e use https).
      </p>
     </meth>

     <meth>
      <name>to-string</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>to-string</code> method returns a string formatted for
      the http reply header. Normally this method should not be
      called since the <code>set-cookie</code> method of the
      <code>httpReply</code> takes care of such thing. 
      </p>
     </meth>
    </methods>
  </object>

  <!-- =================================================================== -->
  <!-- = session object                                                  = -->
  <!-- =================================================================== -->

  <object nameset="afnix:nwg">
    <name>Session</name>

    <!-- synopsis -->
    <p>
    The <code>Session</code> class that defines a session to be
    associated with an http transaction. The session object is designed
    to be persistent so that its data information can be retreived at
    any time. A session object has also the particularity to have a
    limited lifetime. A session object is created by name with an
    identifier. If a path is given, such path will be used as the session
    file name.
    </p>

    <!-- predicate -->
    <pred>session-p</pred>

    <!-- inheritance -->
    <inherit>
      <name>Serial</name>
    </inherit>

    <!-- constructors -->
    <ctors>
     <ctor>
      <name>Session</name>
      <args>String</args>
      <p>
      The <code>Session</code> constructor creates a session by name.
      The string argument is the session name.
      </p>
     </ctor>

     <ctor>
      <name>Session</name>
      <args>String String</args>
      <p>
      The <code>Session</code> constructor creates a session with a name
      and a user. The first argument is the session name. The second
      argument is the user name.
      </p>
     </ctor>

     <ctor>
      <name>Session</name>
      <args>String String String</args>
      <p>
      The <code>Session</code> constructor creates a session with a name,
      a user and a path. The first argument is the session name. The
      second argument is the session user name. The third argument is
      the session path.
      </p>
     </ctor>
    </ctors>

    <!-- methods -->
    <methods>
     <meth>
      <name>expire-p</name>
      <retn>Boolean</retn>
      <args>none</args>
      <p>
      The <code>expire-p</code> predicate returns true if the session
      has expired.
      </p>
     </meth>

     <meth>
      <name>get-name</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>get-name</code> method returns the session name.
      </p>
     </meth>

     <meth>
      <name>set-hash-id</name>
      <retn>none</retn>
      <args>String</args>
      <p>
      The <code>set-hash-id</code> method sets the session hash
      identifier. The session hash id must be unique and secured
      enough so that the session name cannot be derived from it.
      </p>
     </meth>

     <meth>
      <name>get-hash-id</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>get-hash-id</code> method returns the session hash identifier.
      </p>
     </meth>

     <meth>
      <name>set-user</name>
      <retn>none</retn>
      <args>String</args>
      <p>
      The <code>set-user</code> method sets the session user name.
      </p>
     </meth>

     <meth>
      <name>get-user</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>get-user</code> method returns the session user name.
      </p>
     </meth>

     <meth>
      <name>set-path</name>
      <retn>none</retn>
      <args>String</args>
      <p>
      The <code>set-path</code> method sets the session path.
      </p>
     </meth>

     <meth>
      <name>get-path</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>get-path</code> method returns the session path.
      </p>
     </meth>

     <meth>
      <name>set-maximum-age</name>
      <retn>none</retn>
      <args>Integer</args>
      <p>
      The <code>set-max-age</code> method sets the session maximum age.
      The maximum age is an integer in seconds relative to the current
      time.
      </p>
     </meth>

     <meth>
      <name>mark-expired</name>
      <retn>none</retn>
      <args>none</args>
      <p>
      The <code>mark-expired</code> method marks the session as
      expired. This is done by forcing the expiration time to the
      creation time.q
      </p>
     </meth>

     <meth>
      <name>get-valid-time</name>
      <retn>Integer</retn>
      <args>none</args>
      <p>
      The <code>get-valid-time</code> method returns the remaining valid
      session time.
      </p>
     </meth>

     <meth>
      <name>get-expire-time</name>
      <retn>Integer</retn>
      <args>none</args>
      <p>
      The <code>get-expire-time</code> method returns the session
      expiration time in seconds. The expiration time is an absolute
      time.
      </p>
     </meth>

     <meth>
      <name>set-expire-time</name>
      <retn>none</retn>
      <args>Integer</args>
      <p>
      The <code>set-expire-time</code> method sets the session
      expiration time. The expiration time is an absolute time in seconds.
      </p>
     </meth>

     <meth>
      <name>get-creation-time</name>
      <retn>Integer</retn>
      <args>none</args>
      <p>
      The <code>get-creation-time</code> method returns the session
      creation time. The creation time is an absolute time in seconds.
      </p>
     </meth>

     <meth>
      <name>get-modification-time</name>
      <retn>Integer</retn>
      <args>none</args>
      <p>
      The <code>get-modification-time</code> method returns the session
      creation time. The modification time is an absolute time in seconds.
      </p>
     </meth>
    </methods>
  </object>
</appendix>
