Description of all files
------------------------

ged.[ch]:  Generic Event Decoder
       provides a generic access to main loop.
       Using it, you can:
       - add socket(s) fd to the list of fd to scan and have a callback when an
         event occurs on one of the fd.
       - add 3 ordered functions called at each loop restart (max pause between
         each loop start: 1 second)
       - add a periodically called function (every 10 seconds).

       used by: main_sck, xf_io, user_cnx_entry, (internally) main task(s) like
                hub registration

xf_io: XFer I/O
       provides low level bufferized socket I/O.
       Using it, you have:
       - a bufferized socket input
       - an automatic "|" string splitter (the stream is broken into pipe 
         terminated string (NMDC protocol separator).
       - a bufferized socket output
       - statistic on the I/O.
       - information on the connection (remote IP, connection on local dynamic
         IP, ...).

       requires: GED
       used by: user_cnx_entry

user_cnx_entry: a.k.a. LUCE (Local User Connection Entry)
       provides locally connected user connection management
       Inside it, you have:
       - all the informations relative to local users.
       - local user DC protocol decoding.

       requires: GED,xf_io,global_user
       used by: global_user

user_cnx_lst:
       handle requests from local hub.

       requires: GED
       used by: user_*

global_user: a.k.a.  GLUS
       provides a generic access to user information. Because there is more than
       one method for a user to be connected. Each method has its own I/O
       functions. Input method does not have to be generic because they are
       called directly by their GED handler. However, when a message must be
       sent to a user known only by its name or on all possible connections, it
       can be very painful to call each specific output method. this file
       provides a simple API that should handle all cases.

       requires: GED, user_cnx_lst, hub_cnx_lst

main_cnx:
       provides very low level connection acceptation. It performs initial test
       on IP banning. If the remote computer is valid, the socket is given to 
       main_cnx_handshake.

       requires: GED
       used by: main_cnx_handshake

main_cnx_handshake:
       provides DC login function. It performs all the step required to go from
       a just connected socket to a fully connected user, handling ghost user,
       passwd protected user,...

       requires: GED, main_cnx
       used by: user_cnx_entry

--
bin_xf_io: Binary XFer I/O
       provides low level bufferized socket I/O.
       Using it, you have:
       - a bufferized socket input
       - an automatic chunk decoder (the stream is broken into small predecoded
         chunk (dchub inter hub protocol).
       - a bufferized socket output
       - statistic on the I/O.
       - information on the connection (remote IP, connection on local dynamic
         IP, ...).

       requires: GED
       used by: 

chunk: Chunk broker/builder
       provides chunk conversion from structure to planar and planar to
       structure.
       
       used by: bin_xf_io

hub_cnx:
       provides very low level connection acceptation. It performs initial test.
       If the remote computer is valid, the socket is given to
       hub_cnx_handshake.

       requires: GED
       used by: hub_cnx_handshake

hub_cnx_handshake:
       provides hub login function. It performs all the step required to go from
       a just connected socket to a fully connected hub.

       requires: GED, hub_cnx
       used by: hub_cnx_lst

hub_cnx_connect:
       provides very low level connection attempt. It periodically scans the hub
       password file and try to connect hub with the autostart file.

       requires: GED
       used by: hub_cnx_handshake

hub_cnx_lst:
       handle requests from local hub (like user_cnx_lst) and if required,
       relay them to other hubs. Also handle requests from remote hubs and relay
       them to the local hub and to other hubs of the cluster.

       requires: GED, chunk
       used by:  hub_*

