You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by da...@apache.org on 2004/03/23 06:38:58 UTC

cvs commit: ws-axis/c/include/client/transport/axis Channel.hpp HttpTransport.hpp Platform.hpp Receiver.hpp SecureChannel.hpp Sender.hpp Transport.hpp TransportFactory.hpp Url.hpp

damitha     2004/03/22 21:38:58

  Added:       c/include/client Call.h
               c/include/client/transport AxisTransport.h
               c/include/client/transport/axis Channel.hpp
                        HttpTransport.hpp Platform.hpp Receiver.hpp
                        SecureChannel.hpp Sender.hpp Transport.hpp
                        TransportFactory.hpp Url.hpp
  Log:
  
  
  Revision  Changes    Path
  1.1                  ws-axis/c/include/client/Call.h
  
  Index: Call.h
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "SOAP" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   *
   *
   * @author Sanjaya Singharage (sanjayas@opensource.lk)
   * @author Susantha Kumara (susantha@opensource.lk, skumara@virtusa.com)
   *
   */
  
  /* Call.h: interface for the Call class.*/
  
  
  #if !defined(AFX_CALL_H__D13E5626_0A9B_43EA_B606_364B98CEDAA8__INCLUDED_)
  #define AFX_CALL_H__D13E5626_0A9B_43EA_B606_364B98CEDAA8__INCLUDED_
  
  #include "../axis/common/AxisWrapperAPI.h"
  #include "../axis/soap/SoapEnvVersions.h"
  #include "../axis/wsdd/WSDDDefines.h"
  
  #ifdef __cplusplus
  #include "../axis/common/IParam.h"
  #include "../axis/engine/ClientAxisEngine.h"
  #include <list>
  using namespace std;
  class AxisTransport;
  #else
  #include "../axis/common/Packet.h"
  #endif
  
  typedef struct {
  	void (AXISCALL* SetSOAPVersion)(void* pObj, SOAP_VERSION version);
  	int (AXISCALL* SetTransportProperty)(void* pObj, AXIS_TRANSPORT_INFORMATION_TYPE type, const char* value);
  	int (AXISCALL* SetProtocol)(void* pObj, AXIS_PROTOCOL_TYPE protocol);
  	int (AXISCALL* Initialize)(void* pObj, PROVIDERTYPE nStyle);
  	int (AXISCALL* Invoke)(void* pObj);
  	int (AXISCALL* UnInitialize)(void* pObj);
  
  	/* Method that set the remote method name */
  	void (AXISCALL* SetOperation)(void* pObj, const char* pchOperation, const char* pchNamespace);
  	int (AXISCALL* SetEndpointURI)(void* pObj, const char* pchEndpointURI);
  
  	/* Method for adding complex parameters */
  	void (AXISCALL* AddCmplxParameter)(void* pObj, void* pObject, void* pSZFunct, void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace);
  	/* Method for adding complex type array parameters */
  	void (AXISCALL* AddCmplxArrayParameter)(void* pObj, Axis_Array* pArray, void* pSZFunct, void* pDelFunct, void* pSizeFunct, const AxisChar* pName, const AxisChar* pNamespace);
  	/* Method for adding basic type array parameters */
  	void (AXISCALL* AddBasicArrayParameter)(void* pObj, Axis_Array* pArray, XSDTYPE nType, const char* pName);
  	/* Method for adding parameters of basic types */
  	void (AXISCALL* AddParameter)(void* pObj, void* pValue,const char* pName, XSDTYPE nType);
  
  	/* Methods used by stubs to get a deserialized value of an XML element as basic types */
  	int (AXISCALL* GetElementAsInt)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
  	xsd__boolean (AXISCALL* GetElementAsBoolean)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      unsigned int (AXISCALL* GetElementAsUnsignedInt)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      short (AXISCALL* GetElementAsShort)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      unsigned short (AXISCALL* GetElementAsUnsignedShort)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      char (AXISCALL* GetElementAsByte)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      unsigned char (AXISCALL* GetElementAsUnsignedByte)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      long (AXISCALL* GetElementAsLong)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      long (AXISCALL* GetElementAsInteger)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      unsigned long (AXISCALL* GetElementAsUnsignedLong)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
  	float (AXISCALL* GetElementAsFloat)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      double (AXISCALL* GetElementAsDouble)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      double (AXISCALL* GetElementAsDecimal)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
  	AxisChar* (AXISCALL* GetElementAsString)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      AxisChar* (AXISCALL* GetElementAsAnyURI)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      AxisChar* (AXISCALL* GetElementAsQName)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
  	xsd__hexBinary (AXISCALL* GetElementAsHexBinary)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
  	xsd__base64Binary (AXISCALL* GetElementAsBase64Binary)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      struct tm (AXISCALL* GetElementAsDateTime)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      struct tm (AXISCALL* GetElementAsDate)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      struct tm (AXISCALL* GetElementAsTime)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      long (AXISCALL* GetElementAsDuration)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
  
  	/* Methods used by stubs to get a deserialized value of an XML attribute basic types */
  	int (AXISCALL* GetAttributeAsInt)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
  	xsd__boolean (AXISCALL* GetAttributeAsBoolean)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      unsigned int (AXISCALL* GetAttributeAsUnsignedInt)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      short (AXISCALL* GetAttributeAsShort)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      unsigned short (AXISCALL* GetAttributeAsUnsignedShort)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      char (AXISCALL* GetAttributeAsByte)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      unsigned char (AXISCALL* GetAttributeAsUnsignedByte)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      long (AXISCALL* GetAttributeAsLong)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      long (AXISCALL* GetAttributeAsInteger)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      unsigned long (AXISCALL* GetAttributeAsUnsignedLong)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
  	float (AXISCALL* GetAttributeAsFloat)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      double (AXISCALL* GetAttributeAsDouble)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      double (AXISCALL* GetAttributeAsDecimal)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
  	AxisChar* (AXISCALL* GetAttributeAsString)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      AxisChar* (AXISCALL* GetAttributeAsAnyURI)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      AxisChar* (AXISCALL* GetAttributeAsQName)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
  	xsd__hexBinary (AXISCALL* GetAttributeAsHexBinary)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
  	xsd__base64Binary (AXISCALL* GetAttributeAsBase64Binary)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      struct tm (AXISCALL* GetAttributeAsDateTime)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      struct tm (AXISCALL* GetAttributeAsDate)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      struct tm (AXISCALL* GetAttributeAsTime)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
      long (AXISCALL* GetAttributeAsDuration)(void* pObj, const AxisChar* pName, const AxisChar* pNamespace);
  
  	/* Method used by stubs to get a deserialized value of complex types */
  	void* (AXISCALL* GetCmplxObject)(void* pObj, void* pDZFunct, void* pCreFunct, void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace);
  	/* Method used by stubs to get a deserialized Array of complex types */
  	Axis_Array (AXISCALL* GetCmplxArray)(void* pObj, void* pDZFunct, void* pCreFunct, void* pDelFunct, void* pSizeFunct, const AxisChar* pName, const AxisChar* pNamespace);
  	/* Method used by stubs to get a deserialized Array of basic types */
  	Axis_Array (AXISCALL* GetBasicArray)(void* pObj, XSDTYPE nType, const AxisChar* pName, const AxisChar* pNamespace);
  
  	int (AXISCALL* CheckMessage)(void *pObj, const AxisChar* pName, const AxisChar* pNamespace);
  } CallFunctions;
  
  #ifdef __cplusplus
  
  class CallBase
  {	
  public:
  	virtual void AXISCALL SetSOAPVersion(SOAP_VERSION version)=0;
  	virtual int AXISCALL SetTransportProperty(AXIS_TRANSPORT_INFORMATION_TYPE type, const char* value)=0;
  	virtual int AXISCALL SetProtocol(AXIS_PROTOCOL_TYPE protocol)=0;
  	virtual int AXISCALL Initialize(PROVIDERTYPE nStyle)=0;
  	virtual int AXISCALL Invoke()=0;
  	virtual int AXISCALL UnInitialize()=0;
  
  	/* Method that set the remote method name */
  	virtual void AXISCALL SetOperation(const char* pchOperation, const char* pchNamespace)=0;
  	virtual int AXISCALL SetEndpointURI(const char* pchEndpointURI)=0;
  
  	/* Method for adding complex parameters */
  	virtual void AXISCALL AddCmplxParameter(void* pObject, void* pSZFunct, void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace)=0;
  	/* Method for adding complex type array parameters */
  	virtual void AXISCALL AddCmplxArrayParameter(Axis_Array* pArray, void* pSZFunct, void* pDelFunct, void* pSizeFunct, const AxisChar* pName, const AxisChar* pNamespace)=0;
  	/* Method for adding basic type array parameters */
  	virtual void AXISCALL AddBasicArrayParameter(Axis_Array* pArray, XSDTYPE nType, const char* pName)=0;
  	/* Method for adding parameters of basic types */
  	virtual void AXISCALL AddParameter(void* pValue,const char* pName, XSDTYPE nType)=0;
  
  	/* Methods used by stubs to get a deserialized value of an XML element as basic types */
  	virtual int AXISCALL GetElementAsInt(const AxisChar* pName, const AxisChar* pNamespace)=0;
  	virtual xsd__boolean AXISCALL GetElementAsBoolean(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual unsigned int AXISCALL GetElementAsUnsignedInt(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual short AXISCALL GetElementAsShort(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual unsigned short AXISCALL GetElementAsUnsignedShort(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual char AXISCALL GetElementAsByte(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual unsigned char AXISCALL GetElementAsUnsignedByte(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual long AXISCALL GetElementAsLong(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual long AXISCALL GetElementAsInteger(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual unsigned long AXISCALL GetElementAsUnsignedLong(const AxisChar* pName, const AxisChar* pNamespace)=0;
  	virtual float AXISCALL GetElementAsFloat(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual double AXISCALL GetElementAsDouble(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual double AXISCALL GetElementAsDecimal(const AxisChar* pName, const AxisChar* pNamespace)=0;
  	virtual AxisChar* AXISCALL GetElementAsString(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual AxisChar* AXISCALL GetElementAsAnyURI(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual AxisChar* AXISCALL GetElementAsQName(const AxisChar* pName, const AxisChar* pNamespace)=0;
  	virtual xsd__hexBinary AXISCALL GetElementAsHexBinary(const AxisChar* pName, const AxisChar* pNamespace)=0;
  	virtual xsd__base64Binary AXISCALL GetElementAsBase64Binary(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual struct tm AXISCALL GetElementAsDateTime(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual struct tm AXISCALL GetElementAsDate(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual struct tm AXISCALL GetElementAsTime(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual long AXISCALL GetElementAsDuration(const AxisChar* pName, const AxisChar* pNamespace)=0;
  
  	/* Methods used by stubs to get a deserialized value of XML attribute as basic types */
  	virtual int AXISCALL GetAttributeAsInt(const AxisChar* pName, const AxisChar* pNamespace)=0;
  	virtual xsd__boolean AXISCALL GetAttributeAsBoolean(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual unsigned int AXISCALL GetAttributeAsUnsignedInt(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual short AXISCALL GetAttributeAsShort(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual unsigned short AXISCALL GetAttributeAsUnsignedShort(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual char AXISCALL GetAttributeAsByte(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual unsigned char AXISCALL GetAttributeAsUnsignedByte(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual long AXISCALL GetAttributeAsLong(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual long AXISCALL GetAttributeAsInteger(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual unsigned long AXISCALL GetAttributeAsUnsignedLong(const AxisChar* pName, const AxisChar* pNamespace)=0;
  	virtual float AXISCALL GetAttributeAsFloat(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual double AXISCALL GetAttributeAsDouble(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual double AXISCALL GetAttributeAsDecimal(const AxisChar* pName, const AxisChar* pNamespace)=0;
  	virtual AxisChar* AXISCALL GetAttributeAsString(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual AxisChar* AXISCALL GetAttributeAsAnyURI(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual AxisChar* AXISCALL GetAttributeAsQName(const AxisChar* pName, const AxisChar* pNamespace)=0;
  	virtual xsd__hexBinary AXISCALL GetAttributeAsHexBinary(const AxisChar* pName, const AxisChar* pNamespace)=0;
  	virtual xsd__base64Binary AXISCALL GetAttributeAsBase64Binary(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual struct tm AXISCALL GetAttributeAsDateTime(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual struct tm AXISCALL GetAttributeAsDate(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual struct tm AXISCALL GetAttributeAsTime(const AxisChar* pName, const AxisChar* pNamespace)=0;
      virtual long AXISCALL GetAttributeAsDuration(const AxisChar* pName, const AxisChar* pNamespace)=0;
  
  	/* Method used by stubs to get a deserialized value of complex types */
  	virtual void* AXISCALL GetCmplxObject(void* pDZFunct, void* pCreFunct, void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace)=0;
  	/* Method used by stubs to get a deserialized Array of complex types */
  	virtual Axis_Array AXISCALL GetCmplxArray(void* pDZFunct, void* pCreFunct, void* pDelFunct, void* pSizeFunct, const AxisChar* pName, const AxisChar* pNamespace)=0;
  	/* Method used by stubs to get a deserialized Array of basic types */
  	virtual Axis_Array AXISCALL GetBasicArray(XSDTYPE nType, const AxisChar* pName, const AxisChar* pNamespace)=0;
  
  	virtual int AXISCALL CheckMessage(const AxisChar* pName, const AxisChar* pNamespace)=0;
  	/* following stuff is needed to provide the interface for C web services */
  public:
  	static CallFunctions ms_VFtable;
  	static bool bInitialized;
  	/* add static functions for all interface functions here */
  	static void AXISCALL s_SetSOAPVersion(void* pObj, SOAP_VERSION version)
  	{((CallBase*)pObj)->SetSOAPVersion(version);};
  	static int AXISCALL s_SetTransportProperty(void* pObj, AXIS_TRANSPORT_INFORMATION_TYPE type, const char* value)
  	{ return ((CallBase*)pObj)->SetTransportProperty(type,value);};
  	static int AXISCALL s_SetProtocol(void* pObj, AXIS_PROTOCOL_TYPE protocol)
  	{ return ((CallBase*)pObj)->SetProtocol(protocol);};
  	static int AXISCALL s_Initialize(void* pObj, PROVIDERTYPE nStyle)
  	{ return ((CallBase*)pObj)->Initialize(nStyle);};
  	static int AXISCALL s_Invoke(void* pObj)
  	{ return ((CallBase*)pObj)->Invoke();};
  	static int AXISCALL s_UnInitialize(void* pObj)
  	{ return ((CallBase*)pObj)->UnInitialize();};
  
  	/* Method that set the remote method name */
  	static void AXISCALL s_SetOperation(void* pObj, const char* pchOperation, const char* pchNamespace)
  	{ ((CallBase*)pObj)->SetOperation(pchOperation, pchNamespace);};
  	static int AXISCALL s_SetEndpointURI(void* pObj, const char* pchEndpointURI)
  	{ return ((CallBase*)pObj)->SetEndpointURI(pchEndpointURI);};
  
  	static void AXISCALL s_AddParameter(void* pObj, void* pValue, const AxisChar* pchName, XSDTYPE type)
  	{ ((CallBase*)pObj)->AddParameter(pValue, pchName, type);};
  	static void AXISCALL s_AddCmplxArrayParameter(void* pObj, Axis_Array* pArray, void* pSZFunct, void* pDelFunct, void* pSizeFunct, const AxisChar* pName, const AxisChar* pNamespace)
  	{ ((CallBase*)pObj)->AddCmplxArrayParameter(pArray, pSZFunct, pDelFunct, pSizeFunct, pName, pNamespace);};
  	static void AXISCALL s_AddBasicArrayParameter(void* pObj, Axis_Array* pArray, XSDTYPE nType, const AxisChar* pName)
  	{ ((CallBase*)pObj)->AddBasicArrayParameter(pArray, nType, pName);};
  	static void AXISCALL s_AddCmplxParameter(void* pObj, void* pObject, void* pDZFunct, void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace)
  	{ ((CallBase*)pObj)->AddCmplxParameter(pObject, pDZFunct, pDelFunct, pName, pNamespace);};
  
  	static int AXISCALL s_GetElementAsInt(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsInt(pName, pNamespace);};
  	static xsd__boolean AXISCALL s_GetElementAsBoolean(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsBoolean(pName, pNamespace);};
      static unsigned int AXISCALL s_GetElementAsUnsignedInt(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsUnsignedInt(pName, pNamespace);};
      static short AXISCALL s_GetElementAsShort(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsShort(pName, pNamespace);};
      static unsigned short AXISCALL s_GetElementAsUnsignedShort(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsUnsignedShort(pName, pNamespace);};
      static char AXISCALL s_GetElementAsByte(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsByte(pName, pNamespace);};
      static unsigned char AXISCALL s_GetElementAsUnsignedByte(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsUnsignedByte(pName, pNamespace);};
      static long AXISCALL s_GetElementAsLong(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsLong(pName, pNamespace);};
      static long AXISCALL s_GetElementAsInteger(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsInteger(pName, pNamespace);};
      static unsigned long AXISCALL s_GetElementAsUnsignedLong(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsUnsignedLong(pName, pNamespace);};
  	static float AXISCALL s_GetElementAsFloat(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsFloat(pName, pNamespace);};
      static double AXISCALL s_GetElementAsDouble(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsDouble(pName, pNamespace);};
      static double AXISCALL s_GetElementAsDecimal(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsDouble(pName, pNamespace);};
  	static AxisChar* AXISCALL s_GetElementAsString(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsString(pName, pNamespace);};
      static AxisChar* AXISCALL s_GetElementAsAnyURI(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsAnyURI(pName, pNamespace);};
      static AxisChar* AXISCALL s_GetElementAsQName(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsQName(pName, pNamespace);};
  	static xsd__hexBinary AXISCALL s_GetElementAsHexBinary(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsHexBinary(pName, pNamespace);};
  	static xsd__base64Binary AXISCALL s_GetElementAsBase64Binary(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsBase64Binary(pName, pNamespace);};
      static struct tm AXISCALL s_GetElementAsDateTime(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsDateTime(pName, pNamespace);};
      static struct tm AXISCALL s_GetElementAsDate(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsDate(pName, pNamespace);};
      static struct tm AXISCALL s_GetElementAsTime(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsTime(pName, pNamespace);};
      static long AXISCALL s_GetElementAsDuration(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetElementAsDuration(pName, pNamespace);};
  
  	static int AXISCALL s_GetAttributeAsInt(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsInt(pName, pNamespace);};
  	static xsd__boolean AXISCALL s_GetAttributeAsBoolean(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsBoolean(pName, pNamespace);};
      static unsigned int AXISCALL s_GetAttributeAsUnsignedInt(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsUnsignedInt(pName, pNamespace);};
      static short AXISCALL s_GetAttributeAsShort(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsShort(pName, pNamespace);};
      static unsigned short AXISCALL s_GetAttributeAsUnsignedShort(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsUnsignedShort(pName, pNamespace);};
      static char AXISCALL s_GetAttributeAsByte(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsByte(pName, pNamespace);};
      static unsigned char AXISCALL s_GetAttributeAsUnsignedByte(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsUnsignedByte(pName, pNamespace);};
      static long AXISCALL s_GetAttributeAsLong(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsLong(pName, pNamespace);};
      static long AXISCALL s_GetAttributeAsInteger(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsInteger(pName, pNamespace);};
      static unsigned long AXISCALL s_GetAttributeAsUnsignedLong(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsUnsignedLong(pName, pNamespace);};
  	static float AXISCALL s_GetAttributeAsFloat(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsFloat(pName, pNamespace);};
      static double AXISCALL s_GetAttributeAsDouble(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsDouble(pName, pNamespace);};
      static double AXISCALL s_GetAttributeAsDecimal(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsDecimal(pName, pNamespace);};
  	static AxisChar* AXISCALL s_GetAttributeAsString(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsString(pName, pNamespace);};
      static AxisChar* AXISCALL s_GetAttributeAsAnyURI(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsAnyURI(pName, pNamespace);};
      static AxisChar* AXISCALL s_GetAttributeAsQName(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsQName(pName, pNamespace);};
  	static xsd__hexBinary AXISCALL s_GetAttributeAsHexBinary(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsHexBinary(pName, pNamespace);};
  	static xsd__base64Binary AXISCALL s_GetAttributeAsBase64Binary(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsBase64Binary(pName, pNamespace);};
      static struct tm AXISCALL s_GetAttributeAsDateTime(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsDateTime(pName, pNamespace);};
      static struct tm AXISCALL s_GetAttributeAsDate(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsDate(pName, pNamespace);};
      static struct tm AXISCALL s_GetAttributeAsTime(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsTime(pName, pNamespace);};
      static long AXISCALL s_GetAttributeAsDuration(void* pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{ return ((CallBase*)pObj)->GetAttributeAsDuration(pName, pNamespace);};
  
  	static Axis_Array AXISCALL s_GetCmplxArray(void* pObj, void* pDZFunct, void* pCreFunct, void* pDelFunct, void* pSizeFunct, const AxisChar* pName, const AxisChar* pNamespace)
  	{return ((CallBase*)pObj)->GetCmplxArray(pDZFunct, pCreFunct, pDelFunct, pSizeFunct, pName, pNamespace);};
  	static Axis_Array AXISCALL s_GetBasicArray(void* pObj, XSDTYPE nType, const AxisChar* pName, const AxisChar* pNamespace)
  	{return ((CallBase*)pObj)->GetBasicArray(nType, pName, pNamespace);};
  	static void* AXISCALL s_GetCmplxObject(void* pObj, void* pDZFunct, void* pCreFunct, void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace)
  	{return ((CallBase*)pObj)->GetCmplxObject(pDZFunct, pCreFunct, pDelFunct, pName, pNamespace);};
  
  	static int AXISCALL s_CheckMessage(void *pObj, const AxisChar* pName, const AxisChar* pNamespace)
  	{return ((CallBase*)pObj)->CheckMessage(pName, pNamespace);};
  
  	/* and populate ms_VFtable with corresponding entry */
  	static void s_Initialize()
  	{	
  		if (bInitialized) return;
  		bInitialized = true;
  		ms_VFtable.SetSOAPVersion = s_SetSOAPVersion;
  		ms_VFtable.SetTransportProperty = s_SetTransportProperty;
  		ms_VFtable.SetProtocol = s_SetProtocol;
  		ms_VFtable.Initialize = s_Initialize;
  		ms_VFtable.Invoke = s_Invoke;
  		ms_VFtable.UnInitialize = s_UnInitialize;
  		ms_VFtable.SetOperation = s_SetOperation;
  		ms_VFtable.SetEndpointURI = s_SetEndpointURI;
  		ms_VFtable.AddParameter = s_AddParameter;
  		ms_VFtable.AddCmplxArrayParameter = s_AddCmplxArrayParameter;
  		ms_VFtable.AddBasicArrayParameter = s_AddBasicArrayParameter;
  		ms_VFtable.AddCmplxParameter = s_AddCmplxParameter;
  		ms_VFtable.GetCmplxArray = s_GetCmplxArray;
  		ms_VFtable.GetBasicArray = s_GetBasicArray;
  		ms_VFtable.GetCmplxObject = s_GetCmplxObject;
  		ms_VFtable.GetElementAsInt = s_GetElementAsInt;
  		ms_VFtable.GetElementAsBoolean = s_GetElementAsBoolean;
  		ms_VFtable.GetElementAsUnsignedInt = s_GetElementAsUnsignedInt;
  		ms_VFtable.GetElementAsShort = s_GetElementAsShort;
  		ms_VFtable.GetElementAsUnsignedShort = s_GetElementAsUnsignedShort;
  		ms_VFtable.GetElementAsByte = s_GetElementAsByte;
  		ms_VFtable.GetElementAsUnsignedByte = s_GetElementAsUnsignedByte;
  		ms_VFtable.GetElementAsLong = s_GetElementAsLong;
  		ms_VFtable.GetElementAsInteger = s_GetElementAsInteger;
  		ms_VFtable.GetElementAsUnsignedLong = s_GetElementAsUnsignedLong;
  		ms_VFtable.GetElementAsFloat = s_GetElementAsFloat;
  		ms_VFtable.GetElementAsDouble = s_GetElementAsDouble;
  		ms_VFtable.GetElementAsDecimal = s_GetElementAsDecimal;
  		ms_VFtable.GetElementAsString = s_GetElementAsString;
  		ms_VFtable.GetElementAsAnyURI = s_GetElementAsAnyURI;
  		ms_VFtable.GetElementAsQName = s_GetElementAsQName;
  		ms_VFtable.GetElementAsHexBinary = s_GetElementAsHexBinary;
  		ms_VFtable.GetElementAsBase64Binary = s_GetElementAsBase64Binary;
  		ms_VFtable.GetElementAsDateTime = s_GetElementAsDateTime;
  		ms_VFtable.GetElementAsDate = s_GetElementAsDate;
  		ms_VFtable.GetElementAsTime = s_GetElementAsTime;
  		ms_VFtable.GetElementAsDuration = s_GetElementAsDuration;
  		ms_VFtable.GetAttributeAsInt = s_GetAttributeAsInt;
  		ms_VFtable.GetAttributeAsBoolean = s_GetAttributeAsBoolean;
  		ms_VFtable.GetAttributeAsUnsignedInt = s_GetAttributeAsUnsignedInt;
  		ms_VFtable.GetAttributeAsShort = s_GetAttributeAsShort;
  		ms_VFtable.GetAttributeAsUnsignedShort = s_GetAttributeAsUnsignedShort;
  		ms_VFtable.GetAttributeAsByte = s_GetAttributeAsByte;
  		ms_VFtable.GetAttributeAsUnsignedByte = s_GetAttributeAsUnsignedByte;
  		ms_VFtable.GetAttributeAsLong = s_GetAttributeAsLong;
  		ms_VFtable.GetAttributeAsInteger = s_GetAttributeAsInteger;
  		ms_VFtable.GetAttributeAsUnsignedLong = s_GetAttributeAsUnsignedLong;
  		ms_VFtable.GetAttributeAsFloat = s_GetAttributeAsFloat;
  		ms_VFtable.GetAttributeAsDouble = s_GetAttributeAsDouble;
  		ms_VFtable.GetAttributeAsDecimal = s_GetAttributeAsDecimal;
  		ms_VFtable.GetAttributeAsString = s_GetAttributeAsString;
  		ms_VFtable.GetAttributeAsAnyURI = s_GetAttributeAsAnyURI;
  		ms_VFtable.GetAttributeAsQName = s_GetAttributeAsQName;
  		ms_VFtable.GetAttributeAsHexBinary = s_GetAttributeAsHexBinary;
  		ms_VFtable.GetAttributeAsBase64Binary = s_GetAttributeAsBase64Binary;
  		ms_VFtable.GetAttributeAsDateTime = s_GetAttributeAsDateTime;
  		ms_VFtable.GetAttributeAsDate = s_GetAttributeAsDate;
  		ms_VFtable.GetAttributeAsTime = s_GetAttributeAsTime;
  		ms_VFtable.GetAttributeAsDuration = s_GetAttributeAsDuration;
  		ms_VFtable.CheckMessage = s_CheckMessage;
  	}
  };
  
  /* A separate call class object should be used by each thread */
  class Call : public CallBase
  {
  public:
  	virtual ~Call();
  	void AXISCALL SetSOAPVersion(SOAP_VERSION version);
  	int AXISCALL SetTransportProperty(AXIS_TRANSPORT_INFORMATION_TYPE type, const char* value);
  	int AXISCALL SetProtocol(AXIS_PROTOCOL_TYPE protocol);
  	int AXISCALL UnInitialize();
  	int AXISCALL Initialize(PROVIDERTYPE nStyle);
  	int AXISCALL Invoke();
  
  	/* Method for adding complex parameters */
  	void AXISCALL AddCmplxParameter(void* pObject, void* pSZFunct, void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace);
  	/* Method for adding complex type array parameters */
  	void AXISCALL AddCmplxArrayParameter(Axis_Array* pArray, void* pSZFunct, void* pDelFunct, void* pSizeFunct, const AxisChar* pName, const AxisChar* pNamespace);
  	/* Method for adding basic type array parameters */
  	void AXISCALL AddBasicArrayParameter(Axis_Array* pArray, XSDTYPE nType, const AxisChar* pName);
  	/* Method for adding parameters of basic types */
  	void AXISCALL AddParameter(void* pValue,const char* pchName, XSDTYPE nType);
  
  	/* Method that set the remote method name */
  	void AXISCALL SetOperation(const char* pchOperation, const char* pchNamespace);
  	int AXISCALL SetEndpointURI(const char* pchEndpointURI);
  	Call();
  public:
  	IHeaderBlock* createHeaderBlock(AxisChar *pachLocalName, AxisChar *pachPrefix, AxisChar *pachUri);
  	IHeaderBlock* createHeaderBlock();
  	int SetSoapHeader(SoapHeader *pSoapHeader);
  	/* Methods used by stubs to get a deserialized value of XML element as basic types */
  	int AXISCALL GetElementAsInt(const AxisChar* pName, const AxisChar* pNamespace);
  	xsd__boolean AXISCALL GetElementAsBoolean(const AxisChar* pName, const AxisChar* pNamespace);
      unsigned int AXISCALL GetElementAsUnsignedInt(const AxisChar* pName, const AxisChar* pNamespace);
      short AXISCALL GetElementAsShort(const AxisChar* pName, const AxisChar* pNamespace);
      unsigned short AXISCALL GetElementAsUnsignedShort(const AxisChar* pName, const AxisChar* pNamespace);
      char AXISCALL GetElementAsByte(const AxisChar* pName, const AxisChar* pNamespace);
      unsigned char AXISCALL GetElementAsUnsignedByte(const AxisChar* pName, const AxisChar* pNamespace);
      long AXISCALL GetElementAsLong(const AxisChar* pName, const AxisChar* pNamespace);
      long AXISCALL GetElementAsInteger(const AxisChar* pName, const AxisChar* pNamespace);
      unsigned long AXISCALL GetElementAsUnsignedLong(const AxisChar* pName, const AxisChar* pNamespace);
  	float AXISCALL GetElementAsFloat(const AxisChar* pName, const AxisChar* pNamespace);
      double AXISCALL GetElementAsDouble(const AxisChar* pName, const AxisChar* pNamespace);
      double AXISCALL GetElementAsDecimal(const AxisChar* pName, const AxisChar* pNamespace);
  	AxisChar* AXISCALL GetElementAsString(const AxisChar* pName, const AxisChar* pNamespace);
      AxisChar* AXISCALL GetElementAsAnyURI(const AxisChar* pName, const AxisChar* pNamespace);
      AxisChar* AXISCALL GetElementAsQName(const AxisChar* pName, const AxisChar* pNamespace);
  	xsd__hexBinary AXISCALL GetElementAsHexBinary(const AxisChar* pName, const AxisChar* pNamespace);
  	xsd__base64Binary AXISCALL GetElementAsBase64Binary(const AxisChar* pName, const AxisChar* pNamespace);
      struct tm AXISCALL GetElementAsDateTime(const AxisChar* pName, const AxisChar* pNamespace);
      struct tm AXISCALL GetElementAsDate(const AxisChar* pName, const AxisChar* pNamespace);
      struct tm AXISCALL GetElementAsTime(const AxisChar* pName, const AxisChar* pNamespace);
      long AXISCALL GetElementAsDuration(const AxisChar* pName, const AxisChar* pNamespace);
  
  	/* Methods used by stubs to get a deserialized value of a XML attribute as basic types */
  	int AXISCALL GetAttributeAsInt(const AxisChar* pName, const AxisChar* pNamespace);
  	xsd__boolean AXISCALL GetAttributeAsBoolean(const AxisChar* pName, const AxisChar* pNamespace);
      unsigned int AXISCALL GetAttributeAsUnsignedInt(const AxisChar* pName, const AxisChar* pNamespace);
      short AXISCALL GetAttributeAsShort(const AxisChar* pName, const AxisChar* pNamespace);
      unsigned short AXISCALL GetAttributeAsUnsignedShort(const AxisChar* pName, const AxisChar* pNamespace);
      char AXISCALL GetAttributeAsByte(const AxisChar* pName, const AxisChar* pNamespace);
      unsigned char AXISCALL GetAttributeAsUnsignedByte(const AxisChar* pName, const AxisChar* pNamespace);
      long AXISCALL GetAttributeAsLong(const AxisChar* pName, const AxisChar* pNamespace);
      long AXISCALL GetAttributeAsInteger(const AxisChar* pName, const AxisChar* pNamespace);
      unsigned long AXISCALL GetAttributeAsUnsignedLong(const AxisChar* pName, const AxisChar* pNamespace);
  	float AXISCALL GetAttributeAsFloat(const AxisChar* pName, const AxisChar* pNamespace);
      double AXISCALL GetAttributeAsDouble(const AxisChar* pName, const AxisChar* pNamespace);
      double AXISCALL GetAttributeAsDecimal(const AxisChar* pName, const AxisChar* pNamespace);
  	AxisChar* AXISCALL GetAttributeAsString(const AxisChar* pName, const AxisChar* pNamespace);
      AxisChar* AXISCALL GetAttributeAsAnyURI(const AxisChar* pName, const AxisChar* pNamespace);
      AxisChar* AXISCALL GetAttributeAsQName(const AxisChar* pName, const AxisChar* pNamespace);
  	xsd__hexBinary AXISCALL GetAttributeAsHexBinary(const AxisChar* pName, const AxisChar* pNamespace);
  	xsd__base64Binary AXISCALL GetAttributeAsBase64Binary(const AxisChar* pName, const AxisChar* pNamespace);
      struct tm AXISCALL GetAttributeAsDateTime(const AxisChar* pName, const AxisChar* pNamespace);
      struct tm AXISCALL GetAttributeAsDate(const AxisChar* pName, const AxisChar* pNamespace);
      struct tm AXISCALL GetAttributeAsTime(const AxisChar* pName, const AxisChar* pNamespace);
      long AXISCALL GetAttributeAsDuration(const AxisChar* pName, const AxisChar* pNamespace);
  
  	/* Method used by stubs to get a deserialized value of complex types */
  	void* AXISCALL GetCmplxObject(void* pDZFunct, void* pCreFunct, void* pDelFunct, const AxisChar* pName, const AxisChar* pNamespace);
  	/* Method used by stubs to get a deserialized Array of complex types */
  	Axis_Array AXISCALL GetCmplxArray(void* pDZFunct, void* pCreFunct, void* pDelFunct, void* pSizeFunct, const AxisChar* pName, const AxisChar* pNamespace);
  	/* Method used by stubs to get a deserialized Array of basic types */
  	Axis_Array AXISCALL GetBasicArray(XSDTYPE nType, const AxisChar* pName, const AxisChar* pNamespace);
  
  	int AXISCALL CheckMessage(const AxisChar* pName, const AxisChar* pNamespace);
  private:
  	int OpenConnection(bool secure);
  	void CloseConnection();
  	int MakeArray();
  
  private:
  	ClientAxisEngine* m_pAxisEngine;
  	/* 
  	   Following are pointers to relevant objects of the ClientAxisEngine instance 
  	   So they do not belong to this object and are not created or deleted 
  	 */
  	MessageData* m_pMsgData;
  	SoapSerializer* m_pIWSSZ;
  	SoapDeSerializer* m_pIWSDZ;
  	/* 
  	   m_Soap contains transport related information and function pointers to manipulate
  	   transport layer.
  	 */
  	Ax_soapstream m_Soap;
  	/*
  	   Transport object
  	 */
  	AxisTransport* m_pTransport;
  };
  #endif
  
  typedef struct { 
  	void* _object; /* this will be C++ Call Object */
  	CallFunctions* _functions; /* this is the static function table */
  } Call_C;
  
  #ifdef __cplusplus
  extern "C" { 
  #endif
  void* GetStubObject(AXIS_PROTOCOL_TYPE nProtocol, AxisChar* pchEndpointURI); 
  void DestroyStubObject(void* pCall); 
  #ifdef __cplusplus
  } 
  #endif
  
  #ifndef __cplusplus
  typedef Call_C Call; 
  #endif
  
  #endif /* !defined(AFX_CALL_H__D13E5626_0A9B_43EA_B606_364B98CEDAA8__INCLUDED_)*/
  
  
  
  1.1                  ws-axis/c/include/client/transport/AxisTransport.h
  
  Index: AxisTransport.h
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2003 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "SOAP" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   *
   *
   * @author Damitha Kumarage (damitha@opensource.lk)
   * @author Susantha Kumara (susantha@opensource.lk, skumara@virtusa.com)
   *
   */
  
  #if !defined(_AXIS_AXIS_TRANSPORT_HPP)
  #define _AXIS_AXIS_TRANSPORT_HPP
  
  #include <axis/common/Packet.h>
  #include "axis/Sender.hpp"
  #include "axis/Receiver.hpp"
  
  class AxisTransport
  {
  public:
      AxisTransport(Ax_soapstream* pSoap);
      virtual ~AxisTransport();
  
      int OpenConnection(bool secure);
      void CloseConnection();
  	AXIS_TRANSPORT_STATUS Send_bytes(const char* pSendBuffer, const void* bufferid, const void* pSStream);
  	AXIS_TRANSPORT_STATUS Get_bytes(const char** res, int* retsize, const void* pSStream);
      void SetTransportInformation(AXIS_TRANSPORT_INFORMATION_TYPE type, const char* value, const void* pSStream);
  
  	static AXIS_TRANSPORT_STATUS AXISCALL s_Send_bytes(const char* pSendBuffer, const void* bufferid, const void* pSStream);
  	static AXIS_TRANSPORT_STATUS AXISCALL s_Get_bytes(const char** res, int* retsize, const void* pSStream);
      static void AXISCALL s_SetTransportInformation(AXIS_TRANSPORT_INFORMATION_TYPE type, const char* value, const void* pSStream);
      static const char* AXISCALL s_ReceiveTransportInformation(AXIS_TRANSPORT_INFORMATION_TYPE type, const void* pSStream);
  	static void AXISCALL s_ReleaseReceiveBuffer(const char* buffer, const void* pSStream);
  
  private:
      Transport* m_pHttpTransport;
      Sender* m_pSender;
      Receiver* m_pReceiver;
      Ax_soapstream* m_pSoap;
  	sendbuffers m_SendBuffers[NO_OF_SERIALIZE_BUFFERS]; /* Accumulates the serialized buffers to be transported */
  };
  
  #endif
  
      
  
  
  
  1.1                  ws-axis/c/include/client/transport/axis/Channel.hpp
  
  Index: Channel.hpp
  ===================================================================
  /* -*- C++ -*- */
  
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "SOAP" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   *
   *
   * @author Lilantha Darshana (lilantha@virtusa.com)
   * @author Damitha Kumarage (damitha@jkcsworld.com, damitha@opensource.lk)
   *
   */
  
  #if !defined(_AXIS_CHANNEL_HPP)
  #define _AXIS_CHANNEL_HPP
  
  #include <string>
  #include "Transport.hpp"
  
  // platform specific stuff
  
  #ifdef WIN32
  
  #include <winsock2.h>
  
  // what version of WinSock is required
  const int	WS_VERSION_REQD	= 0x0101;
  
  // macros to get version major & minor
  inline WS_VERSION_MAJOR() {return HIBYTE(WS_VERSION_REQD);}
  inline WS_VERSION_MINOR() {return LOBYTE(WS_VERSION_REQD);}
  
  
  #else
  
  #include	<unistd.h>
  #include	<sys/types.h>	// basic system data types 
  #include	<sys/socket.h>	// basic socket definitions
  #include	<fcntl.h>		// for nonblocking if need
  #include	<netdb.h>
  #include 	<netinet/in.h>
  #include	<arpa/inet.h>	// inet(3) functions
  
  const unsigned int INVALID_SOCKET =  0;
  const int		   SOCKET_ERROR   = -1;
  
  // Other OS specific stuff goes here
  
  
  
  #endif
  
  
  /**
   *
   * Implements primitive socket exceptions that should be handle by the transport
   * that the SOAP message is carring
   *	
   * @brief     The primitive socket exception for tranport layer to handle.
   *
   */
  
  class ChannelException
  {
  	public:
  		/// Create with a possible cause of the exception
  		ChannelException(std::string p_Err){m_Error = p_Err;}
  		~ChannelException(){}
  
  		/// Return the cause of exception
  		const std::string& GetErr(){return m_Error;}
  
  	private:
  
  		std::string m_Error;  ///< cause of exception 
  };
  
  /**
   * 
   * Implements primitive socket connection for all platforms, for sending/receiving
   * SOAP Envelops with given transport; This implementation abstract the low-level
   * communications.
   *	
   * @brief     The primitive socket implementation for SOAP Envelops passing.
   *
   */
  
  class Channel  
  {
  public:
  	Channel();
  	virtual ~Channel();
  
  	/// Open a socket to a given remote node/server address with remote port
  	virtual bool  Open(std::string& p_RemoteNode, unsigned short p_RemoteEnd) throw (ChannelException);
  
  	/// Close all open sockets and clean up
  	virtual void  Close(){CloseChannel();}
  
  	/// Read from a open socket and store read message in msg
  	virtual const Channel& operator >> (std::string& msg);
  	
  	/// Write a given message (msg) to the end-point using the open socket
  	virtual const Channel& operator << (const char* msg);
  	
  	/// Return last error (if any).
  	virtual const std::string& GetLastError(){return m_LastErr;}
  
  	/// Set the SOAP transport handler.
  	virtual void SetTransportHandler(Transport* transport){m_pTransportHandler = transport;}
  
  protected:
  	/// OS specific initilization
  	virtual bool Init();
  
  	/// Report error on read/write
  	virtual void Error(const char * err);
  
  	/// Close & clean-up the open socket/system resources
  	virtual void CloseChannel();
  
  	unsigned int	m_Sock;				///< Socket descriptor
  	std::string		m_RemoteNode;		///< Remote address could be IP/host-name
  	unsigned short	m_RemoteEnd;		///< Remote port number
  	std::string		m_LastErr;			///< Last error as a string
  
  	Transport	* m_pTransportHandler;	///< Transport handler for validation purpose
  };
  
  
  
  
  #endif // _AXIS_CHANNEL_HPP
  
  
  
  
  
  1.1                  ws-axis/c/include/client/transport/axis/HttpTransport.hpp
  
  Index: HttpTransport.hpp
  ===================================================================
  /* -*- C++ -*- */
  
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "SOAP" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   *
   *
   * @author Lilantha Darshana (lilantha@virtusa.com)
   * @author Damitha Kumarage (damitha@jkcsworld.com, damitha@opensource.lk)
   * @author Susantha Kumara (susantha@opensource.lk, skumara@virtusa.com)
   *
   */
  
  
  #if !defined(_AXIS_HTTPTRANSPORT_HPP)
  #define _AXIS_HTTPTRANSPORT_HPP
  
  #include <sstream>
  #include <string>
  #include <vector>
  #include "Transport.hpp"
  #include "Channel.hpp"
  #ifdef _SSL_ENABLED_
      #include "SecureChannel.hpp"
  #endif
  
  /**
   * 
   * Implements HTTP transport as SOAP-Envelop carrier, for sending/receiving
   * SOAP messages with HTTP 1.1/1.0; This implementation abstract the Transport layer for the
   * SOAP payloads
   *	
   * @brief     The HTTP transport implementation for SOAP 
   *
   */
  
  
  
  class HttpTransport  : public Transport
  {
  public:
  	/// HTTP category, Only POST is used currently, MPOST is not supported yet
  	enum Type{POST, MPOST};
  
  	/// Create HTTP transport with provided URL as remote address, set HTTP category default to POST
  	//HttpTransport(Url url) : m_Typ(POST) {m_Url = url; m_IsHttpHeader = 0; m_HttpBindDone = false;}
  
  	/// Create HTTP transport with provided remote address as URL-string, set HTTP category default to POST
  	//HttpTransport(std::string& strUrl) : m_Typ(POST) {m_Url = Url(strUrl); m_IsHttpHeader = 0;m_strUrl = strUrl; m_HttpBindDone = false;}
  	~HttpTransport();
  
      HttpTransport(std::string& strUrl, bool secure);
      
      HttpTransport(Url url, bool secure);
  
  	/// Initialize HTTP transport by establishing a channel to the remote end.
  	bool  Init();
  
  	/* Finish using this transport and close channel */
  	void Fini();
  
  	/// Obtain the status of the HTTP packet validity
  	bool  GetStatus(const std::string& p_HttpPacket);
  
  	/// Set properties of HTTP transport such as additional Header fields like SOAPAction.
  	void  SetProperty(const char* p_Property, const char* p_Value);
  
  	/// Read from a HTTP transport handler and store read payload
  	const Transport& operator >> (const char** pPayload);
  
  	/// Write a given payload by using HTTP transport as carrier
  	const Transport& operator << (const char* p_Payload);
      int getBodyLength();
      void setBodyLength(int bodyLength);
      int getIsHttpHeader();
  
  private:
  	/// Build a HTTP packet with a given payload & additional HTTP properties
  	void HTTPBind();
  
  	/// Validate HTTP packets received from the channel.
  	void HTTPValidate(const std::string& p_HttpPacket);
  
  	/// Extract payload from the HTTP packet starting from a given offset
  	void GetPayLoad(const std::string& p_HttpPacket, std::string::size_type& offset);
  
  	/// Report error on read/write
  	void Error(const char * err);
  
      void ClearAdditionalHeaders();
  
  private:
  
  	typedef std::vector< std::pair<std::string, std::string> > Header_t;
  
  	Type m_Typ;						///< Type of the HTTP; POST or MPOST
  
  	std::string m_OutHttpHeaders;	///< Holds	outgoing HTTP packet
  	std::istringstream m_InMsg;		///< Holds	incoming HTTP packet
  
  	std::string m_PayLoad;			///< Holds the payload
  	Header_t	m_AdditionalHeader; ///< Additional Header fields as name value pairs
  private:
  	Channel* m_Channel;
  	bool m_HttpBindDone;
      int m_IsHttpHeader;
      std::string m_sHeader;
      int m_intBodyLength;
      bool m_Secure;
  };
  
  #endif //_AXIS_HTTPTRANSPORT_HPP
  
  
  
  
  1.1                  ws-axis/c/include/client/transport/axis/Platform.hpp
  
  Index: Platform.hpp
  ===================================================================
  /* -*- C++ -*- */
  
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "SOAP" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   *
   * @author Lilantha Darshana (lilantha@erunway.com)
   *
   */
  
  
  #if !defined(_AXIS_STDAFX_H)
  #define _AXIS_STDAFX_H
  
  
  #ifdef WIN32
  
  #if _MSC_VER > 1000
  #pragma once
  #endif // _MSC_VER > 1000
  
  #define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
  
  #pragma warning ( disable : 4786 )
  
  
  //#include <afx.h>
  //#include <afxwin.h>
  
  #ifdef AXIS_EXPORTS
  #define AXIS_API __declspec(dllexport)
  #else
  #define AXIS_API __declspec(dllimport)
  #endif
  
  
  #else // WIN32
  
  #define AXIS_API
  #include <unistd.h>
  // other OS specific stuff goes here
  
  #endif
  
  #if defined(_DEBUG)
  #	include <iostream>
  #	define DebugMsg(x)	std::cout << x <<std::endl;
  #else
  #	define DebugMsg(x)
  #endif
  
  #endif // _AXIS_STDAFX_H
  
  
  
  
  
  
  
  1.1                  ws-axis/c/include/client/transport/axis/Receiver.hpp
  
  Index: Receiver.hpp
  ===================================================================
  /* -*- C++ -*- */
  
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "SOAP" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   *
   *
   * @author Lilantha Darshana (lilantha@virtusa.com)
   * @author Damitha Kumarage (damitha@jkcsworld.com, damitha@opensource.lk)
   *
   */
  
  
  #if !defined(_AXIS_RECEIVER_HPP)
  #define _AXIS_RECEIVER_HPP
  
  #include <axis/common/AxisException.h>
  
  #include "Transport.hpp"
  
  class Receiver  
  {
  public:
  	Receiver(Transport *pTr) : m_pMsg(NULL), m_MsgSize(0), m_BytesRead(0), m_pTrChannel(pTr){}
  	~Receiver();
  
  	const char* Recv() throw (AxisException);
      int getBytesRead();
  
  private:
  	const char* m_pMsg;
  
  	Transport *m_pTrChannel;
  
  	unsigned int m_RecvPort;
  
      int m_MsgSize;
      int m_BytesRead;
  };
  
  #endif // _AXIS_RECEIVER_HPP
  
  
  
  
  
  1.1                  ws-axis/c/include/client/transport/axis/SecureChannel.hpp
  
  Index: SecureChannel.hpp
  ===================================================================
  /* -*- C++ -*- */
  
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "SOAP" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   *
   *
   * @author 
  
   *
   */
  
  
  #if !defined(_AXIS_SECURECHANNEL_HPP)
  #define _AXIS_SECURECHANNEL_HPP
  
  #include <axis/common/AxisException.h>
  #include "Channel.hpp"
  #include <openssl/ssl.h>
  #include <openssl/err.h>
  
  
  class SecureChannel : public Channel
  {
      public:
      SecureChannel();
      virtual ~SecureChannel();
      bool Open(std::string& p_RemoteNode, unsigned short p_RemoteEnd) throw (ChannelException);
      const Channel& operator << (const std::string& msg);
      const Channel& operator >> (std::string& msg);
      	/// Return last error (if any).
  	const std::string& GetLastError(){return m_LastErr;}
  
  	/// Set the SOAP transport handler.
  	void SetTransportHandler(Transport* transport){m_pTransportHandler = transport;}
      void CloseChannel();
      
      private:
      bool Init();
      void Error(const char * err);
  
      //unsigned int	m_Sock;				///< Socket descriptor
      //std::string		m_RemoteNode;		///< Remote address could be IP/host-name
      //unsigned short	m_RemoteEnd;		///< Remote port number
      //std::string		m_LastErr;			///< Last error as a string
      //Transport	* m_pTransportHandler;	///< Transport handler for validation purpose
      SSL_CTX* m_sslContext;
      SSL* m_sslHandle;
  
  };    
  
  #endif // _AXIS_SECURECHANNEL_HPP
  
  
  
  1.1                  ws-axis/c/include/client/transport/axis/Sender.hpp
  
  Index: Sender.hpp
  ===================================================================
  /* -*- C++ -*- */
  
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "SOAP" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   *
   *
   * @author Lilantha Darshana (lilantha@virtusa.com)
   * @author Susantha Kumara (susantha@opensource.lk, skumara@virtusa.com)
   *
   */
  
  
  #if !defined(_AXIS_SENDER_HPP)
  #define _AXIS_SENDER_HPP
  
  #include "../../../common/AxisException.h"
  
  #include "Transport.hpp"
  
  class Sender  
  {
  	public:
  		Sender(Transport *pTr);
  		~Sender();
  	
  		bool Send(const char* what) throw (AxisException);
  		void SetProperty(const char* sProperty, const char* sValue);
          void ClearAdditionalHeaders();
  
  	private:
  		Transport	*m_pTrChannel;
  };
  
  #endif // _AXIS_SENDER_HPP
  
  
  
  
  1.1                  ws-axis/c/include/client/transport/axis/Transport.hpp
  
  Index: Transport.hpp
  ===================================================================
  /* -*- C++ -*- */
  
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "SOAP" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   *
   *
   * @author Lilantha Darshana (lilantha@virtusa.com)
   *
   */
  
  
  
  #if !defined(_AXIS_TRANSPORT_HPP)
  #define _AXIS_TRANSPORT_HPP
  
  #include "Url.hpp"
  	
  /**
   * 
   *	Implements Transport as SOAP-Envelop carrier, for sending/receiving
   *	SOAP Envelops with any protocol; This implementation abstract the 
   *	Transport layer for the SOAP payloads
   *	
   *	@brief     The Transport interface for SOAP envelop carrier 
   *
   */
  
  class Transport  
  {
  public:
  	Transport();
  	virtual ~Transport();
  
  	virtual bool Init() { return false;}	  // Initialize transport channel
  	virtual void Fini(){};
  	virtual bool GetStatus(const std::string& payload){return m_bStatus;}
  	virtual void SetProperty(const char* p_Property, const char* p_Value)=0;
  
  
  	virtual const Transport& operator >> (const char** pMsg){*pMsg=NULL;return *this;}
  	virtual const Transport& operator << (const char* msg)=0;
      virtual void ClearAdditionalHeaders(){};
      virtual int getBodyLength() = 0;
      virtual void setBodyLength(int bodyLength) = 0;
      virtual int getIsHttpHeader() = 0;
  
  
  protected:
  
  	Url m_Url;
  	std::string m_strUrl;           
  	bool m_bStatus;
  
  };
  
  #endif // _AXIS_TRANSPORT_HPP
  
  
  
  
  
  1.1                  ws-axis/c/include/client/transport/axis/TransportFactory.hpp
  
  Index: TransportFactory.hpp
  ===================================================================
  /* -*- C++ -*- */
  
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "SOAP" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   *
   *
   * @author Lilantha Darshana (lilantha@virtusa.com)
   *
   */
  
  
  #if !defined(_AXIS_TRANSPORTFACTORY_HPP)
  #define _AXIS_TRANSPORTFACTORY_HPP
  
  
  /**
   *	Create undeline transport for SOAP-Envelops carrier for a given URL
   *	URL determine which transport to be instantiated for carring SOAP
   *	Envelop.
   *
   *	@todo	Hope this require of creating Transport by specifing a property
   *			such as name; not just the URL.
   *	@brief  The Transport Factory to instantiate a Tranport for SOAP envelop carring
   *
   */
  
  #include "Transport.hpp"
  
  class TransportFactory  
  {
  private:
  	TransportFactory(){};
  	virtual ~TransportFactory(){};
  public:
  	static Transport* GetTransport(Url& url, bool secure); // return transport object according to URL info
  };
  
  #endif // _AXIS_TRANSPORTFACTORY_HPP
  
  
  
  
  
  1.1                  ws-axis/c/include/client/transport/axis/Url.hpp
  
  Index: Url.hpp
  ===================================================================
  /* -*- C++ -*- */
  
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "SOAP" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  /*
   *
   *
   * @author Lilantha Darshana (lilantha@virtusa.com)
   *
   */
  
  
  #if !defined(_AXIS_URL_HPP)
  #define _AXIS_URL_HPP
  
  #include <string>
  
  // Welknown ports
  const unsigned short HTTP_PORT  = 80;	
  const unsigned short HTTPS_PORT = 443;
  const unsigned short FTP_PORT   = 21;
  
  
  /**
   *	Implementation of URL to manupulate URLs.  
   *
   *	This implementation only supports subset of a URL
   *	note that # references, userinfo query string 
   *	processing are not supported for this version.
   *
   *	URLs are of the form:
   * 
   *	URL			  = protocol "://" server "/" [path]["?" query]
   *	server        = [userinfo "@"] hostname-port
   *	hostname-port = hostname [ ":" port ]
   *	userinfo	  = user[:password]
   *
   *
   *	@brief	Manupulate URLs
   */
  
  
  class Url  
  {
  public:
  
  	enum Protocol { http, https, ftp, file, unknown}; // for our purpose currently we need
  													  // http, https only. This is provided
  													  // To make extensible to
  													  // support other transports for RPC
  													  // but file????, yes we may require 
  													  // pipes; with web-service????
  
  public:
  	Url();
  	Url(std::string url);
  	~Url();
  
  	void SetProtocol(std::string prot);
  	void SetProtocol(Protocol prot){m_Protocol = prot;}
  	void SetHostName(std::string host){m_Host= host;}
  	void SetResource(std::string path){m_Path = path;}
  	void SetPort(unsigned short port){m_Port = port;}
  
  	Protocol	GetProtocol(){return m_Protocol;}
  	std::string GetHostName(){return m_Host;}
  	std::string GetResource(){return m_Path;}
  
  	unsigned short GetPort(){return m_Port;}
  
  	// other functions are not supported yet
  
  private:
  
  	void ParseURL(std::string& url);
  	
  	Protocol		m_Protocol;
  	std::string		m_Host;
  	unsigned short  m_Port;
  	std::string		m_Path;
  	std::string		m_Query;
  
      std::string m_Password;
      std::string m_User;
      std::string m_URL;
  };
  
  #endif // _AXIS_URL_HPP