High performance file sharing service
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
src Refactored to use modern CMake external projects. Nov 18, 2017
.gitmodules Removed git submodules. Nov 18, 2017
Doxyfile Added doxygen config. Updated todo. Updated worklog Dec 21, 2015
config.h.template Refactored to use modern CMake external projects. Nov 18, 2017


War FTP Daemon

This is a new implementation of the War FTP Daemon.

War FTP Daemon consists of three libraries written by Jarle (jgaa) Aase.

warftpd (GPLv3)
    [depends on] wfde (GPLv3)
        [depends on] warlib (LGPLv3)

Warlib is a rather general C++ library that implements trivial, reusable things like logging, a thread-pool and some helper classes around some common boost libraries. Warlib depends on boost::asio for IO and threads. It uses the C++14 library whenever possible, and falls back to boost when needed.

Wfde is a complete implementation of the relevant parts of the FTP protocol. It also implements HTTP so that a file sharing site can use one common configuration for both FTP and HTTP. The HTTP classes is used by warftpd also for the user interface, and it may be used in the future to provide a REST interface to the server. The implementation follow best practice and use a fixed number of IO threads no matter how many user sessions or file transfers that are active. All network IO operations are asynchronous, and all network IO operations for a certain connection are scheduled on the same CPU/Core to prevent cache congestion while reading/writing to the same IO buffers from multiple CPU Cores.

The warftpd library implements all that is unique for the War FTP Daemon. That means the actual user/object model, the User Interface infrastructure, and additional features that have made the War FTP Daemon popular for 20 years.

Externals installed and compiled by CMake:

  • warlib
  • wfde
  • lest - Unit test framework
  • Sqlpp11 - Generic Database library (currently sqlite is used)
  • HinnatDate - Date library used by Sqlpp11

Other dependencies (must be present on the development platform)

  • boost
  • OpenSSL
  • sqlite3

Status: Under development