<?xml version="1.0" standalone="no"?>

<!--
* 
*
*  ProLinga-Soap
*
*  Copyright (C) 2002-2012 Xobas Software.
*  All rights reserved.
*  
*  This file is part of ProLinga-Soap.
*
*  ProLinga-Soap is free software: you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation, either version 3 of the License, or
*  (at your option) any later version.
*
*  ProLinga-Soap is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with ProLinga-Soap. If not, see <http://www.gnu.org/licenses/>.
*
*  More information is available at the following addresses:
*
*  Website     : http://www.prolinga.org
*
*  Email       : prolinga-list@prolinga.org
*
*
*
-->

<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
    "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [

<!ENTITY version "0.0.4" >
<!ENTITY release-date "April 11, 2010" >
<!ENTITY copyright-year "2010" >
<!ENTITY prolinga-soap-API  SYSTEM "prolinga-soap-API.xml" >
<!ENTITY fdl  SYSTEM "fdl.xml" >
<!ENTITY PRODUCT "prolinga-soap" >
<!ENTITY xobas '<emphasis><ulink url="http://www.xobas.com">Xobas Software</ulink></emphasis>'>
]>

<book id="prolinga-soap" lang="en">
  <bookinfo>
    <title>ProLinga-Soap Project</title>
    <releaseinfo>release: &PRODUCT;-&version; - &release-date;</releaseinfo>
    <authorgroup>
      <author>
	<firstname>Bas</firstname>
	<surname>Driessen</surname>
	<affiliation>
          <orgname>&xobas;</orgname>
	    <address><email>bas.driessen@xobas.com</email></address>
	</affiliation>
	<contrib>Original author and current maintainer.</contrib>
      </author>
    </authorgroup>

    <copyright>
      <year>2002-&copyright-year;</year>
      <holder>The ProLinga Team</holder>
    </copyright>

    <legalnotice>
      <para>Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.2
      or any later version published by the Free Software Foundation;
      with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
      A copy of the license is included in the section entitled
      <ulink type="http"
      url="gfdl.html">"GNU Free Documentation License"</ulink>.</para>
    </legalnotice>

    <abstract>
      <para>This document describes the ProLinga-Soap Project, how to
      build the software components and documents the API reference of the 
      prolinga-soap libraries.</para>
    </abstract>
  </bookinfo>

  <chapter id="prolinga-soap-product-info">
    <title>ProLinga-Soap Project</title>

    <para>The ProLinga-Soap Project is a project which focusses on the development of
    a set of SOAP (1.2) client and service libraries. These libraries, after
    implementing, enable any application to send and receive XML request and XML
    response documents using the libxml2 format. The libraries are built around
    <ulink type="http"
    url="http://www.cs.fsu.edu/~engelen/soap.html">gSOAP</ulink> 
    from Associate Professor Robert van Engelen and <ulink type="http"
    url="http://xmlsoft.org">libxml2</ulink>, the popular open source
    XML toolkit. The service library (libprolingasoap) will transform any application
    to a real Web Service, while the client library (libprolingasoapclient) can be linked
    in into any existing application to send out and receive XML requests and XML 
    responses from the Web Service.</para>

    <para>Main purpose for the creation of this project, is to provide an
    easy way to send XML documents between several components in the ProLinga Network
    environment.
    Since the result libraries of this project are very open, simple and 
    easy to implement, they can be used in other non-ProLinga related projects.</para>

    <para>ProLinga-Soap has been built and tested on various popular GNU/Linux platforms as
    RedHat Fedora, Mandriva Linux,  
    Debian, openSUSE, Ubuntu, FreeBSD and MS-Windows (Cygwin). Since 
    all code is written
    in C++, it can be ported to all modern UNIX systems, GNU/Linux variants
    as well as MS-Windows and Mac O/S platforms.</para>

  </chapter>

  <chapter id="prolinga-soap-programming_notes">
    <title>ProLinga-Soap Programming Notes</title>

    <para>There are two types of libraries available:</para>

    <orderedlist>
      <listitem><para>Soap Library</para></listitem>
      <listitem><para>Soap Client Library</para></listitem>
    </orderedlist>

    <sect1 id="prolinga-soap-soap_library">
      <title>Soap Library</title>

      <para>A very basic example program using the Soap Library, so
      it can run as a Web Service looks like this:</para>

