[flowchart of server]

  1. Severl client connections
  2. Assorted filter modules
  3. Indexing module
  4. Writing module
  5. Configuration Module
  6. UI module

This setup is very similar to the client. In fact, it's possible that the same program could do both server and client with different sets of modules. This reduced overlapping code and all those other good things. The basic plan is several incoming connections come in from clients (1). For each file that we get, we optionally pass it through some filters (2), and then we pass the metadata (the name, size, owner, original host) to an indexing module (3). Then the data and a copy of the metadata both go the writing module(4) where they are written to media.

As with the client we have a configuration and ui module.