Changes:
1. A framework for NDMP message handler implementation has be set up. Two handlers - NDMP_NOTIFY_CONNECT and NDMP_CONNECT_OPEN have beem already implemented. Please see comments in ndmp/src/ndmp_connect.c for more information. More message handler implementations coming soon.
2. State machines for sessions have been implemented in the form of queues (in ndmp/src/ndmp_msg.c).
3. The old XDR folder has been renamed NDMP.

Overall structure:
The NDMP server is split into different components which are subdirectories of ndmp - currently comm, utils, ndmp. In each component the source code is in an src directory. comm is reponsible for actual client-server communication, utils provides thread-safe queues and hex dumps. NDMP contains NDMP message handlers and session state machines.

comm/src/comm.c, comm/src/comm.h:
Structures and functions for listening and management of client connections/requests. Currently listens for connections from multiple clients (using select() system call). New connections are added to a list of sessions. Requests from connected clients are enqueued into a job queue.

comm/src/worker.c, comm/src/worker.h:
Thread creation, shutdown, running jobs from request queue, and processing jobs from response queue.

utils/src/hexdump.c, utils/sec/hexdump.h:
Hexdump utility.

utils/src/locks.c, utils/src/locks.h:
Provides mutex locks to make queues thread-safe (spinlock capability will be added in a future commit).

utils/src/queue.c, utils/src/queue.h:
Thread-safe queue implementation. Each queue has its own lock. Two queues are used by comm - request_jobs, for client requests and response_jobs, for server responses.

ndmp/src/ndmp_msg.c, ndmp/src/ndmp_msg.h
Maintains three state queues for sessions (connection, data, mover). Is also responsible for unmarshalling the NDMP message headers from client requests and passing them to appropriate message handlers which deal with the rest of the message before sending a reply.

ndmp/src/ndmp.x
NDMP structures information (obtained from NDMP source). We use rpcgen to generate ndmp.h and ndmp_xdr.c, which provide functions for encoding and decoding.

ndmp/src/ndmp_connect.c
Message handlers for CONNECT interface.

ndmp/src/ndmp_config.c
Message handlers for CONFIG interface.

Next steps (to be addressed in future commits):
1. Align code (Code seems to be aligned in local files, but is not in GitHub).
2. Implement more NDMP message handlers (config interface).