<programlisting><![CDATA[
#include <prolinga/Soap.hpp>

int main()
{
        PlSoapService sservice;
                                                                                                                                             
        /* Start as a web service. */
        sservice.soapServiceStart("localhost", 8020, 3, 6, "/tmp/mySoap.log", 5);
                                                                                                                                             
        /* Return */
        return 0;
}

void PlSoapLink(PlSoapProcessPtr link)
{
        /* Every received request will access this function. */

                                                                                                                                             
        /* Get Request */
        xmlDocPtr docReq;
        docReq = link->getRequest();
                                                                                                                                             
        /* Print on standard out */
        xmlNodePtr curReq;
        xmlBufferPtr bufReq;
        bufReq = xmlBufferCreate();
        curReq = xmlDocGetRootElement(docReq);
        xmlNodeDump(bufReq, docReq, curReq, 0, 1);
        printf("%s\n", (char *)xmlBufferContent(bufReq));
        xmlBufferFree(bufReq);
                                                                                                                                             
        /* Create a response */
        xmlDocPtr docRes;
        xmlNodePtr curRes;
        docRes = xmlNewDoc((const xmlChar *)"1.0");
        docRes->children = xmlNewDocNode(docRes, NULL, (const xmlChar *)"ProLinga", NULL);
        curRes = xmlDocGetRootElement(docRes);
        xmlNewTextChild (curRes, NULL, (const xmlChar *)"String", (const xmlChar *)"Your request has been served.");
                                                                                                                                             
        /* Send back Response */
        link->putResponse(docRes);
}

]]></programlisting>

      <para>When running this application, function <parameter>soapServiceStart
      </parameter> is
      called and starts an indefinite loop listening for requests to
      arrive at TCP port 8020. As soon as a request arrives, function 
      <parameter>PlSoapLink</parameter> is called with as argument
      a pointer to the class <ulink type="http"
      url="prolinga-soap-soap_service.html#class_PlSoapProcess">
      PlSoapProcess</ulink> which holds the request
      the request in libxml2 format. In this example the request is printed on
      the console where the services has been started and a simple
      XML document is sent back by assigning this to the class <ulink type="http"
      url="prolinga-soap-soap_service.html#class_PlSoapProcess">
      PlSoapProcess</ulink>.</para>
  
      <para>To compile the program, use the following command:</para>
<programlisting>
g++ soap_s_test.cpp -o soap_s_test `pkg-config --cflags --libs prolinga-soap`
</programlisting>

      <note><para>You may need to set the environment variable PKG_CONFIG_PATH to 
      point to the directories where prolinga-soap.pc and libxml-2.0.pc are located. 
      This can be directory <parameter>/usr/lib</parameter> or
      directory <parameter>/usr/local/lib/pkgconfig</parameter> on GNU/Linux for
      example.
      </para></note>

      <para>You can also use a more traditional command as:</para>
<programlisting>
g++ soap_s_test.cpp -o soap_s_test -I/usr/local/include/ -L/usr/local/lib -lprolingasoap -lxml2 -lpthread -lz
</programlisting>

    </sect1>

    <sect1 id="prolinga-soap-soap_client_library">
      <title>Soap Client Library</title>

      <para>A very basic example program using the Soap
      Client Library, so it can send a request to and receive
      a response from a Web Services looks like this:</para>

<programlisting><![CDATA[
#include <prolinga/SoapClient.hpp>

int main()
{
        /* Create a request */
        xmlDocPtr docReq;
        xmlNodePtr curReq;
        docReq = xmlNewDoc((const xmlChar *)"1.0");
        docReq->children = xmlNewDocNode(docReq, NULL, (const xmlChar *)"ProLinga", NULL);
        curReq = xmlDocGetRootElement(docReq);
        xmlNewTextChild (curReq, NULL, (const xmlChar *)"String", (const xmlChar *)"This is a simple request.");

        /* Send of request and get response */
        PlSoapClient sclient;
        xmlDocPtr docRes;
        docRes = sclient.soapCall(docReq, "http://localhost:8020",0);

        /* Print response */
        xmlNodePtr curRes;
        xmlBufferPtr bufRes;
        bufRes = xmlBufferCreate();
        curRes = xmlDocGetRootElement(docRes);
        xmlNodeDump(bufRes, docRes, curRes, 0, 1);
        printf("%s\n", (char *)xmlBufferContent(bufRes));
        xmlBufferFree(bufRes);

	/* Free */
	xmlFreeDoc(docReq);
	xmlFreeDoc(docRes);

        /* Return */
        return 0;
}

]]></programlisting>

      <para>This function creates a small XML document and sends that
      to TCP port 8020 of localhost. The request gets processed and a
      response comes back in XML format. This is then printed to the
      standard output.</para>

      <para>To test these 2 examples, start the service logic first in one
      terminal screen and then execute the client logic from another
      terminal screen.</para>

      <para>To compile the program, use the following command:</para>
