* Summary: minimal FTP implementation
      * Description: minimal FTP implementation allowing to fetch resources
      *              like external subset.
      *
      * Copy: See Copyright for the status of this software.
      *
      * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A.
      /if not defined(NANO_FTP_H__)
      /define NANO_FTP_H__
      /include "libxmlrpg/xmlversion"
      /if defined(LIBXML_FTP_ENABLED)
      /include "libxmlrpg/xmlTypesC"
     d INVALID_SOCKET  c                   -1
      * ftpListCallback:
      * @userData:  user provided data for the callback
      * @filename:  the file name (including "->" when links are shown)
      * @attrib:  the attribute string
      * @owner:  the owner string
      * @group:  the group string
      * @size:  the file size
      * @links:  the link count
      * @year:  the year
      * @month:  the month
      * @day:  the day
      * @hour:  the hour
      * @minute:  the minute
      *
      * A callback for the xmlNanoFTPList command.
      * Note that only one of year and day:minute are specified.
     d ftpListCallback...
     d                 s               *   based(######typedef######)
     d                                     procptr
      * ftpDataCallback:
      * @userData: the user provided context
      * @data: the data received
      * @len: its size in bytes
      *
      * A callback for the xmlNanoFTPGet command.
     d ftpDataCallback...
     d                 s               *   based(######typedef######)
     d                                     procptr
      * Init
     d xmlNanoFTPInit  pr                  extproc('xmlNanoFTPInit')
     d xmlNanoFTPCleanup...
     d                 pr                  extproc('xmlNanoFTPCleanup')
      * Creating/freeing contexts.
     d xmlNanoFTPNewCtxt...
     d                 pr              *   extproc('xmlNanoFTPNewCtxt')         void *
     d  URL                            *   value options(*string)               const char *
     d xmlNanoFTPFreeCtxt...
     d                 pr                  extproc('xmlNanoFTPFreeCtxt')
     d  ctx                            *   value                                void *
     d xmlNanoFTPConnectTo...
     d                 pr              *   extproc('xmlNanoFTPConnectTo')       void *
     d  server                         *   value options(*string)               const char *
     d  port                               value like(xmlCint)
      * Opening/closing session connections.
     d xmlNanoFTPOpen  pr              *   extproc('xmlNanoFTPOpen')            void *
     d  URL                            *   value options(*string)               const char *
     d xmlNanoFTPConnect...
     d                 pr                  extproc('xmlNanoFTPConnect')
     d                                     like(xmlCint)
     d  ctx                            *   value                                void *
     d xmlNanoFTPClose...
     d                 pr                  extproc('xmlNanoFTPClose')
     d                                     like(xmlCint)
     d  ctx                            *   value                                void *
     d xmlNanoFTPQuit  pr                  extproc('xmlNanoFTPQuit')
     d                                     like(xmlCint)
     d  ctx                            *   value                                void *
     d xmlNanoFTPScanProxy...
     d                 pr                  extproc('xmlNanoFTPScanProxy')
     d  URL                            *   value options(*string)               const char *
     d xmlNanoFTPProxy...
     d                 pr                  extproc('xmlNanoFTPProxy')
     d  host                           *   value options(*string)               const char *
     d  port                               value like(xmlCint)
     d  user                           *   value options(*string)               const char *
     d  passwd                         *   value options(*string)               const char *
     d  type                               value like(xmlCint)
     d xmlNanoFTPUpdateURL...
     d                 pr                  extproc('xmlNanoFTPUpdateURL')
     d                                     like(xmlCint)
     d  ctx                            *   value                                void *
     d  URL                            *   value options(*string)               const char *
      * Rather internal commands.
     d xmlNanoFTPGetResponse...
     d                 pr                  extproc('xmlNanoFTPGetResponse')
     d                                     like(xmlCint)
     d  ctx                            *   value                                void *
     d xmlNanoFTPCheckResponse...
     d                 pr                  extproc('xmlNanoFTPCheckResponse')
     d                                     like(xmlCint)
     d  ctx                            *   value                                void *
      * CD/DIR/GET handlers.
     d xmlNanoFTPCwd   pr                  extproc('xmlNanoFTPCwd')
     d                                     like(xmlCint)
     d  ctx                            *   value                                void *
     d  directory                      *   value options(*string)               const char *
     d xmlNanoFTPDele  pr                  extproc('xmlNanoFTPDele')
     d                                     like(xmlCint)
     d  ctx                            *   value                                void *
     d  file                           *   value options(*string)               const char *
     d xmlNanoFTPGetConnection...
     d                 pr                  extproc('xmlNanoFTPGetConnection')   Socket descriptor
     d                                     like(xmlCint)
     d  ctx                            *   value                                void *
     d xmlNanoFTPCloseConnection...
     d                 pr                  extproc('xmlNanoFTPCloseConnection')
     d                                     like(xmlCint)
     d  ctx                            *   value                                void *
     d xmlNanoFTPList  pr                  extproc('xmlNanoFTPList')
     d                                     like(xmlCint)
     d  ctx                            *   value                                void *
     d  callback                           value like(ftpListCallback)
     d  userData                       *   value                                void *
     d  filename                       *   value options(*string)               const char *
     d xmlNanoFTPGetSocket...
     d                 pr                  extproc('xmlNanoFTPGetSocket')       Socket descriptor
     d                                     like(xmlCint)
     d  ctx                            *   value                                void *
     d  filename                       *   value options(*string)               const char *
     d xmlNanoFTPGet   pr                  extproc('xmlNanoFTPGet')
     d                                     like(xmlCint)
     d  ctx                            *   value                                void *
     d  callback                           value like(ftpDataCallback)
     d  userData                       *   value                                void *
     d  filename                       *   value options(*string)               const char *
     d xmlNanoFTPRead  pr                  extproc('xmlNanoFTPRead')
     d                                     like(xmlCint)
     d  ctx                            *   value                                void *
     d  dest                           *   value                                void *
     d  len                                value like(xmlCint)
      /endif                                                                    LIBXML_FTP_ENABLED
      /endif                                                                    NANO_FTP_H__