
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.

- 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...

- 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.

  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>

- 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 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.

- Add client's compress/decompress support.

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

- Would be nice to support HTTPS Server response that makes the browser (IE
  can do that) to ask for a certificate. This client certificate can then be
  used to authenticate the user at the other side. This certificate based
  authentication is more secure than the standard user/password only.

- Add WSDL support for SOAP messages with attachments.

- Would be nice to provides a file upload support via a socket. This would
  avoid writing to the disk or memory. The end-user will be responsible to do
  whatever is needed with the uploaded file. If file upload is not permitted
  the file will never be transmitted.

- Add a routine to sort a vector tag either in the API or as a table
  attribute:
  @@TABLE@@ @@SORT:VAR@@

- Add a routine to do a synchronized sort on multiple vector tag (from a
  Translate_Set for example.

- Add a way to skip empty values for matrix in a table

  @@TABLE@@             1,1
  @@TABLE@@             1,2
  @_M_@                      <- empty line because m(1) is smaller than m(2)
  @@END_TABLE@@         2,1
  @@END_TABLE@@         2,2
                        2,3

  This is quite tricky to handle while parsing, one idea would be to rewrite
  the table content by adding a conditional for all tag variable inside the
  table. This is a kind of an expander pass.

- Add a way to have structured (as record) templates variables. It will be
  easier and cleaner than to have multiple variables that must be
  synchronized. This needs some more design as it is a tricky issue.

- Detect long running download on the server side and put download
  socket/stream pair into the socket set in the download task.

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

- Replace OpenSSL by GNUTLS library as this library is now stable.