<programlisting>
g++ soap_c_test.cpp -o soap_c_test `pkg-config --cflags --libs prolinga-soapclient`
</programlisting>

      <note><para>You may need to set the environment variable PKG_CONFIG_PATH to 
      point to the directory where prolinga-soapclient.pc is located. By default this is
      directory <parameter>/usr/local/lib/pkgconfig</parameter> on GNU/Linux for
      example.
      </para></note>

      <para>You can also use a more traditional command as:</para>
<programlisting>
g++ soap_c_test.cpp -o soap_c_test -I/usr/local/include/ -L/usr/local/lib -lprolingasoapclient -lxml2 -lz
</programlisting>

      <para>The Soap library <parameter>prolingasoap</parameter> contains both the 
      Service as the Client class, so client calls can be made as well.</para>

    </sect1>

  </chapter>

  <chapter id="prolinga-soap-download">
    <title>Download ProLinga-Soap</title>

    <para>There are two types of product versions available for download:</para>

    <orderedlist>
      <listitem><para>Production Version</para></listitem>
      <listitem><para>Development Version</para></listitem>
    </orderedlist>

    <sect1 id="prolinga-soap-production_version">
      <title>Production Version</title>

      <para>The production version is an official product release. This is a
      stable completed version which should be used in production environments. At this 
      stage the product is only available as a source archive. Binary packages for a wide
      range of platforms will be available for download as the project progresses.
      Please visit the 
      <ulink type="http"
      url="http://download.prolinga.org">
      download page</ulink> for the latest details.</para>
    </sect1>

    <sect1 id="prolinga-soap-development_version">
      <title>Development Version</title>

      <para>The development version is a snapshot of the latest source files. Since
      it can contain bugs as part of "work in progress", this version should not
      be used in production environments. Only developers who want to help with
      further development of the ProLinga Projects should download this version. Please
      read the details at the <ulink type="http"
      url="prolinga-soap-subversion.html">Subversion section</ulink>
      of how to obtain the latest development version.</para>

    </sect1>

  </chapter>

  <chapter id="prolinga-soap-build">
    <title>Build ProLinga-Soap</title>

    <sect1 id="prolinga-soap-prerequisites">
      <title>Prerequisites</title>

      <para>ProLinga-Soap &version; has currently been built and tested
      on Fedora Core, Mandriva Linux, Debian, openSUSE, Ubuntu, FreeBSD and
      MS-Windows (Cygwin). The product 
      should compile and run successfully on
      other GNU/Linux distributions as well as UNIX.
      GNU gcc/g++ >= 3.3 compilers/tools are required
      for a successful build.
      </para>

      <para>Required 3rd party package(s) for a successful build:</para>
      <itemizedlist>
        <listitem>
          <para><ulink type="http"
          url="http://xmlsoft.org"><parameter>libxml2.</parameter></ulink>
          This product provides XML libraries.</para>
        </listitem>
      </itemizedlist>

      <para>Optional 3rd party package(s):</para>
      <itemizedlist>
        <listitem>
          <para>
          <ulink type="http"
          url="http://www.cs.fsu.edu/~engelen/soap.html"><parameter>gSOAP.</parameter></ulink>
          This product provides a SOAP/XML to C/C++ language binding. Not required for 
          normal ProLinga-Soap builds, since gSOAP sources are integrated with ProLinga 
          Soap sources. Only required when upgrading gSOAP or changing the SOAP schema.
          The current version used is gSOAP 2.8.8 stable.
          </para>
        </listitem>
        <listitem>
          <para>
          <ulink type="http"
          url="http://xmlsoft.org/XSLT"><parameter>xsltproc</parameter></ulink>. Command line processor.
          This package
          is only required to re-generate the HTML pages after making changes to the documentation.</para>
        </listitem>
      </itemizedlist>

      <sect2 id="prolinga-soap-3rd_party_download">
        <title>General Download Instructions 3rd Party Products.</title>

        <para>Assuming the directory /opt/builds will be used for 3rd party products, 
        then in general the following steps need to be taken to download and extract
        a 3rd party product source archive.</para>

      <itemizedlist>
        <listitem>
          <para>Download source tar/gz archive to /opt/builds/[product] Example: 
           place libxml2-<parameter>x.x.x</parameter>.tar.gz in /opt/builds/libxml2</para>
        </listitem>
        <listitem>
          <para>Use 'gunzip' to unzip the archive</para>
        </listitem>
        <listitem>
          <para>Use 'tar xvf [product.tar] to extract the archive. Example:
           tar xvf libxml2-<parameter>x.x.x.</parameter>tar.</para>
        </listitem>
        <listitem>
          <para>A new sub directory will be created with the new version of
          the product. Example: /opt/builds/libxml2/libxml2-<parameter>x.x.x</parameter>
          This way several versions of the same products can be installed next to
          each other.</para>
        </listitem>
      </itemizedlist>

      <para>For product specific installation instructions see following sections.</para>

      </sect2>

      <sect2 id="prolinga-soap-3rd_party_libxml2">
        <title>Libxml2:</title>
        <para>Product root dir: /opt/builds/libxml2</para>
        <para>Current version: 2.7.8</para>
        <para>Download:
        <ulink type="http"
        url="ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz">
        ftp://xmlsoft.org/libxml2/libxml2-2.7.8.tar.gz</ulink></para>
        <para>Build Instructions:</para>

