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.3.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 bin/samples/server/* to $AXIS2C_HOME/services/
4. Engage rampart as described in section "Engaging Rampart/C with axis2/C"
5. Copy bin/samples/* to $AXIS2C_HOME/bin/samples/rampart. This will copy callback modules etc.
6. Go to bin/samples/client/sec_echo/ and deploy the client repo 
    %sh deploy_client_repo.sh
7. Go to bin/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 vcvars32.bat
        This is to access .Net tools (Note: You may need to set the PATH environment
                                        variable to  vcvars32.bat if Windows complains
                                        that it cannot find this bat)

	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 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
