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

<!-- ====================================================================== -->
<!-- = appendix-ii.xml                                                    = -->
<!-- = standard nwg services module guide - appendix ii                   = -->
<!-- ====================================================================== -->
<!-- = 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-2009 - 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>

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

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

    <!-- methods -->
    <methods>
     <meth>
      <name>reset</name>
      <retn>none</retn>
      <args>none</args>
      <p>
      The <code>reset</code> method resets the http protocol object by
      clearing the protocol version and header.
      </p>
     </meth>

     <meth>
      <name>parse</name>
      <retn>none</retn>
      <args>none</args>
      <p>
      The <code>parse</code> method parse the input stream bound to
      the http protocol. In order to operate, an input stream must be
      associated with the protocol object or an exception is
      raised. After a stream has been parsed, the protocol version and
      the header are set.
      </p>
     </meth>

     <meth>
      <name>set-input-stream</name>
      <retn>none</retn>
      <args>InputStream</args>
      <p>
      The <code>set-input-stream</code> method binds an input stream
      to the http protocol object. Once the stream is bound, the input
      stream is parsed and the protocol version as well as the header
      are set.
      </p>
     </meth>

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

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

     <meth>
      <name>header-exists-p</name>
      <retn>Boolean</retn>
      <args>String</args>
      <p>
      The <code>header-exists-p</code> predicate returns true if the
      property exists in the header. The string argument is the
      property name.
      </p>
     </meth>

     <meth>
      <name>header-set</name>
      <retn>none</retn>
      <args>String Literal</args>
      <p>
      The <code>header-set</code> method sets 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>header-get</name>
      <retn>Property</retn>
      <args>Integer</args>
      <p>
      The <code>header-get</code> method returns a property object by
      index.
      </p>
     </meth>

     <meth>
      <name>header-map</name>
      <retn>String</retn>
      <args>String</args>
      <p>
      The <code>header-map</code> method returns a property value by
      name. The string argument is the property name.
      </p>
     </meth>

     <meth>
      <name>header-find</name>
      <retn>Property</retn>
      <args>String</args>
      <p>
      The <code>header-find</code> method returns a property object by
      name. The string argument is the property name. If the property
      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 property object by
      name. The string argument is the property name. If the property
      is not found, an exception is raised.
      </p>
     </meth>
    </methods>
  </object>

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

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

    <!-- synopsis -->
    <p>
    The <code>HttpRequest</code> class is a base class designed to
    handle a http request. The class operates with the protocol
    version 1.1 as defined by RFC 2616. For a server request, the
    request is built by reading an input stream and setting the
    request command with its associated header. For a client request,
    the request is formatted with a request command and a eventually a
    uri. In both cases, the header is filled automatically depending
    on the request side. 
    </p>

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

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

    <!-- constructors -->
    <ctors>
     <ctor>
      <name>HttpRequest</name>
      <args>none</args>
      <p>
      The <code>HttpRequest</code> constructor creates a default http
      request. By default, the request object is built with
      the <em>GET</em> method and the request uri set to the root value.
      </p>
     </ctor>

     <ctor>
      <name>HttpRequest</name>
      <args>String</args>
      <p>
      The <code>HttpRequest</code> constructor creates a http request
      object with a specific command. By default, the request uri is
      set to root, except for the <em>OPTIONS</em> method
      </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 method is <em>GET</em>.
      </p>
     </ctor>

     <ctor>
      <name>HttpRequest</name>
      <args>InputStream</args>
      <p>
      The <code>HttpRequest</code> constructor creates a http request
      object with a specific input stream. At construction, the
      request header is cleared and the input stream is bound to the
      object.
      </p>
     </ctor>

     <ctor>
      <name>HttpRequest</name>
      <args>String String</args>
      <p>
      The <code>HttpRequest</code> constructor creates a http request
      object with a specific method and a uri name. The first string
      argument is the request methid 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>.
      </p>
     </ctor>

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

    <!-- methods -->
    <methods>
     <meth>
      <name>set-method</name>
      <retn>none</retn>
      <args>String</args>
      <p>
      The <code>set-method</code> method sets the request method.
      This method does not check that the command is a valid HTTP
      method and thus leaves 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-method</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>get-method</code> method returns the request method
      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 is a base class designed to
    handle a http response. The class operates with the protocol version 1.1 
    as defined by RFC 2616. For a client response, the response is built by
    reading an input stream and setting the response status code with its 
    associated header. For a server response, the response is formatted 
    with a response status and additional header information. In both cases,
    the header is filled automatically depending on the response side. On
    the other hand, trying to set some header with an input stream bound to
    the response object might render the response object unsable.
    </p>

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

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

    <!-- constructors -->
    <ctors>
     <ctor>
      <name>HttpResponse</name>
      <args>none</args>
      <p>
      The <code>HttpResponse</code> constructor creates a default http
      response object. The response is marked valid with a
      default <em>text/plain</em> media type.
      </p>
     </ctor>

     <ctor>
      <name>HttpResponse</name>
      <args>Integer</args>
      <p>
      The <code>HttpResponse</code> constructor creates a http
      response object with a status code. The response code is
      associated with the default <em>text/plain</em> media type.
      </p>
     </ctor>

     <ctor>
      <name>HttpResponse</name>
      <args>InputStream</args>
      <p>
      The <code>HttpResponse</code> constructor creates a http response
      object with a specific input stream. At construction, the
      response header is cleared and the input stream is bound to the
      object.
      </p>
     </ctor>

     <ctor>
      <name>HttpResponse</name>
      <args>Integer String</args>
      <p>
      The <code>HttpResponse</code> constructor creates a http
      response object with a status code and a media type. The first
      argument is the status code. The second argument is the
      associated media type.
      </p>
     </ctor>
    </ctors>

    <!-- methods -->
    <methods>
     <meth>
      <name>set-status-code</name>
      <retn>none</retn>
      <args>Integer</args>
      <p>
      The <code>set-status-code</code> method sets the response
      status code.
      </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.
      </p>
     </meth>

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

     <meth>
      <name>media-type-p</name>
      <retn>Boolean</retn>
      <args>none</args>
      <p>
      The <code>media-type-p</code> predicate returns true if the
      content type is defined in the response header.
      </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
      defined in the response header.
      </p>
     </meth>

     <meth>
      <name>encoding-mode-p</name>
      <retn>Boolean</retn>
      <args>none</args>
      <p>
      The <code>encoding-mode-p</code> predicate returns true if the encoding
      mode is defined in the header.
      </p>
     </meth>

     <meth>
      <name>get-encoding-mode</name>
      <retn>String</retn>
      <args>none</args>
      <p>
      The <code>get-encoding-mode</code> method returns the response
      encoding mode. The encoding mode is normally found in the
      header. If the <code>get-response-stream</code> method is
      called, the response encoding mode is automatically sets to the
      response input stream.
      </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 location uri
      found in the response header. This method is equivalent to a
      header query.
      </p>
     </meth>

     <meth>
      <name>set-location</name>
      <retn>none</retn>
      <args>String</args>
      <p>
      The <code>set-location</code> method set the redirect location
      in the response header. The string argument is the location uri.
      </p>
     </meth>

     <meth>
      <name>get-response-stream</name>
      <retn>InputStream</retn>
      <args>none</args>
      <p>
      The <code>get-response-stream</code> method returns an input
      stream object that can be used to read the reponse content. The
      response stream object is normaly limited by the content
      length. For this reason, the returned stream is of
      type <code>InputBound</code>.
      </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>
    </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>
