We have a test server and client here
The purpose of the test server is to provide a testing environment
for a soap client engine. It just accepts whatever the request
sent to it, dicards it and then sends back a hard coded soap message
read from a file. This is very useful to test a client engine with
different soap messages.

The purpose of the test client is to provide a testing environment
for a soap server engine. Client will send arbitarary read messages  from
a file and sends it to a server. It then reads the response sent from the
server

to build the test server 
sh build_server.sh

to run the server
./serv

Then this will listen to client request
Once a request comes it just receives it and discards it.
It reads from the serv_message.txt file and 
this is what it returns as the response.

So you need to paste properly formatted soap message that you 
need to test ,into serv_message.txt, before you start the server.

Before you build the client just change the host
and port against which you need to test it with.
Also paste your message to test into the relevant client file.

to build the client
sh build_client.sh

to run the client
./cli

Base64 encoded attachments
=======================

* To send all attachments & receive all at once pls use allattachments_base64_cli_message.txt client.
*To receive attachments 1 by 1 use attachment_base64_cli_message.txt client.

Binary encoded attachments
======================
* To send all attachments & receive all at once pls use allattachments_binary_cli_message.txt client.
*To receive attachments 1 by 1 use attachment_binary_cli_message.txt client.


