/* IAGWMMScapServiceSoapBindingService.cpp
   Generated by gSOAP 2.8.6 from IagwMms.h

Copyright(C) 2000-2011, Robert van Engelen, Genivia Inc. All Rights Reserved.
The generated code is released under one of the following licenses:
1) GPL or 2) Genivia's license for commercial use.
This program is released under the GPL with the additional exemption that
compiling, linking, and/or using OpenSSL is allowed.
*/

#include "IAGWMMScapServiceSoapBindingService.h"

namespace IAGWMMS {

capServiceSoapBindingService::capServiceSoapBindingService()
{	capServiceSoapBindingService_init(SOAP_IO_DEFAULT, SOAP_IO_DEFAULT);
}

capServiceSoapBindingService::capServiceSoapBindingService(const struct soap &_soap) : soap(_soap)
{ }

capServiceSoapBindingService::capServiceSoapBindingService(soap_mode iomode)
{	capServiceSoapBindingService_init(iomode, iomode);
}

capServiceSoapBindingService::capServiceSoapBindingService(soap_mode imode, soap_mode omode)
{	capServiceSoapBindingService_init(imode, omode);
}

capServiceSoapBindingService::~capServiceSoapBindingService()
{ }

void capServiceSoapBindingService::capServiceSoapBindingService_init(soap_mode imode, soap_mode omode)
{	soap_imode(this, imode);
	soap_omode(this, omode);
	static const struct Namespace namespaces[] =
{
	{"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL},
	{"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL},
	{"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL},
	{"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL},
	{"ns1", "http://www.bnet.cn/v3.0/", NULL, NULL},
	{NULL, NULL, NULL, NULL}
};
	soap_set_namespaces(this, namespaces);
};

void capServiceSoapBindingService::destroy()
{	soap_destroy(this);
	soap_end(this);
}

#ifndef WITH_PURE_VIRTUAL
capServiceSoapBindingService *capServiceSoapBindingService::copy()
{	capServiceSoapBindingService *dup = SOAP_NEW_COPY(capServiceSoapBindingService(*(struct soap*)this));
	return dup;
}
#endif

int capServiceSoapBindingService::soap_close_socket()
{	return soap_closesock(this);
}

int capServiceSoapBindingService::soap_force_close_socket()
{	return soap_force_closesock(this);
}

int capServiceSoapBindingService::soap_senderfault(const char *string, const char *detailXML)
{	return ::soap_sender_fault(this, string, detailXML);
}

int capServiceSoapBindingService::soap_senderfault(const char *subcodeQName, const char *string, const char *detailXML)
{	return ::soap_sender_fault_subcode(this, subcodeQName, string, detailXML);
}

int capServiceSoapBindingService::soap_receiverfault(const char *string, const char *detailXML)
{	return ::soap_receiver_fault(this, string, detailXML);
}

int capServiceSoapBindingService::soap_receiverfault(const char *subcodeQName, const char *string, const char *detailXML)
{	return ::soap_receiver_fault_subcode(this, subcodeQName, string, detailXML);
}

void capServiceSoapBindingService::soap_print_fault(FILE *fd)
{	::soap_print_fault(this, fd);
}

#ifndef WITH_LEAN
#ifndef WITH_COMPAT
void capServiceSoapBindingService::soap_stream_fault(std::ostream& os)
{	::soap_stream_fault(this, os);
}
#endif

char *capServiceSoapBindingService::soap_sprint_fault(char *buf, size_t len)
{	return ::soap_sprint_fault(this, buf, len);
}
#endif

void capServiceSoapBindingService::soap_noheader()
{	this->header = NULL;
}

const SOAP_ENV__Header *capServiceSoapBindingService::soap_header()
{	return this->header;
}

int capServiceSoapBindingService::run(int port)
{	if (soap_valid_socket(bind(NULL, port, 100)))
	{	for (;;)
		{	if (!soap_valid_socket(accept()) || serve())
				return this->error;
			soap_destroy(this);
			soap_end(this);
		}
	}
	else
		return this->error;
	return SOAP_OK;
}

SOAP_SOCKET capServiceSoapBindingService::bind(const char *host, int port, int backlog)
{	return soap_bind(this, host, port, backlog);
}

SOAP_SOCKET capServiceSoapBindingService::accept()
{	return soap_accept(this);
}

int capServiceSoapBindingService::serve()
{
#ifndef WITH_FASTCGI
	unsigned int k = this->max_keep_alive;
#endif
	do
	{

#ifndef WITH_FASTCGI
		if (this->max_keep_alive > 0 && !--k)
			this->keep_alive = 0;
#endif

		if (soap_begin_serve(this))
		{	if (this->error >= SOAP_STOP)
				continue;
			return this->error;
		}
		if (dispatch() || (this->fserveloop && this->fserveloop(this)))
		{
#ifdef WITH_FASTCGI
			soap_send_fault(this);
#else
			return soap_send_fault(this);
#endif
		}

#ifdef WITH_FASTCGI
		soap_destroy(this);
		soap_end(this);
	} while (1);
#else
	} while (this->keep_alive);
#endif
	return SOAP_OK;
}

static int serve___ns1__ExecuteInvoke(capServiceSoapBindingService*);
static int serve___ns1__EncodeString(capServiceSoapBindingService*);

int capServiceSoapBindingService::dispatch()
{	soap_peek_element(this);
	if (!soap_match_tag(this, this->tag, "ns1:reqXml"))
		return serve___ns1__ExecuteInvoke(this);
	if (!soap_match_tag(this, this->tag, "ns1:decode"))
		return serve___ns1__EncodeString(this);
	return this->error = SOAP_NO_METHOD;
}

static int serve___ns1__ExecuteInvoke(capServiceSoapBindingService *soap)
{	struct __ns1__ExecuteInvoke soap_tmp___ns1__ExecuteInvoke;
	struct __ns1__ExecuteInvokeResponse soap_tmp___ns1__ExecuteInvokeResponse;
	soap_default___ns1__ExecuteInvokeResponse(soap, &soap_tmp___ns1__ExecuteInvokeResponse);
	soap_default___ns1__ExecuteInvoke(soap, &soap_tmp___ns1__ExecuteInvoke);
	soap->encodingStyle = NULL;
	if (!soap_get___ns1__ExecuteInvoke(soap, &soap_tmp___ns1__ExecuteInvoke, "-ns1:ExecuteInvoke", NULL))
		return soap->error;
	if (soap_body_end_in(soap)
	 || soap_envelope_end_in(soap)
	 || soap_end_recv(soap))
		return soap->error;
	soap->error = soap->ExecuteInvoke(soap_tmp___ns1__ExecuteInvoke.ns1__reqXml, soap_tmp___ns1__ExecuteInvokeResponse.ns1__ExecuteInvokeReturn);
	if (soap->error)
		return soap->error;
	soap_serializeheader(soap);
	soap_serialize___ns1__ExecuteInvokeResponse(soap, &soap_tmp___ns1__ExecuteInvokeResponse);
	if (soap_begin_count(soap))
		return soap->error;
	if (soap->mode & SOAP_IO_LENGTH)
	{	if (soap_envelope_begin_out(soap)
		 || soap_putheader(soap)
		 || soap_body_begin_out(soap)
		 || soap_put___ns1__ExecuteInvokeResponse(soap, &soap_tmp___ns1__ExecuteInvokeResponse, "-ns1:ExecuteInvokeResponse", NULL)
		 || soap_body_end_out(soap)
		 || soap_envelope_end_out(soap))
			 return soap->error;
	};
	if (soap_end_count(soap)
	 || soap_response(soap, SOAP_OK)
	 || soap_envelope_begin_out(soap)
	 || soap_putheader(soap)
	 || soap_body_begin_out(soap)
	 || soap_put___ns1__ExecuteInvokeResponse(soap, &soap_tmp___ns1__ExecuteInvokeResponse, "-ns1:ExecuteInvokeResponse", NULL)
	 || soap_body_end_out(soap)
	 || soap_envelope_end_out(soap)
	 || soap_end_send(soap))
		return soap->error;
	return soap_closesock(soap);
}

static int serve___ns1__EncodeString(capServiceSoapBindingService *soap)
{	struct __ns1__EncodeString soap_tmp___ns1__EncodeString;
	struct __ns1__EncodeStringResponse soap_tmp___ns1__EncodeStringResponse;
	soap_default___ns1__EncodeStringResponse(soap, &soap_tmp___ns1__EncodeStringResponse);
	soap_default___ns1__EncodeString(soap, &soap_tmp___ns1__EncodeString);
	soap->encodingStyle = NULL;
	if (!soap_get___ns1__EncodeString(soap, &soap_tmp___ns1__EncodeString, "-ns1:EncodeString", NULL))
		return soap->error;
	if (soap_body_end_in(soap)
	 || soap_envelope_end_in(soap)
	 || soap_end_recv(soap))
		return soap->error;
	soap->error = soap->EncodeString(soap_tmp___ns1__EncodeString.ns1__decode, soap_tmp___ns1__EncodeStringResponse.ns1__EncodeStringReturn);
	if (soap->error)
		return soap->error;
	soap_serializeheader(soap);
	soap_serialize___ns1__EncodeStringResponse(soap, &soap_tmp___ns1__EncodeStringResponse);
	if (soap_begin_count(soap))
		return soap->error;
	if (soap->mode & SOAP_IO_LENGTH)
	{	if (soap_envelope_begin_out(soap)
		 || soap_putheader(soap)
		 || soap_body_begin_out(soap)
		 || soap_put___ns1__EncodeStringResponse(soap, &soap_tmp___ns1__EncodeStringResponse, "-ns1:EncodeStringResponse", NULL)
		 || soap_body_end_out(soap)
		 || soap_envelope_end_out(soap))
			 return soap->error;
	};
	if (soap_end_count(soap)
	 || soap_response(soap, SOAP_OK)
	 || soap_envelope_begin_out(soap)
	 || soap_putheader(soap)
	 || soap_body_begin_out(soap)
	 || soap_put___ns1__EncodeStringResponse(soap, &soap_tmp___ns1__EncodeStringResponse, "-ns1:EncodeStringResponse", NULL)
	 || soap_body_end_out(soap)
	 || soap_envelope_end_out(soap)
	 || soap_end_send(soap))
		return soap->error;
	return soap_closesock(soap);
}

} // namespace IAGWMMS

/* End of server object code */