From 22d213c4846d2d783a8e84cc0b8e067dfe9b1a1e Mon Sep 17 00:00:00 2001 From: Vijay Kumar Banerjee Date: Mon, 1 Mar 2021 09:44:55 -0700 Subject: networking: Rename to legacy networking --- legacy-networking/network_servers.rst | 116 ++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 legacy-networking/network_servers.rst (limited to 'legacy-networking/network_servers.rst') diff --git a/legacy-networking/network_servers.rst b/legacy-networking/network_servers.rst new file mode 100644 index 0000000..941a6e2 --- /dev/null +++ b/legacy-networking/network_servers.rst @@ -0,0 +1,116 @@ +.. SPDX-License-Identifier: CC-BY-SA-4.0 + +.. COMMENT: RTEMS Remote Debugger Server Specifications +.. COMMENT: Written by: Emmanuel Raguet + +Network Servers +############### + +RTEMS FTP Daemon +================ + +The RTEMS FTPD is a complete file transfer protocol (FTP) daemon which can +store, retrieve, and manipulate files on the local filesystem. In addition, +the RTEMS FTPD provides "hooks" which are actions performed on received data. +Hooks are useful in situations where a destination file is not necessarily +appropriate or in cases when a formal device driver has not yet been +implemented. + +This server was implemented and documented by Jake Janovetz +(janovetz@tempest.ece.uiuc.edu). + +Configuration Parameters +------------------------ + +The configuration structure for FTPD is as follows: + +.. code-block:: c + + struct rtems_ftpd_configuration + { + rtems_task_priority priority; /* FTPD task priority */ + unsigned long max_hook_filesize; /* Maximum buffersize */ + /* for hooks */ + int port; /* Well-known port */ + struct rtems_ftpd_hook *hooks; /* List of hooks */ + }; + +The FTPD task priority is specified with ``priority``. Because hooks are not +saved as files, the received data is placed in an allocated buffer. +``max_hook_filesize`` specifies the maximum size of this buffer. Finally, +``hooks`` is a pointer to the configured hooks structure. + +Initializing FTPD (Starting the daemon) +--------------------------------------- + +Starting FTPD is done with a call to ``rtems_initialize_ftpd()``. The +configuration structure must be provided in the application source code. +Example hooks structure and configuration structure folllow. + +.. code-block:: c + + struct rtems_ftpd_hook ftp_hooks[] = + { + {"untar", Untar_FromMemory}, + {NULL, NULL} + }; + + struct rtems_ftpd_configuration rtems_ftpd_configuration = + { + 40, /* FTPD task priority */ + 512*1024, /* Maximum hook 'file' size */ + 0, /* Use default port */ + ftp_hooks, /* Local ftp hooks */ + 0, /* Use / as root */ + 1, /* Max. connections */ + 0, /* Infinite idle timeout */ + 0, /* Read-write access */ + 0, /* Ignore login check */ + true /* Say hello */ + }; + +Specifying 0 for the well-known port causes FTPD to use the UNIX standard FTPD +port (21). + +Using Hooks +----------- + +In the example above, one hook was installed. The hook causes FTPD to call the +function ``Untar_FromMemory`` when the user sends data to the file ``untar``. +The prototype for the ``untar`` hook (and hooks, in general) is: + +.. code-block:: c + + int Untar_FromMemory(void *tar_buf, size_t size); + +An example FTP transcript which exercises this hook is: + +.. code-block:: shell + + 220 RTEMS FTP server (Version 1.0-JWJ) ready. + Name (dcomm0:janovetz): John Galt + 230 User logged in. + Remote system type is RTEMS. + ftp> bin + 200 Type set to I. + ftp> dir + 200 PORT command successful. + 150 ASCII data connection for LIST. + drwxrwx--x 0 0 268 dev + drwxrwx--x 0 0 0 TFTP + 226 Transfer complete. + ftp> put html.tar untar + local: html.tar remote: untar + 200 PORT command successful. + 150 BINARY data connection. + 210 File transferred successfully. + 471040 bytes sent in 0.48 secs (9.6e+02 Kbytes/sec) + ftp> dir + 200 PORT command successful. + 150 ASCII data connection for LIST. + drwxrwx--x 0 0 268 dev + drwxrwx--x 0 0 0 TFTP + drwxrwx--x 0 0 3484 public_html + 226 Transfer complete. + ftp> quit + 221 Goodbye. -- cgit v1.2.3