
$Id: TODO,v 1.128 2004/04/06 20:16:36 obry Exp $

Here a some notes about things to fix, ideas and potential features to be
implemented:

- Correctly handle all Date/Time format, there is 3 of them:

  Sun, 06 Nov 1994 08:49:37 GMT   ; RFC 822, updated by RFC 1123
  Sunday, 06-Nov-94 08:49:37 GMT  ; RFC 850, obsoleted by RFC 1036
  Sun Nov  6 08:49:37 1994        ; ANSI C's asctime() format

  (Nice to see that when designing an RFC they are considering the C way of
   doing things, seems completly awkward to me :)

  Actually only the first format is supported.

- Implement multi-server with a dispatcher of request to build server which
  must support a lot of requests. Could be using GLADE or a standard
  redirector of request (using HTTP redirection).

- Implement a Proxy server protocol.

- Change server parameters via the admin page (like the maximum number of
  connections, server name, active session, upload path...).

- Thread Pool management (dynamically adding lines if needed...)

- Make the Session management a separate partition to be able to share the
  session data across the network. Something needed to do load balancing into
  a Web Farm.

- Replace OpenSSL by GNUTLS library when this library will become stable.

- Would be nice to have an ActiveX component to support Server Push on
  Internet Explorer.

- Would be nice to have a very light version of the Web Server - LAWS for
  Light Ada Web Server - this will be a nice solution for the communication
  sub-system. A LAWS would have only one task, no file-upload, not all the
  mechanisms to handle the concurrency...

- Support socket timeout options (send and receive timeout) at the OS
  level. Right now a task is doing the job.

- Sort out problem with client socket that are not closed and can't be
  reused. This happen if a lot of requests are done to the server.

- Cookie for the session is set for the whole site (path=/), would be nice to
  have a way to configure that.

- Support Session ID encoded into the URL to avoid use of cookie. Such a
  session ID will only be valid for the current session of course.

- Build a Web based file-system framework (AWSFS). Using GET/PUT to handle
  variables, inherited from a specific type, whose value is stored on an AWS
  server. The value will be automatically retrieved at initialization time and
  stored back into the AWSFS at finalization. These steps should be completely
  transparent to users.

- When removing the session (AWS.Session.Delete) it would be good to also
  remove the cookie on the client side.

- Merge the message handling on the server and client side. Right now both are
  using different implementations.

- AWS.Client support a single cookie. This is a bad limitation and must be
  fixed. It must also handle properly the case where a cookie value is
  updated.

- Add support for more XML Schema types
  See "C Datatypes and Facets" in XML Schema Part 2 Datatypes.

  byte, unsignedByte, short, unsignedShort, unsignedInt, long,
  unsignedLong, date, time, xsd:hexBinary, decimal

  decimal is certainly a bit difficult to support, we need an arbitrary
  precision package.

  nonNegativeInteger should map to Ada Natural.
  positiveInteger should map to Ada Positive.

- Add support for array with multiple dimensions

   <complexType name="ArrayOfString2D">
     <complexContent>
       <restriction base="SOAP-ENC:Array">
         <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="xsd:string[,]" /> 
       </restriction>
     </complexContent>
   </complexType>

- Ada 2005 should support all sort of containers, use them instead of the
  include/Table_Of_* components.

- Add support for all kind of WSDL array definition, current supported form
  is:

    <complexType name="ArrayOfString"> 
      <complexContent> 
          <restriction base="soapenc:Array"> 
            <attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/> 
          </restriction> 
      </complexContent> 
    </complexType>

  There is 4 other forms:

    <complexType name='ArrayOfString'> 
        <sequence> 
            <element name='name' type='xsd:string' maxOccurs='unbounded'/> 
        </sequence> 
    </complexType>  


    <complexType name='ArrayOfString'> 
        <complexContent> 
            <restriction base='SOAP-ENC:Array'> 
              <sequence> 
                <element name='name' type='xsd:String' maxOccurs='unbounded'/> 
              </sequence> 
            </restriction> 
        </complexContent> 
    </complexType>  


    <element name='ArrayOfString'> 
        <complexType> 
            <element name='name' type='xsd:String' maxOccurs='unbounded'/> 
        </complexType> 
    </element>  


    <element name='ArrayOfString'> 
        <complexType> 
            <sequence> 
                <element name='name' type='xsd:String' maxOccurs='unbounded'/> 
            </sequence> 
        </complexType> 
    </element>  

- Add support for transient page on-disk after a certain amount of time.
  Is that a good idea ?

- Add SMTP authentication support

- Add support for compressed data in the memory stream on the client side.
  User should be able to choose uncompressing data at the read stage.
  This enhancement will reduce the memory used by the data.
  This feature should be used when user reads data from memory stream
  partially. It is better for big compressed data, but worse for relatively
  small compressed data, when user want to read it at once.

  Make a streaming interface on the client and server side to do not buffer
  data in memory, but get it just from socket. It would be faster and reduce
  memory usage.

- Add client's compress/decompress support.

- Add more certificate information in AWS.Net.SSL.Certificate.

- Add reply all support to the Web_Mail service.

=============== Point to fix/implement/review before next release (2.0)