<programlisting>
cd /opt/builds/libxml2/libxml2-2.7.8
./configure --prefix=/opt/builds/libxml2/libxml2-2.7.8
make
make install
</programlisting>

      </sect2>

      <sect2 id="prolinga-soap-3rd_party_gsoap">
        <title>gSOAP:</title>
        <para>This product only needs to be installed when upgrading gSOAP or when
        changing the SOAP schema.</para>

        <para>Product root dir: /opt/builds/gsoap</para>
        <para>Current version: 2.8.8 stable</para>
        <para>Download:
        <ulink type="http"
        url="http://sourceforge.net/projects/gsoap2/files">
        http://sourceforge.net/projects/gsoap2/files</ulink></para>

        <para>gSOAP sources will be integrated into the ProLinga-Soap sources. When upgrading
        a gSOAP version perform the following steps:</para>
 
        <orderedlist>
          <listitem><para>Go to the ProLinga-Soap src/gsoap directory and remove all files
          except prolingaSoap.hpp</para></listitem>
          <listitem><para>Generate a new SOAP schema by typing:
          "[gsoap-unpack-dir]/gsoap-2.8/gsoap/bin/linux386/soapcpp2 -2 prolingaSoap.hpp". This will generate
          (about) 14 files.</para></listitem>
          <listitem><para>Copy the files stdsoap2.cpp and stdsoap2.h from 
          [gsoap-unpack-dir]/gsoap-2.8/gsoap to the ProLinga-Soap src/gsoap directory.</para></listitem>
          <listitem><para>Build ProLinga-Soap. (make and/or make install)</para></listitem>
          <listitem><para>Done.</para></listitem>
        </orderedlist>

        <para>When changing the ProLinga-Soap schema you should know what you are doing,
        otherwise DO NOT TOUCH or all projects using the ProLinga-Soap library will fall over!</para>
 
      </sect2>
    </sect1>

    <sect1 id="prolinga-soap-build_instructions">
      <title>Build Instructions</title>

      <sect2 id="prolinga-soap-extracting_archive">
        <title>Extracting archive</title>

        <para>The product archive can be extracted to any desired directory
        using <parameter>unzip</parameter> (.zip file extension) or
        <parameter>gunzip</parameter> (.gz file extension)/
        <parameter>bunzip2</parameter> (.bz2 file extension) and 
        <parameter>tar</parameter>. After extracting, the following directories
        will be created:
        </para>

        <table frame="all" tocentry="1" >
        <title>Directory Structure.</title>
        <tgroup cols="2">
          <thead>
            <row>
              <entry>Directory</entry>
              <entry>Description</entry>
            </row>
          </thead>
          <tbody>
            <row>
              <entry>&PRODUCT;-&version;</entry>
              <entry>Product version root directory.</entry>
            </row>
            <row>
              <entry>&PRODUCT;-&version;/config</entry>
              <entry>Config build information.</entry>
            </row>
            <row>
              <entry>&PRODUCT;-&version;/doc</entry>
              <entry>Documentation.</entry>
            </row>
            <row>
              <entry>&PRODUCT;-&version;/src</entry>
              <entry>All source and internal header files.</entry>
            </row>
            <row>
              <entry>&PRODUCT;-&version;/tests</entry>
              <entry>Self tests.</entry>
            </row>
            <row>
              <entry>&PRODUCT;-&version;/prolinga</entry>
              <entry>External (API) header files.</entry>
            </row>
          </tbody>
        </tgroup>
        </table>

      </sect2>

      <sect2 id="prolinga-soap-compiling_linking">
        <title>Compiling and Linking</title>

        <para>To build the product go to the product root directory and run the 
        configure script. For default installation in /usr/local type:</para>

