
                          Apache Axis2/C Rampart

  What is it?
  -----------

  Apache Rampart is the security module of the Apache Axis2/C. Rampart 
  is an effort to implement Axis2 Rampart module in C.

  Please have a look at 
  http://ws.apache.org/axis2/modules/rampart/1_0/security-module.html
  for an overview on Axis2 rampart.
  
  As a project of the Apache Software Foundation, the
  developers aim to collaboratively develop and maintain a robust,
  commercial-grade, standards-based Web Services stack implementation with 
  freely available source code.

  The Latest Version
  ------------------

  You can get the latest svn checkout of Apache Axis2/C Rampart module from

  https://svn.apache.org/repos/asf/webservices/axis2/trunk/c/rampart

  Installation
  ------------

  Please see the file called INSTALL.

  Licensing
  ---------

  Please see the file called LICENSE.

  Contacts
  --------

     o If you want freely available support for using Apache Axis2/C Rampart please
       join the Apache Axis2/C user community by subscribing to users mailing
       list, axis-c-user@ws.apache.org' as described at
       http://ws.apache.org/axis2/c/mail-lists.html

     o If you have a bug report for Apache Axis2/C Rampart please go log a Jira issue
       at http://issues.apache.org/jira/browse/AXIS2C

     o If you want to participate in actively developing Apache Axis2/C Rampart please
       subscribe to the `axis-c-dev@ws.apache.org' mailing list as described at
       http://ws.apache.org/axis2/c/mail-lists.html

  Acknowledgments
  ----------------

  Apache Axis2/C Rampart relies rampart heavily on the use of autoconf and libtool to provide
  a build environment. And also it uses openssl.
