XNap Requirement Analysis

 This document describes the requirements that are to be met by the
 XNap project.

Project Goals

 The project is meant to be an educational experience in terms of
 writing Java code as well as in successfully managing an open-source
 project. 

 XNap is a multi-protocol file sharing client. The use of different
 networks should be transparent to the user. 

Requirements

 - General
   - Extensive configuration options. XNap should suit power users
     as well as newbies.
   - High performance.
   - Platform independence.

 - Plugin support
   - Network plugins, that connect to file sharing (and chat) networks.
   - Viewer plugins, that can view and edit files.
  
 - Graphical User Interface
   - The GUI should be easy to use and stick to native standards. 
   - Emacs key bindings for all input fields.
   - Auto completion for text fields with a history.

 - Command Line Interface
   - All gui actions should have a command line equivalent.
   - Readline support.

 - Multi-Network Support
   - Support for "native" protocol implementations.
   - Support for "external" protocol implementations.

 - Search
   - Parameterizable search queries to narrow search results.
   - Filtering for search results.
   - Grouping of search results in tree view.

 - Transfers
   - Logging of transfers for statistical purposes.
   - Bandwidth throttling.

 - Download
   - Downloading of specific files.
   - "Automatic" downloading of files matching certain criterias. 
   - Queueing of busy peers.
   - Multi-source downloading.
   - (Automatic) resumes of incomplete downloads.

 - Upload
   - Fair queueing.   

 - Chat
   - Private chat between two parties.
   - Chat rooms with an unlimited number of parties.
   - "Multi-Chat", rooms that are present on multiple servers.
   - Support for administrative chat commands (ban, muzzle...).

 - Peers
   - Disabling of downloads, uploads and chat for certain peers.