<programlisting>
./configure
</programlisting>

        <para>To install into another directory type:</para>

<programlisting>
./configure --prefix=<parameter>/any/dirname/</parameter>
</programlisting>

        <para>For all other configure options, type:</para>

<programlisting>
./configure --help
</programlisting>

        <para>After running the configure script, the product can be build with:</para>

<programlisting>
make
</programlisting>

        <para>To run the optional self-test type:</para>

<programlisting>
make check
</programlisting>

        <para>After compilation, the binaries, libraries and header files can be 
        installed with:</para>

<programlisting>
make install
</programlisting>

        <para>You may need root access for this last option.</para>

        <para>By default, HTML documentation pages are available in
        the doc/html directory. These pages are generated from 
        <ulink type="http"
        url="http://www.docbook.org">DocBook</ulink> XML file format
        files in /doc. To re-generate the HTML pages from these files type: </para>

<programlisting>
make html
</programlisting>

        <para>The command line XSLT processor <parameter>xsltproc</parameter> must be
        available from $PATH to be able to generate the HTML documentation.</para>

      </sect2>

      <sect2 id="prolinga-soap-dependencies">
        <title>Dependencies</title>

        <para>Many of the ProLinga Projects are dependent on 3rd party libraries.
        These (non system) dependencies are outlined below. If these 3rd party
        products are not installed in either /usr/bin, /usr/lib, /usr/include
        or /usr/local/bin, /usr/local/lib, /usr/local/include, the additional
        configure option needs to be provided when building.</para>

        <table frame="all" tocentry="1" >
        <title>Dependencies</title>
        <tgroup cols="3">
          <thead>
            <row>
              <entry>Dependency</entry>
              <entry>Version</entry>
              <entry>Configure Option</entry>
            </row>
          </thead>
          <tbody>
            <row>
              <entry>libxml2</entry>
              <entry>>=2.6.5</entry>
              <entry>--with-libxml-prefix=<parameter>/path/to/libxml2</parameter></entry>
            </row>
          </tbody>
        </tgroup>
        </table>
        <para></para>

      </sect2>

      <sect2 id="prolinga-soap-choose_build">
        <title>Choosing the right type of build</title>

        <para>The default configuration options provide libraries which 
        can be used both to develop/debug as to run the product. However better builds 
        are possible for a dedicated development or production environment.</para>

        <para>In <emphasis>production</emphasis> environments, builds are needed which contain minimal (debug) 
        overhead, so they are fast and small. To build such binaries/libraries, the 
        --enable-final options can be used. Example:</para>

