Table of contents
=================
    |_ Getting Rampart/C source working on Linux
    |_ Getting Rampart/C binary distribution working on Linux
    |_ Getting Rampart/C source working on Win32
    |_ Getting Rampart/C binary working on Win32
    |_ Engaging Rampart/C with axis2/C
    |_ Try samples on Linux
    |_ Try samples on Win32


Getting Rampart/C source working on Linux
=========================================
Build the source

This can be done using the following command sequence:
        ./configure --prefix=${AXIS2C_HOME} --enable-static=no --with-axis2=${AXIS2C_HOME}/include/axis2-1.1
        make
        make install

If you need to try samples,first you need to build them.
Go to samples and run the script build.sh.
        %sh build.sh
Then go to  samples/secpolicy and try a scenario
        %sh test_scen.sh scenarioX server-port

Getting Rampart/C binary distribution working on Linux
======================================================
1. Copy modules/rampart to $AXIS2C_HOME/modules
2. Copy lib/* to $AXIS2C_HOME/lib
3. Copy samples/server/sec_echo to $AXIS2C_HOME/services/
4. Engage rampart as described in section "Engaging Rampart/C with axis2/C"
5. Copy samples/* to $AXIS2C_HOME/bin/samples/rampart. This will copy callback modules etc.
6. Go to samples/client/sec_echo/ and deploy the client repo 
    %sh deploy_client_repo.sh
7. Go to samples/secpolicy/ and try a scenario
    %sh test_scen.sh scenarioX server-port

Getting Rampart/C source working on Win32
=========================================

1. Set the AXIS2C_HOME envirionment variable to direct to your Axis2/C Installation.
	SET AXIS2C_HOME=[your-path-to-axis2c]

2. Extract the source package and build the source.
	Unzip the source package.
	Go to the "build\win32" directory of the distribution.
	Set the parameters of the configure.in
		AXIS2_BIN_DIR = <path/to/where/you/have/installed/axis2>
		OPENSSL_BIN_DIR = <path/to/where/you/have/installed/openssl>
		DEBUG = <1 if enabled, 0 otherwise>
	Run "nmake install"

3. Engage Rampart/C with Axis2/C as described in the "Engaging Rampart/C with axis2/C" section.


Getting Rampart/C binary distribution working on Win32
======================================================

1. Set the AXIS2C_HOME envirionment variable to direct to your Axis2/C Installation.
	SET AXIS2C_HOME=[your-path-to-axis2c]

2. Run the deploy_rampart.bat that could be found in the root of the rampart binary distribution.
	deploy_rampart.bat

3. Engage Rampart/C with Axis2/C as described in the "Engaging Rampart/C with axis2/C" section.

Engaging Rampart/C with axis2/C
===============================
Prerequisites:
You must have openssl installed in you system.

Configuring:
You can engage Rampart/C in global level or in service level.
Add following entry either to axis2.xml(gloabl level) or in services.xml(service level).
    <module ref="rampart"/>

Then add following Security phase to the phase order in the outflow in the axis2.xml.
    <phaseOrder type="outflow">
        <phase name="MessageOut"/>
        <phase name="Security"/>
    </phaseOrder>

To specify policies in the client side, please drop your policy.xml to the same directory where the axis2.xml is in.
To specify policies in the server side, please add policy assertions to the services.xml.
Please find such sample policy files under samples/secpolicy/scenarioX. 
Note that you must replace both the client and service policies for a particular scenario.

Try samples on Linux
===============================
There are several scenarios available under samples/secpolicy
Run a scenario that you'd like to try using the script test_scen.sh
    Syntax: test_scen.sh scenario server_port
    E.g. %sh test_scen.sh scenario3 9090
Note: You may use a TCP Monitor to see the wire content. In that case replace the server_port with the target port.

Try samples on Win32
===============================

There are several scenarios that you can try out with the sec_echo sample of the Rampart/C distribution.
You can find more about it from the README.TXT file inside samples\secpolicy folder.

1. Set the AXIS2C_HOME envirionment variable to direct to your Axis2/C Installation.
	SET AXIS2C_HOME=[your-path-to-axis2c]

2. Run the deploy_client_repo.bat file found in the samples\client\sec_echo folder.
	This will create an axis2 client repository for the samples in the AXIS2C_HOME\client_repo directory.

To specify policies in the client side, please drop your policy.xml to the same directory as in axis2.xml
To specify policies in the server side, please add policy assertions to the services.xml.
Please find such sample policy files under samples/secpolicy/scenarioX. Note that you must replace both the client and service policies for a particular scenario.


Thank you for using Rampart/C