<programlisting>
./configure --enable-final
</programlisting>

        <para>The enable-final flag is configured to be used with GCC environments only. 
        If access to more compilers become available over time, the enable-flag will be 
        ported to those compilers as well.</para>

        <para>In <emphasis>development</emphasis> environments, builds are needed producing warnings, enabling
        maximum debugging info etc. Several options are available here.</para>

      <itemizedlist>
         <listitem>
           <para>--enable-warnings : Set all compiler warning flags</para>
         </listitem>
         <listitem>
           <para>--enable-debug : Enable all debug messages</para>
         </listitem>
         <listitem>
           <para>--enable-gprof : Enables profiling with gprof (GCC only)</para>
         </listitem>
      </itemizedlist>

      </sect2>

    </sect1>

  </chapter>

  <chapter id="prolinga-soap-development">
    <title>Further development of ProLinga-Soap</title>

    <para>All ProLinga Projects are under constant active development. This includes
    issues related to fixing bugs, increasing performance etc, as well as expanding
    the various projects with new features. This chapter provides information of
    all these types of tasks as well as details of how to join the development team.</para>

    <sect1 id="prolinga-soap-todo">
      <title>To-do List</title>

      <para>This section contains a list of work that needs to be done on the product.
      A more detailed and up to date list is available on the
      <ulink type="http" url="http://bugzilla.prolinga.org">ProLinga Bugzilla Server</ulink>.
      </para>

      <itemizedlist>
         <listitem>
           <para>Implement XML Schemas for validation. Libxml2 is finishing up XML schemas.
           If it is still too far away, start with DTD.</para>
         </listitem>
         <listitem>
           <para>ProLinga-Soap is written in C++. Libxml2 however is C only. There is a C++ wrapper
           for this XML parser library. Details at <ulink type="http"
           url="http://libxmlplusplus.sourceforge.net/">http://libxmlplusplus.sourceforge.net/</ulink>.
           </para>
         </listitem>
         <listitem>
           <para>Some strings/paths are hardcoded in the product. This all should be
           reviewed and be removed or made all configurable using a config file.</para>
         </listitem>
         <listitem>
           <para>Utilities.</para>
         </listitem>
         <listitem>
           <para>Code review and cleanup.</para>
         </listitem>
         <listitem>
           <para>Logging. A simple logging mechanism has been implemented. However,
           it appears that gSOAP has a logging system of its own. This should be
           investigated and implemented (if useful).</para>
         </listitem>
         <listitem>
           <para>Self-tests need to be developed for quality control.</para>
         </listitem>
         <listitem>
           <para>Porting to more platforms. 
            </para>
         </listitem>
       </itemizedlist>

    </sect1>

    <sect1 id="prolinga-soap-subversion">
      <title>Subversion</title>

      <para>A Subversion tree containing the latest project sources is available at
      <ulink type="http" url="http://svn.prolinga.org">http://svn.prolinga.org</ulink>.
      For access please contact the <ulink type="http"
      url="http://lists.prolinga.org">ProLinga Team</ulink>.</para>

    </sect1>

    <sect1 id="prolinga-soap-bugzilla">
      <title>Bugzilla</title>

      <para>Bugzilla software development and bug tracking system to manage the ProLinga projects is available at
      <ulink type="http" url="http://bugzilla.prolinga.org">http://bugzilla.prolinga.org</ulink>.
      For access please contact the <ulink type="http"
      url="http://lists.prolinga.org">ProLinga Team</ulink>.</para>

    </sect1>

    <sect1 id="prolinga-soap-help_develop">
      <title>Help to Develop</title>

      <para>Are you ready to join the ProLinga Team? There are several ways you
      can help:</para>

      <itemizedlist>
         <listitem>
           <para>Use the product. Tell <ulink type="http"
           url="http://lists.prolinga.org">us</ulink> what you think, ideas, bugs etc.</para>
         </listitem>
         <listitem>
           <para>Fixing bugs. Visit the development section on the 
           <ulink type="http"
           url="http://www.prolinga.org">ProLinga Web Site</ulink>,
           choose a
           bug, fix it and send <ulink type="http"
           url="http://lists.prolinga.org">us</ulink> the code changes.
           </para>
         </listitem>
         <listitem>
           <para>Enhancements. Have a look at the enhancement section of the
           <ulink type="http"
           url="prolinga-soap-development.html#prolinga-soap-todo">to-do list</ulink>
           and let <ulink type="http"
           url="http://lists.prolinga.org">us</ulink> know which new feature you
           want to help to develop.</para>
         </listitem>
         <listitem>
           <para>Porting. To be successful it is essential that the ProLinga Projects
           are available on a wide range of platforms. We need help in porting and
           testing as well as providing binary releases for many different platforms.
           Let <ulink type="http"
           url="http://lists.prolinga.org">us</ulink> know if and how you can help out.
           </para>
         </listitem>
         <listitem>
           <para>Real world examples. Are you using ProLinga products or do you know people
           who are happily using it. Tell <ulink type="http"
           url="http://lists.prolinga.org">us</ulink> the story and provide some screenshots.
           </para>
         </listitem>
      </itemizedlist>

    </sect1>

  </chapter>

  <part id="prolinga-soap-API">
    <title>ProLinga-Soap C++ API</title>

    <partintro>
      <para>This section contains the API reference for ProLinga-Soap.  All
      the public interfaces are documented here.</para>
    </partintro>

    <!-- The API documentation -->
    &prolinga-soap-API;

  </part>

  <!-- The document license -->
  &fdl;

</book>
