changeset 13637:739a180bd323

2111 begone, pkcs11_kms! Reviewed by: Alexander Eremin <alexander.eremin@nexenta.com> Reviewed by: Jason King <jason.brian.king@gmail.com> Reviewed by: Garrett D'Amore <garrett@damore.org> Approved by: Richard Lowe <richlowe@richlowe.net>
author Joshua M. Clulow <josh@sysmgr.org>
date Thu, 02 Feb 2012 20:16:51 +1100
parents 776c3d9cae69
children 8dacb0cc3292
files exception_lists/check_rtime exception_lists/copyright exception_lists/cstyle exception_lists/hdrchk exception_lists/packaging usr/src/cmd/cmd-crypto/Makefile usr/src/cmd/cmd-crypto/kmscfg/Makefile usr/src/cmd/cmd-crypto/kmscfg/kmscfg.pl usr/src/lib/Makefile usr/src/lib/libkmsagent/Makefile usr/src/lib/libkmsagent/Makefile.com usr/src/lib/libkmsagent/THIRDPARTYLICENSE usr/src/lib/libkmsagent/THIRDPARTYLICENSE.descrip usr/src/lib/libkmsagent/amd64/Makefile usr/src/lib/libkmsagent/common/ApplianceParameters.h usr/src/lib/libkmsagent/common/AutoMutex.h usr/src/lib/libkmsagent/common/ClientSoapFaultCodes.h usr/src/lib/libkmsagent/common/KMSAgent.cpp usr/src/lib/libkmsagent/common/KMSAgent.h usr/src/lib/libkmsagent/common/KMSAgentAESKeyWrap.h usr/src/lib/libkmsagent/common/KMSAgentChallenge.cpp usr/src/lib/libkmsagent/common/KMSAgentChallenge.h usr/src/lib/libkmsagent/common/KMSAgentCryptoUtilities.cpp usr/src/lib/libkmsagent/common/KMSAgentCryptoUtilities.h usr/src/lib/libkmsagent/common/KMSAgentDataUnitCache.cpp usr/src/lib/libkmsagent/common/KMSAgentDataUnitCache.h usr/src/lib/libkmsagent/common/KMSAgentFatalState.cpp usr/src/lib/libkmsagent/common/KMSAgentKeyCallout.cpp usr/src/lib/libkmsagent/common/KMSAgentKeyCallout.h usr/src/lib/libkmsagent/common/KMSAgentKnownAnswerTests.cpp usr/src/lib/libkmsagent/common/KMSAgentKnownAnswerTests.h usr/src/lib/libkmsagent/common/KMSAgentLoadBalancer.cpp usr/src/lib/libkmsagent/common/KMSAgentLoadBalancer.h usr/src/lib/libkmsagent/common/KMSAgentPKICert.cpp usr/src/lib/libkmsagent/common/KMSAgentPKICertOpenSSL.cpp usr/src/lib/libkmsagent/common/KMSAgentPKICommon.cpp usr/src/lib/libkmsagent/common/KMSAgentPKICommon.h usr/src/lib/libkmsagent/common/KMSAgentPKIKey.cpp usr/src/lib/libkmsagent/common/KMSAgentPKIKeyOpenSSL.cpp usr/src/lib/libkmsagent/common/KMSAgentPKIimpl.h usr/src/lib/libkmsagent/common/KMSAgentSoapUtilities.cpp usr/src/lib/libkmsagent/common/KMSAgentSoapUtilities.h usr/src/lib/libkmsagent/common/KMSAgentStorage.cpp usr/src/lib/libkmsagent/common/KMSAgentStorage.h usr/src/lib/libkmsagent/common/KMSAgentStringUtilities.cpp usr/src/lib/libkmsagent/common/KMSAgentStringUtilities.h usr/src/lib/libkmsagent/common/KMSAgent_direct.h usr/src/lib/libkmsagent/common/KMSAuditLogger.cpp usr/src/lib/libkmsagent/common/KMSAuditLogger.h usr/src/lib/libkmsagent/common/KMSClientProfile.cpp usr/src/lib/libkmsagent/common/KMSClientProfile.h usr/src/lib/libkmsagent/common/KMSClientProfileImpl.h usr/src/lib/libkmsagent/common/SOAP/AgentServiceNamespace.cpp usr/src/lib/libkmsagent/common/SOAP/CAServiceNamespace.cpp usr/src/lib/libkmsagent/common/SOAP/CertificateServiceNamespace.cpp usr/src/lib/libkmsagent/common/SOAP/DiscoveryServiceNamespace.cpp usr/src/lib/libkmsagent/common/SOAP/KMSAgentWebServiceNamespaces.h usr/src/lib/libkmsagent/common/SOAP/KMS_Agent.nsmap usr/src/lib/libkmsagent/common/SOAP/KMS_AgentC.cpp usr/src/lib/libkmsagent/common/SOAP/KMS_AgentClient.cpp usr/src/lib/libkmsagent/common/SOAP/KMS_AgentH.h usr/src/lib/libkmsagent/common/SOAP/KMS_AgentStub.h usr/src/lib/libkmsagent/common/SOAP/KMS_CA.nsmap usr/src/lib/libkmsagent/common/SOAP/KMS_CAC.cpp usr/src/lib/libkmsagent/common/SOAP/KMS_CAClient.cpp usr/src/lib/libkmsagent/common/SOAP/KMS_CAH.h usr/src/lib/libkmsagent/common/SOAP/KMS_CAStub.h usr/src/lib/libkmsagent/common/SOAP/KMS_Certificate.nsmap usr/src/lib/libkmsagent/common/SOAP/KMS_CertificateC.cpp usr/src/lib/libkmsagent/common/SOAP/KMS_CertificateClient.cpp usr/src/lib/libkmsagent/common/SOAP/KMS_CertificateH.h usr/src/lib/libkmsagent/common/SOAP/KMS_CertificateStub.h usr/src/lib/libkmsagent/common/SOAP/KMS_Discovery.nsmap usr/src/lib/libkmsagent/common/SOAP/KMS_DiscoveryC.cpp usr/src/lib/libkmsagent/common/SOAP/KMS_DiscoveryClient.cpp usr/src/lib/libkmsagent/common/SOAP/KMS_DiscoveryH.h usr/src/lib/libkmsagent/common/SOAP/KMS_DiscoveryStub.h usr/src/lib/libkmsagent/common/SOAP/envC.cpp usr/src/lib/libkmsagent/common/SOAP/envH.h usr/src/lib/libkmsagent/common/SOAP/envStub.h usr/src/lib/libkmsagent/common/SOAP/stdsoap2.cpp usr/src/lib/libkmsagent/common/SOAP/stdsoap2.h usr/src/lib/libkmsagent/common/SYSCommon.c usr/src/lib/libkmsagent/common/SYSCommon.h usr/src/lib/libkmsagent/common/ieee80211_crypto.c usr/src/lib/libkmsagent/common/k_setupssl.c usr/src/lib/libkmsagent/common/k_setupssl.h usr/src/lib/libkmsagent/common/mapfile-vers usr/src/lib/libkmsagent/i386/Makefile usr/src/lib/libkmsagent/sparc/Makefile usr/src/lib/libkmsagent/sparcv9/Makefile usr/src/lib/pkcs11/Makefile usr/src/lib/pkcs11/pkcs11_kms/Makefile usr/src/lib/pkcs11/pkcs11_kms/Makefile.com usr/src/lib/pkcs11/pkcs11_kms/amd64/Makefile usr/src/lib/pkcs11/pkcs11_kms/common/kmsAESCrypt.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsAttributeUtil.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsCrypt.h usr/src/lib/pkcs11/pkcs11_kms/common/kmsDecrypt.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsDigest.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsDualCrypt.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsEncrypt.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsGeneral.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsGlobal.h usr/src/lib/pkcs11/pkcs11_kms/common/kmsKeys.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsKeystoreUtil.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsKeystoreUtil.h usr/src/lib/pkcs11/pkcs11_kms/common/kmsObject.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsObject.h usr/src/lib/pkcs11/pkcs11_kms/common/kmsObjectUtil.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsRand.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsSession.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsSession.h usr/src/lib/pkcs11/pkcs11_kms/common/kmsSessionUtil.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsSign.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsSlot.h usr/src/lib/pkcs11/pkcs11_kms/common/kmsSlotToken.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsSlottable.c usr/src/lib/pkcs11/pkcs11_kms/common/kmsVerify.c usr/src/lib/pkcs11/pkcs11_kms/common/mapfile-vers usr/src/lib/pkcs11/pkcs11_kms/i386/Makefile usr/src/lib/pkcs11/pkcs11_kms/sparc/Makefile usr/src/lib/pkcs11/pkcs11_kms/sparcv9/Makefile usr/src/pkg/manifests/system-library-security-crypto-pkcs11_kms.mf
diffstat 124 files changed, 2 insertions(+), 76690 deletions(-) [+]
line wrap: on
line diff
--- a/exception_lists/check_rtime	Sun Mar 11 22:00:47 2012 -0700
+++ b/exception_lists/check_rtime	Thu Feb 02 20:16:51 2012 +1100
@@ -207,9 +207,6 @@
 NOSYMSORT	lib/amd64/libsun_fc\.so\.1			# C++
 NOSYMSORT	lib/sparcv9/libsun_fc\.so\.1 			# C++
 NOSYMSORT	usr/lib/amd64/libfru\.so\.1			# C++
-NOSYMSORT	usr/lib/libkmsagent\.so\.1			# C++
-NOSYMSORT	usr/lib/amd64/libkmsagent\.so\.1		# C++
-NOSYMSORT	usr/lib/sparcv9/libkmsagent\.so\.1		# C++
 
 
 # The libprtdiag_psr.so.1 objects built under usr/src/lib/libprtdiag_psr
--- a/exception_lists/copyright	Sun Mar 11 22:00:47 2012 -0700
+++ b/exception_lists/copyright	Thu Feb 02 20:16:51 2012 +1100
@@ -330,7 +330,6 @@
 usr/src/lib/krb5/ss/options.c
 usr/src/lib/krb5/ss/std_rqs.c
 usr/src/lib/krb5/ss/utils.c
-usr/src/lib/libkmsagent/common/SOAP/*.*
 usr/src/lib/librstp/common/*.[ch]
 usr/src/lib/librstp/common/[CRT]*
 usr/src/uts/intel/nsmb/ioc_check.ref
--- a/exception_lists/cstyle	Sun Mar 11 22:00:47 2012 -0700
+++ b/exception_lists/cstyle	Thu Feb 02 20:16:51 2012 +1100
@@ -860,79 +860,3 @@
 usr/src/uts/intel/sys/acpi/platform/acsolaris.h
 usr/src/uts/intel/sys/acpi/platform/acwin.h
 usr/src/uts/intel/sys/acpi/platform/acwin64.h
-usr/src/lib/libkmsagent/common/ApplianceParameters.h
-usr/src/lib/libkmsagent/common/AutoMutex.h
-usr/src/lib/libkmsagent/common/ClientSoapFaultCodes.h
-usr/src/lib/libkmsagent/common/KMSAgent.cpp
-usr/src/lib/libkmsagent/common/KMSAgent.h
-usr/src/lib/libkmsagent/common/KMSAgentAESKeyWrap.h
-usr/src/lib/libkmsagent/common/KMSAgentChallenge.cpp
-usr/src/lib/libkmsagent/common/KMSAgentChallenge.h
-usr/src/lib/libkmsagent/common/KMSAgentCryptoUtilities.cpp
-usr/src/lib/libkmsagent/common/KMSAgentCryptoUtilities.h
-usr/src/lib/libkmsagent/common/KMSAgentDataUnitCache.cpp
-usr/src/lib/libkmsagent/common/KMSAgentDataUnitCache.h
-usr/src/lib/libkmsagent/common/KMSAgentFatalState.cpp
-usr/src/lib/libkmsagent/common/KMSAgentKeyCallout.cpp
-usr/src/lib/libkmsagent/common/KMSAgentKeyCallout.h
-usr/src/lib/libkmsagent/common/KMSAgentKnownAnswerTests.cpp
-usr/src/lib/libkmsagent/common/KMSAgentKnownAnswerTests.h
-usr/src/lib/libkmsagent/common/KMSAgentLoadBalancer.cpp
-usr/src/lib/libkmsagent/common/KMSAgentLoadBalancer.h
-usr/src/lib/libkmsagent/common/KMSAgentPKICert.cpp
-usr/src/lib/libkmsagent/common/KMSAgentPKICertOpenSSL.cpp
-usr/src/lib/libkmsagent/common/KMSAgentPKICommon.cpp
-usr/src/lib/libkmsagent/common/KMSAgentPKICommon.h
-usr/src/lib/libkmsagent/common/KMSAgentPKIKey.cpp
-usr/src/lib/libkmsagent/common/KMSAgentPKIKeyOpenSSL.cpp
-usr/src/lib/libkmsagent/common/KMSAgentPKIimpl.h
-usr/src/lib/libkmsagent/common/KMSAgentSoapUtilities.cpp
-usr/src/lib/libkmsagent/common/KMSAgentSoapUtilities.h
-usr/src/lib/libkmsagent/common/KMSAgentStorage.cpp
-usr/src/lib/libkmsagent/common/KMSAgentStorage.h
-usr/src/lib/libkmsagent/common/KMSAgentStringUtilities.cpp
-usr/src/lib/libkmsagent/common/KMSAgentStringUtilities.h
-usr/src/lib/libkmsagent/common/KMSAgent_direct.h
-usr/src/lib/libkmsagent/common/KMSAuditLogger.cpp
-usr/src/lib/libkmsagent/common/KMSAuditLogger.h
-usr/src/lib/libkmsagent/common/KMSAuditLogger_meta.cpp
-usr/src/lib/libkmsagent/common/KMSClientProfile.cpp
-usr/src/lib/libkmsagent/common/KMSClientProfile.h
-usr/src/lib/libkmsagent/common/KMSClientProfileImpl.h
-usr/src/lib/libkmsagent/common/PKICert.cpp
-usr/src/lib/libkmsagent/common/SOAP/AgentServiceNamespace.cpp
-usr/src/lib/libkmsagent/common/SOAP/CAServiceNamespace.cpp
-usr/src/lib/libkmsagent/common/SOAP/CertificateServiceNamespace.cpp
-usr/src/lib/libkmsagent/common/SOAP/DiscoveryServiceNamespace.cpp
-usr/src/lib/libkmsagent/common/SOAP/KMSAgentWebServiceNamespaces.cpp
-usr/src/lib/libkmsagent/common/SOAP/KMSAgentWebServiceNamespaces.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_AgentC.cpp
-usr/src/lib/libkmsagent/common/SOAP/KMS_AgentClient.cpp
-usr/src/lib/libkmsagent/common/SOAP/KMS_AgentH.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_AgentStub.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_Agent_SOAP.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_CAC.cpp
-usr/src/lib/libkmsagent/common/SOAP/KMS_CAClient.cpp
-usr/src/lib/libkmsagent/common/SOAP/KMS_CAH.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_CAStub.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_CertificateC.cpp
-usr/src/lib/libkmsagent/common/SOAP/KMS_CertificateClient.cpp
-usr/src/lib/libkmsagent/common/SOAP/KMS_CertificateH.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_CertificateStub.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_Certificate_SOAP.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_DiscoveryC.cpp
-usr/src/lib/libkmsagent/common/SOAP/KMS_DiscoveryClient.cpp
-usr/src/lib/libkmsagent/common/SOAP/KMS_DiscoveryH.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_DiscoveryStub.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_Discovery_SOAP.h
-usr/src/lib/libkmsagent/common/SOAP/envC.cpp
-usr/src/lib/libkmsagent/common/SOAP/envH.h
-usr/src/lib/libkmsagent/common/SOAP/envStub.h
-usr/src/lib/libkmsagent/common/SOAP/stdsoap2.cpp
-usr/src/lib/libkmsagent/common/SOAP/stdsoap2.h
-usr/src/lib/libkmsagent/common/SYSCommon.c
-usr/src/lib/libkmsagent/common/SYSCommon.h
-usr/src/lib/libkmsagent/common/debug.h
-usr/src/lib/libkmsagent/common/ieee80211_crypto.c
-usr/src/lib/libkmsagent/common/k_setupssl.c
-usr/src/lib/libkmsagent/common/k_setupssl.h
--- a/exception_lists/hdrchk	Sun Mar 11 22:00:47 2012 -0700
+++ b/exception_lists/hdrchk	Thu Feb 02 20:16:51 2012 +1100
@@ -180,39 +180,3 @@
 usr/src/uts/intel/sys/acpi/acstruct.h
 usr/src/uts/intel/sys/acpi/amlresrc.h
 usr/src/uts/intel/sys/acpi/platform/acwin64.h
-usr/src/lib/libkmsagent/common/ApplianceParameters.h
-usr/src/lib/libkmsagent/common/AutoMutex.h
-usr/src/lib/libkmsagent/common/ClientSoapFaultCodes.h
-usr/src/lib/libkmsagent/common/KMSAgent.h
-usr/src/lib/libkmsagent/common/KMSAgentCryptoUtilities.h
-usr/src/lib/libkmsagent/common/KMSAgentDataUnitCache.h
-usr/src/lib/libkmsagent/common/KMSAgentKeyCallout.h
-usr/src/lib/libkmsagent/common/KMSAgentKnownAnswerTests.h
-usr/src/lib/libkmsagent/common/KMSAgentLoadBalancer.h
-usr/src/lib/libkmsagent/common/KMSAgentPKICommon.h
-usr/src/lib/libkmsagent/common/KMSAgentPKIimpl.h
-usr/src/lib/libkmsagent/common/KMSAgentSoapUtilities.h
-usr/src/lib/libkmsagent/common/KMSAgentStorage.h
-usr/src/lib/libkmsagent/common/KMSAgentStringUtilities.h
-usr/src/lib/libkmsagent/common/KMSAgent_direct.h
-usr/src/lib/libkmsagent/common/KMSAuditLogger.h
-usr/src/lib/libkmsagent/common/KMSClientProfile.h
-usr/src/lib/libkmsagent/common/KMSClientProfileImpl.h
-usr/src/lib/libkmsagent/common/SOAP/KMSAgentWebServiceNamespaces.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_AgentH.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_AgentStub.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_Agent_SOAP.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_CAH.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_CAStub.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_CertificateH.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_CertificateStub.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_Certificate_SOAP.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_DiscoveryH.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_DiscoveryStub.h
-usr/src/lib/libkmsagent/common/SOAP/KMS_Discovery_SOAP.h
-usr/src/lib/libkmsagent/common/SOAP/envH.h
-usr/src/lib/libkmsagent/common/SOAP/envStub.h
-usr/src/lib/libkmsagent/common/SOAP/stdsoap2.h
-usr/src/lib/libkmsagent/common/SYSCommon.h
-usr/src/lib/libkmsagent/common/debug.h
-usr/src/lib/libkmsagent/common/k_setupssl.h
--- a/exception_lists/packaging	Sun Mar 11 22:00:47 2012 -0700
+++ b/exception_lists/packaging	Thu Feb 02 20:16:51 2012 +1100
@@ -59,9 +59,6 @@
 usr/lib/llib-lsoftcrypto.ln
 usr/lib/amd64/llib-lsoftcrypto.ln	i386
 usr/lib/sparcv9/llib-lsoftcrypto.ln	sparc
-usr/lib/libkmsagent.so
-usr/lib/amd64/libkmsagent.so	i386
-usr/lib/sparcv9/libkmsagent.so	sparc
 
 #
 # The following files are used by the DHCP service, the
--- a/usr/src/cmd/cmd-crypto/Makefile	Sun Mar 11 22:00:47 2012 -0700
+++ b/usr/src/cmd/cmd-crypto/Makefile	Thu Feb 02 20:16:51 2012 +1100
@@ -29,7 +29,6 @@
 	digest \
 	elfsign \
 	kmfcfg \
-	kmscfg \
 	pktool \
 	tpmadm
 
--- a/usr/src/cmd/cmd-crypto/kmscfg/Makefile	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-#
-
-include $(SRC)/cmd/Makefile.cmd
-
-PROG=	kmscfg
-
-.KEEP_STATE:
-
-all: $(PROG)
-
-install: all .WAIT $(ROOTPROG)
-
-_msg: $(PROG).po
-
-clean:
-
-$(ROOTBINPROG): $(PROG)
-	$(INS.file)
-
-lint:
-
-include $(SRC)/cmd/Makefile.targ
--- a/usr/src/cmd/cmd-crypto/kmscfg/kmscfg.pl	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,179 +0,0 @@
-#!/usr/perl5/bin/perl
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-#
-# This program initializes the private data needed to initialize
-# the PKCS#11 KMS provider (/usr/lib/security/pkcs11_kms.so.1) in
-# the Solaris Cryptographic Framework.
-#
-# It takes the following options:
-#	[-p Profile Name]	
-#	[-a Agent ID]
-#	[-i Agent Address]
-#	[-t Transaction Timeout]
-#	[-f Failover Limit]
-#	[-d Discovery Frequency]
-#	[-?]
-#
-
-use strict;
-use warnings;
-use locale;
-use Getopt::Std;
-use POSIX qw(locale_h);
-use File::Basename;
-use Sun::Solaris::Utils qw(textdomain gettext gmatch);
-
-my $cmd = basename($0);
-
-sub fatal {
-	print STDERR @_;
-	exit(1);
-}
-
-sub usage {
-	print STDERR gettext("Usage:") . " $cmd\n" .
-  	gettext(
-	"\t[-p[rofile] Profile Name]	The name of the KMA profile to use.\n" .
-	"\t[-a[gent] Agent ID]		The KMA agent ID.\n" .
-	"\t[-i[paddr] Agent Address]	Address of the KMA\n" .
-	"\t[-t[imeout] Transaction Timeout] Transaction timeout period (integer)\n" .
-	"\t[-f[ailover] Failover Limit]	Maximum failover limit (integer)\n" .
-	"\t[-d[iscovery] Discovery Freq]    Frequency to attempt KMA discovery\n");
-	exit(1);
-}
-
-sub get_input {
-	my($prompt, $default) = @_;
-	my $resp;
-	if (length($default)) {
-		print "$prompt [$default]: ";
-	} else {
-		print "$prompt: ";
-	}
-	chop ($resp = <STDIN>);
-	if (length($default)) {
-		return $resp ? $resp : $default;
-	}
-	return $resp;
-}
-
-setlocale(LC_ALL, "");
-textdomain(TEXT_DOMAIN);
-
-my($profile, $agentid, $address, $timeout, $failover, $discovery, $help);
-
-my (%opt);
-getopts('?p:a:i:t:f:d:', \%opt) || usage();
-usage() if exists ($opt{'?'});
-
-my $TOKENDIR;
-
-if (exists($ENV{KMSTOKEN_DIR})) {
-	$TOKENDIR= $ENV{KMSTOKEN_DIR};
-} else {
-	my $name = getpwuid($<);
-	$TOKENDIR= "/var/kms/$name";
-}
-
-my $cfgfile = "$TOKENDIR/kmstoken.cfg";
-
-if ( ! -d $TOKENDIR ) {
-	mkdir ($TOKENDIR, 0700) || die "mkdir $TOKENDIR error: $!\n";
-}
-
-if (-f $cfgfile) {
-	my $ans;
-	print gettext("KMS Token config file ") . "($cfgfile) " .
-		gettext("already exists,\n" .
-		"do you want to overwrite it (Y/n)? ");
-	chop ($ans = <STDIN>);
-	if (length($ans)) {
-		if ($ans !~ /^[yY].*/) {
-			exit(0);
-		}
-	}
-}
-
-if (!exists($opt{'p'})) {
-	$profile = get_input("Profile Name", "");
-	if (!length($profile)) {
-		fatal(gettext("You must enter a KMA Profile Name.\n"));
-	}
-} else {
-	$profile = $opt{'p'};
-}
-
-if (!exists($opt{'a'})) {
-	$agentid = get_input("Agent ID", "");
-	if (!length($agentid)) {
-		fatal(gettext("You must enter a KMA Profile ID.\n"));
-	}
-} else {
-	$agentid = $opt{'a'};
-}
-
-if (!exists($opt{'i'})) {
-	$address = get_input("KMA IP Address", "");
-	if (!length($address)) {
-		fatal(gettext("You must enter a KMA IP Address.\n"));
-	}
-} else {
-	$address = $opt{'i'};
-}
-
-if (!exists($opt{'t'})) {
-	$timeout = 10;
-} else {
-	$timeout = $opt{'t'};
-}
-
-if (!exists($opt{'f'})) {
-	$failover = 3;
-} else {
-	$failover = $opt{'f'};
-}
-
-if (!exists($opt{'d'})) {
-	$discovery = 10;
-} else {
-	$discovery = $opt{'d'};
-}
-
-# Save the old one
-if (-f $cfgfile) {
-	rename($cfgfile, "$cfgfile.old");
-}
-
-my $FH;
-
-open($FH, ">$cfgfile");
-print $FH "#\n# Profile Name\n#\n$profile\n";
-print $FH "#\n# Agent ID\n#\n$agentid\n";
-print $FH "#\n# KMA Address\n#\n$address\n";
-print $FH "#\n# Transaction Timeout\n#\n$timeout\n";
-print $FH "#\n# Failover Limit\n#\n$failover\n";
-print $FH "#\n# Discovery Frequency\n#\n$discovery\n";
-print $FH "#\n# Security Mode\n#\n1\n";
-close ($FH);
-
-exit(0);
--- a/usr/src/lib/Makefile	Sun Mar 11 22:00:47 2012 -0700
+++ b/usr/src/lib/Makefile	Thu Feb 02 20:16:51 2012 +1100
@@ -112,7 +112,6 @@
 	libipmp		\
 	libiscsit	\
 	libkmf		\
-	libkmsagent	\
 	libkstat	\
 	libkvm		\
 	liblm		\
@@ -636,7 +635,7 @@
 librestart:	libuutil libscf
 ../cmd/sgs/libdl:	../cmd/sgs/libconv
 ../cmd/sgs/libelf:	../cmd/sgs/libconv
-pkcs11:		libcryptoutil libkmsagent
+pkcs11:		libcryptoutil
 print:		libldap5
 udapl/udapl_tavor:	udapl/libdat
 libzfs:		libdevid libgen libnvpair libuutil \
--- a/usr/src/lib/libkmsagent/Makefile	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-#
-
-include		$(SRC)/lib/Makefile.lib
-
-SUBDIRS=	$(MACH)
-$(BUILD64)SUBDIRS += $(MACH64)
-
-all :=		TARGET= all
-check :=	TARGET= check
-clean :=	TARGET= clean
-clobber :=	TARGET= clobber
-install :=	TARGET= install
-lint :=		TARGET= lint
-
-.KEEP_STATE:
-
-all clean clobber install lint: $(SUBDIRS)
-
-$(SUBDIRS): FRC
-	@cd $@; pwd; $(MAKE) $(TARGET)
-
-FRC:
--- a/usr/src/lib/libkmsagent/Makefile.com	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,161 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-#
-
-LIBRARY= libkmsagent.a
-VERS= .1
-
-LIB_C_OBJECTS= \
-	SYSCommon.o \
-	ieee80211_crypto.o \
-	k_setupssl.o
-
-LIB_CPP_OBJECTS= \
-	KMSAgent.o \
-	KMSAgentChallenge.o \
-	KMSAgentCryptoUtilities.o \
-	KMSAgentDataUnitCache.o \
-	KMSAgentFatalState.o \
-	KMSAgentKeyCallout.o \
-	KMSAgentKnownAnswerTests.o \
-	KMSAgentLoadBalancer.o \
-	KMSAgentPKICert.o \
-	KMSAgentPKICertOpenSSL.o \
-	KMSAgentPKICommon.o \
-	KMSAgentPKIKey.o \
-	KMSAgentPKIKeyOpenSSL.o \
-	KMSAgentSoapUtilities.o \
-	KMSAgentStorage.o \
-	KMSAgentStringUtilities.o \
-	KMSAuditLogger.o \
-	KMSClientProfile.o
-
-SOAP_OBJECTS =\
-	AgentServiceNamespace.o \
-	CAServiceNamespace.o \
-	CertificateServiceNamespace.o \
-	DiscoveryServiceNamespace.o \
-	KMS_AgentC.o \
-	KMS_AgentClient.o \
-	KMS_CAC.o \
-	KMS_CAClient.o \
-	KMS_CertificateC.o \
-	KMS_CertificateClient.o \
-	KMS_DiscoveryC.o \
-	KMS_DiscoveryClient.o \
-	envC.o \
-	stdsoap2.o
-
-OBJECTS= \
-	$(LIB_C_OBJECTS) \
-	$(LIB_CPP_OBJECTS)	\
-	$(SOAP_OBJECTS)
-
-LIBSRCDIR= ../common
-SOAPSRCDIR= ../common/SOAP
-
-include $(SRC)/lib/Makefile.lib
-
-SRCDIR=../common
-CSRCS 	= $(LIB_C_OBJECTS:%.o=$(LIBSRCDIR)/%.c)
-LIBSRCS = $(LIB_CPP_OBJECTS:%.o=$(LIBSRCDIR)/%.cpp) $(CSRCS)
-SOAPSRCS= $(SOAP_OBJECTS:%.o=$(SOAPSRCDIR)/%.cpp)
-
-CCOBJS = $(LIB_CPP_OBJECTS:%.o=pics/%.o) \
-	$(SOAP_OBJECTS:%.o=pics/%.o)
-
-LIBS	=	$(DYNLIB)
-
-CCNEEDED =	-lCstd -lCrun
-$(__GNUC)CCNEEDED       = -L$(SFWLIBDIR) -R$(SFWLIBDIR) -lstdc++ -lgcc_s
-
-LDLIBS  +=      $(CCNEEDED) -lpam -lc -lsoftcrypto -lcrypto -lssl -lsocket
-LDLIBS64  +=    $(CCNEEDED) -lpam -lc -lsoftcrypto -lcrypto -lssl -lsocket
-
-DEFINES =	-DKMSUSERPKCS12 -D_REENTRANT -DNOWCSICMP -DUNIX \
-		-DWITH_OPENSSL -DHAVE_OPENSSL_SSL_H \
-		-DWITH_IPV6 -D_POSIX_THREADS -DXML_STATIC \
-		-DHAVE_EXPAT_CONFIG_H -DK_SOLARIS_PLATFORM  \
-		-DOPENSSL_NO_DEPRECATED \
-		-DKMS_AGENT_VERSION_STRING=\"KMSAgentLibraryVersion:Build1016\"
-
-CFLAGS +=	$(CCVERBOSE)
-
-#
-# When building C++ objects, redefine CCFLAGS for 32-bit builds to
-# use "compat=5" instead of "compat=4".
-# The 64-bit CCFLAGS already use compat=5 option (see $SRC/Makefile.master)
-#
-$(CCOBJS) := i386_CCFLAGS = \
-		-compat=5 \
-		-Qoption ccfe -messages=no%anachronism \
-		-Qoption ccfe -features=no%conststrings \
-		$(CCERRWARN)
-
-$(CCOBJS) := sparc_CCFLAGS = \
-		-cg92 -compat=5 \
-		-Qoption ccfe -messages=no%anachronism \
-		-Qoption ccfe -features=no%conststrings \
-		$(CCERRWARN)
-
-CPPFLAGS +=	-I../common -I../common/SOAP -I$(SRC)/common/crypto/aes $(DEFINES)
-
-COPTFLAG +=	-xCC
-COPTFLAG64 +=	-xCC
-
-pics/stdsoap2.o:=	CPPFLAGS   += -DWITH_NONAMESPACES
-
-ROOTLIBDIR=     $(ROOT)/usr/lib
-ROOTLIBDIR64=   $(ROOT)/usr/lib/$(MACH64)
-
-.KEEP_STATE:
-
-all:    $(LIBS)
-
-#
-# Don't lint C++ code
-#
-lint: 
-
-#
-# Need special rules here because the files are named ".cpp" instead
-# of ".cc".  The source comes from KMS, and we need to keep them in sync
-# so we won't change the naming convention.
-#
-pics/%.o:	$(LIBSRCDIR)/%.cpp
-	$(COMPILE.cc) -o $@ $<
-	$(POST_PROCESS_O)
-
-pics/%.o:	$(SOAPSRCDIR)/%.cpp
-	$(COMPILE.cc) -o $@ $<
-	$(POST_PROCESS_O)
-
-.cpp:
-	$(LINK.cc) -o $@ $< $(LDLIBS)
-	$(POST_PROCESS)
-
-.cpp.o:
-	$(COMPILE.cc) $(OUTPUT_OPTION) $<
-	$(POST_PROCESS_O)
-
-include $(SRC)/lib/Makefile.targ
-
--- a/usr/src/lib/libkmsagent/THIRDPARTYLICENSE	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
---------------------------------------------------------------------------------
-gSOAP public license.
-
-The contents of this file are subject to the gSOAP Public License Version 1.3
-(the "License"); you may not use this file except in compliance with the
-License. You may obtain a copy of the License at
-http://www.cs.fsu.edu/~engelen/soaplicense.html
-Software distributed under the License is distributed on an "AS IS" basis,
-WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-for the specific language governing rights and limitations under the License.
-
-The Initial Developer of the Original Code is Robert A. van Engelen.
-Copyright (C) 2000-2010, Robert van Engelen, Genivia Inc., All Rights Reserved.
-
---------------------------------------------------------------------------------
-The gSOAP Public License 1.3 is based on MPL1.1  (Mozilla Public License 1.1).
-
-The license allows for commercial and non-commercial use of gSOAP without fees or 
-royalties. It also allows products to be built on top and distributed under any 
-license (including commercial). Products developed with gSOAP should include a 
-notice of copyright and a disclaimer of warranty in the product's documentation 
-(License Exhibit B).
-
-The gSOAP public license requires modifications that are distributed as part of 
-an open source product based on gSOAP to be submitted back to us.
-
-Note that the wsdl2h tool, UDDI code, Web server, and sample applications are 
-NOT covered by the gSOAP public license. These are offered under a choice of 
-GPL or commercial licensing. 
-
---------------------------------------------------------------------------------
-GPL license.
-
-This program is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free Software
-Foundation; either version 2 of the License, or (at your option) any later
-version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with
-this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-Place, Suite 330, Boston, MA 02111-1307 USA
-
-Author contact information:
-engelen@genivia.com / engelen@acm.org
-
-This program is released under the GPL with the additional exemption that
-compiling, linking, and/or using OpenSSL is allowed.
---------------------------------------------------------------------------------
--- a/usr/src/lib/libkmsagent/THIRDPARTYLICENSE.descrip	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-PORTIONS OF LIBKMSAGENT
--- a/usr/src/lib/libkmsagent/amd64/Makefile	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-#
-
-
-include ../Makefile.com
-include $(SRC)/lib/Makefile.lib.64
-
-#
-# CCNEEDED must be modified for 64-bit because the default only includes
-# -lCrun
-#
-CCNEEDED = -lCstd -lCrun
-
-#
-# If linking with gcc, we must fix the CCNEEDED and LDLIBS64
-# to get a clean link without duplicates.
-#
-$(__GNUC)CCNEEDED       = -L$(SFWLIBDIR) -R$(SFWLIBDIR) -lstdc++ -lgcc_s
-$(__GNUC)LDLIBS64 += $(CCNEEDED)
-
-install: all $(ROOTLIBS64) $(ROOTLINKS64)
--- a/usr/src/lib/libkmsagent/common/ApplianceParameters.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,402 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*-----------------------------------------------------------------------------
-* File: ApplianceParameters.h
------------------------------------------------------------------------------*/
-
-#ifndef ApplianceParameters_h
-#define ApplianceParameters_h
-
-// Server Config
-
-#define DEFAULT_SERVER_LOG_FILENAME                                 "KeyMgrLog.log"
-#define DEFAULT_SERVER_CONFIG_FILENAME                              "ServerConfig.cfg"
-#define DEFAULT_CONNECTION_QUEUE_SIZE                               100
-#define DEFAULT_THREAD_POOL_SIZE                                    8
-#define DEFAULT_THREAD_POOL_MIN_IDLE_THREADS                        8
-#define DEFAULT_THREAD_POOL_MAX_IDLE_THREADS                        8
-#define DEFAULT_THREAD_POOL_MAINTENANCE_FREQUENCY_IN_SECONDS        0
-#define DEFAULT_THREAD_POOL_SHRINK_BY                               0
-#define DEFAULT_THREAD_POOL_SPAWN_BY                                0
-#define DEFAULT_THREAD_POOL_ORIGINAL_SIZE                           8
-#define DEFAULT_SOCKET_TIMEOUT_IN_SECONDS                           60
-// former default for SSL_Accept timeout was 10s - increased to 20s to support HP LTO-4
-#define DEFAULT_SSL_ACCEPT_TIMEOUT_IN_SECONDS                       20
-#define DEFAULT_SOCKET_CONNECTION_BACKLOG                           100
-#define DEFAULT_MANAGEMENT_SERVICE_MAX_CONNECTIONS                  10
-#define DEFAULT_CA_SERVICE_PORT_NUMBER                              3331
-#define DEFAULT_CERTIFICATE_SERVICE_PORT_NUMBER                     3332
-#define DEFAULT_MANAGEMENT_SERVICE_PORT_NUMBER                      3333
-#define DEFAULT_AGENT_SERVICE_PORT_NUMBER                           3334
-#define DEFAULT_DISCOVERY_SERVICE_PORT_NUMBER                       3335
-#define DEFAULT_REPLICATION_SERVICE_PORT_NUMBER                     3336
-#define EXTENDED_SSL_SESSION_CACHE_TIMEOUT                          86400
-#define DEFAULT_DATABASE_MAINTENANCE_FREQUENCY_IN_SECONDS           86400
-#define DEFAULT_TRIGGER_DATABASE_MAINTENANCE_TIMEOUT_IN_SECONDS     30
-#define DEFAULT_AUDIT_LOG_MAINTENANCE_FREQUENCY_IN_SECONDS          3600
-// see CR 6689920
-#define DEFAULT_KEY_POOL_MAINTENANCE_FREQUENCY_IN_SECONDS           15
-#define KEY_POOL_MINIMUM_SIZE                                       1000
-#define KEY_POOL_MAXIMUM_SIZE                                       200000
-#define DEFAULT_KEY_GENERATION_BATCH_SIZE                           10
-#define DEFAULT_REPLICATION_ANTI_ENTROPY_FREQUENCY_IN_SECONDS       60
-#define DEFAULT_MAXIMUM_REPLICATION_MESSAGE_SIZE_IN_BYTES           8192
-#define DEFAULT_MAXIMUM_JOIN_CLUSTER_MESSAGE_SIZE_IN_BYTES          262144
-#define DEFAULT_MAXIMUM_JOIN_CLUSTER_KMA_ENTRIES                    20
-#define DEFAULT_REPLICATION_THROTTLE_TIME_IN_MILLISECONDS           1000
-#define DEFAULT_REPLICATION_SPREAD_TIME_IN_MILLISECONDS             3000
-#define DEFAULT_REPLICATION_TIMEOUT_IN_SECONDS                      15
-#define DEFAULT_RETRIEVE_ROOT_CA_CERTIFICATE_TIMEOUT_IN_SECONDS     15
-#define DEFAULT_RETRIEVE_APPLIANCE_CERTIFICATE_TIMEOUT_IN_SECONDS   15
-#define DEFAULT_JOIN_CLUSTER_TIMEOUT_IN_SECONDS                     15
-#define DEFAULT_JOIN_CLUSTER_REPLICATED_IN_SECONDS                  10
-#define DEFAULT_REQUEST_ANTI_ENTROPY_PUSH_TIMEOUT_IN_SECONDS        60
-#define DEFAULT_PUSH_UPDATES_TIMEOUT_IN_SECONDS                     60
-#define DEFAULT_CLUSTER_PEER_STATUS_TIMEOUT_IN_SECONDS              10
-#define DEFAULT_TABLE_LOCK_TIMEOUT_IN_SECONDS                       2
-#define DEFAULT_REPLICATION_TABLE_LOCK_TIMEOUT_IN_SECONDS           8
-#define DEFAULT_TRANSACTION_RETRY_TIMEOUT_IN_SECONDS                4
-#define DEFAULT_KEY_STORE_GROW_SIZE_IN_SLOTS                        10000
-// Since write-caching is disabled on the hard disk, this is not necessary to force overwrites to disk
-#define DEFAULT_KEY_STORE_OVERWRITE_BUFFER_EXTRA_SIZE               0
-#define DEFAULT_KEY_STORE_OVERWRITE_PASS_COUNT                      7
-#define DEFAULT_CLOCK_ADJUSTMENT_LIMIT_IN_SECONDS                   300
-#define DEFAULT_DATABASE_START_TIMEOUT_IN_SECONDS                   30
-#define DEFAULT_DATABASE_TRANSACTION_RETRY_COUNT                    10
-#define DEFAULT_DATABASE_TRANSACTION_RETRY_SLEEP_IN_MILLISECONDS    1000
-#define DEFAULT_MAX_SNMP_TRAP_QUEUE_SIZE                            10000
-#define DEFAULT_SNMP_TIMEOUT_IN_SECONDS                             10
-#define DEFAULT_SNMP_RETRY_LIMIT                                    1
-#define DEFAULT_FILE_TRANSFER_MAXIMUM_CHUNK_SIZE_IN_KILOBYTES       1024
-#define DEFAULT_CERTIFICATE_START_TIME_SHIFT_IN_SECONDS             (60*60*24)
-#define DEFAULT_DISCOVERY_FREQUENCY_IN_SECONDS                      (60*10)
-#define DEFAULT_AUDIT_LOG_FAIL_BACK_FREQUENCY_IN_SECONDS            (60*10)
-#define DEFAULT_NTP_PEER_UPDATE_FREQUENCY_IN_SECONDS                23 
-#define DEFAULT_NTP_PEER_UPDATE_QUERY_INTERVAL                      156
-#define DEFAULT_SYSTEM_DUMP_LOG_LINE_COUNT                          5000
-#define DEFAULT_MASTER_KEY_PROVIDER_MAINTENANCE_FREQUENCY_IN_SECONDS 3600
-#define DEFAULT_SEND_PUSH_UPDATES_TO_JOIN_PEER_KMA_IN_SECONDS       3600
-#define DEFAULT_PENDING_QUORUM_OPERATION_EXPIRATION_FREQUENCY_IN_SECONDS 600
-#define DEFAULT_SUPPORT_ACCOUNT_MAX_PASSWORD_AGE_IN_DAYS            7
-#define DEFAULT_REPLICATION_ACCELERATION_TIMEOUT_IN_SECONDS         300
-
-#define DEFAULT_DATABASE_ADMINISTRATOR_USERNAME                     "dbadmin"
-#define DEFAULT_DATABASE_ADMINISTRATOR_PASSWORD                     "npwd4kms2"
-#define DEFAULT_DATABASE_NAME                                       "keymgr"
-#define DEFAULT_DATABASE_PARAMS                                     ""
-#define DEFAULT_DATABASE_USERNAME                                   "keymgr"
-#define DEFAULT_DATABASE_PASSWORD                                   "npwd4kms2"
-#define DEFAULT_KEY_STORE_FILE_NAME                                 "KeyStore.dat"
-#define DEFAULT_OPENSSL_ROOT_CA_CERTIFICATE_FILE_NAME               "RootCACertificate.crt"
-#define DEFAULT_OPENSSL_APPLIANCE_KEY_PAIR_FILE_NAME                "KMAKeyPair.pem"
-#ifndef WIN32
-#define DEFAULT_OPENSSL_AGENT_PRIVATE_KEY_DIR                       "/var/opt/SUNWkms2/data/"
-#endif
-
-#ifndef DEFAULT_SERVER_VERSION
-#define DEFAULT_SERVER_VERSION                                      "2.1.04"
-#endif
-#define DEFAULT_SNMP_TRAP_GENERIC_TRAP_OID                          "1.3.6.1.4.1.42.2"
-#define DEFAULT_SNMP_TRAP_DATE_TIME_OID                             "1.3.6.1.4.1.42.2.1"
-#define DEFAULT_SNMP_TRAP_AUDIT_CLASS_OID                           "1.3.6.1.4.1.42.2.2"
-#define DEFAULT_SNMP_TRAP_AUDIT_OPERATION_OID                       "1.3.6.1.4.1.42.2.3"
-#define DEFAULT_SNMP_TRAP_AUDIT_CONDITION_OID                       "1.3.6.1.4.1.42.2.4"
-#define DEFAULT_SNMP_TRAP_AUDIT_SEVERITY_OID                        "1.3.6.1.4.1.42.2.5"
-#define DEFAULT_SNMP_TRAP_ENTITY_ID_OID                             "1.3.6.1.4.1.42.2.6"
-#define DEFAULT_SNMP_TRAP_NETWORK_ADDRESS_OID                       "1.3.6.1.4.1.42.2.7"
-#define DEFAULT_SNMP_TRAP_MESSAGE_OID                               "1.3.6.1.4.1.42.2.8"
-#define DEFAULT_SNMP_TRAP_AUDIT_SOLUTION_OID                        "1.3.6.1.4.1.42.2.9"
-#define DEFAULT_BACKUP_FILE_NAME                                    "BackupFile"
-#define DEFAULT_RESTORE_FILE_NAME                                   "RestoreFile"
-#define DEFAULT_CACHED_BACKUP_FILE_NAME                             "/var/opt/SUNWkms2/CachedBackupFile"
-#define DEFAULT_CACHED_CORE_SECURITY_XML_FILE_NAME                  "/var/opt/SUNWkms2/CachedCoreSecurityXMLFile"
-#define DEFAULT_CACHED_BACKUP_KEY_XML_FILE_NAME                     "/var/opt/SUNWkms2/CachedBackupKeyXMLFile"
-#define DEFAULT_SOFTWARE_UPGRADE_FILE_NAME                          "/SUNWkms2/boxcar/SoftwareUpgradeFile"
-#define DEFAULT_IMPORT_10KEYS_FILE_NAME                             "Import10KeysFile"
-#define DEFAULT_KEY_SHARING_EXPORT_FILE_NAME                        "KeySharingExport.dat"
-#define DEFAULT_KEY_SHARING_IMPORT_FILE_NAME                        "KeySharingImport.dat"
-#define DEFAULT_JOIN_PEER_KMA_FILE_NAME                             "/var/opt/SUNWkms2/data/JoinPeerKMAFile"
-
-#define DEFAULT_PRIMARY_NETWORK_IF                                  "bge0"
-#define DEFAULT_SECONDARY_NETWORK_IF                                "aggr1"
-#define DEFAULT_AGGREGATE_NETWORK                                   "nge1 nge0"
-#define DEFAULT_PRIMARY_ALIAS                                       "KMA-Mgmt"
-#define DEFAULT_SECONDARY_ALIAS                                     "KMA-Service"
-#define DEFAULT_DATABASE_FILE_SYSTEM_PATH                           "/var/lib/pgsql"
-#define DEFAULT_BUNDLE_SOFTWARE_COMMAND                             "/opt/SUNWkms2/bin/BundleSoftwareUpgrade"
-#define DEFAULT_FLAR_FILE_PATH                                      "/SUNWkms2/boxcar/SoftwareUpgrade.flar"
-
-// System Calls (Config)
-
-#define DEFAULT_SERVER_RESTART_COMMAND                              "/usr/sbin/svcadm restart kms2 > /dev/null 2>&1"
-#define DEFAULT_SET_IP_CONFIGURATION_COMMAND                        "/opt/SUNWkms2/bin/SetIPAddresses"
-#define DEFAULT_RESET_TO_FACTORY_DEFAULT_COMMAND                    "/opt/SUNWkms2/bin/ResetAndZeroizeLauncher > /dev/null 2>&1"
-#define DEFAULT_RESET_TO_FACTORY_AND_ZEROIZE_DEFAULT_COMMAND        "/opt/SUNWkms2/bin/ResetAndZeroizeLauncher -zeroize > /dev/null 2>&1"
-#define DEFAULT_SHUTDOWN_COMMAND                                    "/usr/sbin/shutdown -y -g 5 -i 5 'KMS is shutting down the system' > /dev/null 2>&1"
-#define DEFAULT_ENABLE_SUPPORT_COMMAND                              "/bin/passwd -u support > /dev/null 2>&1"
-#define DEFAULT_DISABLE_SUPPORT_COMMAND                             "/bin/passwd -l support > /dev/null 2>&1"
-#define DEFAULT_REGENERATE_SSH_KEYS_COMMAND                         "/opt/SUNWkms2/bin/RegenerateSSHKeys > /dev/null 2>&1"
-#define DEFAULT_DISPLAY_SSH_KEYS_COMMAND                            "/opt/SUNWkms2/bin/GetSSHKeys"
-#define DEFAULT_ENABLE_SSH_COMMAND                                  "/usr/sbin/svcadm enable ssh > /dev/null 2>&1"
-#define DEFAULT_DISABLE_SSH_COMMAND                                 "/opt/SUNWkms2/bin/DisableSSH > /dev/null 2>&1"
-#define DEFAULT_GET_SUPPORT_STATUS_COMMAND                          "/opt/SUNWkms2/bin/StateOfSupport"
-#define DEFAULT_GET_SSH_STATUS_COMMAND                              "/opt/SUNWkms2/bin/StateOfSSHD"
-#define DEFAULT_ENABLE_SERVER_STARTUP_COMMAND                       "/bin/true"
-#define DEFAULT_SERVER_STARTUP_COMMAND                              "/usr/sbin/svcadm enable kms2 > /dev/null 2>&1"
-#define DEFAULT_SOFTWARE_UPGRADE_COMMAND                            "/opt/SUNWkms2/bin/InstallSoftwareVersion"
-#define DEFAULT_LIST_SOFTWARE_VERSIONS_COMMAND                      "/opt/SUNWkms2/bin/ListSoftwareVersions"
-#define DEFAULT_STOP_SOFTWARE_AND_RUN_COMMAND                       "echo Stop and run not implemented" // "/usr/local/bin/StopSoftwareAndRun"
-#define DEFAULT_VERIFY_SOFTWARE_COMMAND                             "/opt/SUNWkms2/bin/VerifySoftwareFile"
-#define DEFAULT_VERIFY_ACTIVATE_COMMAND                             "/opt/SUNWkms2/bin/VerifyActivateSoftware"
-#define DEFAULT_CHANGE_SOFTWARE_COMMAND                             "/opt/SUNWkms2/bin/ChangeSoftwareVersion"
-#define DEFAULT_REBOOT_SYSTEM_COMMAND                               "/usr/sbin/shutdown -y -g 5 -i 6 'KMS is rebooting the system' > /dev/null 2>&1"
-#define DEFAULT_STOP_SERVER_COMMAND                                 "/usr/sbin/svcadm disable kms2"
-#define DEFAULT_INTERFACE_CONFIG_COMMAND                            "/usr/sbin/ifconfig"
-#define DEFAULT_SYSTEM_DUMP_COMMAND                                 "/opt/SUNWkms2/bin/SystemDump"
-#define DEFAULT_CONFIGURE_NTP_COMMAND                               "/opt/SUNWkms2/bin/ConfigureNTP"
-#define DEFAULT_SET_TIMEZONE_COMMAND                                "/opt/SUNWkms2/bin/SetTimezone"
-#define DEFAULT_GET_KEYBOARD_LAYOUT_COMMAND                         "/opt/SUNWkms2/bin/GetKeyboardLayout"
-#define DEFAULT_SET_KEYBOARD_LAYOUT_COMMAND                         "/opt/SUNWkms2/bin/SetKeyboardLayout"
-#define DEFAULT_CONFIGURE_PRIMARY_ADMIN_COMMAND                     "/opt/SUNWkms2/bin/ConfigurePrimaryAdmin"
-#define DEFAULT_GET_IPV6_ADDRESS_COMMAND                            "/opt/SUNWkms2/bin/GetIPv6Address"
-#define DEFAULT_INITIALIZE_SCA6000_COMMAND                          "/opt/SUNWkms2/bin/InitializeSCA6000"
-#define DEFAULT_QUERY_SYSTEM_MESSAGES_COMMAND                       "/opt/SUNWkms2/bin/QuerySystemMessages"
-
-// @see StringUtilities.cpp
-#define DEFAULT_PENDING_QUORUM_OPERATION_TIMEOUT                    "P2D" // Default to 2 days (defined by ISO 8601)
-#define PENDING_OPERATIONS_VERSION_STRING                           "2.2"
-
-// PKI
-
-#define KEY_SIZE                                                    2048
-#define CRL_DAYS                                                    365
-#define CRL_HOURS                                                   0
-#define PKI_FORMAT                                                  FILE_FORMAT_PEM
-#define DER_FORMAT                                                  FILE_FORMAT_DER
-#define PKCS12_FORMAT                                               FILE_FORMAT_PKCS12
-#define PKI_UNPROTECTED_PASSWORD                                    "password"
-#define DN_O_ROOT_CA                                                "Oracle"
-#define DN_OU_ROOT_CA                                               "KMS"
-#define DN_CN_ROOT_CA                                               "RootCA"
-    // NOTE: Do not directly use the following values.
-    // Use the configurable Security Parameter values instead
-#define DEFAULT_ROOT_CA_CERTIFICATE_LIFETIME                        "P49Y"
-#define DEFAULT_CERTIFICATE_LIFETIME                                "P49Y"
-#define AUTHENTICATION_SECRET_LENGTH                                20
-#define AUTHENTICATION_CHALLENGE_LENGTH                             20
-#define AUTHENTICATION_RESPONSE_LENGTH                              20
-#define AUTHENTICATION_ITERATION_TIME_IN_MILLISECONDS               100
-// reduce the time for agents since we support agents on embedded processors
-#define AGENT_AUTHENTICATION_ITERATION_TIME_IN_MILLISECONDS         10
-#define MIN_AUTHENTICATION_ITERATION_COUNT                          40000   // a bit less than 1/10 second on standard Appliance hardware
-#define MAX_AUTHENTICATION_ITERATION_COUNT                          400000  // a bit less that 1 second on standard Appliance hardware
-
-// Core Security
-
-#define MAX_CORE_SECURITY_KEY_SPLIT_COUNT                           10
-#define CORE_SECURITY_HMAC_LENGTH                                   64
-#define MAX_CORE_SECURITY_PAD_LENGTH                                16
-
-//------------- to be removed: Transfer Partner code is obsolete -----------
-#define MAX_KEY_DISTRIBUTION_PUBLIC_KEY_COUNT                       4
-#define MAX_CORE_SECURITY_PUBLIC_KEY_LENGTH                         256
-//--------------------------------------------------------------------------
-
-// SOAP Services
-
-// TODO: make functions instead of macros?
-
-#define SOAP_SERVER_ERROR( pstSoap )                                (soap_receiver_fault( pstSoap, "Server Error", NULL ))
-// This has been replaced with SoapClientError:
-//#define SOAP_CLIENT_ERROR( pstSoap, sMessage )                      (soap_sender_fault( pstSoap, sMessage, NULL ))
-#define SOAP_IS_CLIENT_ERROR( pstSoap )                             (strcmp( *soap_faultcode( pstSoap ), pstSoap->version == 2 ? "SOAP-ENV:Sender" : "SOAP-ENV:Client" ) == 0)
-#define GET_SOAP_FAULTCODE( pstSoap )                               ((soap_set_fault( pstSoap ),*soap_faultcode( pstSoap )) ? (*soap_faultcode( pstSoap )) : "Unknown")
-#define GET_SOAP_FAULTSTRING( pstSoap )                             ((soap_set_fault( pstSoap ),*soap_faultstring( pstSoap )) ? (*soap_faultstring( pstSoap )) : "Unknown")
-#define GET_SOAP_FAULTDETAIL( pstSoap )                             ((soap_set_fault( pstSoap ),*soap_faultdetail( pstSoap )) ? (*soap_faultdetail( pstSoap )) : "Unknown")
-#define SOAP_AUDIT_LOG_MESSAGE( pStringTable, pstSoap )             ( CAuditMessage( CAuditLogger::AUDIT_VALUE_SOAP_FAULTCODE, GET_SOAP_FAULTCODE( pstSoap ) ) + CAuditMessage( CAuditLogger::AUDIT_VALUE_SOAP_FAULTSTRING, GET_SOAP_FAULTSTRING( pstSoap ) ) + CAuditMessage( CAuditLogger::AUDIT_VALUE_SOAP_FAULTDETAIL, GET_SOAP_FAULTDETAIL( pstSoap ) ) )
-#define SOAP_HTTP_PROTOCOL                                          "http://"
-#define SOAP_HTTPS_PROTOCOL                                         "https://"
-
-// Data Entry
-
-#define MINIMUM_WIDE_STRING_VALUE_LENGTH                            1
-#define MAXIMUM_WIDE_STRING_VALUE_LENGTH                            64
-#define MAXIMUM_UTF8_STRING_VALUE_LENGTH                            ( MAXIMUM_WIDE_STRING_VALUE_LENGTH * 6 )
-#define MINIMUM_WIDE_TEXT_VALUE_LENGTH                              1
-#define MAXIMUM_WIDE_TEXT_VALUE_LENGTH                              8192
-#define MAXIMUM_UTF8_TEXT_VALUE_LENGTH                              ( MAXIMUM_WIDE_TEXT_VALUE_LENGTH * 6 )
-
-// Business Logic
-
-#define AUDIT_ID_BUFFER_LENGTH                                      16
-#define CERTIFICATE_SERIAL_NUMBER_BUFFER_LENGTH                     16
-#define BACKUP_ID_BUFFER_LENGTH                                     16
-#define DATA_UNIT_ID_HEX_STRING_LENGTH                              32
-#define DATA_UNIT_KEY_ID_BUFFER_LENGTH                              30
-#define DATA_UNIT_KEY_ID_HEX_STRING_LENGTH                          (DATA_UNIT_KEY_ID_BUFFER_LENGTH*2)
-#define MAXIMUM_QUERY_NEXT_PAGE_SIZE                                1000
-#define MAXIMUM_QUERY_FILTER_PARAMS_COUNT                           100
-#define MAXIMUM_LIST_DATA_UNIT_STATUS_PARAMS_COUNT                  ( MAXIMUM_QUERY_FILTER_PARAMS_COUNT )
-#define MAXIMUM_LIST_AUDIT_LOGS_FOR_AGENTS_PARAMS_COUNT             ( MAXIMUM_QUERY_FILTER_PARAMS_COUNT )
-#define MAXIMUM_LIST_AUDIT_LOGS_FOR_DATA_UNITS_PARAMS_COUNT         ( MAXIMUM_QUERY_FILTER_PARAMS_COUNT )
-#define MAXIMUM_LIST_AUDIT_LOGS_FOR_KEYS_PARAMS_COUNT               ( MAXIMUM_QUERY_FILTER_PARAMS_COUNT )
-// 0 allows unlimited # of DUs to be exported, positive int constricts the size
-#define DEFAULT_KEYSHARING_MAXIMUM_EXPORT_DATA_UNITS_RESULT_SIZE    0
-#define TRANSFER_PARTNER_KEY_ID_LENGTH                              32
-#define TRANSFER_PARTNER_KEY_VALUE_LENGTH                           259
-#define TRANSFER_PARTNER_KEY_VALUE_HEX_STRING_LENGTH                (TRANSFER_PARTNER_KEY_VALUE_LENGTH*2)
-    // NOTE: Do not directly use the following value.
-    // Use the configurable Security Parameter value instead
-#define DEFAULT_MAX_FAILED_RETRIEVE_CERTIFICATE_ATTEMPTS            5
-    // The obvious logic for determining if a key's bits are on a backup is as follows:
-    // The key must have been created before the backup was created:
-    //    Backup.CreatedDate >= DataUnitKey.CreatedDate
-    // And the key must not have been destroyed before the backup was created:
-    //    (DataUnitKey.DestroyedDate IS NULL) OR (Backup.CreatedDate <= DataUnitKey.DestroyedDate)
-    // This logic would be fine in a single-appliance cluster, or if we had (or when we have) 
-    // time synchronization. But right now the appliances in a cluster may have different 
-    // times from each other, and that makes it dangerous to use a simple date comparison.
-    // (Note that when determining if a key is on a backup, we *really* don't want false
-    // negatives, but we don't mind false positives so much, within reason.)
-    // To address this, the best solution we came up with is to use a "backup date window".
-    // Instead of simply using the CreatedDate of a backup in our logic, we'll use:
-    //    (Backup.CreatedDate + BACKUP_DATE_WINDOW_INTERVAL) >= DataUnitKey.CreatedDate
-    // and
-    //    (DataUnitKey.DestroyedDate IS NULL) OR ((Backup.CreatedDate - BACKUP_DATE_WINDOW_INTERVAL) <= DataUnitKey.DestroyedDate)
-    // Note that the adding and subtracting of BACKUP_DATE_WINDOW_INTERVAL effectively increases
-    // the chance that the calculation will show that a key's bits are on a backup. 
-    // It's still possible to get false negatives, and there will be more false positives,
-    // but if BACKUP_DATE_WINDOW_INTERVAL is set to the largest reasonable value that
-    // appliances' clocks could differ by, then we can eliminate false negatives to a 
-    // fairly high degree of probability. (We can raise the probability to any arbitrary 
-    // amount by increasing the window, but the trade-off is that we'll have more and more
-    // false positives.)
-#define DEFAULT_BACKUP_DATE_WINDOW_IN_SECONDS                       300
-
-// Security Parameter Constraints
-
-#define MINIMUM_LONG_TERM_RETENTION_AUDIT_LOG_SIZE_LIMIT            1000
-#define MAXIMUM_LONG_TERM_RETENTION_AUDIT_LOG_SIZE_LIMIT            1000000
-#define MINIMUM_LONG_TERM_RETENTION_AUDIT_LOG_LIFETIME              "P7D"
-#define MINIMUM_MEDIUM_TERM_RETENTION_AUDIT_LOG_SIZE_LIMIT          1000
-#define MAXIMUM_MEDIUM_TERM_RETENTION_AUDIT_LOG_SIZE_LIMIT          1000000
-#define MINIMUM_MEDIUM_TERM_RETENTION_AUDIT_LOG_LIFETIME            "P7D"
-#define MINIMUM_SHORT_TERM_RETENTION_AUDIT_LOG_SIZE_LIMIT           1000
-#define MAXIMUM_SHORT_TERM_RETENTION_AUDIT_LOG_SIZE_LIMIT           1000000
-#define MINIMUM_SHORT_TERM_RETENTION_AUDIT_LOG_LIFETIME             "P7D"
-#define MINIMUM_AUDIT_LOG_MAINTENANCE_FREQUENCY                     "PT1M"
-#define MINIMUM_ROOT_CA_CERTIFICATE_LIFETIME                        "P1M"
-#define MINIMUM_CERTIFICATE_LIFETIME                                "P1M"
-#define MINIMUM_RETRIEVE_CERTIFICATE_ATTEMPT_LIMIT                  1
-#define MAXIMUM_RETRIEVE_CERTIFICATE_ATTEMPT_LIMIT                  1000
-#define MINIMUM_PASSPHRASE_MINIMUM_LENGTH                           8
-#define MAXIMUM_PASSPHRASE_MINIMUM_LENGTH                           ( MAXIMUM_WIDE_STRING_VALUE_LENGTH )
-#define MINIMUM_MANAGEMENT_SESSION_TIMEOUT_IN_MINUTES               0
-#define MAXIMUM_MANAGEMENT_SESSION_TIMEOUT_IN_MINUTES               60
-
-// The SYSTEM_FIPS_MODE_ONLY_ values must match those in
-// enum KMS_Management__FIPSModeOnly in KMS_Management_SOAP.h and
-// enum KMSManagement_FIPSModeOnly in KMSManagement.h
-#define SYSTEM_FIPS_MODE_ONLY_UNCHANGED                             (-1)
-#define SYSTEM_FIPS_MODE_ONLY_FALSE                                 0
-#define SYSTEM_FIPS_MODE_ONLY_TRUE                                  1
-#define MINIMUM_FIPS_MODE_ONLY                                      ( SYSTEM_FIPS_MODE_ONLY_FALSE )
-#define MAXIMUM_FIPS_MODE_ONLY                                      ( SYSTEM_FIPS_MODE_ONLY_TRUE )
-
-#define DEFAULT_MINIMUM_PASSPHRASE_LENGTH                           8
-#define DEFAULT_MANAGEMENT_SESSION_TIMEOUT_IN_MINUTES               15
-#define DEFAULT_FIPS_MODE_ONLY                                      ( SYSTEM_FIPS_MODE_ONLY_FALSE )
-
-// To limit maximum query size, we limit # created
-// this is probably (hopefully) temporary
-#define MAXIMUM_CREATION_COUNT                                      999
-
-// Audit Log
-
-#define AUDIT_LOG_DEFAULT_SIZE_LONG_TERM_RETENTION                  1000000
-#define AUDIT_LOG_DEFAULT_SIZE_MEDIUM_TERM_RETENTION                100000
-#define AUDIT_LOG_DEFAULT_SIZE_SHORT_TERM_RETENTION                 10000
-#define AUDIT_LOG_DEFAULT_LIFETIME_DAYS_LONG_TERM_RETENTION         "P2Y"
-#define AUDIT_LOG_DEFAULT_LIFETIME_DAYS_MEDIUM_TERM_RETENTION       "P3M"
-#define AUDIT_LOG_DEFAULT_LIFETIME_DAYS_SHORT_TERM_RETENTION        "P7D"
-
-// Replication
-
-// schema version 7: change to soap Discovery Service for supporting DNS
-// schema version 8: change to soap Agent Service for RetrieveDataUnitKeys
-// schema version 9: ensure that Ready keys appear in current backup
-// schema version 10: IPv6 support and AES key wrap
-// schema version 11: ICSF integration, distributed quorum, SNMP v2
-// schema version 12: replication acceleration
-#define REPLICATION_SCHEMA_VERSION_MIN                              8
-#define REPLICATION_SCHEMA_VERSION_MAX                             12
-#define REPLICATION_SCHEMA_VERSION_KEYS_IN_BACKUP                   9
-#define REPLICATION_SCHEMA_VERSION_IPV6_ADDRESSES                  10 
-#define REPLICATION_SCHEMA_VERSION_AES_KEY_WRAP                    10 
-#define REPLICATION_SCHEMA_VERSION_MASTER_KEY_MODE                 11
-#define REPLICATION_SCHEMA_VERSION_DISTRIBUTED_QUORUM              11
-#define REPLICATION_SCHEMA_VERSION_SNMP_PROTOCOL_VERSION_TWO       11
-#define REPLICATION_SCHEMA_VERSION_REPLICATION_ACCELERATION        12 
-// value to return on inactive software versions
-#define REPLICATION_SCHEMA_VERSION_INVALID                          0
-
-// Key Sharing Transfer Formats
-
-#define TRANSFER_FORMAT_INVALID                                       (-100)
-#define TRANSFER_FORMAT_DEFAULT                                       (-1)
-#define TRANSFER_FORMAT_LEGACY                                        0
-#define TRANSFER_FORMAT_LEGACY_VERSION_STRING                         "2.0.1"
-#define TRANSFER_FORMAT_FIPS                                          1
-#define TRANSFER_FORMAT_FIPS_VERSION_STRING                           "2.1"
-
-// Master Key Modes
-#define _MASTER_KEY_MODE_OFF                                         0
-#define _MASTER_KEY_MODE_ALL_KEYS                                    1
-#define _MASTER_KEY_MODE_RECOVER_KEYS_ONLY                           2
-
-// Derived/Master Key stuff
-#define KEY_VERSION_PREFIX_LENGTH                                   2
-#define KEY_VERSION_PREFIX_HEX_LENGTH                               (KEY_VERSION_PREFIX_LENGTH*2)
-#define NON_DERIVED_KEY_VERSION                                     0x0000
-#define NON_DERIVED_KEY_VERSION_HEX                                 (L"0000")
-#define DERIVED_KEY_VERSION                                         0x0001
-#define DERIVED_KEY_VERSION_HEX                                     (L"0001")
-#define MASTER_KEY_ID_PREFIX_HEX                                    (L"0000")
-#define MASTER_KEY_ID_PREFIX_LENGTH                                 2
-#define MASTER_KEY_ID_PREFIX_HEX_LENGTH                             (MASTER_KEY_ID_PREFIX_LENGTH*2) 
-#define MASTER_KEY_ID_KMAID_LENGTH                                  8
-#define MASTER_KEY_ID_KMAID_HEX_LENGTH                              (MASTER_KEY_ID_KMAID_LENGTH*2)
-#define MASTER_KEY_ID_RANDOM_LENGTH                                 8
-#define MASTER_KEY_ID_LENGTH                                        (MASTER_KEY_ID_PREFIX_LENGTH + MASTER_KEY_ID_KMAID_LENGTH + MASTER_KEY_ID_RANDOM_LENGTH)
-#define MASTER_KEY_ID_HEX_LENGTH                                    (MASTER_KEY_ID_LENGTH*2)	// ICSF can only handle 32-byte string IDs for keys
-#define MASTER_KEY_ID_BASE64_LENGTH                                 32
-#define DATA_UNIT_KEY_ID_HEX_LENGTH                                 (DATA_UNIT_KEY_ID_BUFFER_LENGTH*2)
-
-// SNMP Manager protocol version stuff
-#define SYSTEM_SNMP_PROTOCOL_VERSION_THREE                          0
-#define SYSTEM_SNMP_PROTOCOL_VERSION_TWO                            1
-
-#endif //ApplianceParameters_h
--- a/usr/src/lib/libkmsagent/common/AutoMutex.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*------------------------------------------------------------------------------
- * Module           : AutoMutex.h
- -----------------------------------------------------------------------------*/
-
-#ifndef AutoMutex_h
-#define AutoMutex_h
-
-#include "SYSCommon.h"
-
-class CAutoMutex 
-{
-public:
-
-    /*---------------------------------------------------------------------------
-     * Constructor:
-     *  Locks the given mutex handle.
-     *
-     * Input
-     * -----
-     *    i_hMutex        Mutex handle
-     *
-     * Output
-     * ------
-     *    (none)
-     *
-     * Return value       (none)
-     *
-     *--------------------------------------------------------------------------*/
-
-    CAutoMutex( K_MUTEX_HANDLE i_hMutex ) 
-        : m_hMutex( 0 ),
-          m_bLocked( false )
-    {
-        if ( i_hMutex )
-        {
-            Lock( i_hMutex );
-        }
-    }
-
-
-    /*---------------------------------------------------------------------------
-     * Destructor:
-     *  Unlocks this mutex.
-     *
-     * Input
-     * -----
-     *    (none)
-     *
-     * Output
-     * ------
-     *    (none)
-     *
-     * Return value       (none)
-     *
-     *--------------------------------------------------------------------------*/
-
-    virtual ~CAutoMutex() 
-    { 
-        if ( m_bLocked )
-        {
-            Unlock();
-        }
-    }
-
-    /*---------------------------------------------------------------------------
-     * Function: Lock
-     *
-     * Description:
-     *  Locks this mutex handle.  If i_hMutex is null, the handle passed to the
-     *  constructor will be used.  Fatals if there is no valid handle.
-     *
-     * Input
-     * -----
-     *    i_hMutex        Mutex handle to lock
-     *
-     * Output
-     * ------
-     *    (none)
-     *
-     * Return value       (none)
-     *
-     *--------------------------------------------------------------------------*/
-
-    void Lock( K_MUTEX_HANDLE i_hMutex = 0 )
-    {
-        FATAL_ASSERT( !m_bLocked );
-
-        if ( i_hMutex )
-        {
-            m_hMutex = i_hMutex;
-        }
-
-        FATAL_ASSERT( m_hMutex );        
-        K_LockMutex( m_hMutex );
-        m_bLocked = true;
-    }
-
-
-    /*---------------------------------------------------------------------------
-     * Function: Unlock
-     *
-     * Description:
-     *  Unlocks the mutex handle passed to the constructor or to a previous 
-     *  Lock call.  Fatals if the mutex is not locked.
-     *
-     * Input
-     * -----
-     *    (none)
-     *
-     * Output
-     * ------
-     *    (none)
-     *
-     * Return value       (none)
-     *
-     *--------------------------------------------------------------------------*/
-
-    void Unlock()
-    {
-        FATAL_ASSERT( m_bLocked );
-        FATAL_ASSERT( m_hMutex );
-        K_UnlockMutex( m_hMutex );
-        m_bLocked = false;
-    }
-
-private:
-    K_MUTEX_HANDLE m_hMutex;
-    bool m_bLocked;
-};
-
-
-#endif // AutoMutex_h
--- a/usr/src/lib/libkmsagent/common/ClientSoapFaultCodes.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,225 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#ifndef CLIENTSOAPFAULTCODES_H
-#define CLIENTSOAPFAULTCODES_H
-
-/**
- * Enumeration of error codes that have corresponding soap error strings.
- * Note: These start at 1000 to avoid overlapping with other soap error codes
- *
- * The format of these enumerations is roughly as follows:
- *
- * Start with CLIENT_ERROR_
- *
- * Next, put AGENT if the error is intended for the KMA Agent interface
- *       put MANAGER if the error is intended for the KMS Manager interface
- *       put SERVER if the error is the fault of the KMS server for any interface
- *
- * After that, briefly describe the error.
- */
-enum SoapClientErrorCode
-{
-    INVALID_CLIENT_ERROR = 0,
-    CLIENT_ERROR_ACCESS_DENIED = 1000,
-    CLIENT_ERROR_SERVER_BUSY,
-    CLIENT_ERROR_AUTHENTICATION_FAILED,
-    CLIENT_ERROR_NETWORK_ADDRESS_UNREACHABLE,
-    CLIENT_ERROR_INVALID_EXPECTED_PEER_LAST_KNOWN_TIMESTAMP_VECTOR,
-    CLIENT_ERROR_INCOMPATIBLE_VERSION,
-    CLIENT_ERROR_INCOMPATIBLE,
-    CLIENT_ERROR_BUNDLE_ALREADY_IN_PROGRESS,
-    CLIENT_ERROR_AGENT_INVALID_PARAMETERS,
-    CLIENT_ERROR_AGENT_KEY_DOES_NOT_EXIST,
-    CLIENT_ERROR_AGENT_KEY_DESTROYED,
-    CLIENT_ERROR_AGENT_DATA_UNIT_ID_NOT_FOUND_EXTERNAL_ID_EXISTS,
-    CLIENT_ERROR_AGENT_DATA_UNIT_EXPIRED,
-    CLIENT_ERROR_INVALID_DATA_UNIT_ID,
-    CLIENT_ERROR_INVALID_KEY_ID,
-    CLIENT_ERROR_AGENT_DUPLICATE_EXTERNAL_ID,
-    CLIENT_ERROR_AGENT_INVALID_EXTERNAL_ID,
-    CLIENT_ERROR_AGENT_DATA_UNIT_NOT_REKEYABLE,
-    CLIENT_ERROR_AGENT_APPLIANCE_LOCKED,
-    CLIENT_ERROR_AGENT_INVALID_PASSPHRASE,
-    CLIENT_ERROR_DATA_UNIT_NOT_FOUND,
-    CLIENT_ERROR_AGENT_NO_READY_KEYS,
-    CLIENT_ERROR_MANAGER_INVALID_PARAMETERS,
-    CLIENT_ERROR_MANAGER_DATA_UNIT_NOT_DESTROYED,
-    CLIENT_ERROR_MANAGER_APPLIANCE_EXISTS,
-    CLIENT_ERROR_MANAGER_APPLIANCE_DOES_NOT_EXIST,
-    CLIENT_ERROR_MANAGER_CANNOT_DELETE_LOCAL_APPLIANCE,
-    CLIENT_ERROR_MANAGER_APPLIANCE_IN_USE,
-    CLIENT_ERROR_MANAGER_AGENT_EXISTS,
-    CLIENT_ERROR_MANAGER_AGENT_DOES_NOT_EXIST,
-    CLIENT_ERROR_MANAGER_AGENT_IN_USE,
-    CLIENT_ERROR_MANAGER_USER_EXISTS,
-    CLIENT_ERROR_MANAGER_USER_DOES_NOT_EXIST,
-    CLIENT_ERROR_MANAGER_USER_IN_USE,
-    CLIENT_ERROR_MANAGER_ROLE_DOES_NOT_EXIST,
-    CLIENT_ERROR_MANAGER_USER_ROLE_EXISTS,
-    CLIENT_ERROR_MANAGER_USER_ROLE_DOES_NOT_EXIST,
-    CLIENT_ERROR_MANAGER_CANNOT_DELETE_ONLY_SECURITY_OFFICER,
-    CLIENT_ERROR_MANAGER_CANNOT_REMOVE_ONLY_SECURITY_OFFICER_ROLE,
-    CLIENT_ERROR_MANAGER_SITE_EXISTS,
-    CLIENT_ERROR_MANAGER_SITE_DOES_NOT_EXIST,
-    CLIENT_ERROR_MANAGER_SITE_IN_USE,
-    CLIENT_ERROR_MANAGER_CANNOT_SET_PASSPHRASE_FOR_LOCAL_APPLIANCE,
-    CLIENT_ERROR_MANAGER_INVALID_PASSPHRASE,
-    CLIENT_ERROR_MANAGER_LIFETIME_OVERRIDE_NOT_PERMITTED,
-    CLIENT_ERROR_MANAGER_AGENT_ALREADY_IN_KEY_GROUP,
-    CLIENT_ERROR_MANAGER_AGENT_ALREADY_HAS_DEFAULT_KEY_GROUP,
-    CLIENT_ERROR_MANAGER_AGENT_NOT_IN_KEY_GROUP,
-    CLIENT_ERROR_MANAGER_CORE_SECURITY_ALREADY_LOCKED,
-    CLIENT_ERROR_MANAGER_CORE_SECURITY_ALREADY_UNLOCKED,
-    CLIENT_ERROR_MANAGER_BACKUP_ID_DOES_NOT_EXIST,
-    CLIENT_ERROR_MANAGER_BACKUP_DOES_NOT_EXIST,
-    CLIENT_ERROR_MANAGER_BACKUP_RESTORE_DENIED,
-    CLIENT_ERROR_MANAGER_BACKUP_OR_RESTORE_IN_PROGRESS,
-    CLIENT_ERROR_MANAGER_BACKUP_RESTORE_FILE_DUPLICATE_ENTITY_FAILURE,
-    CLIENT_ERROR_MANAGER_BACKUP_RESTORE_FILE_INVALID,
-    CLIENT_ERROR_MANAGER_FILE_CHUNK_OFFSET_INVALID,
-    CLIENT_ERROR_MANAGER_FILE_CHUNK_IO_ERROR,
-    CLIENT_ERROR_MANAGER_BACKUP_ALREADY_DESTROYED,
-    CLIENT_ERROR_MANAGER_BACKUP_DESTROYED,
-    CLIENT_ERROR_MANAGER_BACKUP_NOT_AVAILABLE,
-    CLIENT_ERROR_MANAGER_CLOCK_ADJUSTMENT_LIMIT_EXCEEDED,
-    CLIENT_ERROR_MANAGER_CLOCK_ADJUSTMENT_ALREADY_PERFORMED_TODAY,
-    CLIENT_ERROR_MANAGER_CLOCK_ADJUSTMENT_FAILED,
-    CLIENT_ERROR_MANAGER_SOFTWARE_UPGRADE_FILE_NOT_FOUND,
-    CLIENT_ERROR_MANAGER_SOFTWARE_UPGRADE_FAILED,
-    CLIENT_ERROR_MANAGER_LIST_SOFTWARE_VERSIONS_FAILED,
-    CLIENT_ERROR_MANAGER_CHANGE_SOFTWARE_VERSION_FAILED,
-    CLIENT_ERROR_MANAGER_VERIFY_SOFTWARE_UPLOAD_FAILED,
-    CLIENT_ERROR_MANAGER_SNMP_MANAGER_EXISTS,
-    CLIENT_ERROR_MANAGER_SNMP_MANAGER_DOES_NOT_EXIST,
-    CLIENT_ERROR_MANAGER_TRANSFER_PARTNER_DOES_NOT_EXIST,
-    CLIENT_ERROR_MANAGER_TRANSFER_PARTNER_EXISTS,
-    CLIENT_ERROR_MANAGER_TRANSFER_PARTNER_IN_USE,
-    CLIENT_ERROR_MANAGER_TRANSFER_PARTNER_ALREADY_IN_KEY_GROUP,
-    CLIENT_ERROR_MANAGER_TRANSFER_PARTNER_NOT_IN_KEY_GROUP,
-    CLIENT_ERROR_MANAGER_TRANSFER_PARTNER_NOT_ENABLED,
-    CLIENT_ERROR_MANAGER_TRANSFER_PARTNER_NOT_ALLOWED_EXPORT_TO,
-    CLIENT_ERROR_MANAGER_TRANSFER_PARTNER_HAS_NO_PUBLIC_KEYS,
-    CLIENT_ERROR_MANAGER_TRANSFER_PARTNER_PUBLIC_KEY_ID_ALREADY_EXISTS,
-    CLIENT_ERROR_MANAGER_APPLIANCE_LOCKED,
-    CLIENT_ERROR_MANAGER_DATA_UNIT_EXPIRED,
-    CLIENT_ERROR_MANAGER_UNEXPECTED_TRANSFER_PARTNER,
-    CLIENT_ERROR_MANAGER_KEY_GROUP_DOES_NOT_ALLOW_EXPORT_FROM,
-    CLIENT_ERROR_MANAGER_TRANSFER_PARTNER_KEY_GROUP_ACCESS_DENIED,
-    CLIENT_ERROR_MANAGER_TRANSFER_PARTNER_NOT_ALLOWED_IMPORT_FROM,
-    CLIENT_ERROR_MANAGER_KEY_GROUP_NOT_ALLOWED_IMPORT_TO,
-    CLIENT_ERROR_MANAGER_DUPLICATE_DATA_UNIT_ID,
-    CLIENT_ERROR_MANAGER_DUPLICATE_DATA_UNIT_KEY_ID,
-    CLIENT_ERROR_MANAGER_DUPLICATE_EXTERNAL_ID,
-    CLIENT_ERROR_MANAGER_CORE_SECURITY_PUBLIC_KEY_NOT_FOUND,
-    CLIENT_ERROR_MANAGER_CHANGE_PRIMARY_LOCAL_NETWORK_ADDRESS_DENIED,
-    CLIENT_ERROR_MANAGER_CHANGE_SECONDARY_LOCAL_NETWORK_ADDRESS_DENIED,
-    CLIENT_ERROR_MANAGER_KEY_POLICY_EXISTS,
-    CLIENT_ERROR_MANAGER_KEY_POLICY_DOES_NOT_EXIST,
-    CLIENT_ERROR_MANAGER_KEY_POLICY_IN_USE,
-    CLIENT_ERROR_MANAGER_CHANGE_SOFTWARE_VERSION_IN_PROGRESS,
-    CLIENT_ERROR_MANAGER_VERIFY_SOFTWARE_UPLOAD_IN_PROGRESS,
-    CLIENT_ERROR_MANAGER_APPLY_SOFTWARE_VERSION_IN_PROGRESS,
-    CLIENT_ERROR_MANAGER_KEY_GROUP_EXISTS,
-    CLIENT_ERROR_MANAGER_KEY_GROUP_DOES_NOT_EXIST,
-    CLIENT_ERROR_MANAGER_KEY_GROUP_IN_USE,
-    CLIENT_ERROR_MANAGER_KEY_DOES_NOT_EXIST,
-    CLIENT_ERROR_MANAGER_KEY_ALREADY_COMPROMISED,
-    CLIENT_ERROR_MANAGER_KEY_ALREADY_IN_KEY_GROUP,
-    CLIENT_ERROR_MANAGER_INVALID_BACKUP_ID,
-    CLIENT_ERROR_MANAGER_LIMIT_EXCEEDED,
-    CLIENT_ERROR_MANAGER_SYSTEM_DUMP_FAILED,
-    CLIENT_ERROR_MANAGER_SYSTEM_DUMP_DOES_NOT_EXIST,
-    CLIENT_ERROR_MANAGER_ADD_NTP_SERVER_FAILED,
-    CLIENT_ERROR_MANAGER_DELETE_NTP_SERVER_FAILED,
-    CLIENT_ERROR_MANAGER_NTP_SERVER_SPECIFIED,
-    CLIENT_ERROR_MANAGER_GET_LOCAL_CLOCK_FAILED,
-    CLIENT_ERROR_MANAGER_ADJUST_LOCAL_CLOCK_FAILED,
-    CLIENT_ERROR_MANAGER_NEED_CORE_SECURITY_BACKUP,
-    CLIENT_ERROR_MANAGER_KEY_DESTRUCTION_IN_PROGRESS,
-    CLIENT_ERROR_IMPORT_10KEYS_ALREADY_UPLOADED,
-    CLIENT_ERROR_IMPORT_10KEYS_FILE_DOES_NOT_EXIST,
-    CLIENT_ERROR_IMPORT_10KEYS_INVALID_FILE_FORMAT,
-    CLIENT_ERROR_IMPORT_10KEYS_FILE_READ_ERROR,
-    CLIENT_ERROR_IMPORT_10KEYS_FAILED,
-    CLIENT_ERROR_IMPORT_10KEYS_DUPLICATE_KEY_ID_AND_VALUE,
-    CLIENT_ERROR_IMPORT_10KEYS_DUPLICATE_KEY_ID,
-    CLIENT_ERROR_IMPORT_10KEYS_KEY_VALUE_NOT_HEX,
-    CLIENT_ERROR_INVALID_BACKUP_TIME,
-    CLIENT_ERROR_KEY_TRANSFER_IN_PROGRESS,
-    CLIENT_ERROR_KEY_TRANSFER_FILE_NOT_VALIDATED,
-    CLIENT_ERROR_LOCAL_APPLIANCE_NOT_PEER_SERVER,
-    CLIENT_ERROR_CANNOT_CONTACT_PEER_SERVER,
-    CLIENT_ERROR_MISMATCHED_SIGNING_PUBLIC_KEY_ID,
-    CLIENT_ERROR_MISMATCHED_ENCRYPTION_PUBLIC_KEY_ID,
-    CLIENT_ERROR_DATA_UNIT_HAS_NO_EXPORTABLE_KEYS,
-    CLIENT_ERROR_SOME_KEYS_NOT_EXPORTABLE, // This is actually a warning -- should we treat it differently? Start at 2000?
-    CLIENT_ERROR_UPDATE_REPLICATION_SCHEMA,
-    CLIENT_ERROR_NOT_SUPPORTED,
-    CLIENT_ERROR_AGENT_KWK_NOT_REGISTERED,
-    CLIENT_ERROR_AGENT_KWK_ID_MISMATCH,
-    CLIENT_ERROR_LIST_KMA_NETWORK_ADDRESSES_FAILED,
-    CLIENT_ERROR_GET_KMA_DNS_INFORMATION_FAILED,
-    CLIENT_ERROR_LIST_KMA_ROUTING_TABLE_ENTRIES_FAILED,
-    CLIENT_ERROR_EXPORT_FORMAT_DISALLOWED,
-    CLIENT_ERROR_TRANSFER_FORMAT_DISALLOWED,
-    CLIENT_ERROR_FIPS_MODE_REQUIRED,
-    CLIENT_ERROR_CLIENT_UPGRADE_REQUIRED,
-    CLIENT_ERROR_RESTORE_INVALID_BACKUP_XML_FORMAT,
-    CLIENT_ERROR_MANAGER_INVALID_MASTER_KEY_PROVIDER_PARAMETERS,
-    CLIENT_ERROR_MANAGER_PENDED_OPERATION_ID_DOES_NOT_EXIST,
-    CLIENT_ERROR_INVALID_PENDED_OPERATION_TYPE,
-    CLIENT_ERROR_SERVER_HSM_REQUIRED_BUT_MISSING,
-    CLIENT_ERROR_MANAGER_INTERNAL,
-    CLIENT_ERROR_AGENT_INVALID_HMAC,
-    CLIENT_ERROR_AGENT_INVALID_KEY,
-    CLIENT_ERROR_QUORUM_NOT_MET,
-    CLIENT_ERROR_MANAGER_CANNOT_QUERY_NTP_SERVER,
-    CLIENT_ERROR_MANAGER_NTP_SERVER_DELTA_TOO_BIG,
-    CLIENT_ERROR_MANAGER_CANNOT_UPDATE_NTP_CONFIG,
-    CLIENT_ERROR_MANAGER_CANNOT_CONTACT_SNMP_MANAGER,
-    CLIENT_ERROR_MANAGER_CORE_SECURITY_ERROR_INTERNAL,
-    CLIENT_ERROR_MANAGER_CORE_SECURITY_NOT_FOUND,
-
-    //  NOTE:  When you add a new CLIENT_ERROR_* definition above this comment,
-    //         you should also add:
-    //
-    //         1)  A case statement for it near the end of the switch
-    //             statement in the GetSoapClientErrorCodeMessage() routine
-    //             in the Common/SoapFaults/ClientSoapFaults.cpp file
-    //         2)  A case statement for it near the end of the switch
-    //             statement in the GetTranslatedSoapFault() routine in the
-    //             Common/SoapFaults/ClientSoapErrorTranslator.cpp file
-    //         3)  A case statement for it near the end of the switch statement
-    //             in the GetErrorString routine in the
-    //             Client/Manager/Global.cpp file
-
-    CLIENT_ERROR_LAST
-};
-
-
-#define GET_FAULT_CODE(errstr) (atoi(errstr))
-
-#endif //CLIENTSOAPFAULTCODES_H
--- a/usr/src/lib/libkmsagent/common/KMSAgent.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3851 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAgent.cpp
- */
-
-#ifdef WIN32
-#define _WIN32_WINNT 0x0400
-#include <windows.h>
-#include <process.h>
-#endif
-
-#include <stdlib.h>
-
-#include "KMSClientProfile.h"
-
-#include "KMS_AgentStub.h"
-#include "KMS_DiscoveryStub.h"
-
-#include "KMSClientProfileImpl.h"
-#include "KMSAgent.h"
-#include "KMSAuditLogger.h"
-#include "KMSAgentSoapUtilities.h"
-#include "KMSAgentStringUtilities.h"
-#include "KMSAgentPKICommon.h"
-#include "KMSAgentLoadBalancer.h"
-
-#include "KMSAgentWebServiceNamespaces.h"
-#include "k_setupssl.h"
-
-#include "ApplianceParameters.h"
-
-#include "AutoMutex.h"
-#include "KMSAgentKeyCallout.h"
-
-#include "KMSAgentLoadBalancer.h"
-#include "KMSAgentDataUnitCache.h"
-
-#ifdef K_SOLARIS_PLATFORM
-#include "KMSAgentStorage.h"
-#endif
-
-#include "ClientSoapFaultCodes.h"
-
-#ifdef METAWARE
-#include "debug.h"
-#include "sizet.h"
-typedef unsigned char		uint8_t;
-typedef unsigned short		uint16_t;
-typedef unsigned int		uint32_t;
-typedef unsigned long long	uint64_t;
-#endif
-
-#include "KMSAgentAESKeyWrap.h"
-#include "KMSAgentKnownAnswerTests.h"
-
-#if defined(METAWARE) && defined(DEBUG_RETURNS)
-extern "C" void ecpt_trace_msg (ECPT_TRACE_ENTRY*, char*, ...);
-
-#define RETURN(a) { ecpt_trace_msg( trace,"(returned=%x)",(a));  return(a);  }
-
-#else
-#define RETURN(a) return(a)
-#endif
-
-/* KMS_AGENT_VERSION_STRING  gets passed in via compilation flags */
-extern "C" const char KMSAgent_Version[KMS_MAX_VERSION_LENGTH + 1] = KMS_AGENT_VERSION_STRING;
-
-
-/* The following enum and structs are used for QueryParameters in
- * ListKeyGroup. Since they are only used in implementation code,
- * so they are not in the header file in order to hide these details
- */
-
-
-/*---------------------------Start Query Parameters Declartion -------- */
-
-#define KMS_MAX_AGENT_FILTER_PARAMETERS     10
-
-enum KMSAgent_SortOrder
-{
-    SORT_ORDER_ASCENDING = 0,
-    SORT_ORDER_DESCENDING
-};
-
-enum KMSAgent_FilterOperator
-{
-    FILTER_OPERATOR_EQUAL = 0,
-    FILTER_OPERATOR_NOT_EQUAL,
-    FILTER_OPERATOR_GREATER_THAN,
-    FILTER_OPERATOR_LESS_THAN,
-    FILTER_OPERATOR_GREATER_THAN_OR_EQUAL,
-    FILTER_OPERATOR_LESS_THAN_OR_EQUAL,
-    FILTER_OPERATOR_STARTS_WITH
-};
-
-struct KMSAgent_FilterParameters
-{
-    utf8char m_wsFieldName[KMS_MAX_FIELD_NAME + 1];
-    enum KMSAgent_FilterOperator m_eFilterOperator;
-    utf8char m_wsFieldValue[KMS_MAX_FIELD_VALUE + 1];
-};
-
-struct KMSAgent_QueryParameters
-{
-    utf8char m_wsSortFieldName[KMS_MAX_FIELD_NAME + 1];
-    enum KMSAgent_SortOrder m_eSortOrder;
-
-    struct KMSAgent_FilterParameters m_aFilterParameters[KMS_MAX_AGENT_FILTER_PARAMETERS];
-    int m_iSizeFilterParameters;
-
-    utf8char m_wsPreviousPageLastIDValue[KMS_MAX_ID + 1];
-    utf8char m_wsPreviousPageLastSortFieldValue[KMS_MAX_FIELD_VALUE + 1];
-};
-
-/*---------------------------End Of Query Parameters Declaration -------- */
-
-#ifdef METAWARE
-int CAgentLoadBalancer::FailOver (int i_iFailedApplianceIndex,
-                                  struct soap *i_pstSoap);
-#endif
-
-extern const char * KMSAgent_GetVersion ()
-{
-    return (KMSAgent_Version);
-}
-
-static bool CopyQueryParametersFromRequest
-(
- struct soap *i_pstSoap,
- int i_iPageSize,
- struct KMS_Agent::KMS_Agent__QueryParameters *i_pQueryParameters,
- struct KMSAgent_QueryParameters *i_pSourceQueryParameters
- )
-{
-
-    // set page size
-    i_pQueryParameters->NextPageSize = i_iPageSize;
-
-    // copy sort field name
-    i_pQueryParameters->SortFieldName = (char *)
-            soap_malloc(i_pstSoap,
-            sizeof (i_pSourceQueryParameters->m_wsSortFieldName));
-    if (i_pQueryParameters->SortFieldName == NULL)
-    {
-        return (false);
-    }
-    strncpy(i_pQueryParameters->SortFieldName,
-            i_pSourceQueryParameters->m_wsSortFieldName,
-            sizeof (i_pSourceQueryParameters->m_wsSortFieldName));
-    i_pQueryParameters->SortFieldName[sizeof (i_pSourceQueryParameters->m_wsSortFieldName)-1] = 0;
-
-    // sort order
-    i_pQueryParameters->SortOrder =
-            (enum KMS_Agent::KMS_Agent__SortOrder)i_pSourceQueryParameters->m_eSortOrder;
-
-    // copy filter parameters
-    i_pQueryParameters->FilterParameters.__size =
-            i_pSourceQueryParameters->m_iSizeFilterParameters;
-
-    if (i_pQueryParameters->FilterParameters.__size > 0)
-    {
-        i_pQueryParameters->
-                FilterParameters.__ptr =
-                (struct KMS_Agent::KMS_Agent__FilterParameters *)soap_malloc
-                (i_pstSoap,
-                sizeof (KMS_Agent::KMS_Agent__FilterParameters) *
-                i_pQueryParameters->FilterParameters.__size);
-
-        if (i_pQueryParameters->FilterParameters.__ptr == NULL)
-        {
-            return (false);
-        }
-    }
-    else
-    {
-        i_pQueryParameters->FilterParameters.__ptr = NULL;
-    }
-
-    for (int i = 0; i < i_pSourceQueryParameters->m_iSizeFilterParameters; i++)
-    {
-        struct KMS_Agent::KMS_Agent__FilterParameters *pParameters;
-
-        pParameters = &(i_pQueryParameters->FilterParameters.__ptr[i]);
-
-        // copy field name
-        pParameters->FieldName = (
-                utf8cstr) soap_malloc(i_pstSoap,
-                sizeof (i_pSourceQueryParameters->
-                m_aFilterParameters[i].m_wsFieldName));
-        if (pParameters->FieldName == NULL)
-        {
-            return (false);
-        }
-
-        strncpy(pParameters->FieldName,
-                i_pSourceQueryParameters->m_aFilterParameters[i].m_wsFieldName,
-                sizeof (i_pSourceQueryParameters->
-                    m_aFilterParameters[i].m_wsFieldName));
-        pParameters->FieldName[sizeof (i_pSourceQueryParameters->
-                    m_aFilterParameters[i].m_wsFieldName)-1] = '\0';
-
-        // copy field value
-        pParameters->FieldValue =
-                (utf8cstr) soap_malloc
-                (i_pstSoap,
-                sizeof (i_pSourceQueryParameters->m_aFilterParameters[i].m_wsFieldValue));
-        if (pParameters->FieldValue == NULL)
-        {
-            return (false);
-        }
-
-        strncpy(pParameters->FieldValue,
-                i_pSourceQueryParameters->m_aFilterParameters[i].m_wsFieldValue,
-                sizeof (i_pSourceQueryParameters->m_aFilterParameters[i].m_wsFieldValue));
-        pParameters->FieldValue[sizeof (i_pSourceQueryParameters->m_aFilterParameters[i].m_wsFieldValue)-1] = '\0';
-
-        // copy FilterOperator
-        pParameters->FilterOperator =
-                (KMS_Agent::KMS_Agent__FilterOperator)
-                i_pSourceQueryParameters->m_aFilterParameters[i].m_eFilterOperator;
-    }
-
-    // copy PreviousPageLastIDValue
-    i_pQueryParameters->PreviousPageLastIDValue =
-            (utf8cstr) soap_malloc(i_pstSoap,
-            sizeof (i_pSourceQueryParameters->m_wsPreviousPageLastIDValue));
-    if (i_pQueryParameters->PreviousPageLastIDValue == NULL)
-    {
-        return (false);
-    }
-    strncpy(i_pQueryParameters->PreviousPageLastIDValue,
-            i_pSourceQueryParameters->m_wsPreviousPageLastIDValue,
-            sizeof (i_pSourceQueryParameters->m_wsPreviousPageLastIDValue));
-    i_pQueryParameters->PreviousPageLastIDValue[sizeof (i_pSourceQueryParameters->m_wsPreviousPageLastIDValue)-1] = '\0';
-
-    // copy PreviousPageLastIDValue
-    i_pQueryParameters->PreviousPageLastSortFieldValue =
-            (utf8cstr) soap_malloc(i_pstSoap,
-            sizeof (i_pSourceQueryParameters->
-            m_wsPreviousPageLastSortFieldValue));
-    if (i_pQueryParameters->PreviousPageLastSortFieldValue == NULL)
-    {
-        return (false);
-    }
-    strncpy(i_pQueryParameters->PreviousPageLastSortFieldValue,
-            i_pSourceQueryParameters->m_wsPreviousPageLastSortFieldValue,
-            sizeof (i_pSourceQueryParameters->
-            m_wsPreviousPageLastSortFieldValue));
-    i_pQueryParameters->PreviousPageLastSortFieldValue[sizeof (i_pSourceQueryParameters->
-            m_wsPreviousPageLastSortFieldValue)-1] = 0;
-
-    return (true);
-}
-
-static void CopyQueryParametersFromResponse (
-                                             struct KMSAgent_QueryParameters *i_pQueryParameters,
-                                             struct KMS_Agent::KMS_Agent__QueryParameters *i_pSourceQueryParameters)
-{
-
-    // copy sort field name
-    if (i_pSourceQueryParameters->SortFieldName)
-    {
-        strncpy(i_pQueryParameters->m_wsSortFieldName,
-                i_pSourceQueryParameters->SortFieldName,
-                sizeof(i_pQueryParameters->m_wsSortFieldName));
-        i_pQueryParameters->m_wsSortFieldName[sizeof(i_pQueryParameters->m_wsSortFieldName)-1] = '\0';
-    }
-
-    // copy order
-    i_pQueryParameters->m_eSortOrder =
-            (KMSAgent_SortOrder) i_pSourceQueryParameters->SortOrder;
-
-    // copy filter parameters
-    i_pQueryParameters->m_iSizeFilterParameters =
-            i_pSourceQueryParameters->FilterParameters.__size;
-
-    // we only accept this amount of parameters
-    if (i_pQueryParameters->m_iSizeFilterParameters >= KMS_MAX_AGENT_FILTER_PARAMETERS)
-    {
-        // this should not happen, but just for defending the code
-        i_pQueryParameters->m_iSizeFilterParameters = KMS_MAX_AGENT_FILTER_PARAMETERS;
-    }
-
-    for (int i = 0; i < i_pQueryParameters->m_iSizeFilterParameters; i++)
-    {
-        struct KMS_Agent::KMS_Agent__FilterParameters *pParameters;
-
-        pParameters = i_pSourceQueryParameters->FilterParameters.__ptr + i;
-
-        i_pQueryParameters->m_aFilterParameters[i].m_eFilterOperator
-                = (KMSAgent_FilterOperator) pParameters->FilterOperator;
-
-        if (pParameters->FieldName)
-        {
-            strncpy(i_pQueryParameters->m_aFilterParameters[i].m_wsFieldName,
-                    pParameters->FieldName,
-                    sizeof (i_pQueryParameters->m_aFilterParameters[i].m_wsFieldName));
-            i_pQueryParameters->
-                    m_aFilterParameters[i].m_wsFieldName[sizeof (i_pQueryParameters->m_aFilterParameters[i].m_wsFieldName) - 1] = '\0';
-        }
-
-        if (pParameters->FieldValue)
-        {
-            strncpy(i_pQueryParameters->m_aFilterParameters[i].m_wsFieldValue,
-                    pParameters->FieldValue,
-                    sizeof(i_pQueryParameters->m_aFilterParameters[i].m_wsFieldValue));
-            i_pQueryParameters->
-                    m_aFilterParameters[i].m_wsFieldValue[sizeof(i_pQueryParameters->m_aFilterParameters[i].m_wsFieldValue)-1] = '\0';
-        }
-    }
-    // copy PreviousPageLastIDValue
-    if (i_pSourceQueryParameters->PreviousPageLastIDValue)
-    {
-        strncpy(i_pQueryParameters->m_wsPreviousPageLastIDValue,
-                i_pSourceQueryParameters->PreviousPageLastIDValue,
-                sizeof(i_pQueryParameters->m_wsPreviousPageLastIDValue));
-        i_pQueryParameters->m_wsPreviousPageLastIDValue[sizeof(i_pQueryParameters->m_wsPreviousPageLastIDValue)-1] = '\0';
-    }
-
-    // copy PreviousPageLastSortFieldValue
-    if (i_pSourceQueryParameters->PreviousPageLastSortFieldValue)
-    {
-        strncpy(i_pQueryParameters->m_wsPreviousPageLastSortFieldValue,
-                i_pSourceQueryParameters->PreviousPageLastSortFieldValue,
-                sizeof(i_pQueryParameters->m_wsPreviousPageLastSortFieldValue));
-        i_pQueryParameters->m_wsPreviousPageLastSortFieldValue[sizeof(i_pQueryParameters->m_wsPreviousPageLastSortFieldValue)-1] = '\0';
-    }
-
-}
-
-/**
- *  copies data unit to the soap data unit structure, placing the xsd_string types on the
- *  gsoap heap.
- *  @return(false if soap_malloc fails
- */
-static bool CopyDataUnitFromRequest (struct soap *i_pstSoap,
-                                     struct KMS_Agent::KMS_Agent__DataUnit *i_pDataUnit,
-                                     const KMSAgent_DataUnit * const i_pSourceDataUnit)
-{
-
-    if (i_pSourceDataUnit)
-    {
-        // copy field name
-        i_pDataUnit->DataUnitID =
-                (utf8cstr) soap_malloc(i_pstSoap,
-                2 * sizeof (i_pSourceDataUnit->m_acDataUnitID) + 1);
-        if (i_pDataUnit->DataUnitID == NULL)
-        {
-            return (false);
-        }
-
-        ConvertBinaryToUTF8HexString(i_pDataUnit->DataUnitID,
-                i_pSourceDataUnit->m_acDataUnitID,
-                KMS_DATA_UNIT_ID_SIZE);
-    }
-    else
-    {
-        strcpy(i_pDataUnit->DataUnitID, "");
-    }
-
-    i_pDataUnit->ExternalUniqueID = (utf8cstr) soap_malloc(i_pstSoap,
-            2 * sizeof (i_pSourceDataUnit->m_acExternalUniqueID) + 1);
-    if (i_pDataUnit->ExternalUniqueID == NULL)
-    {
-        return (false);
-    }
-
-    if (i_pSourceDataUnit->m_iExternalUniqueIDLength > 0 &&
-        i_pSourceDataUnit->m_iExternalUniqueIDLength <= KMS_MAX_EXTERNAL_UNIQUE_ID_SIZE)
-    {
-        ConvertBinaryToUTF8HexString(i_pDataUnit->ExternalUniqueID,
-                i_pSourceDataUnit->m_acExternalUniqueID,
-                i_pSourceDataUnit->m_iExternalUniqueIDLength);
-    }
-    else
-    {
-        strcpy(i_pDataUnit->ExternalUniqueID, "");
-    }
-
-    i_pDataUnit->ExternalTag = (utf8cstr) soap_malloc(i_pstSoap, sizeof (i_pSourceDataUnit->m_acExternalTag));
-    if (i_pDataUnit->ExternalTag == NULL)
-    {
-        return (false);
-    }
-
-    if (strlen(i_pSourceDataUnit->m_acExternalTag) <= sizeof (i_pSourceDataUnit->m_acExternalTag))
-    {
-        strncpy(i_pDataUnit->ExternalTag,
-                i_pSourceDataUnit->m_acExternalTag,
-                sizeof (i_pSourceDataUnit->m_acExternalTag));
-        i_pDataUnit->ExternalTag[sizeof (i_pSourceDataUnit->m_acExternalTag)-1] = '\0';
-    }
-    else
-    {
-        strcpy(i_pDataUnit->ExternalTag, "");
-    }
-
-    i_pDataUnit->Description = (utf8cstr) soap_malloc(i_pstSoap, sizeof (i_pSourceDataUnit->m_acDescription));
-    if (i_pDataUnit->Description == NULL)
-    {
-        return (false);
-    }
-    if (strlen(i_pSourceDataUnit->m_acDescription) <= sizeof (i_pSourceDataUnit->m_acDescription))
-    {
-        strncpy(i_pDataUnit->Description,
-                i_pSourceDataUnit->m_acDescription,
-                sizeof (i_pSourceDataUnit->m_acDescription));
-        i_pDataUnit->Description[sizeof (i_pSourceDataUnit->m_acDescription)-1] = '\0';
-    }
-    else
-    {
-        strcpy(i_pDataUnit->Description, "");
-    }
-
-    i_pDataUnit->DataUnitState = (KMS_Agent::KMS_Agent__DataUnitState) i_pSourceDataUnit->m_iDataUnitState;
-
-    return (true);
-}
-
-/**
- *  Converts an ExternalUniqueID value to UTF8Hexstring value from gSoap managed heap storage
- *  @param  i_pstSoap pointer to gSoap runtime
- *  @param  i_pExternalUniqueID non-NULL pointer to an external unique id to be converted
- *  @return(NULL if memory cannot be allocated
- */
-static char * ConvertBinaryDataFromRequest (struct soap *i_pstSoap,
-                                            const unsigned char * i_pBinaryData,
-                                            int i_iBinaryDataLen)
-{
-    char * pBinaryData = (char *) soap_malloc(i_pstSoap, 2 * i_iBinaryDataLen + 1);
-    if (pBinaryData != NULL)
-    {
-        ConvertBinaryToUTF8HexString(pBinaryData,
-                i_pBinaryData,
-                i_iBinaryDataLen);
-    }
-    return (pBinaryData);
-}
-
-/**
- *  Converts a UTF8 char string value to a fixed length array from
- *  gSoap managed heap storage
- *  @param  pointer to gSoap runtime
- *  @param  i_pUTF8string non-NULL pointer to a null terminated UTF8 string
- *  @param  i_iLen size of arrray to be allocated
- *  @return(NULL if gSoap allocated storage could not be obtained
- */
-static char * ConvertUTF8StringFromRequest (struct soap *i_pstSoap,
-                                            const char * const i_pUTF8string,
-                                            size_t i_iLen)
-{
-    char * pUTF8string = NULL;
-    pUTF8string = (char *) soap_malloc(i_pstSoap, i_iLen);
-    if (pUTF8string != NULL)
-    {
-        strncpy(pUTF8string, i_pUTF8string, i_iLen);
-        pUTF8string[i_iLen-1] = '\0';
-    }
-    return (pUTF8string);
-}
-
-static KMSAgent_ArrayOfKeyGroups * CopyKeyGroupsResponse
-(
- struct KMS_Agent::KMS_Agent__ArrayOfKeyGroups *i_pKeyGroupsResponse
- )
-{
-    // alloc memory for result
-    KMSAgent_ArrayOfKeyGroups *pResult =
-            (KMSAgent_ArrayOfKeyGroups *) calloc(1, sizeof (KMSAgent_ArrayOfKeyGroups));
-
-    // no memory, return
-    if (pResult == NULL)
-    {
-        return (NULL);
-    }
-
-    // copy size
-    pResult->m_iSize = i_pKeyGroupsResponse->__size;
-
-    // if the size is 0, return(an empty result
-    if (pResult->m_iSize == 0)
-    {
-        return (pResult);
-    }
-
-    // alloc memory for all key groups
-    pResult->m_pKeyGroups = (KMSAgent_KeyGroup*)
-            calloc(1, sizeof (KMSAgent_KeyGroup) * pResult->m_iSize);
-
-    if (pResult->m_pKeyGroups == NULL)
-    {
-        free(pResult);
-        return (NULL);
-    }
-
-    for (int i = 0; i < pResult->m_iSize; i++)
-    {
-        KMSAgent_KeyGroup *pKeyGroup;
-
-        pKeyGroup = &(pResult->m_pKeyGroups[i]);
-
-        strncpy(pKeyGroup->m_acKeyGroupID,
-                i_pKeyGroupsResponse->__ptr[i].KeyGroupID,
-                sizeof(pKeyGroup->m_acKeyGroupID));
-        pKeyGroup->m_acKeyGroupID[sizeof(pKeyGroup->m_acKeyGroupID)-1] = '\0';
-
-        strncpy(pKeyGroup->m_acDescription,
-                i_pKeyGroupsResponse->__ptr[i].Description,
-                sizeof(pKeyGroup->m_acDescription));
-        pKeyGroup->m_acDescription[sizeof(pKeyGroup->m_acDescription)-1] = '\0';
-    }
-
-    return (pResult);
-}
-/**
- *  allocate storage for the KMSAgent_ArrayOfKeys struct and the array of keys returned in the
- *  soap response.
- *  @param  i_pProfile pointer to profile
- *  @param  io_pClusterIndex pointer to the cluster index value which is used
- *      by AES Key Unwrap to access the KWK for the KMA corresponding to the
- *      cluster index.
- *  @param  i_pKeysResponse pointer to the soap response' array of keys struct
- *  @return(pointer to allocated KMSAgent_ArrayOfKeys and the corresponding keys, returns NULL
- *  on any error and frees any allocated storage before returning.  For response data validation errors a
- *  message will be logged.
- */
-static KMSAgent_ArrayOfKeys * CopyDataUnitKeysResponse (
-                    KMSClientProfile *i_pProfile,
-                    int * const io_pClusterIndex,
-                    struct KMS_Agent::KMS_Agent__ArrayOfKeys *i_pKeysResponse)
-{
-    KMSAgent_ArrayOfKeys * pResult =
-            (KMSAgent_ArrayOfKeys *) calloc(1, sizeof (KMSAgent_ArrayOfKeys));
-
-    if (pResult == NULL)
-    {
-        return (NULL);
-    }
-
-    // if the size is 0, return(an empty result
-    if (i_pKeysResponse->__size == 0)
-    {
-        return (pResult);
-    }
-
-    if (i_pKeysResponse->__size > KMS_MAX_PAGE_SIZE)
-    {
-        free(pResult);
-        LogError(i_pProfile,
-                AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEY_ARRAY_SIZE_RESPONSE,
-                NULL,
-                NULL,
-                NULL);
-        return (NULL);
-    }
-
-    pResult->m_iSize = i_pKeysResponse->__size;
-
-    // alloc memory for all keys returned
-    pResult->m_pKeys = (KMSAgent_Key*)
-            calloc(1, sizeof (KMSAgent_Key) * i_pKeysResponse->__size);
-
-    if (pResult->m_pKeys == NULL)
-    {
-        free(pResult);
-        return (NULL);
-        // no memory, don't log
-    }
-
-    // copy keys from response
-    for (int i = 0; i < i_pKeysResponse->__size; i++)
-    {
-        if (KMS_KEY_ID_SIZE != ConvertUTF8HexStringToBinary(
-            i_pKeysResponse->__ptr[i].KeyID, NULL))
-        {
-            free(pResult->m_pKeys);
-            free(pResult);
-
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEY_RESPONSE,
-                    NULL,
-                    NULL,
-                    NULL);
-            return (NULL);
-        }
-
-        ConvertUTF8HexStringToBinary(
-                i_pKeysResponse->__ptr[i].KeyID, pResult->m_pKeys[i].m_acKeyID);
-
-        if ((KMS_AGENT_KEY_STATE) i_pKeysResponse->__ptr[i].KeyState < KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS ||
-            (KMS_AGENT_KEY_STATE) i_pKeysResponse->__ptr[i].KeyState > KMS_KEY_STATE_COMPROMISED)
-        {
-            free(pResult->m_pKeys);
-            free(pResult);
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEY_STATE_RESPONSE,
-                    NULL,
-                    NULL,
-                    NULL);
-            return (NULL);
-        }
-        pResult->m_pKeys[i].m_iKeyState = (KMS_AGENT_KEY_STATE) i_pKeysResponse->__ptr[i].KeyState;
-
-        if ((KMS_KEY_TYPE) i_pKeysResponse->__ptr[i].KeyType != (KMS_KEY_TYPE)KMS_KEY_TYPE_AES_256)
-        {
-            free(pResult->m_pKeys);
-            free(pResult);
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEY_TYPE_RESPONSE,
-                    NULL,
-                    NULL,
-                    NULL);
-            return (NULL);
-        }
-        pResult->m_pKeys[i].m_iKeyType = (KMS_KEY_TYPE) i_pKeysResponse->__ptr[i].KeyType;
-
-        strncpy(pResult->m_pKeys[i].m_acKeyGroupID,
-                i_pKeysResponse->__ptr[i].KeyGroupID,
-                sizeof(pResult->m_pKeys[i].m_acKeyGroupID));
-        pResult->m_pKeys[i].m_acKeyGroupID[sizeof(pResult->m_pKeys[i].m_acKeyGroupID)-1] = '\0';
-
-        CAgentLoadBalancer *pAgentLoadBalancer = reinterpret_cast
-                <CAgentLoadBalancer *> (i_pProfile->m_pAgentLoadBalancer);
-
-        if (pAgentLoadBalancer->AESKeyWrapSupported(*io_pClusterIndex))
-        {
-            if (i_pKeysResponse->__ptr[i].Key.__size != KMS_MAX_WRAPPED_KEY_SIZE)
-            {
-                free(pResult->m_pKeys);
-                free(pResult);
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_WRAPPED_KEY_LENGTH_RESPONSE,
-                        NULL,
-                        NULL,
-                        NULL);
-                return (NULL);
-            }
-            else
-            {
-                if (pAgentLoadBalancer->AESKeyUnwrap(io_pClusterIndex,
-                    i_pKeysResponse->__ptr[i].Key.__ptr,
-                    pResult->m_pKeys[i].m_acKey) == false)
-                {
-                    free(pResult->m_pKeys);
-                    free(pResult);
-                    LogError(i_pProfile,
-                            AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_AESKEYUNWRAP_ERROR,
-                            NULL,
-                            NULL,
-                            NULL);
-
-                    return (NULL);
-                }
-            }
-        }
-        else  // non-AES Key Wrap
-        {
-            if (i_pKeysResponse->__ptr[i].Key.__size != KMS_MAX_KEY_SIZE)
-            {
-                free(pResult->m_pKeys);
-                free(pResult);
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEY_LENGTH_RESPONSE,
-                        NULL,
-                        NULL,
-                        NULL);
-                return (NULL);
-            }
-
-            memcpy(pResult->m_pKeys[i].m_acKey,
-                    i_pKeysResponse->__ptr[i].Key.__ptr,
-                    KMS_MAX_KEY_SIZE);
-        }
-
-        pResult->m_pKeys[i].m_iKeyLength = KMS_MAX_KEY_SIZE;
-
-        if (KMSAgentKeyCallout(pResult->m_pKeys[i].m_acKey) != 0)
-        {
-            free(pResult->m_pKeys);
-            free(pResult);
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_KEY_CALLOUT_ERROR,
-                    NULL,
-                    NULL,
-                    NULL);
-            return (NULL);
-        }
-    }
-
-    return (pResult);
-}
-
-/**
- *  This function returns the API status code based upon the error string in the profile and
- *  availability of KMAs. KMA availability determination is based upon the i_iKMAFailoverReturnCode
- *  parameter and the size of the cluster.  A cluster size of 0 is an indicator that there are
- *  no KMAs available, unless cluster discovery is disabled by the profile's cluster discovery
- *  frequency.
- *
- *  @param i_pProfile  pointer to the profile
- *  @param i_iKMAFailoverReturnCode the return(code from CAgentLoadBalancer::Failover() or 0
- *  if it was not called.  This is used to for determining if KMS_AGENT_STATUS_KMS_UNAVAILABLE
- *  needs to be returned.
- *  @returns KMS_AGENT_STATUS_GENERIC_ERROR
- *  unless the profile's last error message field contains a message substring matching one of the
- *  KMSAgent service soap fault strings.
- *
- */
-static KMS_AGENT_STATUS KMSAgent_GetLastStatusCode (KMSClientProfile *i_pProfile,
-                                                    int i_iKMAFailoverReturnCode)
-{
-    bool bServerError = false;
-
-    FATAL_ASSERT(i_pProfile);
-
-    // see KMSAgentLoadBalancer.h for return codes from Failover
-
-    if (i_iKMAFailoverReturnCode == CAgentLoadBalancer::NO_FIPS_KMA_AVAILABLE)
-    {
-        return (KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE);
-    }
-
-    // parse for server errors -
-    // when KMAs have no ready keys we want to inform the client, vs reporting that the KMS is unavailable
-    bServerError = ServerError(i_pProfile->m_wsErrorString, 0);
-
-    // parse for Soap errors
-    const char* sFaultstringStart = strstr(i_pProfile->m_wsErrorString, "SoapFaultString=");
-
-    int iErrorCode = INVALID_CLIENT_ERROR; // initially
-
-
-    // if there is a Soap error
-    if (sFaultstringStart)
-    {
-        if (SSL_InvalidCertificate(sFaultstringStart))
-        {
-            // this can be caused by the KMS invalidating the agent's cert
-            return (KMS_AGENT_STATUS_ACCESS_DENIED);
-        }
-        iErrorCode = GET_FAULT_CODE(sFaultstringStart + strlen("SoapFaultString="));
-    }
-
-
-#ifdef METAWARE
-    // log the failure code/cause to the event log
-    LogToFile(i_iKMAFailoverReturnCode, i_pProfile->m_wsErrorString);
-    LogToFile(iErrorCode, "error code");
-#endif
-
-
-    // parse return code passed in from last call to FailOver, Balance or BalanceByDataUnitKeyID
-    // if failover reported no kma and there is a valid server error and client couldn't get keys
-    if (i_iKMAFailoverReturnCode == CAgentLoadBalancer::NO_KMA_AVAILABLE &&
-        bServerError &&
-        iErrorCode == CLIENT_ERROR_AGENT_NO_READY_KEYS)
-    {
-        return (KMS_AGENT_STATUS_KMS_UNAVAILABLE);
-    }
-
-    // if there is a server error and we are doing discovery
-    if (bServerError &&
-        ((i_pProfile->m_iClusterDiscoveryFrequency > 0 &&
-        i_pProfile->m_iClusterNum == 0)
-        || iErrorCode == CLIENT_ERROR_AGENT_APPLIANCE_LOCKED))
-    {
-        return (KMS_AGENT_STATUS_KMS_UNAVAILABLE);
-    }
-
-    if (bServerError && i_iKMAFailoverReturnCode == CAgentLoadBalancer::NO_KMA_AVAILABLE)
-    {
-        return (KMS_AGENT_STATUS_KMS_UNAVAILABLE);
-    }
-
-    if ( i_iKMAFailoverReturnCode == CAgentLoadBalancer::AES_KEY_UNWRAP_ERROR )
-        return (KMS_AGENT_AES_KEY_UNWRAP_ERROR);
-    if ( i_iKMAFailoverReturnCode == CAgentLoadBalancer::AES_KEY_WRAP_SETUP_ERROR )
-        return (KMS_AGENT_AES_KEY_WRAP_SETUP_ERROR);
-
-    if (iErrorCode == CLIENT_ERROR_ACCESS_DENIED)
-        return (KMS_AGENT_STATUS_ACCESS_DENIED);
-    if (iErrorCode == CLIENT_ERROR_SERVER_BUSY)
-        return (KMS_AGENT_STATUS_SERVER_BUSY);
-    if (iErrorCode == CLIENT_ERROR_AGENT_INVALID_PARAMETERS)
-        return (KMS_AGENT_STATUS_INVALID_PARAMETER);
-    if (iErrorCode == CLIENT_ERROR_AGENT_KEY_DOES_NOT_EXIST)
-        return (KMS_AGENT_STATUS_KEY_DOES_NOT_EXIST);
-    if (iErrorCode == CLIENT_ERROR_AGENT_KEY_DESTROYED)
-        return (KMS_AGENT_STATUS_KEY_DESTROYED);
-    if (iErrorCode == CLIENT_ERROR_AGENT_DATA_UNIT_ID_NOT_FOUND_EXTERNAL_ID_EXISTS)
-        return (KMS_AGENT_STATUS_DATA_UNIT_ID_NOT_FOUND_EXTERNAL_ID_EXISTS);
-    if (iErrorCode == CLIENT_ERROR_AGENT_DUPLICATE_EXTERNAL_ID)
-        return (KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS);
-    if (iErrorCode == CLIENT_ERROR_AGENT_NO_READY_KEYS)
-        return (KMS_AGENT_STATUS_KMS_NO_READY_KEYS);
-
-    // this check is made last to allow other specific errors that may have occurred to take precedence,
-    // e.g. return access denied before reporting No FIPS KMAs
-    if (i_pProfile->m_eKMSmode == FIPS_MODE &&
-        KMSClient_NoFIPSCompatibleKMAs(i_pProfile))
-    {
-        return (KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE);
-    }
-
-    return (KMS_AGENT_STATUS_GENERIC_ERROR);
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSAgent_InitializeLibrary
- *--------------------------------------------------------------------------*/
-#include "KMSAuditLogger.h"
-
-extern "C"
-KMS_AGENT_STATUS KMSAgent_InitializeLibrary (utf8cstr const i_pWorkingDirectory,
-                                             int i_bUseFileLog)
-
-{
-    bool bSuccess;
-
-#if defined(METAWARE)
-#warn "debug timing is on"
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_InitializeLibrary);
-#endif
-
-#if defined(DEBUG) && defined(METAWARE)
-    log_printf("KMSAgent_InitializeLibrary : Entered");
-#endif
-
-    bSuccess = KMSClient_InitializeLibrary(
-            i_pWorkingDirectory,
-            i_bUseFileLog);
-
-    if (bSuccess)
-    {
-        RETURN(KMS_AGENT_STATUS_OK);
-    }
-
-    RETURN(KMS_AGENT_STATUS_GENERIC_ERROR);
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSAgent_KnownAnswerTests
- *
- *--------------------------------------------------------------------------*/
-KMS_AGENT_STATUS KMSAgent_KnownAnswerTests()
-{
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_KnownAnswerTests);
-#endif
-
-   // Known Answer Test on AES Key Wrap code
-   if ( KnownAnswerTestAESKeyWrap() != 0 )
-   {
-       RETURN(KMS_AGENT_STATUS_FIPS_KAT_AES_KEYWRAP_ERROR);
-   }
-
-   if ( KnownAnswerTestAESECB() != 0 )
-   {
-       RETURN(KMS_AGENT_STATUS_FIPS_KAT_AES_ECB_ERROR);
-   }
-
-   if ( KnownAnswerTestHMACSHA1() != 0 )
-   {
-       RETURN(KMS_AGENT_STATUS_FIPS_KAT_HMAC_SHA1_ERROR);
-   }
-
-   RETURN(KMS_AGENT_STATUS_OK);
-
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSAgent_FinalizeLibrary
- *
- *--------------------------------------------------------------------------*/
-
-extern "C"
-KMS_AGENT_STATUS KMSAgent_FinalizeLibrary ()
-{
-    bool bSuccess;
-
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_FinalizeLibrary);
-#endif
-
-    bSuccess = KMSClient_FinalizeLibrary();
-
-    if (bSuccess)
-    {
-        RETURN(KMS_AGENT_STATUS_OK);
-    }
-
-    RETURN(KMS_AGENT_STATUS_GENERIC_ERROR);
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSAgent_GetLastErrorMessage
- *
- *--------------------------------------------------------------------------*/
-
-extern "C"
-utf8cstr KMSAgent_GetLastErrorMessage (KMSClientProfile* i_pProfile)
-{
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_GetLastErrorMessage);
-#endif
-
-    if (i_pProfile == NULL)
-    {
-        RETURN(NULL);
-    }
-
-    RETURN(KMSClient_GetLastErrorMessage(i_pProfile));
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSAgent_GetClusterInformation
- *
- *--------------------------------------------------------------------------*/
-extern "C"
-KMS_AGENT_STATUS KMSAgent_GetClusterInformation (
-                                                 KMSClientProfile * const i_pProfile,
-                                                 int i_iEntitySiteIDSize,
-                                                 int i_iClusterEntryArraySize,
-                                                 utf8cstr const o_pEntitySiteID,
-                                                 int * const o_pApplianceNum,
-                                                 KMSClusterEntry * const o_pClusterEntryArray)
-{
-    bool bSuccess;
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_GetClusterInformation);
-#endif
-
-    if (!i_pProfile)
-    {
-        Log(AUDIT_CLIENT_AGENT_GET_CLUSTER_INFORMATION_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Profile arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (!o_pEntitySiteID || (i_iEntitySiteIDSize <= (KMS_MAX_ENTITY_SITE_ID)))
-    {
-        Log(AUDIT_CLIENT_AGENT_GET_CLUSTER_INFORMATION_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "EntitySiteIDSize arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (i_iClusterEntryArraySize > KMS_MAX_CLUSTER_NUM)
-    {
-        Log(AUDIT_CLIENT_AGENT_GET_CLUSTER_INFORMATION_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "i_iClusterEntryArraySize exceeds KMS_MAX_CLUSTER_NUM");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    
-    if (!o_pApplianceNum)
-    {
-        Log(AUDIT_CLIENT_AGENT_GET_CLUSTER_INFORMATION_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "ApplianceNum arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (!o_pClusterEntryArray ||
-        (i_iClusterEntryArraySize <= 0))
-    {
-        Log(AUDIT_CLIENT_AGENT_GET_CLUSTER_INFORMATION_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "ClusterEntry or Size arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (!KMSClient_ProfileLoaded(i_pProfile))
-    {
-        RETURN(KMS_AGENT_STATUS_PROFILE_NOT_LOADED);
-    }
-
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) i_pProfile->m_pLock);
-
-    bSuccess = KMSClient_GetClusterInformation(
-            i_pProfile,
-            o_pEntitySiteID,
-            i_iEntitySiteIDSize,
-            o_pApplianceNum,
-            o_pClusterEntryArray,
-            i_iClusterEntryArraySize);
-
-    // KMSClient_GetClusterInformation logs if there was an error
-
-    if (bSuccess)
-    {
-        RETURN(KMS_AGENT_STATUS_OK);
-    }
-
-    RETURN(KMSAgent_GetLastStatusCode(i_pProfile, 0));
-}
-
-extern "C"
-KMS_AGENT_STATUS KMSAgent_SelectAppliance (
-                                           KMSClientProfile * const i_pProfile,
-                                           utf8cstr const i_pApplianceAddress)
-{
-    bool bSuccess;
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_SelectAppliance);
-#endif
-
-    if (!i_pProfile)
-    {
-        Log(AUDIT_CLIENT_AGENT_SELECT_APPLIANCE_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Profile arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!i_pApplianceAddress)
-    {
-        Log(AUDIT_CLIENT_AGENT_GET_CLUSTER_INFORMATION_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "ApplianceAddress arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (!KMSClient_ProfileLoaded(i_pProfile))
-    {
-        RETURN(KMS_AGENT_STATUS_PROFILE_NOT_LOADED);
-    }
-
-    // All modes are supported by this function.
-
-    bSuccess = KMSClient_SelectAppliance(i_pProfile, i_pApplianceAddress);
-
-    if (bSuccess)
-    {
-        RETURN(KMS_AGENT_STATUS_OK);
-    }
-
-    RETURN(KMSAgent_GetLastStatusCode(i_pProfile, 0));
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSAgent_LoadProfile
- *
- *--------------------------------------------------------------------------*/
-extern "C"
-KMS_AGENT_STATUS KMSAgent_LoadProfile (
-                                       KMSClientProfile * const io_pProfile,
-                                       utf8cstr const i_pProfileName,
-                                       utf8cstr const i_pAgentID,
-                                       utf8cstr const i_pPassphrase,
-                                       utf8cstr const i_pInitialApplianceAddress,
-                                       int i_iTransactionTimeout,
-                                       int i_iFailOverLimit,
-                                       int i_iClusterDiscoveryFrequency,
-                                       int i_eKMSmode)
-{
-    bool bSuccess;
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_LoadProfile);
-#endif
-
-#if defined(DEBUG) && defined(METAWARE)
-    log_printf("KMSAgent_LoadProfile : Entered");
-#endif
-    if (!io_pProfile ||
-        !i_pProfileName || (strlen(i_pProfileName) <= 0))
-    {
-        Log(AUDIT_CLIENT_AGENT_LOAD_PROFILE_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Profile or Name arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!i_pInitialApplianceAddress || (strlen(i_pInitialApplianceAddress) <= 0))
-    {
-        Log(AUDIT_CLIENT_AGENT_LOAD_PROFILE_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "InitialApplianceAddress arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (i_iTransactionTimeout <= 0)
-    {
-        Log(AUDIT_CLIENT_AGENT_LOAD_PROFILE_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "TransactionTimeout arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (i_iClusterDiscoveryFrequency < 0)
-    {
-        Log(AUDIT_CLIENT_AGENT_LOAD_PROFILE_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "ClusterDiscoveryFrequency arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    // for enrollment both arguments are required
-    if ((i_pAgentID && !i_pPassphrase) || (i_pPassphrase && !i_pAgentID))
-    {
-        Log(AUDIT_CLIENT_AGENT_LOAD_PROFILE_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Enrollment requires AgentID & Passphrase");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (i_pAgentID && (strlen(i_pAgentID) <= 0))
-    {
-        Log(AUDIT_CLIENT_AGENT_LOAD_PROFILE_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "AgentID arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (i_pPassphrase && (strlen(i_pPassphrase) <= 0))
-    {
-        Log(AUDIT_CLIENT_AGENT_LOAD_PROFILE_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Passphrase arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if ( i_eKMSmode != DEFAULT_MODE && i_eKMSmode != FIPS_MODE )
-    {
-        Log(AUDIT_CLIENT_AGENT_LOAD_PROFILE_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "KMS security mode arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (KMSClient_ProfileLoaded(io_pProfile))
-    {
-        Log(AUDIT_CLIENT_AGENT_LOAD_PROFILE_PROFILE_ALREADY_LOADED,
-                NULL,
-                NULL,
-                "profile is already loaded and should be unloaded first");
-        RETURN(KMS_AGENT_STATUS_PROFILE_ALREADY_LOADED);
-    }
-
-    memset(io_pProfile, 0, sizeof (KMSClientProfile));
-    char sInitialApplianceAddress[KMS_MAX_NETWORK_ADDRESS+1];
-    strncpy(sInitialApplianceAddress, i_pInitialApplianceAddress, sizeof(sInitialApplianceAddress));
-    sInitialApplianceAddress[sizeof(sInitialApplianceAddress)-1] = '\0';
-    
-    // Convert to lower case
-
-    for ( size_t i = 0; i < strlen( sInitialApplianceAddress ); i++ )
-    {
-        if ( isupper( sInitialApplianceAddress[i] ) )
-        {
-            sInitialApplianceAddress[i] = tolower( sInitialApplianceAddress[i] );
-        }
-    }
-
-    bSuccess = KMSClient_LoadProfile(
-                            io_pProfile,
-                            i_pProfileName,
-                            i_pAgentID,
-                            i_pPassphrase,
-                            sInitialApplianceAddress,
-                            i_iTransactionTimeout,
-                            i_iFailOverLimit,
-                            i_iClusterDiscoveryFrequency,
-                            i_eKMSmode);
-
-    if (bSuccess)
-    {
-#if defined(DEBUG) && defined(METAWARE)
-        log_printf("KMSAgent_LoadProfile : Returned ok");
-#endif
-        RETURN(KMS_AGENT_STATUS_OK);
-    }
-
-    // when not enrolling & cluster discovery is disabled there are no
-    // soap transactions so failover would not have occurred
-    bool bEnrolling = i_pAgentID && i_pPassphrase;
-
-    if (!bEnrolling &&
-        i_iClusterDiscoveryFrequency == 0)
-    {
-        RETURN(KMSAgent_GetLastStatusCode(io_pProfile, 0));
-    }
-    else
-    {
-//        if (i_eKMSmode == FIPS_MODE &&
-//            KMSClient_NoFIPSCompatibleKMAs(io_pProfile))
-//        {
-//            RETURN(KMSAgent_GetLastStatusCode(io_pProfile,
-//                CAgentLoadBalancer::NO_FIPS_KMA_AVAILABLE));
-//        }
-
-        RETURN(KMSAgent_GetLastStatusCode(io_pProfile,
-            CAgentLoadBalancer::NO_KMA_AVAILABLE));
-    }
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSAgent_UnloadProfile
- *
- *--------------------------------------------------------------------------*/
-extern "C"
-KMS_AGENT_STATUS KMSAgent_UnloadProfile (KMSClientProfile * const i_pProfile)
-{
-    bool bSuccess;
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_UnloadProfile);
-#endif
-
-    if (!i_pProfile)
-    {
-        Log(AUDIT_CLIENT_AGENT_UNLOAD_PROFILE_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Profile arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (!KMSClient_ProfileLoaded(i_pProfile))
-    {
-        RETURN(KMS_AGENT_STATUS_PROFILE_NOT_LOADED);
-    }
-
-    bSuccess = KMSClient_UnloadProfile(i_pProfile);
-
-    if (bSuccess)
-    {
-        RETURN(KMS_AGENT_STATUS_OK);
-    }
-
-    RETURN(KMSAgent_GetLastStatusCode(i_pProfile, 0));
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSAgent_DeleteProfile
- *
- *--------------------------------------------------------------------------*/
-extern "C"
-KMS_AGENT_STATUS KMSAgent_DeleteProfile (utf8cstr i_pProfileName)
-{
-    bool bSuccess;
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_DeleteProfile);
-#endif
-
-    if (!i_pProfileName || (strlen(i_pProfileName) <= 0))
-    {
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    bSuccess = KMSClient_DeleteProfile(i_pProfileName);
-
-    if (bSuccess)
-    {
-        RETURN(KMS_AGENT_STATUS_OK);
-    }
-
-    RETURN(KMS_AGENT_STATUS_GENERIC_ERROR);
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSAgent_ListKeyGroups
- *
- *--------------------------------------------------------------------------*/
-
-extern "C"
-KMS_AGENT_STATUS KMSAgent_ListKeyGroups (
-                                         KMSClientProfile * const i_pProfile,
-                                         KMSAgent_ArrayOfKeyGroups* * const o_ppKeyGroups)
-{
-    bool bSuccess;
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_ListKeyGroups);
-#endif
-
-    int bIsLastPage;
-    struct KMSAgent_QueryParameters stQueryParameters;
-
-    if (!i_pProfile)
-    {
-        Log(AUDIT_CLIENT_AGENT_LIST_KEY_GROUPS_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Profile arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!o_ppKeyGroups)
-    {
-        Log(AUDIT_CLIENT_AGENT_LIST_KEY_GROUPS_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "KeyGroups arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (!KMSClient_ProfileLoaded(i_pProfile))
-    {
-        RETURN(KMS_AGENT_STATUS_PROFILE_NOT_LOADED);
-    }
-
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) i_pProfile->m_pLock);
-
-    struct soap *pstSoap = (struct soap *) i_pProfile->m_pvSoap;
-
-    // Get Key Groups
-    memset(&stQueryParameters, 0, sizeof (stQueryParameters));
-
-    struct KMS_Agent::KMS_Agent__QueryParameters oQueryParameters;
-    struct KMS_Agent::KMS_Agent__ListKeyGroupsResponse oResponse;
-
-    memset(&oQueryParameters, 0, sizeof (oQueryParameters));
-
-    bSuccess = CopyQueryParametersFromRequest(pstSoap,
-            KMS_MAX_LIST_KEY_GROUPS,
-            &oQueryParameters,
-            &stQueryParameters);
-    if (!bSuccess)
-    {
-        soap_destroy(pstSoap);
-        soap_end(pstSoap);
-        // no memory, don't log
-        RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-    }
-
-    CAgentLoadBalancer *pLoadBalancer =
-            (CAgentLoadBalancer *) i_pProfile->m_pAgentLoadBalancer;
-
-    int iIndex = pLoadBalancer->Balance();
-
-    if ( iIndex >= 0 )
-    {
-        do
-        {
-            const char* sURL =
-                    pLoadBalancer->GetHTTPSURL(iIndex, i_pProfile->m_iPortForAgentService);
-            strncpy(i_pProfile->m_sURL, sURL, sizeof(i_pProfile->m_sURL));
-            i_pProfile->m_sURL[sizeof(i_pProfile->m_sURL)-1] = '\0';
-
-            bSuccess = KMS_Agent::soap_call_KMS_Agent__ListKeyGroups(
-                    pstSoap,
-                    sURL,
-                    NULL,
-                    oQueryParameters,
-                    oResponse) == SOAP_OK;
-
-            if (!bSuccess)
-            {
-                iIndex = pLoadBalancer->FailOver(iIndex, pstSoap);
-
-                char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH];
-                char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH];
-
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                GetSoapFault(sSoapFaultMsg, pstSoap);
-
-                LogError(i_pProfile, AUDIT_CLIENT_AGENT_LIST_KEY_GROUPS_SOAP_ERROR,
-                        NULL,
-                        sKmaAddress,
-                        sSoapFaultMsg);
-            }
-            else
-            {
-                pLoadBalancer->UpdateResponseStatus(iIndex);
-            }
-        }
-        while (iIndex >= 0 && (!bSuccess));
-    }
-    else
-    {
-        bSuccess = false;
-    }
-
-    if (bSuccess)
-    {
-        bIsLastPage = oResponse.LastPage;
-
-        *o_ppKeyGroups = CopyKeyGroupsResponse(&oResponse.KeyGroups);
-        if (*o_ppKeyGroups == NULL)
-        {
-            bSuccess = false;
-            // no memory, don't log
-        }
-
-        CopyQueryParametersFromResponse(&stQueryParameters,
-                &oResponse.NextPageQueryParameters);
-    }
-
-    // free allocated memory for output if error condition
-    // Clean up SOAP
-
-    soap_destroy(pstSoap);
-    soap_end(pstSoap);
-
-    if (bSuccess)
-        RETURN(KMS_AGENT_STATUS_OK);
-
-    RETURN(KMSAgent_GetLastStatusCode(i_pProfile, iIndex));
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSAgent_FreeArrayOfKeyGroups
- *
- *--------------------------------------------------------------------------*/
-
-extern "C"
-void KMSAgent_FreeArrayOfKeyGroups (
-                                    struct KMSAgent_ArrayOfKeyGroups *i_pArrayOfKeyGroups)
-{
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_FreeArrayOfKeyGroups);
-#endif
-    if (!i_pArrayOfKeyGroups)
-    {
-        return;
-    }
-
-    // free memory for all information groups
-    if (i_pArrayOfKeyGroups->m_pKeyGroups)
-    {
-        free(i_pArrayOfKeyGroups->m_pKeyGroups);
-    }
-
-    free(i_pArrayOfKeyGroups);
-}
-
-extern "C"
-KMS_AGENT_STATUS KMSAgent_CreateKey (
-                                     KMSClientProfile * const i_pProfile,
-                                     const KMSAgent_DataUnit * const i_pDataUnit,
-                                     KEY_GROUP_ID const i_pKeyGroupID,
-                                     KMSAgent_Key * const o_pKey)
-{
-    bool bSuccess;
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_CreateKey);
-#endif
-
-    if (!i_pProfile)
-    {
-        Log(AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Profile arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!o_pKey)
-    {
-        Log(AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Key arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (!KMSClient_ProfileLoaded(i_pProfile))
-    {
-        RETURN(KMS_AGENT_STATUS_PROFILE_NOT_LOADED);
-    }
-
-    if (i_pKeyGroupID &&
-        strlen(i_pKeyGroupID) > KMS_MAX_KEY_GROUP_ID_SIZE)
-    {
-        Log(AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "GroupID arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) i_pProfile->m_pLock);
-
-    struct KMS_Agent::KMS_Agent__DataUnit
-                        stDataUnit = {"", "", "", "",
-                            (KMS_Agent::KMS_Agent__DataUnitState) 0};
-
-    struct soap *pstSoap = (struct soap *) i_pProfile->m_pvSoap;
-    struct KMS_Agent::KMS_Agent__CreateKeyResponse oResponse;
-
-    if (i_pDataUnit != NULL)
-    {
-        if (!CopyDataUnitFromRequest(pstSoap,
-            &stDataUnit,
-            i_pDataUnit))
-        {
-            soap_destroy(pstSoap);
-            soap_end(pstSoap);
-            // no memory dont' log
-            RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-        }
-    }
-
-    char * pKeyGroupID = NULL;
-    if (i_pKeyGroupID)
-    {
-        pKeyGroupID = ConvertUTF8StringFromRequest(pstSoap,
-                i_pKeyGroupID,
-                KMS_MAX_KEY_GROUP_ID_SIZE + 1);
-        if (pKeyGroupID == NULL)
-        {
-            soap_destroy(pstSoap);
-            soap_end(pstSoap);
-            // no memory dont' log
-            RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-        }
-    }
-
-    CAgentLoadBalancer *pLoadBalancer =
-            (CAgentLoadBalancer *) i_pProfile->m_pAgentLoadBalancer;
-
-    char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH];
-    char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH];
-
-    int iIndex;
-    UTF8_KEYID acKWKID;
-    bool bClientAESKeyWrapSetupError = false;
-
-    if (i_pDataUnit)
-    {
-        // attempt to maintain affinity with KMA for specified DU ID
-        iIndex = pLoadBalancer->BalanceByDataUnitID(
-                i_pDataUnit->m_acDataUnitID,
-                KMS_DATA_UNIT_ID_SIZE);
-    }
-    else
-    {
-        iIndex = pLoadBalancer->Balance();
-    }
-    
-    if (iIndex >= 0)
-    {
-        do
-        {
-            bSuccess = true;
-            const char* sURL = pLoadBalancer->GetHTTPSURL(
-                    iIndex,
-                    i_pProfile->m_iPortForAgentService);
-
-            strncpy(i_pProfile->m_sURL, sURL, sizeof(i_pProfile->m_sURL));
-
-            i_pProfile->m_sURL[sizeof(i_pProfile->m_sURL)-1] = '\0';
-
-            Long64 lKMAID = pLoadBalancer->GetKMAID(iIndex);
-
-            if (bSuccess && pLoadBalancer->AESKeyWrapSupported(iIndex))
-            {
-                // if this fails we want to utilize normal failover logic, GetKWKID
-                // logs error
-                bSuccess = pLoadBalancer->GetKWKID(iIndex, lKMAID, pstSoap,
-					acKWKID, &bClientAESKeyWrapSetupError) ? true : false;
-                if (bSuccess)
-                {
-                    bSuccess = KMS_Agent::soap_call_KMS_Agent__CreateKey2(
-                            pstSoap,
-                            sURL,
-                            NULL,
-                            stDataUnit,
-                            i_pKeyGroupID ? pKeyGroupID : (char *) "",
-                            acKWKID,
-                            //NOTE: this is ugly but the soap response struct's are the same for both flavors of CreateKey
-                            *(reinterpret_cast<struct KMS_Agent::KMS_Agent__CreateKey2Response *>(&oResponse))) == SOAP_OK;
-                }
-            }
-            else  if (bSuccess) // NO AES Key Wrap
-            {
-                bSuccess = KMS_Agent::soap_call_KMS_Agent__CreateKey(
-                        pstSoap,
-                        sURL,
-                        NULL,
-                        stDataUnit,
-                        i_pKeyGroupID ? pKeyGroupID : (char *) "",
-                        oResponse) == SOAP_OK;
-            }
-
-            // don'f failover for Client side AES Key Wrap setup problems
-            if (!bSuccess && !bClientAESKeyWrapSetupError)
-            {
-                iIndex = pLoadBalancer->FailOver(iIndex, pstSoap);
-
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                GetSoapFault(sSoapFaultMsg, pstSoap);
-
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_CREATE_KEY_SOAP_ERROR,
-                        NULL,
-                        sKmaAddress,
-                        sSoapFaultMsg);
-            }
-            if (bSuccess)
-            {
-                pLoadBalancer->UpdateResponseStatus(iIndex);
-            }
-        }
-        while (iIndex >= 0 && (!bSuccess) && (!bClientAESKeyWrapSetupError));
-    }
-    else
-    {
-        bSuccess = false;
-    }
-
-
-#if defined(DEBUG) && defined(METAWARE)
-    log_printf("CreateKey gets keyID %s (size %x) \n",
-            oResponse.Key.KeyID,
-            sizeof (oResponse.Key.KeyID));
-#endif
-
-
-    if (bSuccess)
-    {
-        if (KMS_KEY_ID_SIZE != ConvertUTF8HexStringToBinary(
-            oResponse.Key.KeyID, NULL))
-        {
-            GetPeerNetworkAddress(sKmaAddress, pstSoap);
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_KEYID_RESPONSE,
-                    NULL,
-                    sKmaAddress,
-                    NULL);
-            bSuccess = false;
-        }
-
-        ConvertUTF8HexStringToBinary(
-                oResponse.Key.KeyID, // in
-                o_pKey->m_acKeyID); // out
-
-#if defined(DEBUG) && defined(METAWARE)
-        log_printf("CreateKey gets keyState %x (size %x) \n",
-                oResponse.Key.KeyState,
-                sizeof (oResponse.Key.KeyState));
-#endif
-
-        if ((KMS_AGENT_KEY_STATE) oResponse.Key.KeyState < KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS ||
-            (KMS_AGENT_KEY_STATE) oResponse.Key.KeyState > KMS_KEY_STATE_COMPROMISED)
-        {
-            GetPeerNetworkAddress(sKmaAddress, pstSoap);
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_KEY_STATE_RESPONSE,
-                    NULL,
-                    sKmaAddress,
-                    NULL);
-            bSuccess = false;
-        }
-
-        o_pKey->m_iKeyState = (KMS_AGENT_KEY_STATE) oResponse.Key.KeyState;
-
-#if defined(DEBUG) && defined(METAWARE)
-        log_printf("CreateKey o_pKey->m_iKeyState %x (size %x) = "
-                "(KMS_AGENT_KEY_STATE) oResponse.Key.KeyState %x (size %x)\n",
-                o_pKey->m_iKeyState,
-                sizeof (o_pKey->m_iKeyState),
-                oResponse.Key.KeyState,
-                sizeof (oResponse.Key.KeyState));
-#endif
-
-
-        if ((KMS_KEY_TYPE) oResponse.Key.KeyType != KMS_KEY_TYPE_AES_256)
-        {
-            GetPeerNetworkAddress(sKmaAddress, pstSoap);
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_KEY_TYPE_RESPONSE,
-                    NULL,
-                    sKmaAddress,
-                    NULL);
-            bSuccess = false;
-        }
-        o_pKey->m_iKeyType = (KMS_KEY_TYPE) oResponse.Key.KeyType;
-
-        if (strlen(oResponse.Key.KeyGroupID) > KMS_MAX_KEY_GROUP_ID_SIZE)
-        {
-            GetPeerNetworkAddress(sKmaAddress, pstSoap);
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_KEY_GROUP_ID_LENGTH_RESPONSE,
-                    NULL,
-                    sKmaAddress,
-                    NULL);
-            bSuccess = false;
-        }
-        else
-        {
-            strncpy(o_pKey->m_acKeyGroupID,
-                    oResponse.Key.KeyGroupID,
-                    sizeof(o_pKey->m_acKeyGroupID));
-            o_pKey->m_acKeyGroupID[sizeof(o_pKey->m_acKeyGroupID)-1] = '\0';
-        }
-
-        if ( bSuccess && pLoadBalancer->AESKeyWrapSupported(iIndex))
-        {
-            // verify KWK ID matches what was registered
-            if (oResponse.Key.Key.__size != KMS_MAX_WRAPPED_KEY_SIZE)
-            {
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_WRAPPED_KEY_LENGTH_RESPONSE,
-                        NULL,
-                        sKmaAddress,
-                        NULL);
-                bSuccess = false;
-            }
-            else
-            {
-                if (pLoadBalancer->AESKeyUnwrap(&iIndex, oResponse.Key.Key.__ptr,
-                    o_pKey->m_acKey) == false)
-                {
-                    GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                    LogError(i_pProfile,
-                            AUDIT_CLIENT_AGENT_CREATE_KEY_AESKEYUNWRAP_ERROR,
-                            NULL,
-                            sKmaAddress,
-                            NULL);
-
-                    bSuccess = false;
-                }
-            }
-        }
-        else if (bSuccess) // non-AES key wrap
-        {
-            if (oResponse.Key.Key.__size != KMS_MAX_KEY_SIZE)
-            {
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_KEY_LENGTH_RESPONSE,
-                        NULL,
-                        sKmaAddress,
-                        NULL);
-                bSuccess = false;
-            }
-            else
-            {
-                memcpy(o_pKey->m_acKey,
-                        oResponse.Key.Key.__ptr,
-                        KMS_MAX_KEY_SIZE);
-            }
-        }
-
-        if (bSuccess)
-        {
-            o_pKey->m_iKeyLength = KMS_MAX_KEY_SIZE;
-
-            if (KMSAgentKeyCallout(o_pKey->m_acKey) != 0)
-            {
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_CREATE_KEY_KEY_CALLOUT_ERROR,
-                        NULL,
-                        NULL,
-                        NULL);
-                bSuccess = false;
-            }
-        }
-    }
-
-    if (bSuccess)
-    {
-        // add Key ID and the creating KMA IP address to the DU cache
-        CDataUnitCache* pDataUnitCache = (CDataUnitCache*) i_pProfile->m_pDataUnitCache;
-
-        if (i_pProfile->m_iClusterDiscoveryFrequency != 0) // load balancing enabled
-        {
-            bSuccess = pDataUnitCache->Insert(
-                    NULL,
-                    0,
-                    o_pKey->m_acKeyID,
-                    KMS_KEY_ID_SIZE,
-                    pLoadBalancer->GetApplianceNetworkAddress(iIndex));
-        }
-    }
-    // free allocated memory for output if error condition
-    // Clean up SOAP
-
-    soap_destroy(pstSoap);
-    soap_end(pstSoap);
-
-    if (bSuccess)
-    {
-        RETURN(KMS_AGENT_STATUS_OK);
-    }
-
-    RETURN(KMSAgent_GetLastStatusCode(i_pProfile,
-            bClientAESKeyWrapSetupError ?
-                CAgentLoadBalancer::AES_KEY_WRAP_SETUP_ERROR : iIndex));
-}
-
-extern "C"
-KMS_AGENT_STATUS KMSAgent_CreateDataUnit (
-                                          KMSClientProfile * const i_pProfile,
-                                          const unsigned char * i_pExternalUniqueID,
-                                          int i_iExternalUniqueIDIDLen,
-                                          utf8cstr const i_pExternalTag,
-                                          utf8cstr const i_pDescription,
-                                          KMSAgent_DataUnit * const o_pDataUnit)
-{
-    bool bSuccess;
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_CreateDataUnit);
-#endif
-
-#if defined(DEBUG) && defined(METAWARE)
-#warn "debug Create Data Unit is on"
-    log_printf("KMSAgent_CreateDataUnit entered\n");
-    log_printf("KMSAgent_CreateDataUnit profile=%x\n", i_pProfile);
-#endif
-
-    if (!i_pProfile)
-    {
-        Log(AUDIT_CLIENT_AGENT_CREATE_DATA_UNIT_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Profile arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!o_pDataUnit)
-    {
-        Log(AUDIT_CLIENT_AGENT_CREATE_DATA_UNIT_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "DataUnit arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (!KMSClient_ProfileLoaded(i_pProfile))
-    {
-        RETURN(KMS_AGENT_STATUS_PROFILE_NOT_LOADED);
-    }
-
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) i_pProfile->m_pLock);
-
-    // validate input parms
-
-    if (i_pExternalUniqueID &&
-        (i_iExternalUniqueIDIDLen <= 0 ||
-        i_iExternalUniqueIDIDLen > KMS_MAX_EXTERNAL_UNIQUE_ID_SIZE))
-    {
-        Log(AUDIT_CLIENT_AGENT_CREATE_DATA_UNIT_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "ExternalUniqueID arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (i_pExternalTag && strlen(i_pExternalTag) > KMS_MAX_EXTERNAL_TAG)
-    {
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (i_pDescription && strlen(i_pDescription) > KMS_MAX_DESCRIPTION)
-    {
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    struct soap *pstSoap = (struct soap *) i_pProfile->m_pvSoap;
-    struct KMS_Agent::KMS_Agent__CreateDataUnitResponse oResponse;
-
-    char * pExternalUniqueID = NULL;
-    if (i_pExternalUniqueID)
-    {
-        pExternalUniqueID = ConvertBinaryDataFromRequest(pstSoap,
-                i_pExternalUniqueID,
-                i_iExternalUniqueIDIDLen);
-        if (pExternalUniqueID == NULL)
-        {
-            soap_destroy(pstSoap);
-            soap_end(pstSoap);
-            // no memory dont' log
-            RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-        }
-    }
-
-    char * pExternalTag = NULL;
-    if (i_pExternalTag)
-    {
-        pExternalTag = ConvertUTF8StringFromRequest(pstSoap,
-                i_pExternalTag,
-                strlen(i_pExternalTag) + 1);
-        if (pExternalTag == NULL)
-        {
-            soap_destroy(pstSoap);
-            soap_end(pstSoap);
-            // no memory dont' log
-            RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-        }
-    }
-
-    char * pDescription = NULL;
-    if (i_pDescription)
-    {
-        pDescription = ConvertUTF8StringFromRequest(pstSoap,
-                i_pDescription,
-                strlen(i_pDescription) + 1);
-        if (pDescription == NULL)
-        {
-            soap_destroy(pstSoap);
-            soap_end(pstSoap);
-            // no memory dont' log
-            RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-        }
-    }
-
-    CAgentLoadBalancer *pLoadBalancer =
-            (CAgentLoadBalancer *) i_pProfile->m_pAgentLoadBalancer;
-    int iIndex = pLoadBalancer->Balance();
-
-    if (iIndex >= 0)
-    {
-        do
-        {
-            const char* sURL = pLoadBalancer->GetHTTPSURL(
-                    iIndex,
-                    i_pProfile->m_iPortForAgentService);
-
-            strncpy(i_pProfile->m_sURL, sURL, sizeof(i_pProfile->m_sURL));
-
-            i_pProfile->m_sURL[sizeof(i_pProfile->m_sURL)-1] = '\0';
-
-            bSuccess = KMS_Agent::soap_call_KMS_Agent__CreateDataUnit(
-                    pstSoap,
-                    sURL,
-                    NULL,
-                    i_pExternalUniqueID ? pExternalUniqueID : (char *) "",
-                    i_pExternalTag ? pExternalTag : (char *) "",
-                    i_pDescription ? pDescription : (char *) "",
-                    oResponse) == SOAP_OK;
-
-            if (!bSuccess)
-            {
-                iIndex = pLoadBalancer->FailOver(iIndex, pstSoap);
-
-                char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH];
-                char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH];
-
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                GetSoapFault(sSoapFaultMsg, pstSoap);
-
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_CREATE_DATA_UNIT_SOAP_ERROR,
-                        NULL,
-                        sKmaAddress,
-                        sSoapFaultMsg);
-            }
-            else
-            {
-                pLoadBalancer->UpdateResponseStatus(iIndex);
-            }
-
-        }
-        while (iIndex >= 0 && (!bSuccess));
-    }
-    else
-    {
-        bSuccess = false;
-    }
-
-    if (bSuccess)
-    {
-        int iDataUnitIDLength;
-        iDataUnitIDLength = ConvertUTF8HexStringToBinary(
-                oResponse.DataUnit.DataUnitID, o_pDataUnit->m_acDataUnitID);
-
-        if (iDataUnitIDLength != KMS_DATA_UNIT_ID_SIZE)
-        {
-#if defined(DEBUG) && defined(METAWARE)
-            log_printf("iDataUnitIDLength (%x) != KMS_DATA_UNIT_ID_SIZE (%x)",
-                    iDataUnitIDLength,
-                    KMS_DATA_UNIT_ID_SIZE);
-#endif
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_CREATE_DATA_UNIT_RESPONSE_INVALID_DU_ID_LENGTH,
-                    NULL,
-                    NULL,
-                    NULL);
-            bSuccess = false;
-        }
-        o_pDataUnit->m_iExternalUniqueIDLength = ConvertUTF8HexStringToBinary(
-                oResponse.DataUnit.ExternalUniqueID, o_pDataUnit->m_acExternalUniqueID);
-
-        if (strlen(oResponse.DataUnit.ExternalTag) > KMS_MAX_EXTERNAL_TAG)
-        {
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_CREATE_DATA_UNIT_RESPONSE_INVALID_EXTERNAL_TAG_LENGTH,
-                    NULL,
-                    NULL,
-                    NULL);
-            bSuccess = false;
-        }
-        else
-        {
-            strncpy(o_pDataUnit->m_acExternalTag,
-                    oResponse.DataUnit.ExternalTag,
-                    sizeof(o_pDataUnit->m_acExternalTag));
-            o_pDataUnit->m_acExternalTag[sizeof(o_pDataUnit->m_acExternalTag)-1] = '\0';
-        }
-
-        if (strlen(oResponse.DataUnit.Description) > KMS_MAX_DESCRIPTION)
-        {
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_CREATE_DATA_UNIT_RESPONSE_INVALID_DESCRIPTION_LENGTH,
-                    NULL,
-                    NULL,
-                    NULL);
-            bSuccess = false;
-        }
-        else
-        {
-            strcpy(o_pDataUnit->m_acDescription,
-                    oResponse.DataUnit.Description);
-        }
-
-        o_pDataUnit->m_iDataUnitState =
-                (KMS_AGENT_DATA_UNIT_STATE) oResponse.DataUnit.DataUnitState;
-    }
-
-    if (bSuccess)
-    {
-        // add data unit ID and the creating KMA IP address to the DU cache
-        CDataUnitCache* pDataUnitCache = (CDataUnitCache*) i_pProfile->m_pDataUnitCache;
-
-        if (i_pProfile->m_iClusterDiscoveryFrequency != 0) // load balancing enabled
-        {
-            bSuccess = pDataUnitCache->Insert(
-                    o_pDataUnit->m_acDataUnitID,
-                    KMS_DATA_UNIT_ID_SIZE,
-                    NULL, 0,
-                    pLoadBalancer->GetApplianceNetworkAddress(iIndex));
-        }
-    }
-
-    // free allocated memory for output if error condition
-    // Clean up SOAP
-
-    soap_destroy(pstSoap);
-    soap_end(pstSoap);
-
-    if (bSuccess)
-    {
-        RETURN(KMS_AGENT_STATUS_OK);
-    }
-
-    RETURN(KMSAgent_GetLastStatusCode(i_pProfile, iIndex));
-}
-
-extern "C"
-KMS_AGENT_STATUS KMSAgent_DisassociateDataUnitKeys (
-                                                    KMSClientProfile * const i_pProfile,
-                                                    const KMSAgent_DataUnit * const i_pDataUnit)
-{
-    bool bSuccess;
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_DisassociateDataUnitKeys);
-#endif
-
-    if (!i_pProfile)
-    {
-        Log(AUDIT_CLIENT_AGENT_DISASSOCIATE_DATA_UNIT_KEYS_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Profile arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (!i_pDataUnit)
-    {
-        Log(AUDIT_CLIENT_AGENT_DISASSOCIATE_DATA_UNIT_KEYS_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "DataUnit arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!KMSClient_ProfileLoaded(i_pProfile))
-    {
-        RETURN(KMS_AGENT_STATUS_PROFILE_NOT_LOADED);
-    }
-
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) i_pProfile->m_pLock);
-
-    struct KMS_Agent::KMS_Agent__DataUnit stDataUnit = {"", "", "", "",
-        (KMS_Agent::KMS_Agent__DataUnitState) 0};
-
-    struct soap *pstSoap = (struct soap *) i_pProfile->m_pvSoap;
-    struct KMS_Agent::KMS_Agent__DisassociateDataUnitKeysResponse oResponse;
-
-    if (!CopyDataUnitFromRequest(pstSoap,
-        &stDataUnit,
-        i_pDataUnit))
-    {
-        soap_destroy(pstSoap);
-        soap_end(pstSoap);
-        // no memory dont' log
-        RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-    }
-
-    CAgentLoadBalancer *pLoadBalancer =
-            (CAgentLoadBalancer *) i_pProfile->m_pAgentLoadBalancer;
-    int iIndex = pLoadBalancer->BalanceByDataUnitID(
-            i_pDataUnit->m_acDataUnitID,
-            KMS_DATA_UNIT_ID_SIZE);
-
-    if (iIndex >= 0)
-    {
-        do
-        {
-            const char* sURL = pLoadBalancer->GetHTTPSURL(
-                    iIndex,
-                    i_pProfile->m_iPortForAgentService);
-
-            strncpy(i_pProfile->m_sURL, sURL, sizeof(i_pProfile->m_sURL));
-
-            i_pProfile->m_sURL[sizeof(i_pProfile->m_sURL)-1] = '\0';
-
-            bSuccess = KMS_Agent::soap_call_KMS_Agent__DisassociateDataUnitKeys(
-                    pstSoap,
-                    sURL,
-                    NULL,
-                    stDataUnit,
-                    oResponse) == SOAP_OK;
-
-            if (!bSuccess)
-            {
-                iIndex = pLoadBalancer->FailOver(iIndex, pstSoap);
-
-                char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH];
-                char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH];
-
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                GetSoapFault(sSoapFaultMsg, pstSoap);
-
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_DISASSOCIATE_DATA_UNIT_KEYS_SOAP_ERROR,
-                        NULL,
-                        sKmaAddress,
-                        sSoapFaultMsg);
-            }
-            else
-            {
-                pLoadBalancer->UpdateResponseStatus(iIndex);
-            }
-        }
-        while (iIndex >= 0 && (!bSuccess));
-    }
-    else
-    {
-        bSuccess = false;
-    }
-
-    // no response data for this transaction
-
-    // free allocated memory for output if error condition
-    // Clean up SOAP
-
-    soap_destroy(pstSoap);
-    soap_end(pstSoap);
-
-    if (bSuccess)
-    {
-        RETURN(KMS_AGENT_STATUS_OK);
-    }
-
-    RETURN(KMSAgent_GetLastStatusCode(i_pProfile, iIndex));
-}
-
-extern "C"
-KMS_AGENT_STATUS KMSAgent_RetrieveKey (
-                                       KMSClientProfile * const i_pProfile,
-                                       const unsigned char * const i_pKeyID,
-                                       const KMSAgent_DataUnit * const i_pDataUnit,
-                                       utf8cstr const i_pKeyGroupID,
-                                       KMSAgent_Key * const o_pKey)
-{
-    bool bSuccess;
-
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_RetrieveKey);
-#endif
-
-    if (!i_pProfile)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Profile arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!i_pKeyID)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "KeyID arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!o_pKey)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Key arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (!KMSClient_ProfileLoaded(i_pProfile))
-    {
-        RETURN(KMS_AGENT_STATUS_PROFILE_NOT_LOADED);
-    }
-
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) i_pProfile->m_pLock);
-
-    if (i_pKeyGroupID &&
-        strlen(i_pKeyGroupID) > KMS_MAX_KEY_GROUP_ID_SIZE)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "GroupID arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    struct KMS_Agent::KMS_Agent__DataUnit stDataUnit = {"", "", "", "",
-        (KMS_Agent::KMS_Agent__DataUnitState) 0};
-
-    struct soap *pstSoap = (struct soap *) i_pProfile->m_pvSoap;
-    struct KMS_Agent::KMS_Agent__RetrieveKeyResponse oResponse;
-
-    char * pKeyID = NULL;
-    pKeyID = ConvertBinaryDataFromRequest(pstSoap,
-            i_pKeyID,
-            KMS_KEY_ID_SIZE);
-    if (pKeyID == NULL)
-    {
-        soap_destroy(pstSoap);
-        soap_end(pstSoap);
-        // no memory dont' log
-        RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-    }
-
-    if (i_pDataUnit != NULL)
-    {
-        if (!CopyDataUnitFromRequest(pstSoap,
-            &stDataUnit,
-            i_pDataUnit))
-        {
-            soap_destroy(pstSoap);
-            soap_end(pstSoap);
-            // no memory dont' log
-            RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-        }
-    }
-
-    char * pKeyGroupID = NULL;
-    if (i_pKeyGroupID)
-    {
-        pKeyGroupID = ConvertUTF8StringFromRequest(pstSoap,
-                i_pKeyGroupID,
-                KMS_MAX_KEY_GROUP_ID_SIZE + 1);
-        if (pKeyGroupID == NULL)
-        {
-            soap_destroy(pstSoap);
-            soap_end(pstSoap);
-            // no memory dont' log
-            RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-        }
-    }
-
-    UTF8_KEYID acKWKID;
-
-    char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH];
-    char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH];
-    bool bClientAESKeyWrapSetupError = false;
-
-    CAgentLoadBalancer *pLoadBalancer =
-            (CAgentLoadBalancer *) i_pProfile->m_pAgentLoadBalancer;
-    int iIndex = pLoadBalancer->BalanceByDataUnitKeyID(i_pKeyID, KMS_KEY_ID_SIZE);
-
-    if (iIndex >= 0)
-    {
-        do
-        {
-            bSuccess = true;
-            const char* sURL = pLoadBalancer->GetHTTPSURL(
-                    iIndex,
-                    i_pProfile->m_iPortForAgentService);
-
-            strncpy(i_pProfile->m_sURL, sURL, sizeof(i_pProfile->m_sURL));
-
-            i_pProfile->m_sURL[sizeof(i_pProfile->m_sURL)-1] = '\0';
-
-            Long64 lKMAID = pLoadBalancer->GetKMAID(iIndex);
-
-            if (bSuccess && pLoadBalancer->AESKeyWrapSupported(iIndex))
-            {
-                // if this fails we want to utilize normal failover logic, GetKWKID
-                // logs error
-                bSuccess = pLoadBalancer->GetKWKID(iIndex, lKMAID, pstSoap,
-					acKWKID, &bClientAESKeyWrapSetupError) ? true : false;
-                if (bSuccess)
-                {
-                    bSuccess = KMS_Agent::soap_call_KMS_Agent__RetrieveKey2(
-                            pstSoap,
-                            sURL,
-                            NULL,
-                            pKeyID,
-                            stDataUnit,
-                            i_pKeyGroupID ? i_pKeyGroupID : (char *) "",
-                            acKWKID,
-                            //NOTE: this is ugly but the soap response struct's are the same for both flavors of CreateKey
-                            *(reinterpret_cast<struct KMS_Agent::KMS_Agent__RetrieveKey2Response *>(&oResponse))) == SOAP_OK;
-                }
-            }
-            else if (bSuccess)  // NO AES Key Wrap
-            {
-                    bSuccess = KMS_Agent::soap_call_KMS_Agent__RetrieveKey(
-                            pstSoap,
-                            sURL,
-                            NULL,
-                            pKeyID,
-                            stDataUnit,
-                            i_pKeyGroupID ? i_pKeyGroupID : (char *) "",
-                            oResponse) == SOAP_OK;
-            }
-
-            // don'f failover for Client side AES Key Wrap setup problems
-            if (!bSuccess && !bClientAESKeyWrapSetupError)
-            {
-                iIndex = pLoadBalancer->FailOver(iIndex, pstSoap);
-
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                GetSoapFault(sSoapFaultMsg, pstSoap);
-
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_RETRIEVE_KEY_SOAP_ERROR,
-                        NULL,
-                        sKmaAddress,
-                        sSoapFaultMsg);
-            }
-            if (bSuccess)
-            {
-                pLoadBalancer->UpdateResponseStatus(iIndex);
-            }
-        }
-        while (iIndex >= 0 && (!bSuccess) && (!bClientAESKeyWrapSetupError));
-    }
-    else
-    {
-        bSuccess = false;
-    }
-
-    if (bSuccess)
-    {
-        if (KMS_KEY_ID_SIZE != ConvertUTF8HexStringToBinary(
-            oResponse.Key.KeyID, NULL))
-        {
-            GetPeerNetworkAddress(sKmaAddress, pstSoap);
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_KEYID_RESPONSE,
-                    NULL,
-                    sKmaAddress,
-                    NULL);
-            bSuccess = false;
-        }
-    }
-
-    if (bSuccess)
-    {
-        ConvertUTF8HexStringToBinary(
-                oResponse.Key.KeyID, o_pKey->m_acKeyID);
-
-        //if ( oResponse.Key.KeyState < (KMS_Agent__KeyState)KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS ||
-        //    oResponse.Key.KeyState > (KMS_Agent__KeyState)KMS_KEY_STATE_COMPROMISED )
-        if ((KMS_AGENT_KEY_STATE) oResponse.Key.KeyState < KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS ||
-            (KMS_AGENT_KEY_STATE) oResponse.Key.KeyState > KMS_KEY_STATE_COMPROMISED)
-        {
-            GetPeerNetworkAddress(sKmaAddress, pstSoap);
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_KEY_STATE_RESPONSE,
-                    NULL,
-                    sKmaAddress,
-                    NULL);
-            bSuccess = false;
-        }
-
-        o_pKey->m_iKeyState = (KMS_AGENT_KEY_STATE) oResponse.Key.KeyState;
-
-        if ((KMS_KEY_TYPE) oResponse.Key.KeyType != KMS_KEY_TYPE_AES_256)
-        {
-            GetPeerNetworkAddress(sKmaAddress, pstSoap);
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_KEY_TYPE_RESPONSE,
-                    NULL,
-                    sKmaAddress,
-                    NULL);
-            bSuccess = false;
-        }
-
-        o_pKey->m_iKeyType = (KMS_KEY_TYPE) oResponse.Key.KeyType;
-
-        if (strlen(oResponse.Key.KeyGroupID) > KMS_MAX_KEY_GROUP_ID_SIZE)
-        {
-            GetPeerNetworkAddress(sKmaAddress, pstSoap);
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_KEY_GROUP_ID_LENGTH_RESPONSE,
-                    NULL,
-                    sKmaAddress,
-                    NULL);
-            bSuccess = false;
-        }
-        else
-        {
-            strncpy(o_pKey->m_acKeyGroupID,
-                    oResponse.Key.KeyGroupID,
-                    sizeof(o_pKey->m_acKeyGroupID));
-            o_pKey->m_acKeyGroupID[sizeof(o_pKey->m_acKeyGroupID)-1] = '\0';
-        }
-
-        if ( bSuccess && pLoadBalancer->AESKeyWrapSupported(iIndex))
-        {
-            // verify KWK ID matches what was registered
-            if (oResponse.Key.Key.__size != KMS_MAX_WRAPPED_KEY_SIZE)
-            {
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_WRAPPED_KEY_LENGTH_RESPONSE,
-                        NULL,
-                        sKmaAddress,
-                        NULL);
-                bSuccess = false;
-            }
-            else
-            {
-                if (pLoadBalancer->AESKeyUnwrap(&iIndex, oResponse.Key.Key.__ptr,
-                    o_pKey->m_acKey) == false)
-                {
-                    GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                    LogError(i_pProfile,
-                            AUDIT_CLIENT_AGENT_RETRIEVE_KEY_AESKEYUNWRAP_ERROR,
-                            NULL,
-                            sKmaAddress,
-                            NULL);
-
-                    bSuccess = false;
-                }
-            }
-        }
-        else if (bSuccess) // non-AES key wrap
-        {
-            if (oResponse.Key.Key.__size != KMS_MAX_KEY_SIZE)
-            {
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_KEY_LENGTH_RESPONSE,
-                        NULL,
-                        sKmaAddress,
-                        NULL);
-                bSuccess = false;
-            }
-            else
-            {
-                memcpy(o_pKey->m_acKey,
-                        oResponse.Key.Key.__ptr,
-                        KMS_MAX_KEY_SIZE);
-            }
-        }
-
-        if (bSuccess)
-        {
-            o_pKey->m_iKeyLength = KMS_MAX_KEY_SIZE;
-
-            if (KMSAgentKeyCallout(o_pKey->m_acKey) != 0)
-            {
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_RETRIEVE_KEY_KEY_CALLOUT_ERROR,
-                        NULL,
-                        NULL,
-                        NULL);
-                bSuccess = false;
-            }
-        }
-    }
-
-    // free allocated memory for output if error condition
-    // Clean up SOAP
-
-    soap_destroy(pstSoap);
-    soap_end(pstSoap);
-
-    if (bSuccess)
-    {
-        RETURN(KMS_AGENT_STATUS_OK);
-    }
-
-    RETURN(KMSAgent_GetLastStatusCode(i_pProfile,
-            bClientAESKeyWrapSetupError ?
-                CAgentLoadBalancer::AES_KEY_WRAP_SETUP_ERROR : iIndex));
-}
-
-extern "C"
-KMS_AGENT_STATUS KMSAgent_RetrieveDataUnit (
-                                            KMSClientProfile * const i_pProfile,
-                                            const unsigned char * const i_pDataUnitID,
-                                            const unsigned char * const i_pExternalUniqueID,
-                                            int i_iExternalUniqueIDLen,
-                                            utf8cstr const i_pExternalTag,
-                                            utf8cstr const i_pDescription,
-                                            KMSAgent_DataUnit * const o_pDataUnit)
-{
-    bool bSuccess;
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_RetrieveDataUnit);
-#endif
-
-#if defined(DEBUG) && defined(METAWARE)
-    log_printf("KMSAgent_RetrieveDataUnit entered\n");
-#endif
-
-    // required parms
-    if (!i_pProfile)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Profile arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!i_pDataUnitID)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "DataUnitID arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!o_pDataUnit)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "DataUnit arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-
-
-    if (!KMSClient_ProfileLoaded(i_pProfile))
-    {
-#if defined(DEBUG) && defined(METAWARE)
-        log_printf("KMSAgent_RetrieveDataUnit profile not loaded\n");
-#endif
-        RETURN(KMS_AGENT_STATUS_PROFILE_NOT_LOADED);
-    }
-
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) i_pProfile->m_pLock);
-
-    // validate input parms
-
-    if (i_pExternalUniqueID &&
-        (i_iExternalUniqueIDLen <= 0 ||
-        i_iExternalUniqueIDLen > KMS_MAX_EXTERNAL_UNIQUE_ID_SIZE))
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "ExternalUniqueID arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (i_pExternalTag && strlen(i_pExternalTag) > KMS_MAX_EXTERNAL_TAG)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "ExternalTag arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (i_pDescription &&
-        strlen(i_pDescription) > KMS_MAX_DESCRIPTION)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Description arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    // prepare args to soap transaction
-
-    struct soap *pstSoap = (struct soap *) i_pProfile->m_pvSoap;
-    struct KMS_Agent::KMS_Agent__RetrieveDataUnitResponse oResponse;
-
-    char * pDataUnitID = NULL;
-    pDataUnitID = ConvertBinaryDataFromRequest(pstSoap,
-            i_pDataUnitID,
-            KMS_DATA_UNIT_ID_SIZE);
-    //sizeof(DATA_UNIT_ID) );
-    if (pDataUnitID == NULL)
-    {
-        soap_destroy(pstSoap);
-        soap_end(pstSoap);
-        // no memory dont' log
-        RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-    }
-
-    char * pExternalUniqueID = NULL;
-    if (i_pExternalUniqueID)
-    {
-        pExternalUniqueID = ConvertBinaryDataFromRequest(pstSoap,
-                i_pExternalUniqueID,
-                i_iExternalUniqueIDLen);
-        if (pExternalUniqueID == NULL)
-        {
-            soap_destroy(pstSoap);
-            soap_end(pstSoap);
-            // no memory dont' log
-            RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-        }
-    }
-
-    char * pExternalTag = NULL;
-    if (i_pExternalTag)
-    {
-        pExternalTag = ConvertUTF8StringFromRequest(pstSoap,
-                i_pExternalTag,
-                KMS_MAX_EXTERNAL_TAG + 1);
-        if (pExternalTag == NULL)
-        {
-            soap_destroy(pstSoap);
-            soap_end(pstSoap);
-            // no memory dont' log
-            RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-        }
-    }
-
-    char * pDescription = NULL;
-    if (i_pDescription)
-    {
-        pDescription = ConvertUTF8StringFromRequest(pstSoap,
-                i_pDescription,
-                KMS_MAX_DESCRIPTION + 1);
-        if (pDescription == NULL)
-        {
-            soap_destroy(pstSoap);
-            soap_end(pstSoap);
-            // no memory dont' log
-            RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-        }
-    }
-
-    CAgentLoadBalancer *pLoadBalancer =
-            (CAgentLoadBalancer *) i_pProfile->m_pAgentLoadBalancer;
-    int iIndex = pLoadBalancer->BalanceByDataUnitID(i_pDataUnitID,
-            KMS_DATA_UNIT_ID_SIZE);
-
-    if ( iIndex >= 0 )
-    {
-        do
-        {
-            const char* sURL = pLoadBalancer->GetHTTPSURL(
-                    iIndex,
-                    i_pProfile->m_iPortForAgentService);
-
-            strncpy(i_pProfile->m_sURL, sURL, sizeof(i_pProfile->m_sURL));
-
-            i_pProfile->m_sURL[sizeof(i_pProfile->m_sURL)-1] = '\0';
-
-            bSuccess = KMS_Agent::soap_call_KMS_Agent__RetrieveDataUnit(
-                    pstSoap,
-                    sURL,
-                    NULL,
-                    pDataUnitID,
-                    i_pExternalUniqueID ? pExternalUniqueID : (char *) "",
-                    i_pExternalTag ? pExternalTag : (char *) "",
-                    i_pDescription ? pDescription : (char *) "",
-                    oResponse) == SOAP_OK;
-
-            if (!bSuccess)
-            {
-                iIndex = pLoadBalancer->FailOver(iIndex, pstSoap);
-
-                char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH];
-                char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH];
-
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                GetSoapFault(sSoapFaultMsg, pstSoap);
-
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_SOAP_ERROR,
-                        NULL,
-                        sKmaAddress,
-                        sSoapFaultMsg);
-            }
-            else
-            {
-                pLoadBalancer->UpdateResponseStatus(iIndex);
-            }
-        }
-        while (iIndex >= 0 && (!bSuccess));
-    }
-    else
-    {
-        bSuccess = false;
-    }
-
-    if (bSuccess)
-    {
-        ConvertUTF8HexStringToBinary(
-                oResponse.DataUnit.DataUnitID, o_pDataUnit->m_acDataUnitID);
-
-        o_pDataUnit->m_iExternalUniqueIDLength = ConvertUTF8HexStringToBinary(
-                oResponse.DataUnit.ExternalUniqueID, o_pDataUnit->m_acExternalUniqueID);
-
-        if (strlen(oResponse.DataUnit.ExternalTag) > KMS_MAX_EXTERNAL_TAG)
-        {
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_RESPONSE_INVALID_EXTERNAL_TAG_LENGTH,
-                    NULL,
-                    NULL,
-                    NULL);
-            bSuccess = false;
-        }
-        else
-        {
-            strncpy(o_pDataUnit->m_acExternalTag,
-                    oResponse.DataUnit.ExternalTag,
-                    sizeof(o_pDataUnit->m_acExternalTag));
-            o_pDataUnit->m_acExternalTag[sizeof(o_pDataUnit->m_acExternalTag)-1] = '\0';
-        }
-
-        if (strlen(oResponse.DataUnit.Description) > KMS_MAX_DESCRIPTION)
-        {
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_RESPONSE_INVALID_DESCRIPTION_LENGTH,
-                    NULL,
-                    NULL,
-                    NULL);
-            bSuccess = false;
-        }
-        else
-        {
-            strcpy(o_pDataUnit->m_acDescription,
-                    oResponse.DataUnit.Description);
-        }
-
-        o_pDataUnit->m_iDataUnitState =
-                (KMS_AGENT_DATA_UNIT_STATE) oResponse.DataUnit.DataUnitState;
-    }
-
-    // free allocated memory for output if error condition
-    // Clean up SOAP
-
-    soap_destroy(pstSoap);
-    soap_end(pstSoap);
-
-    if (bSuccess)
-    {
-        RETURN(KMS_AGENT_STATUS_OK);
-    }
-
-    RETURN(KMSAgent_GetLastStatusCode(i_pProfile, iIndex));
-}
-
-extern "C"
-KMS_AGENT_STATUS KMSAgent_RetrieveDataUnitByExternalUniqueID (
-                                                              KMSClientProfile * const i_pProfile,
-                                                              const unsigned char* const i_pExternalUniqueID,
-                                                              int i_iExternalUniqueIDLen,
-                                                              utf8cstr const i_pExternalTag,
-                                                              utf8cstr const i_pDescription,
-                                                              KMSAgent_DataUnit * const o_pDataUnit)
-{
-    bool bSuccess;
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_RetrieveDataUnitByExternalUniqueID);
-#endif
-
-    // required parms
-    if (!i_pProfile)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_BY_EXTERNAL_UNIQUE_ID_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Profile arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!i_pExternalUniqueID)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_BY_EXTERNAL_UNIQUE_ID_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "ExternalUniqueID arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!o_pDataUnit)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_BY_EXTERNAL_UNIQUE_ID_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "DataUnit arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (!KMSClient_ProfileLoaded(i_pProfile))
-    {
-        RETURN(KMS_AGENT_STATUS_PROFILE_NOT_LOADED);
-    }
-
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) i_pProfile->m_pLock);
-
-    // validate input parms
-
-    if (i_iExternalUniqueIDLen <= 0 ||
-        i_iExternalUniqueIDLen > KMS_MAX_EXTERNAL_UNIQUE_ID_SIZE)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_BY_EXTERNAL_UNIQUE_ID_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "ExternalUniqueIDLen arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (i_pExternalTag && strlen(i_pExternalTag) > KMS_MAX_EXTERNAL_TAG)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_BY_EXTERNAL_UNIQUE_ID_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "ExternalTag arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (i_pDescription &&
-        strlen(i_pDescription) > KMS_MAX_DESCRIPTION)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_BY_EXTERNAL_UNIQUE_ID_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Description arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    // prepare args to soap transaction
-
-    struct soap *pstSoap = (struct soap *) i_pProfile->m_pvSoap;
-    struct KMS_Agent::KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse oResponse;
-
-    char * pExternalUniqueID = NULL;
-    pExternalUniqueID = ConvertBinaryDataFromRequest(pstSoap,
-            i_pExternalUniqueID,
-            i_iExternalUniqueIDLen);
-    if (pExternalUniqueID == NULL)
-    {
-        soap_destroy(pstSoap);
-        soap_end(pstSoap);
-        // no memory dont' log
-        RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-    }
-
-    char * pExternalTag = NULL;
-    if (i_pExternalTag)
-    {
-        pExternalTag = ConvertUTF8StringFromRequest(pstSoap,
-                i_pExternalTag,
-                KMS_MAX_EXTERNAL_TAG + 1);
-        if (pExternalTag == NULL)
-        {
-            soap_destroy(pstSoap);
-            soap_end(pstSoap);
-            // no memory dont' log
-            RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-        }
-    }
-
-    char * pDescription = NULL;
-    if (i_pDescription)
-    {
-        pDescription = ConvertUTF8StringFromRequest(pstSoap,
-                i_pDescription,
-                KMS_MAX_DESCRIPTION + 1);
-        if (pDescription == NULL)
-        {
-            soap_destroy(pstSoap);
-            soap_end(pstSoap);
-            // no memory dont' log
-            RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-        }
-    }
-
-    CAgentLoadBalancer *pLoadBalancer =
-            (CAgentLoadBalancer *) i_pProfile->m_pAgentLoadBalancer;
-    int iIndex = pLoadBalancer->Balance();
-
-    if ( iIndex >= 0 )
-    {
-        do
-        {
-            const char* sURL = pLoadBalancer->GetHTTPSURL(
-                    iIndex,
-                    i_pProfile->m_iPortForAgentService);
-
-            strncpy(i_pProfile->m_sURL, sURL, sizeof(i_pProfile->m_sURL));
-
-            i_pProfile->m_sURL[sizeof(i_pProfile->m_sURL)-1] = '\0';
-
-            bSuccess = KMS_Agent::
-                    soap_call_KMS_Agent__RetrieveDataUnitByExternalUniqueID(
-                    pstSoap,
-                    sURL,
-                    NULL,
-                    pExternalUniqueID,
-                    i_pExternalTag ? pExternalTag : (char *) "",
-                    i_pDescription ? pDescription : (char *) "",
-                    oResponse) == SOAP_OK;
-
-            if (!bSuccess)
-            {
-                iIndex = pLoadBalancer->FailOver(iIndex, pstSoap);
-
-                char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH];
-                char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH];
-
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                GetSoapFault(sSoapFaultMsg, pstSoap);
-
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_BY_EXTERNAL_UNIQUE_ID_SOAP_ERROR,
-                        NULL,
-                        sKmaAddress,
-                        sSoapFaultMsg);
-            }
-            else
-            {
-                pLoadBalancer->UpdateResponseStatus(iIndex);
-            }
-        }
-        while (iIndex >= 0 && (!bSuccess));
-    }
-    else
-    {
-        bSuccess = false;
-    }
-
-    if (bSuccess)
-    {
-        ConvertUTF8HexStringToBinary(
-                oResponse.DataUnit.DataUnitID, o_pDataUnit->m_acDataUnitID);
-
-        o_pDataUnit->m_iExternalUniqueIDLength = ConvertUTF8HexStringToBinary(
-                oResponse.DataUnit.ExternalUniqueID,
-                o_pDataUnit->m_acExternalUniqueID);
-
-        if (strlen(oResponse.DataUnit.ExternalTag) > KMS_MAX_EXTERNAL_TAG)
-        {
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_BY_EXTERNAL_UNIQUE_ID_RESPONSE_INVALID_EXTERNAL_TAG_LENGTH,
-                    NULL,
-                    NULL,
-                    NULL);
-            bSuccess = false;
-        }
-        else
-        {
-            strncpy(o_pDataUnit->m_acExternalTag,
-                    oResponse.DataUnit.ExternalTag,
-                    sizeof(o_pDataUnit->m_acExternalTag));
-            o_pDataUnit->m_acExternalTag[sizeof(o_pDataUnit->m_acExternalTag)-1] = '\0';
-        }
-
-        if (strlen(oResponse.DataUnit.Description) > KMS_MAX_DESCRIPTION)
-        {
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_BY_EXTERNAL_UNIQUE_ID_RESPONSE_INVALID_DESCRIPTION_LENGTH,
-                    NULL,
-                    NULL,
-                    NULL);
-            bSuccess = false;
-        }
-        else
-        {
-            strcpy(o_pDataUnit->m_acDescription,
-                    oResponse.DataUnit.Description);
-        }
-
-        o_pDataUnit->m_iDataUnitState =
-                (KMS_AGENT_DATA_UNIT_STATE) oResponse.DataUnit.DataUnitState;
-
-        if (bSuccess)
-        {
-            // RetrieveDataUnitByExternalUniqueID may create a DU so add data unit ID
-            // and the KMA IP address to the DU cache
-            CDataUnitCache* pDataUnitCache = (CDataUnitCache*) i_pProfile->m_pDataUnitCache;
-
-            if (i_pProfile->m_iClusterDiscoveryFrequency != 0) // load balancing enabled
-            {
-                bSuccess = pDataUnitCache->Insert(
-                        o_pDataUnit->m_acDataUnitID,
-                        KMS_DATA_UNIT_ID_SIZE,
-                        NULL, 0,
-                        pLoadBalancer->GetApplianceNetworkAddress(iIndex));
-            }
-        }
-    }
-
-    // free allocated memory for output if error condition
-    // Clean up SOAP
-
-    soap_destroy(pstSoap);
-    soap_end(pstSoap);
-
-    if (bSuccess)
-    {
-        RETURN(KMS_AGENT_STATUS_OK);
-    }
-
-    RETURN(KMSAgent_GetLastStatusCode(i_pProfile, iIndex));
-}
-
-extern "C"
-KMS_AGENT_STATUS KMSAgent_RetrieveDataUnitKeys (
-                                                KMSClientProfile * const i_pProfile,
-                                                const KMSAgent_DataUnit * const i_pDataUnit,
-                                                int i_iPageSize,
-                                                int i_iPageOffset,
-                                                int* const o_piKeysRemaining,
-                                                const unsigned char * const i_pKeyID,
-                                                KMSAgent_ArrayOfKeys* * const o_ppKeys)
-{
-    bool bSuccess;
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_RetrieveDataUnitKeys);
-#endif
-
-    if (!i_pProfile)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Profile arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!i_pDataUnit)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "DataUnit arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!o_piKeysRemaining)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "KeysRemaining arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!o_ppKeys)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Keys arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (i_pKeyID && i_iPageOffset != 0)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "KeyID and PageOffset are mutually exclusive");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (!KMSClient_ProfileLoaded(i_pProfile))
-    {
-        RETURN(KMS_AGENT_STATUS_PROFILE_NOT_LOADED);
-    }
-
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) i_pProfile->m_pLock);
-
-    // validate input parms
-
-    if (i_iPageSize <= 0 || i_iPageSize > KMS_MAX_PAGE_SIZE)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "PageSize arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (i_iPageOffset < 0)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "PageOffset arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    // prepare args to soap transaction
-
-    struct KMS_Agent::KMS_Agent__DataUnit stDataUnit = {"", "", "", "",
-        (KMS_Agent::KMS_Agent__DataUnitState) 0};
-
-    struct soap *pstSoap = (struct soap *) i_pProfile->m_pvSoap;
-    struct KMS_Agent::KMS_Agent__RetrieveDataUnitKeysResponse oResponse;
-
-    if (!CopyDataUnitFromRequest(pstSoap,
-        &stDataUnit,
-        i_pDataUnit))
-    {
-        soap_destroy(pstSoap);
-        soap_end(pstSoap);
-        // no memory dont' log
-        RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-    }
-
-    char * pKeyID = NULL;
-    if (i_pKeyID)
-    {
-        pKeyID = ConvertBinaryDataFromRequest(pstSoap,
-                i_pKeyID,
-                KMS_KEY_ID_SIZE);
-        if (pKeyID == NULL)
-        {
-            soap_destroy(pstSoap);
-            soap_end(pstSoap);
-            // no memory dont' log
-            RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-        }
-    }
-
-    UTF8_KEYID acKWKID;
-    char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH];
-    char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH];
-    bool bClientAESKeyWrapSetupError = false;
-
-    CAgentLoadBalancer *pLoadBalancer =
-            (CAgentLoadBalancer *) i_pProfile->m_pAgentLoadBalancer;
-
-    int iIndex = pLoadBalancer->BalanceByDataUnitID(i_pDataUnit->m_acDataUnitID,
-            KMS_DATA_UNIT_ID_SIZE);
-
-    if (iIndex >= 0)
-    {
-        do
-        {
-            bSuccess = true;
-
-            const char* sURL = pLoadBalancer->GetHTTPSURL(
-                    iIndex,
-                    i_pProfile->m_iPortForAgentService);
-
-            strncpy(i_pProfile->m_sURL, sURL, sizeof(i_pProfile->m_sURL));
-
-            i_pProfile->m_sURL[sizeof(i_pProfile->m_sURL)-1] = 0;
-
-            Long64 lKMAID = pLoadBalancer->GetKMAID(iIndex);
-
-            if (bSuccess && pLoadBalancer->AESKeyWrapSupported(iIndex))
-            {
-                // if this fails we want to utilize normal failover logic, GetKWKID
-                // logs error
-                bSuccess = pLoadBalancer->GetKWKID(iIndex, lKMAID, pstSoap,
-					acKWKID, &bClientAESKeyWrapSetupError) ? true : false;
-                if (bSuccess)
-                {
-                    bSuccess = KMS_Agent::soap_call_KMS_Agent__RetrieveDataUnitKeys2(
-                            pstSoap,
-                            sURL,
-                            NULL,
-                            stDataUnit,
-                            i_iPageSize,
-                            i_iPageOffset,
-                            pKeyID,
-                            acKWKID,
-                            *(reinterpret_cast<struct KMS_Agent::KMS_Agent__RetrieveDataUnitKeys2Response *>(&oResponse))) == SOAP_OK;
-                }
-            }
-            else if (bSuccess)  // No AES Key Wrap
-            {
-                    bSuccess = KMS_Agent::soap_call_KMS_Agent__RetrieveDataUnitKeys(
-                            pstSoap,
-                            sURL,
-                            NULL,
-                            stDataUnit,
-                            i_iPageSize,
-                            i_iPageOffset,
-                            pKeyID,
-                            oResponse) == SOAP_OK;
-            }
-
-            // don'f failover for Client side AES Key Wrap setup problems
-            if (!bSuccess && !bClientAESKeyWrapSetupError)
-            {
-                iIndex = pLoadBalancer->FailOver(iIndex, pstSoap);
-
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                GetSoapFault(sSoapFaultMsg, pstSoap);
-
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_SOAP_ERROR,
-                        NULL,
-                        sKmaAddress,
-                        sSoapFaultMsg);
-            }
-            if (bSuccess)
-            {
-                pLoadBalancer->UpdateResponseStatus(iIndex);
-            }
-        }
-        while (iIndex >= 0 && (!bSuccess) && (!bClientAESKeyWrapSetupError));
-    }
-    else
-    {
-        bSuccess = false;
-    }
-
-    // validate response
-
-    if (bSuccess && oResponse.KeysRemaining < 0)
-    {
-        LogError(i_pProfile,
-                AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEYS_REMAINING_RESPONSE,
-                NULL,
-                NULL,
-                NULL);
-        bSuccess = false;
-    }
-
-    if (bSuccess &&
-        (oResponse.Keys.__size < 0 ||
-        oResponse.Keys.__size > i_iPageSize))
-    {
-        LogError(i_pProfile,
-                AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEYS_SIZE_RESPONSE,
-                NULL,
-                NULL,
-                NULL);
-        bSuccess = false;
-    }
-
-    if ( bSuccess && pLoadBalancer->AESKeyWrapSupported(iIndex))
-    {
-        // verify KWK ID matches what was registered
-    }
-
-    if (bSuccess)
-    {
-        *o_ppKeys = CopyDataUnitKeysResponse(i_pProfile, &iIndex, &oResponse.Keys);
-
-        if (*o_ppKeys == NULL)
-        {
-            // CopyDataUnitKeysResponse logs errors
-            bSuccess = false;
-        }
-        *o_piKeysRemaining = (int) oResponse.KeysRemaining;
-    }
-
-    // free allocated memory for output if error condition
-    // Clean up SOAP
-
-    soap_destroy(pstSoap);
-    soap_end(pstSoap);
-
-    if (bSuccess)
-    {
-        RETURN(KMS_AGENT_STATUS_OK);
-    }
-
-    RETURN(KMSAgent_GetLastStatusCode(i_pProfile,
-            bClientAESKeyWrapSetupError ?
-                CAgentLoadBalancer::AES_KEY_WRAP_SETUP_ERROR : iIndex));
-}
-
-extern "C"
-KMS_AGENT_STATUS KMSAgent_RetrieveProtectAndProcessKey (
-                                                        KMSClientProfile * const i_pProfile,
-                                                        const KMSAgent_DataUnit * const i_pDataUnit,
-                                                        utf8cstr const i_pKeyGroupID,
-                                                        KMSAgent_Key * const o_pKey)
-{
-    bool bSuccess;
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_RetrieveProtectAndProcessKey);
-#endif
-
-    if (!i_pProfile || !i_pDataUnit || !o_pKey)
-    {
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (!i_pProfile)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Profile arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!i_pDataUnit)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "DataUnit arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!o_pKey)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Key arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (i_pKeyGroupID &&
-        strlen(i_pKeyGroupID) > KMS_MAX_KEY_GROUP_ID_SIZE)
-    {
-        Log(AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "GroupID arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (!KMSClient_ProfileLoaded(i_pProfile))
-    {
-        RETURN(KMS_AGENT_STATUS_PROFILE_NOT_LOADED);
-    }
-
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) i_pProfile->m_pLock);
-
-    struct KMS_Agent::KMS_Agent__DataUnit stDataUnit ={"", "", "", "",
-        (KMS_Agent::KMS_Agent__DataUnitState) 0};
-
-    struct soap *pstSoap = (struct soap *) i_pProfile->m_pvSoap;
-    struct KMS_Agent::KMS_Agent__RetrieveProtectAndProcessKeyResponse oResponse;
-
-    if (i_pDataUnit != NULL)
-    {
-        if (!CopyDataUnitFromRequest(pstSoap,
-            &stDataUnit,
-            i_pDataUnit))
-        {
-            soap_destroy(pstSoap);
-            soap_end(pstSoap);
-            // no memory dont' log
-            RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-        }
-    }
-
-    char * pKeyGroupID = NULL;
-    if (i_pKeyGroupID)
-    {
-        pKeyGroupID = ConvertUTF8StringFromRequest(pstSoap,
-                i_pKeyGroupID,
-                KMS_MAX_KEY_GROUP_ID_SIZE + 1);
-        if (pKeyGroupID == NULL)
-        {
-            soap_destroy(pstSoap);
-            soap_end(pstSoap);
-            // no memory dont' log
-            RETURN(KMS_AGENT_STATUS_NO_MEMORY);
-        }
-    }
-
-    char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH];
-    char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH];
-    bool bClientAESKeyWrapSetupError = false;
-    UTF8_KEYID acKWKID;
-
-    CAgentLoadBalancer *pLoadBalancer = (CAgentLoadBalancer *) i_pProfile->m_pAgentLoadBalancer;
-    int iIndex = pLoadBalancer->BalanceByDataUnitID(i_pDataUnit->m_acDataUnitID,
-                                                    KMS_DATA_UNIT_ID_SIZE);
-
-    if (iIndex >= 0)
-    {
-        do
-        {
-            bSuccess = true;
-            const char* sURL = pLoadBalancer->GetHTTPSURL(
-                    iIndex,
-                    i_pProfile->m_iPortForAgentService);
-
-            strncpy(i_pProfile->m_sURL, sURL, sizeof(i_pProfile->m_sURL));
-
-            i_pProfile->m_sURL[sizeof(i_pProfile->m_sURL)-1] = '\0';
-
-            Long64 lKMAID = pLoadBalancer->GetKMAID(iIndex);
-
-            if (bSuccess && pLoadBalancer->AESKeyWrapSupported(iIndex))
-            {
-                // if this fails we want to utilize normal failover logic, GetKWKID
-                // logs error
-                bSuccess = pLoadBalancer->GetKWKID(iIndex, lKMAID, pstSoap,
-                                            acKWKID, &bClientAESKeyWrapSetupError)
-											? true : false;
-                if (bSuccess)
-                {
-                    bSuccess = KMS_Agent::soap_call_KMS_Agent__RetrieveProtectAndProcessKey2(
-                            pstSoap,
-                            sURL,
-                            NULL,
-                            stDataUnit,
-                            i_pKeyGroupID ? i_pKeyGroupID : (char *) "",
-                            acKWKID,
-                            *(reinterpret_cast<struct KMS_Agent::KMS_Agent__RetrieveProtectAndProcessKey2Response *>(&oResponse))) == SOAP_OK;
-                }
-            }
-            else if (bSuccess)  // No AES Key Wrap
-            {
-                    bSuccess = KMS_Agent::soap_call_KMS_Agent__RetrieveProtectAndProcessKey(
-                            pstSoap,
-                            sURL,
-                            NULL,
-                            stDataUnit,
-                            i_pKeyGroupID ? i_pKeyGroupID : (char *) "",
-                            oResponse) == SOAP_OK;
-            }
-
-            // don'f failover for Client side AES Key Wrap setup problems
-            if (!bSuccess && !bClientAESKeyWrapSetupError)
-            {
-                iIndex = pLoadBalancer->FailOver(iIndex, pstSoap);
-
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                GetSoapFault(sSoapFaultMsg, pstSoap);
-
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_SOAP_ERROR,
-                        NULL,
-                        sKmaAddress,
-                        sSoapFaultMsg);
-            }
-            else
-            {
-                pLoadBalancer->UpdateResponseStatus(iIndex);
-            }
-        }
-        while (iIndex >= 0 && (!bSuccess) && (!bClientAESKeyWrapSetupError));
-    }
-    else
-    {
-        bSuccess = false;
-    }
-
-    if (bSuccess)
-    {
-        if (KMS_KEY_ID_SIZE != ConvertUTF8HexStringToBinary(
-            oResponse.Key.KeyID, NULL))
-        {
-            GetPeerNetworkAddress(sKmaAddress, pstSoap);
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_KEYID_RESPONSE,
-                    NULL,
-                    sKmaAddress,
-                    NULL);
-            bSuccess = false;
-        }
-    }
-
-    if (bSuccess)
-    {
-        ConvertUTF8HexStringToBinary(
-                oResponse.Key.KeyID, o_pKey->m_acKeyID);
-
-        if ((KMS_AGENT_KEY_STATE) oResponse.Key.KeyState < KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS ||
-            (KMS_AGENT_KEY_STATE) oResponse.Key.KeyState > KMS_KEY_STATE_COMPROMISED)
-        {
-            GetPeerNetworkAddress(sKmaAddress, pstSoap);
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_KEY_STATE_RESPONSE,
-                    NULL,
-                    sKmaAddress,
-                    NULL);
-            bSuccess = false;
-        }
-
-        o_pKey->m_iKeyState = (KMS_AGENT_KEY_STATE) oResponse.Key.KeyState;
-
-        if ((KMS_KEY_TYPE) oResponse.Key.KeyType != KMS_KEY_TYPE_AES_256)
-        {
-            GetPeerNetworkAddress(sKmaAddress, pstSoap);
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_KEY_TYPE_RESPONSE,
-                    NULL,
-                    sKmaAddress,
-                    NULL);
-            bSuccess = false;
-        }
-
-        o_pKey->m_iKeyType = (KMS_KEY_TYPE) oResponse.Key.KeyType;
-
-        if (strlen(oResponse.Key.KeyGroupID) > KMS_MAX_KEY_GROUP_ID_SIZE)
-        {
-            GetPeerNetworkAddress(sKmaAddress, pstSoap);
-            LogError(i_pProfile,
-                    AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_KEY_GROUP_ID_LENGTH_RESPONSE,
-                    NULL,
-                    sKmaAddress,
-                    NULL);
-            bSuccess = false;
-        }
-        else
-        {
-            strncpy(o_pKey->m_acKeyGroupID,
-                    oResponse.Key.KeyGroupID,
-                    sizeof(o_pKey->m_acKeyGroupID));
-            o_pKey->m_acKeyGroupID[sizeof(o_pKey->m_acKeyGroupID)-1] = '\0';
-        }
-
-        if ( bSuccess && pLoadBalancer->AESKeyWrapSupported(iIndex))
-        {
-            // verify KWK ID matches what was registered
-            if (oResponse.Key.Key.__size != KMS_MAX_WRAPPED_KEY_SIZE)
-            {
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_WRAPPED_KEY_LENGTH_RESPONSE,
-                        NULL,
-                        sKmaAddress,
-                        NULL);
-                bSuccess = false;
-            }
-            else
-            {
-                if (pLoadBalancer->AESKeyUnwrap(&iIndex, oResponse.Key.Key.__ptr,
-                    o_pKey->m_acKey) == false)
-                {
-                    GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                    LogError(i_pProfile,
-                            AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_AESKEYUNWRAP_ERROR,
-                            NULL,
-                            sKmaAddress,
-                            NULL);
-
-                    bSuccess = false;
-                }
-            }
-        }
-        else if (bSuccess) // non-AES key wrap
-        {
-            if (oResponse.Key.Key.__size != KMS_MAX_KEY_SIZE)
-            {
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_KEY_LENGTH_RESPONSE,
-                        NULL,
-                        sKmaAddress,
-                        NULL);
-                bSuccess = false;
-            }
-            else
-            {
-                memcpy(o_pKey->m_acKey,
-                        oResponse.Key.Key.__ptr,
-                        KMS_MAX_KEY_SIZE);
-            }
-        }
-
-        if (bSuccess)
-        {
-            o_pKey->m_iKeyLength = KMS_MAX_KEY_SIZE;
-
-            if (KMSAgentKeyCallout(o_pKey->m_acKey) != 0)
-            {
-                LogError(i_pProfile,
-                        AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_KEY_CALLOUT_ERROR,
-                        NULL,
-                        NULL,
-                        NULL);
-                bSuccess = false;
-            }
-        }
-    }
-
-    if (bSuccess)
-    {
-        // add Key ID and the creating KMA IP address to the DU cache
-        CDataUnitCache* pDataUnitCache = (CDataUnitCache*) i_pProfile->m_pDataUnitCache;
-
-        if (i_pProfile->m_iClusterDiscoveryFrequency != 0) // load balancing enabled
-        {
-            bSuccess = pDataUnitCache->Insert(
-                    NULL,
-                    0,
-                    o_pKey->m_acKeyID,
-                    KMS_KEY_ID_SIZE,
-                    pLoadBalancer->GetApplianceNetworkAddress(iIndex));
-        }
-    }
-    
-    // free allocated memory for output if error condition
-    // Clean up SOAP
-
-    soap_destroy(pstSoap);
-    soap_end(pstSoap);
-
-    if (bSuccess)
-    {
-        RETURN(KMS_AGENT_STATUS_OK);
-    }
-
-    RETURN(KMSAgent_GetLastStatusCode(i_pProfile,
-            bClientAESKeyWrapSetupError ?
-                CAgentLoadBalancer::AES_KEY_WRAP_SETUP_ERROR : iIndex));
-}
-
-extern "C"
-void KMSAgent_FreeArrayOfKeys (
-                               KMSAgent_ArrayOfKeys* i_pArrayOfKeys)
-{
-#if defined(METAWARE)
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_FreeArrayOfKeys);
-#endif
-    if (!i_pArrayOfKeys)
-    {
-        return;
-    }
-
-    // free memory for all information groups
-    if (i_pArrayOfKeys->m_pKeys)
-    {
-        free(i_pArrayOfKeys->m_pKeys);
-    }
-
-    free(i_pArrayOfKeys);
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSAgent_CreateAuditLog
- *
- *--------------------------------------------------------------------------*/
-extern "C"
-KMS_AGENT_STATUS KMSAgent_CreateAuditLog (
-                                          KMSClientProfile* i_pProfile,
-                                          enum KMS_AUDIT_LOG_RETENTION i_iRetention,
-                                          enum KMS_AUDIT_LOG_CONDITION i_iCondition,
-                                          int i_bIssueAlert,
-                                          utf8cstr i_pMessage)
-{
-    bool bSuccess = true;
-#ifdef DEBUG_TIMING
-    ECPT_TRACE_ENTRY *trace = NULL;
-    ECPT_TRACE(trace, KMSAgent_CreateAuditLog);
-#endif
-
-    //   START_STACK_CHECK;
-
-    if (!i_pProfile)
-    {
-        Log(AUDIT_CLIENT_AGENT_CREATED_AUDIT_LOG_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Profile arg");
-
-        //        END_STACK_CHECK;
-
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    // check arguments
-    if (i_iRetention > KMS_AUDIT_LOG_SHORT_TERM_RETENTION)
-    {
-        Log(AUDIT_CLIENT_AGENT_CREATE_AUDIT_LOG_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Retention arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (i_iCondition > KMS_AUDIT_LOG_WARNING_CONDITION)
-    {
-        Log(AUDIT_CLIENT_AGENT_CREATE_AUDIT_LOG_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Condition arg");
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-
-    if (!i_pMessage || (strlen(i_pMessage) <= 0))
-    {
-        Log(AUDIT_CLIENT_AGENT_CREATE_AUDIT_LOG_INVALID_PARAMETERS,
-                NULL,
-                NULL,
-                "Message arg");
-        //       END_STACK_CHECK;
-        RETURN(KMS_AGENT_STATUS_INVALID_PARAMETER);
-    }
-    if (!KMSClient_ProfileLoaded(i_pProfile))
-    {
-        //        END_STACK_CHECK;
-        RETURN(KMS_AGENT_STATUS_PROFILE_NOT_LOADED);
-    }
-
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) i_pProfile->m_pLock);
-
-    struct soap* pstSoap = (struct soap*) i_pProfile->m_pvSoap;
-
-    // Create Audit Log
-
-    KMS_Agent::KMS_Agent__CreateAuditLogResponse oResponse;
-
-    CAgentLoadBalancer *pLoadBalancer =
-            (CAgentLoadBalancer *) i_pProfile->m_pAgentLoadBalancer;
-
-    int iIndex = pLoadBalancer->Balance();
-    if (iIndex >= 0)
-    {
-        do
-        {
-            const char* sURL = pLoadBalancer->
-                    GetHTTPSURL(iIndex, i_pProfile->m_iPortForAgentService);
-            strncpy(i_pProfile->m_sURL, sURL, sizeof(i_pProfile->m_sURL));
-            i_pProfile->m_sURL[sizeof(i_pProfile->m_sURL)-1] = '\0';
-
-            bSuccess = KMS_Agent::soap_call_KMS_Agent__CreateAuditLog(
-                    pstSoap,
-                    sURL,
-                    NULL,
-                    (enum KMS_Agent::KMS_Agent__AuditLogRetention)i_iRetention,
-                    (enum KMS_Agent::KMS_Agent__AuditLogCondition)i_iCondition,
-                    i_bIssueAlert ? true : false,
-                    i_pMessage,
-                    oResponse) == SOAP_OK;
-
-
-            if (!bSuccess)
-            {
-                char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH];
-                char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH];
-
-                GetSoapFault(sSoapFaultMsg, pstSoap);
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-
-                iIndex = pLoadBalancer->FailOver(iIndex, pstSoap);
-
-                LogError(i_pProfile, AUDIT_CLIENT_AGENT_CREATE_AUDIT_LOG_SOAP_ERROR,
-                        NULL,
-                        sKmaAddress,
-                        sSoapFaultMsg);
-            }
-            else
-            {
-                pLoadBalancer->UpdateResponseStatus(iIndex);
-            }
-        }
-        while (iIndex >= 0 && (!bSuccess));
-    }
-    else
-    {
-        bSuccess = false;
-    }
-
-    // free allocated memory for output if error condition
-    // Clean up SOAP
-
-    soap_destroy(pstSoap);
-    soap_end(pstSoap);
-
-    if (bSuccess)
-    {
-        //      END_STACK_CHECK;
-        RETURN(KMS_AGENT_STATUS_OK);
-    }
-
-    //   END_STACK_CHECK;
-    RETURN(KMSAgent_GetLastStatusCode(i_pProfile, iIndex));
-}
-
-#ifdef KMSUSERPKCS12
-/*
- * This function allows the user to change the PIN on the PKCS12
- * file that holds the clients private key and cert.
- */
-extern "C"
-KMS_AGENT_STATUS KMSAgent_ChangeLocalPWD(
-	KMSClientProfile* i_pProfile,
-	utf8cstr const i_pOldPassphrase,
-	utf8cstr const i_pNewPassphrase)
-{
-	CCertificate *pCert;
-	CPrivateKey *pKey;
-	bool bSuccess;
-
-	pCert = new CCertificate;
-	pKey = new CPrivateKey;
-
-	bSuccess = GetPKCS12CertAndKey(i_pProfile, i_pOldPassphrase,
-		pCert, pKey);
-	if (!bSuccess)
-    		return(KMSAgent_GetLastStatusCode(i_pProfile, 0));
-
-	bSuccess = StoreAgentPKI(i_pProfile, pCert, pKey, i_pNewPassphrase);
-	if (!bSuccess)
-    		return(KMSAgent_GetLastStatusCode(i_pProfile, 0));
-
-	return (KMS_AGENT_STATUS_OK);
-}
-#endif /* KMSUSERPKCS12 */
--- a/usr/src/lib/libkmsagent/common/KMSAgent.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1163 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/** @file             KMSAgent.h 
- *  @defgroup         EncryptionAgent Encryption Agent API
- *
- * The Agent API is used to communicate with the KMS Appliance for the
- * purpose of registering storage devices, obtaining device keys, and
- * receiving notifications of storage device events such as destruction.
- *
- */
-#ifndef KMS_AGENT_H
-#define KMS_AGENT_H
-
-#include "KMSClientProfile.h"
-
-/*---------------------------------------------------------------------------
- * The following ifdef block is the standard way of creating macros which
- * make exporting from a DLL simpler. All files within this DLL are compiled
- * with the KMS_AGENT_EXPORT symbol defined on the command line. this symbol
- * should not be defined on any project that uses this DLL. This way any
- * other project whose source files include this file see KMS Agent API functions
- * as being imported from a DLL, wheras this DLL sees symbols defined with
- * this macro as being exported.
- *--------------------------------------------------------------------------*/
-#ifdef KMS_AGENT_EXPORT
-#define KMS_AGENT_API __declspec(dllexport)
-#else
-#define KMS_AGENT_API __declspec(dllimport)
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*---------------------------------------------------------------------------
- * Return Codes
- *--------------------------------------------------------------------------*/
-
-/**
- * The status type returned on API calls
- */
-typedef int KMS_AGENT_STATUS;
-
-/**
- *  successful status
- */
-#define KMS_AGENT_STATUS_OK                                                 0
-
-/* error status values */
-/**
- *   generic error is a catch all for a wide variety of errors, see the specific
- *   entry in the audit log for the details.  In general, the client API will return
- *   one of the specific status codes.  
- */
-#define KMS_AGENT_STATUS_GENERIC_ERROR                                      100
-
-/**
- * insufficient memory for the agent library to complete the request
- */
-#define KMS_AGENT_STATUS_NO_MEMORY                                          102
-
-/**
- * parameter error, invalid input 
- */
-#define KMS_AGENT_STATUS_INVALID_PARAMETER                                  103
-
-/**
- *  an API call was made before the profile was loaded
- */
-#define KMS_AGENT_STATUS_PROFILE_NOT_LOADED                                 104
-
-/**
- *  upon receipt of a key the callout function returned an error
- */
-#define KMS_AGENT_STATUS_KEY_CALLOUT_FAILURE                                105
-
-/**
- *  the specified profile failover attempts have been exceeded or no KMAs are available within the cluster
- */
-#define KMS_AGENT_STATUS_KMS_UNAVAILABLE                                    106
-
-/**
- *  the KMS does not have any keys in the READY state, this is a KMS issue that requires attention 
- *  from a KMS administrator.
- */
-#define KMS_AGENT_STATUS_KMS_NO_READY_KEYS                                  107
-
-/**
- *   the FIPS 140-2 known answer test (KAK) failed for AES Key wrap.
- */
-#define KMS_AGENT_STATUS_FIPS_KAT_AES_KEYWRAP_ERROR                         108
-
-/**
- *   #FIPS_MODE was specified on #KMSAgent_LoadProfile
- *   but no FIPS compatible KMAs are currently
- *   available.  Also, it may be that no FIPS compatible KMAs have been 
- *   configured within the KMS.
- */
-#define KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE                             109
-
-/**
- *  the profile was already successfully loaded and should be unloaded
- *  before attempting to load it again
- */
-#define KMS_AGENT_STATUS_PROFILE_ALREADY_LOADED                             110
-
-/**
- *   the FIPS 140-2 known answer test (KAK) failed for AES ECB.
- */
-#define KMS_AGENT_STATUS_FIPS_KAT_AES_ECB_ERROR                             111
-
-/**
- *   the FIPS 140-2 known answer test (KAK) failed for HMAC-SHA1.
- */
-#define KMS_AGENT_STATUS_FIPS_KAT_HMAC_SHA1_ERROR                             112
-
-/*
- *  SOAP Sender Errors - client errors associated with a KMS SOAP service
- */
- 
-/**
- * the following conditions can result in access denied being returned by the KMSAgent Soap service:
- * <ul>
- * <li>Agent is not enabled on the KMS
- * <li>Invalid DataUnitID or DataUnit does not exist
- * <li>Invalid ExternalUniqueID or DataUnit does not exist with specified ID
- * <li>Invalid ExternalTag
- * <li>Invalid KeyID
- * <li>Invalid KeyGroup or KeyGroup does not exist
- * <li>The Agent ID is not recognized as an agent by the KMS, i.e. the agent may not exist or the
- * ID represents another kind of entity.
- * <li>No KeyGroup specified and the Agent is not configured to have a default KeyGroup
- * <li>Agent does not have access to the specified KeyGroup
- * </ul>
- * to prevent leakage of information the specific details for access being denied are not
- * disclosed.  Audit log entries at the KMS can be used to determine specific reasons for 
- * access being denied.
- */
-#define KMS_AGENT_STATUS_ACCESS_DENIED                                      200
-
-/**
- *  This error status is only returned when received from the KMS and the transaction
- *  timeout has been exceeded.
- */
-#define KMS_AGENT_STATUS_SERVER_BUSY                                        201
-
-/**
- *   a data unit already exists with the specified external unique identifier
- */
-#define KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS                          202
-
-/**
- *  The external unique ID specified was found to exist but the corresponding
- *  DataUnitID did not exist.
- */
-#define KMS_AGENT_STATUS_DATA_UNIT_ID_NOT_FOUND_EXTERNAL_ID_EXISTS          203
-
-
-/**
- * The specified key has been destroyed or is unknown to the KMS
- */
-#define KMS_AGENT_STATUS_KEY_DOES_NOT_EXIST                                 204
-
-/**
- * The requested key has been destroyed.
- */
-#define KMS_AGENT_STATUS_KEY_DESTROYED                                      205
-
-/**
- *  The key received from a KMA encountered an error during AES Key Unwrapping
- */
-#define KMS_AGENT_AES_KEY_UNWRAP_ERROR                                      206
-
-/**
- *  An error occurred during establishment of an AES Key-Encryption Key
- */
-#define KMS_AGENT_AES_KEY_WRAP_SETUP_ERROR                                  207
-
-/*
- * Failed to decrypt the client private key data file due to incorrect PIN
- */
-#define	KMS_AGENT_LOCAL_AUTH_FAILURE					    208
-
-/**
- *   supported key types
- */
-enum KMS_KEY_TYPE
-{
-    /**
-     *  AES 256 key type
-     */
-    KMS_KEY_TYPE_AES_256                                                 
-};
-
-/**
- *  This enumerator type defines the various Key States.
- */
-enum KMS_AGENT_KEY_STATE 
-{
-    KMS_KEY_STATE_GENERATED = 0,
-    KMS_KEY_STATE_READY,
-
-    /**
-     * A key in this state can be used for both encryption and decryption. 
-     * A key is placed into this state when it is assigned. The assignment is done when an encryption agent requests a new key be created.
-     */
-    KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS,
-
-    /**
-     * A key in this state can be used for decryption but not encryption. When an agent determines that none of the keys available to 
-     * it (e.g., for a specific data unit that is being read or written) are in the protect-and-process state, it should create a new key. 
-     * Keys transition from protect-and-process to process only when the encryption period for the key expires.
-     */
-    KMS_KEY_STATE_ACTIVE_PROCESS_ONLY,
-
-    /**
-     * The key has passed its cryptoperiod but may still be needed to process (decrypt) information. Auditable events are generated
-     * when keys in this state are provided to the agent.
-     */
-    KMS_KEY_STATE_DEACTIVATED,
-
-    /**
-     * Keys are compromised when they are released to or discovered by an unauthorized entity. 
-     * Compromised keys should not be used to protect information, but may be used to process information.
-     * Auditable events are generated
-     * when keys in this state are provided to the agent.
-     */
-    KMS_KEY_STATE_COMPROMISED,
-
-    KMS_KEY_STATE_DESTROYED_INCOMPLETE,
-    KMS_KEY_STATE_DESTROYED_COMPLETE,
-    KMS_KEY_STATE_DESTROYED_COMPROMISED_INCOMPLETE,
-    KMS_KEY_STATE_DESTROYED_COMPROMISED_COMPLETE
-
-};
-
-/*---------------------------------------------------------------------------
- * Data Unit State
- *--------------------------------------------------------------------------*/
-
-/**
- *  this enumeration defines the DataUnit states
- */
-enum KMS_AGENT_DATA_UNIT_STATE 
-{
-    /**
-     * When a data unit has been created, but has not yet had any keys created it will be in "no key" state. 
-     * This should be a short, transient condition that will be exited as soon as a key has been created.
-     */
-    KMS_DATA_UNIT_STATE_NO_KEY = 0,
-
-    /**
-     * Normal is a substate of readable. In this state, a data unit has at least one protect-and-process state key that can be used to encrypt data. 
-     * The data unit is therefore writable.
-     */
-    KMS_DATA_UNIT_STATE_READABLE_NORMAL,                          
-
-    /**
-     * Needs rekey is a substate of readable. In this state, the data unit has no protect-and-process keys. 
-     * Data should not be encrypted and written to the data unit unless the data unit is rekeyed and a new, active key is assigned. 
-     * Its the responsibility of the agent to avoid using a key that is not in protect-and-process state for encryption. 
-     * The data unit may have keys that are in process only, deactivated, or compromised state. Any of these keys can be used for decryption.
-     */
-    KMS_DATA_UNIT_STATE_READABLE_NEEDS_REKEY,                     		
-
-    /**
-     * When all of the keys for a data unit are destroyed, the data unit is shredded. The data unit cannot be read or written. 
-     * However, a new key can be created for the data unit. This will return the data unit to normal state, allowing it to be read and written.
-     */
-    KMS_DATA_UNIT_STATE_SHREDDED                                 
-};
-
-/**
- *  This enumeration type defines Audit Log Retention values
- */
-enum KMS_AUDIT_LOG_RETENTION
-{
-    /**
-     * specifies that an audit log entry should have long term retention
-     */
-    KMS_AUDIT_LOG_LONG_TERM_RETENTION = 0,                                   
-    /**
-     * specifies that an audit log entry should have medium term retention
-     */
-    KMS_AUDIT_LOG_MEDIUM_TERM_RETENTION,                                
-    /**
-     * specifies that an audit log entry should have short term retention
-     */
-    KMS_AUDIT_LOG_SHORT_TERM_RETENTION                                  
-};
-
-/**
- *  This enumeration type defines Audit Log Condition values
- */
-enum KMS_AUDIT_LOG_CONDITION
-{
-    /**
-     * specifies that an audit log entry should should indicate a success condition
-     */
-    KMS_AUDIT_LOG_SUCCESS_CONDITION = 0,                                    
-
-    /**
-     * specifies that an audit log entry should should indicate an error condition
-     */
-    KMS_AUDIT_LOG_ERROR_CONDITION,                                       
-
-    /**
-     * specifies that an audit log entry should should indicate a warning condition
-     */
-    KMS_AUDIT_LOG_WARNING_CONDITION                                     
-};
-
-/**
- *   supported security modes
- */
-enum KMS_SECURITY_MODE
-{
-    /**
-     *  agent will work with any level of KMA
-     */
-    DEFAULT_MODE = 0,
-    
-    /**
-     *  agent will only communicate with KMAs supporting FIPS 140-2 so that
-     *  keys are encrypted at the KMA using AES Key Wrap.
-     */
-    FIPS_MODE
-};
-
-/*---------------------------------------------------------------------------
- * API Input/Output Data Structures
- *--------------------------------------------------------------------------*/
-/**
- *  typedef for descriptions used in various places within the API
- */
-typedef utf8char DESCRIPTION [KMS_MAX_DESCRIPTION+1];
-
-/**
- *  typedef for key group ID
- */
-typedef utf8char KEY_GROUP_ID[KMS_MAX_ID+1];
-
-/**
- *  typedef for the Key Group struct
- */
-typedef struct KMSAgent_KeyGroup KMSAgent_KeyGroup;
-
-/** \struct KMSAgent_KeyGroup
- *  a Key Group with its ID and description
- */
-struct KMSAgent_KeyGroup
-{
-    /**
-     *  the unique ID of the KeyGroup
-     */
-    KEY_GROUP_ID m_acKeyGroupID;
-    
-    /**
-     * the description of the KeyGroup
-     */
-    DESCRIPTION m_acDescription;
-};
-
-/**
- * An array of Key Groups
- */
-typedef struct KMSAgent_ArrayOfKeyGroups KMSAgent_ArrayOfKeyGroups;
-
-/** \struct KMSAgent_ArrayOfKeyGroups
- *  An array of Key Groups
- */
-struct KMSAgent_ArrayOfKeyGroups
-{
-    /**
-     *  pointer to an array of Key Groups
-     */
-    KMSAgent_KeyGroup* m_pKeyGroups;
-    
-    /**
-     *  the number of Key Groups in the array
-     */
-    int m_iSize;
-};
-
-
-/**
- * typedef for a Key struct
- */
-typedef struct KMSAgent_Key KMSAgent_Key;
-
-/** \struct KMSAgent_Key
- *  key and its associated properites: KeyID, state, type, lenth, KeyGroup and the Key value
- */
-struct KMSAgent_Key
-{
-    /**
-     *  the unique ID of the key
-     */
-    KEY_ID m_acKeyID; 
-    
-    /**
-     *  the state of the Key
-     */
-    enum KMS_AGENT_KEY_STATE m_iKeyState;
-    
-    /**
-     *  the type of the key, e.g. AES_256
-     */
-    enum KMS_KEY_TYPE m_iKeyType;
-    
-    /**
-     *  the unique ID of the KeyGroup
-     */
-    KEY_GROUP_ID m_acKeyGroupID;
-    
-    /**
-     *  the key in plaintext.
-     */
-    KEY m_acKey;
-    
-    /**
-     *  length of #m_acKey
-     */
-    int m_iKeyLength;
-};
-
-/**
- *  typedef for the External Unique ID
- */
-typedef unsigned char EXTERNAL_UNIQUE_ID [KMS_MAX_EXTERNAL_UNIQUE_ID_SIZE];
-
-/**
- *  typedef for the Data Unit ID
- */
-typedef unsigned char DATA_UNIT_ID [KMS_DATA_UNIT_ID_SIZE];
-
-/**
- *  typedef for the External Tag 
- */
-typedef utf8char EXTERNAL_TAG [KMS_MAX_EXTERNAL_TAG+1];
-
-/**
- * typedef for aData Unit structure. 
- */
-typedef struct KMSAgent_DataUnit KMSAgent_DataUnit;
-
-/** \struct KMSAgent_DataUnit
- *  struct for a DataUnit and its associated properties: DataUnitID, external unique ID,
- *  external tag, description and state. Data units are associated with zero or more keys.
- */
-struct KMSAgent_DataUnit
-{
-    /**
-     *  the unique DataUnit ID provided by the KMS
-     */
-    DATA_UNIT_ID m_acDataUnitID;
-    
-    /**
-     *  a unique external ID for the data unit that is provided by the agent, may be NULL if one is not provided.
-     *  The KMS will enforce the uniqueness of this identifier and not allow multiple data units having the same 
-     *  #m_acExternalUniqueID value.
-     */
-    EXTERNAL_UNIQUE_ID m_acExternalUniqueID;
-    /**
-     *  the length in bytes of the #m_acExternalUniqueID field that represents the
-     *  ID. The length
-     *  must be less than or equal to #KMS_MAX_EXTERNAL_UNIQUE_ID_SIZE
-     */
-    int m_iExternalUniqueIDLength;
-
-    /**
-     *  an external tag representing information pertinent to the data unit, for example a volume serial number
-     */
-    EXTERNAL_TAG m_acExternalTag;
-    
-    /**
-     *  a description of the data unit
-     */
-    DESCRIPTION m_acDescription;
-    
-    /**
-     *  the state of the DataUnit
-     */
-    enum KMS_AGENT_DATA_UNIT_STATE m_iDataUnitState;
-    
-};
-
-/**
- *   typedef for a list of keys
- */
-typedef struct KMSAgent_ArrayOfKeys KMSAgent_ArrayOfKeys;
-
-/** \struct KMSAgent_ArrayOfKeys
- *  struct for an array of keys
- */
-struct KMSAgent_ArrayOfKeys
-{
-    /**
-     *  keys are in chronological order based upon key creation date. However,
-     *  when page offset argument to #KMSAgent_RetrieveDataUnitKeys
-     *  is 0 the first key in the array will be the key in the 
-     *  #KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS.
-     */
-    KMSAgent_Key* m_pKeys;
-    
-    /**
-     *  the number of keys in the list
-     */
-    int m_iSize;
-};
-
-/**
- *  @return the version string for the KMS Agent Library
- */
-const char * KMSAgent_GetVersion();
-
-/** 
- *
- * This function initializes the KMS Agent API library. It
- * should be called before any other functions are invoked. Internally, 
- * sets up the SSL library and Logging module.
- *                
- * @param i_pWorkingDirectory       Working directory of the program which uses the
- *                                  library.  Default is "." if NULL is passed.
- * @param i_bUseFileLog:            True(1) if errors should go to a log file in the working directory.  
- *                                  If false(0) then errors will not be logged to a file.
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR if library initialization fails
- */
-KMS_AGENT_STATUS KMSAgent_InitializeLibrary(
-                        const utf8cstr     i_pWorkingDirectory,
-                        int                i_bUseFileLog );
-
-/**
- * This function exercises FIPS 140-2 Known Answer Tests for certified algorithms
- * used in the agent toolkit.  This function should only be called once and may
- * be called prior to #KMSAgent_InitializeLibrary.
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_FIPS_KAT_AES_KEYWRAP_ERROR
- * @return #KMS_AGENT_STATUS_FIPS_KAT_AES_ECB_ERROR
- * @return #KMS_AGENT_STATUS_FIPS_KAT_HMAC_SHA1_ERROR
- */
-KMS_AGENT_STATUS KMSAgent_KnownAnswerTests();
-
-/**
- * This function finalizes the KMS Agent API library. It should
- * be called when the library is not needed by the program. Internally it
- * cleans up the SSL library and Logging module.
- * 
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR if library finalization fails
- *
- */
-KMS_AGENT_STATUS KMSAgent_FinalizeLibrary();
-
-/**
- * This function can be used to get the last error message when
- * an API function encounters an error.  These error messages also
- * are written to the log, if file logging was enabled during library
- * initialization.
- *
- * @param     i_pProfile        an initialized #KMSClientProfile; the failed
- *                              function must have used this profile.
- * @return    the pointer to the last error message or NULL
- *
- */
-utf8cstr KMSAgent_GetLastErrorMessage(
-                        KMSClientProfile* i_pProfile );
-
-
-    /**
-     * Get the cluster information by calling the KMS_Discovery service using the KMA specified in the
-     * profile, no load balancing will occur.  If discovery to this KMA fails then discovery will be
-     * attempted using previously retrieved cluster information.
-     *
-     * If #KMSAgent_LoadProfile was called with an IPv6 address for
-     * the <code>i_pInitialApplianceAddress</code> argument then the <code>o_pClusterEntryArray</code> will contain
-     * IPv6 addresses instead of IPv4 addresses for each KMA that has an IPv6 address.
-     * @see #KMSAgent_LoadProfile and #KMSAgent_SelectAppliance.
-     *
-     * If the size of the cluster returned by the KMS_Discovery servic exceeds <code>i_iClusterEntryArraySize</code>
-     * then the KMA list is filtered to contain the
-     * first <code>i_iClusterEntryArraySize</code> KMAs that meet the profile's FIPS setting, agent site and are reported as responding by the
-     * KMS discover cluster response.
-     *
-     * @param    i_pProfile               a pointer to an initialized #KMSClientProfile structure
-     * @param    i_iEntitySiteIDSize      the buffer size of the entity site ID including null terminator
-     *                                    (should be greater than #KMS_MAX_ENTITY_SITE_ID )
-     * @param    i_iClusterEntryArraySize the array size for cluster entries (must be less than or equal to #KMS_MAX_CLUSTER_NUM )
-     * @param    o_pEntitySiteID          a buffer allocated by the caller to store the agent's (aka entity) Site ID
-     * @param    o_pApplianceNum          the returned number of appliances in the cluster
-     * @param    o_pClusterEntryArray     a buffer allocated by the caller to store the array of cluster entries
-     *
-     * @return #KMS_AGENT_STATUS_OK
-     * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
-     * @return #KMS_AGENT_STATUS_GENERIC_ERROR
-     * @return #KMS_AGENT_STATUS_ACCESS_DENIED
-     * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
-     * @return #KMS_AGENT_STATUS_SERVER_BUSY
-     * @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
-     * @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
-     */
-    KMS_AGENT_STATUS KMSAgent_GetClusterInformation(
-            KMSClientProfile * const i_pProfile,
-            int i_iEntitySiteIDSize,
-            int i_iClusterEntryArraySize,
-            utf8cstr const o_pEntitySiteID,
-            int * const o_pApplianceNum,
-            KMSClusterEntry * const o_pClusterEntryArray);
-
-/**
- * Specifies the Key Management Appliance to be used
- * for retrieving cluster information.
- *
- * @param i_pProfile               a pointer to an initialized #KMSClientProfile
- *                                 structure
- * @param i_pApplianceAddress      the IP address of the appliance.  IPv6 addresses
- *                                 must be enclosed in brackets, [], see #KMSAgent_LoadProfile.
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- *
- */
-KMS_AGENT_STATUS KMSAgent_SelectAppliance(
-                        KMSClientProfile* const i_pProfile,
-                        utf8cstr const          i_pApplianceAddress );
-
-/**
- * Load profile handles both agent enrollment with the KMS and post enrollment setup.
- * <p>
- * <b>Enrollment Behavior</b>
- * <br>
- * When a passphrase is supplied enrollment, or reenrollment, with a KMS cluster is attempted in order
- * to establish a mutual trust relationship.  Enrollment occurs with the KMA in the cluster specified
- * by <code>i_pApplianceAddress</code>.  
- * <p>
- * The KMS CA web service is used for CA certificate retrieval prior to
- * invoking the KMS Certificate web service. Certficate retrieval via these services
- * uses the <code>i_pApplianceAddress</code> for enrollment. Cluster discovery is then performed to
- * identify the set of KMAs within the cluster.
- * Successful enrollment results in
- * persistent storage of the CA X.509 certificate, agent X.509 certificate and private key.  
- * </p>
- * Once enrolled successfully the KMS
- * will then disable usage of the agent's passphrase for enrollment as a security precaution.
- * Subsequent enrollment will require a new passphrase.
- * <p>
- * <b>Post Enrollment Behavior</b>
- * <br>
- * When a passphrase is not provided a profile is assumed to exist and the library profile structure
- * is initialized from persistent storage with the configuration settings(agent ID, 
- * KMA service port numbers, KMA Address, transaction timeout, discovery frequency, transaction timeout
- * and failover limit), cluster information(agent's site ID and KMA cluster information and KMA status) and 
- * enrollment items: the CA certificate, Agent Certificate and agent private key.  
- * <p>
- * Finally, cluster discovery is performed(unless disabled), and a load balancer is initialized 
- * for balancing transactions across KMAs within the
- * cluster and for handling transaction failover scenarios.  
- * Subsequent API calls using the profile will invoke cluster discovery at the frequency specified
- * by <code>iClusterDiscoveryFrequency</code>.  Updated discovery information is persisted with the
- * profile. The load balancer maintains affinity to KMAs within the same site as the agent for
- * agent transactions unless an error requires failover
- * to another KMA in the cluster. An agent's site ID may also be updated by a discovery
- * operation.
- * 
- * @param io_pProfile               a pointer to a #KMSClientProfile buffer allocated by the caller
- * @param i_pProfileName            the profile name
- * @param i_pAgentID                Optional.  For a new profile the encryption agent's ID is required.
- * @param i_pPassphrase             Optional.  For a new profile the encryption agent's passphrase is required.  This passphrase
- *                                  may only be used once for a successful retrieval of the Certificate and agent private key.
- * @param i_pInitialApplianceAddress the initial IP Address of an Appliance in the KMS Cluster that is reachable by this agent. If
- *                                  enrollment has previously occurred specification of an initial IP address that is not
- *                                  a member of the profile's cluster information will force the cluster information 
- *                                  to be deleted and discovery to be performed with the new IP address.
- *                                  An IPv6 address may be supplied but must be enclosed with brackets, [], in accordance
- *                                  with RFC 2396, "Format for Literal IPv6 Addresses in URL's".  Supplying an IPv6 address will cause
- *                                  the agent library to utilize KMA IPv6 addresses over IPv4 addresses when they are available,
- *                                  otherwise IPv4 KMA addresses will be used.  
- * @param i_iTransactionTimeout     the timeout setting for a transaction in seconds, must be a positive value.
- * @param i_iFailOverLimit          Failed KMA transactions will be retried up to this limit. Once this limit
- *                                  has been reached API calls will return #KMS_AGENT_STATUS_KMS_UNAVAILABLE.
- *                                  Specify -1 for unlimited failover attempts, 0 for no failover.  The worst case completion time for
- *                                  an API call is approximately equal to <code>i_iFailOverLimit</code> * <code>i_iTransactionTimeout</code>.
- *                                  
- * @param i_iClusterDiscoveryFrequency
- *                                  frequency of calling cluster discovery service
- *                                  in seconds (use 0 to disable load balancing and periodic cluster discovery)
- * @param i_eKMSmode                specifies the KMS operational mode that the 
- *                                  agent should enforce.  Setting this to #FIPS_MODE
- *                                  causes the agent to only communicate with KMAs in the
- *                                  cluster that support AES key wrapping for key requests.
- *                                  This is not a persisted setting and is only applicable
- *                                  to the current session.
- *                                  
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- * @return #KMS_AGENT_STATUS_PROFILE_ALREADY_LOADED
- * @return #KMS_AGENT_STATUS_ACCESS_DENIED
- * @return #KMS_AGENT_STATUS_SERVER_BUSY
- * @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- * @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- */
-KMS_AGENT_STATUS KMSAgent_LoadProfile(
-                        KMSClientProfile* const io_pProfile,
-                        utf8cstr const          i_pProfileName,
-                        utf8cstr const          i_pAgentID,
-                        utf8cstr const          i_pPassphrase,
-                        utf8cstr const          i_pInitialApplianceAddress,
-                        int                     i_iTransactionTimeout,
-                        int                     i_iFailOverLimit,
-                        int                     i_iClusterDiscoveryFrequency,
-                        int                     i_eKMSmode );
-
-    
-/**
- * Destroy the profile information in memory, the agent's profile configuration,
- * cluster information, certificate and 
- * private key are retained in persistant storage.
- * 
- * @param i_pProfile        a pointer to an initialized KMSClientProfile
- *                          structure.
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- *
- */
-KMS_AGENT_STATUS KMSAgent_UnloadProfile(
-                        KMSClientProfile* const i_pProfile );
-
-/**
- * Delete the profile information from persistent storage.  The agent's profile configuration,
- * cluster information, certificate and
- * private key are discared, see #KMSAgent_LoadProfile for how to initialize
- * the profile again.  The profile should be unloaded prior to making this call.
- * 
- * @param i_pProfileName          the profile name
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- */
-KMS_AGENT_STATUS KMSAgent_DeleteProfile(
-                        utf8cstr i_pProfileName );
-
-/**
- * Fetch the key groups this agent is allowed to access.  The caller should invoke #KMSAgent_FreeArrayOfKeyGroups
- * to release the allocated memory resources for the array. Up to #KMS_MAX_LIST_KEY_GROUPS key groups will be
- * returned.
- * 
- * @param i_pProfile       an initialized #KMSClientProfile
- * @param o_ppKeyGroups    a buffer allocated by this routine for the array of Key Groups and individual key groups
- *                         that this agent is allowed to access
- *
- * @return #KMS_AGENT_STATUS_OK
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- * @return #KMS_AGENT_STATUS_NO_MEMORY
- * @return #KMS_AGENT_STATUS_GENERIC_ERROR
- * @return #KMS_AGENT_STATUS_ACCESS_DENIED
- * @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- * @return #KMS_AGENT_STATUS_SERVER_BUSY
- * @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- * @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- */
-KMS_AGENT_STATUS KMSAgent_ListKeyGroups(
-                         KMSClientProfile* const 	       i_pProfile,
-                         KMSAgent_ArrayOfKeyGroups** const o_ppKeyGroups );
-
-/**
- * Helper function which frees memory allocated for the output
- * to #KMSAgent_ListKeyGroups.
- *
- * @param i_pArrayOfKeyGroups   a pointer to #KMSAgent_ArrayOfKeyGroups                   
- * 
- * @return void
- *
- */
-void KMSAgent_FreeArrayOfKeyGroups(
-                         KMSAgent_ArrayOfKeyGroups* i_pArrayOfKeyGroups );
-
-/**
- *  Creates a Key for the specified data unit. If a data unit is provided then the key will be associated with
- *  the data unit.  The type of key created is dictated by the KMS key policy for the key group.  This policy is set up by KMS
- *  administrators to be compatible with agents associated with the key group.
- *  If KeyGroup is provided then the new key is associated with the specified KeyGroup, otherwise the agent's 
- *  default KeyGroup is associated with the key.
- *  @param i_pProfile               an initialized #KMSClientProfile
- *  @param i_pDataUnit              Optional. a pointer to a data unit to be associated with the key, if known.  
- *  @param i_pKeyGroupID            Optional, the KeyGroup ID to be assigned to the new Key, if known.  Pass NULL
- *                                  if unknown and the new key will be associated with the agent's default key group
- *  @param o_pKey                   A pointer to a buffer for returning the new key and key associated data.
- *
- *  @return #KMS_AGENT_STATUS_OK
- *  @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- *  @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- *  @return #KMS_AGENT_STATUS_NO_MEMORY
- *  @return #KMS_AGENT_STATUS_KEY_CALLOUT_FAILURE
- *  @return #KMS_AGENT_STATUS_GENERIC_ERROR
- *  @return #KMS_AGENT_STATUS_ACCESS_DENIED
- *  @return #KMS_AGENT_STATUS_SERVER_BUSY
- *  @return #KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS
- *  @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- *  @return #KMS_AGENT_STATUS_KMS_NO_READY_KEYS
- *  @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- *  @return #KMS_AGENT_AES_KEY_UNWRAP_ERROR
- *  @return #KMS_AGENT_AES_KEY_WRAP_SETUP_ERROR
- */
-KMS_AGENT_STATUS KMSAgent_CreateKey(
-                        KMSClientProfile* const        i_pProfile,
-                        const KMSAgent_DataUnit* const i_pDataUnit,
-                        KEY_GROUP_ID const             i_pKeyGroupID,
-                        KMSAgent_Key* const            o_pKey);
-
-/**
- *  Creates a DataUnit with the specified external unique id and external tag. 
- *
- *  @param i_pProfile                   an initialized #KMSClientProfile
- *  @param i_pExternalUniqueID          Optional. A unique data unit identifier to be associated with 
- *                                      the data unit. Uniqueness is enforced by the KMS. See also #KMSAgent_RetrieveDataUnit.
- *  @param i_iExternalUniqueIDIDLen     Length in bytes of the external unique identifier.  If                                    
- *                                      <code>i_pExternalUniqueID</code> is NULL then this field is ignored, otherwise a positive length must be provided.
- *  @param i_pExternalTag               Optional, but recommended. Pointer to an External Tag for the data unit, e.g. a volume serial number.
- *  @param i_pDescription               Optional, a textual description of the data unit.
- *  @param o_pDataUnit                  a pointer to a DataUnit buffer where
- *                                      data unit information is returned
- *
- *  @return #KMS_AGENT_STATUS_OK
- *  @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- *  @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- *  @return #KMS_AGENT_STATUS_NO_MEMORY
- *  @return #KMS_AGENT_STATUS_GENERIC_ERROR
- *  @return #KMS_AGENT_STATUS_ACCESS_DENIED
- *  @return #KMS_AGENT_STATUS_SERVER_BUSY
- *  @return #KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS
- *  @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- *  @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
-*/
-KMS_AGENT_STATUS KMSAgent_CreateDataUnit(
-                        KMSClientProfile* const    i_pProfile,
-                        const unsigned char *      i_pExternalUniqueID,
-                        int                        i_iExternalUniqueIDIDLen,
-                        utf8cstr const             i_pExternalTag,
-                        utf8cstr const             i_pDescription,
-                        KMSAgent_DataUnit* const   o_pDataUnit);
-
-/**
- *  The agent may use this function to inform the KMS that the DataUnit has, or will be, overwritten.  
- *  The KMS will remove the association from the specified DataUnit to all its keys, excluding its key
- *  in the #KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS state. By utilizing this API, agent's can help keep the
- *  number of keys returned by #KMSAgent_RetrieveDataUnitKeys to just the keys being used on the Data Unit.
- *
- *  @param i_pProfile       an initialized #KMSClientProfile
- *  @param i_pDataUnit      A pointer to the data unit
- *
- *  @return #KMS_AGENT_STATUS_OK
- *  @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- *  @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- *  @return #KMS_AGENT_STATUS_NO_MEMORY
- *  @return #KMS_AGENT_STATUS_GENERIC_ERROR
- *  @return #KMS_AGENT_STATUS_ACCESS_DENIED
- *  @return #KMS_AGENT_STATUS_SERVER_BUSY
- *  @return #KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS
- *  @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- *  @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- */
-KMS_AGENT_STATUS KMSAgent_DisassociateDataUnitKeys(
-                    KMSClientProfile* const            i_pProfile,
-                    const KMSAgent_DataUnit* const     i_pDataUnit);
-
-                        
-/**
- *  retrieve a key by the Key's ID, optionally specifying the Data Unit and KeyGroup to be
- *  associated with the key.  Supplying the Data Unit information allows the KMS to add an
- *  association between the Key and the Data Unit. The assumption being made is that the key being
- *  retrieved has been used on the specified Data Unit and needs to be associated with it.  This 
- *  side affect allows the KMS to build up its knowledge of key usage as it relies upon agents
- *  for discovering and reporting how keys are being used on Data Units.  For example, when keys 
- *  are imported into a KMS the information associating keys with DataUnits may not be provided, 
- *  consequently the KMS is unaware of what DataUnits were encrypted with a particular key.
- *
- *  @param i_pProfile       an initialized KMSClientProfile
- *  @param i_pKeyID         The ID of the Key being requested
- *  @param i_pDataUnit      Optional. If non-NULL, the  KMS will verify that an association exists between the key and the Data Unit and create
- *                          the association if it is missing.  
- *  @param i_pKeyGroupID    Optional. If non-NULL, and the key is not already associated with a KeyGroup, then the KMS will associate the key with the specified KeyGroup.
- *  @param o_pKey           A pointer to a buffer allcoated by the caller for returning the new key and key associated data.
- *
- *  @return #KMS_AGENT_STATUS_OK
- *  @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- *  @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- *  @return #KMS_AGENT_STATUS_NO_MEMORY
- *  @return #KMS_AGENT_STATUS_KEY_CALLOUT_FAILURE
- *  @return #KMS_AGENT_STATUS_GENERIC_ERROR
- *  @return #KMS_AGENT_STATUS_ACCESS_DENIED
- *  @return #KMS_AGENT_STATUS_SERVER_BUSY
- *  @return #KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS
- *  @return #KMS_AGENT_STATUS_KEY_DOES_NOT_EXIST
- *  @return #KMS_AGENT_STATUS_KEY_DESTROYED
- *  @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- *  @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- *  @return #KMS_AGENT_AES_KEY_UNWRAP_ERROR
- *  @return #KMS_AGENT_AES_KEY_WRAP_SETUP_ERROR
- */
-KMS_AGENT_STATUS KMSAgent_RetrieveKey(
-                        KMSClientProfile* const              i_pProfile,
-                        const unsigned char * const          i_pKeyID,
-                        const KMSAgent_DataUnit* const       i_pDataUnit,
-                        utf8cstr const                       i_pKeyGroupID,
-                        KMSAgent_Key* const                  o_pKey);
-
-/**
- *  Retrieve a Data Unit by its data unit identifier.
- *
- *  @param i_pProfile                   an initialized #KMSClientProfile
- *  @param i_pDataUnitID                the data unit ID by which retrieval will be performed
- *  @param i_pExternalUniqueID          Optional, a unique data unit identifier to be associated with 
- *                                      the data unit. Uniqueness is enforced by the KMS. 
- *  @param i_iExternalUniqueIDLen       Length in bytes of the external unique identifier, must be positive.  If                                    
- *                                      <code>i_pExternalUniqueID</code> is NULL then this field is ignored.                                     
- *  @param i_pExternalTag               Optional, but recommended. Pointer to a data unit external tag, e.g. volser
- *  @param i_pDescription               Optional, a textual description of the data unit.
- *  @param o_pDataUnit                  a pointer to a DataUnit buffer allocated by the caller where
- *                                      data unit information is returned
- *
- *  @return #KMS_AGENT_STATUS_OK
- *  @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- *  @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- *  @return #KMS_AGENT_STATUS_NO_MEMORY
- *  @return #KMS_AGENT_STATUS_GENERIC_ERROR
- *  @return #KMS_AGENT_STATUS_ACCESS_DENIED
- *  @return #KMS_AGENT_STATUS_SERVER_BUSY
- *  @return #KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS
- *  @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- *  @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- */
-KMS_AGENT_STATUS KMSAgent_RetrieveDataUnit(
-                        KMSClientProfile* const         i_pProfile,
-                        const unsigned char * const     i_pDataUnitID,
-                        const unsigned char * const     i_pExternalUniqueID,
-                        int                             i_iExternalUniqueIDLen,
-                        utf8cstr const                  i_pExternalTag,
-                        utf8cstr const                  i_pDescription,
-                        KMSAgent_DataUnit* const        o_pDataUnit);
-
-/**
- *  Retrieve a Data Unit by its external unique identifier.
- *  If the KMS does not contain a data unit with the specified unique identifier then a data unit will
- *  be created.  The new data unit will contain the external unique identifier and the external tag, if 
- *  provided.
- *
- *  @param i_pProfile                   an initialized #KMSClientProfile
- *  @param i_pExternalUniqueID          A unique data unit identifier to be associated with 
- *                                      the data unit. Uniqueness is enforced by the KMS. 
- *  @param i_iExternalUniqueIDLen       Length in bytes of the external unique identifier, must be positive.                      
- *  @param i_pExternalTag               Optional, but recommended. Pointer to a data unit external tag, e.g. volser
- *  @param i_pDescription               Optional, a textual description of the data unit.
- *  @param o_pDataUnit                  a pointer to a DataUnit buffer allocated by the caller where
- *                                      data unit information is returned
- *
- *  @return #KMS_AGENT_STATUS_OK
- *  @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- *  @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- *  @return #KMS_AGENT_STATUS_NO_MEMORY
- *  @return #KMS_AGENT_STATUS_GENERIC_ERROR
- *  @return #KMS_AGENT_STATUS_ACCESS_DENIED
- *  @return #KMS_AGENT_STATUS_SERVER_BUSY
- *  @return #KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS
- *  @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- *  @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- */
-KMS_AGENT_STATUS KMSAgent_RetrieveDataUnitByExternalUniqueID(
-                        KMSClientProfile* const         i_pProfile,
-                        const unsigned char* const      i_pExternalUniqueID,
-                        int                             i_iExternalUniqueIDLen,
-                        utf8cstr const                  i_pExternalTag,
-                        utf8cstr const                  i_pDescription,
-                        KMSAgent_DataUnit* const        o_pDataUnit);
-
-/**
- *  retrieve keys assigned to a Data Unit. 
- *  Agents should consult the state of each key that is returned and only
- *  use the key in the #KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS state for encryption. The agent service
- *  attempts to return the most recently created key in the #KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS state
- *  as the first key in the list when a <code>i_pKeyID</code> is not specified.  This cannot be guaranteed as
- *  there may not be a key in the #KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS state for the specified 
- *  data unit.  The rest of the keys returned are sorted in ascending order by the time in which
- *  they were created on the server.
- *  #KMSAgent_DisassociateDataUnitKeys may be used to manage the
- *  size of the key list associated with a data unit.  
- *  The <code>i_iPageSize</code>, <code>i_iPageOffset</code> and <code>o_piKeysRemaining</code> parameters may be used for retrieving
- *  subsets of the list. For the <code>i_pKeyID</code> argument see the parameter's description.  
- *  Callers should invoke#KMSAgent_FreeArrayOfKeys when finished with the buffer of keys.
- * 
- *  @param i_pProfile        an initialized #KMSClientProfile
- *  @param i_pDataUnit       The Data Unit for which all keys will be retrieved. 
- *  @param i_iPageSize       the number of keys to be retrieved, up to #KMS_MAX_PAGE_SIZE.
- *  @param i_iPageOffset     the offset from the start of the data unit's key list. Set this to zero for
- *                           retrieval from the start of the list or if <code>i_pKeyID</code> is non-null.  
- *                           When set to zero the first key returned in the list
- *                           will be the most recently created key in the #KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS state.
- *  @param o_piKeysRemaining a pointer to an integer where the number of keys remaining in the list will be returned
- *  @param i_pKeyID          Optional. If non-null, the caller provides a pointer to a KeyID that is used for 
- *                           the retrieval and the list returned begins with the specified data unit's KeyID and up to 
- *                           <code>i_iPageSize</code> keys associated with the data unit having an activation date greater than the key 
- *                           corresponding to <code>i_pKeyID</code>.  The first key in the list is not guaranteed
- *                           to be in the #KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS state.  If the specified <code>i_pKeyID</code>
- *                           is not associated with the Data Unit then the behavior is like #KMSAgent_RetrieveKey and
- *                           a single key is returned.
- *                           When non-null the <code>i_iPageOffset</code>
- *                           argument must be 0, these arguments are mutually exclusive.
- *  @param o_ppKeys          a pointer to pointer to a #KMSAgent_ArrayOfKeys struct allocated by this routine for returning the specified number of
- *                           Data Unit's keys and key associated data.  Up to <code>i_iPageSize</code>
- *                           keys will be returned. Callers should invoke #KMSAgent_FreeArrayOfKeys
- *                           when finished with the buffer of keys.
- *  @return #KMS_AGENT_STATUS_OK
- *  @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- *  @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- *  @return #KMS_AGENT_STATUS_NO_MEMORY
- *  @return #KMS_AGENT_STATUS_GENERIC_ERROR
- *  @return #KMS_AGENT_STATUS_ACCESS_DENIED
- *  @return #KMS_AGENT_STATUS_KEY_CALLOUT_FAILURE
- *  @return #KMS_AGENT_STATUS_SERVER_BUSY
- *  @return #KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS
- *  @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- *  @return #KMS_AGENT_STATUS_KEY_DOES_NOT_EXIST  if <code>i_pKeyID</code> does not exist in the KMS.
- *  @return #KMS_AGENT_STATUS_KEY_DESTROYED if <code>i_pKeyID</code> has been destroyed.
- *  @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- *  @return #KMS_AGENT_AES_KEY_UNWRAP_ERROR
- *  @return #KMS_AGENT_AES_KEY_WRAP_SETUP_ERROR
- */
-KMS_AGENT_STATUS KMSAgent_RetrieveDataUnitKeys(
-                        KMSClientProfile* const              i_pProfile,
-                        const KMSAgent_DataUnit* const       i_pDataUnit,
-                        int                                  i_iPageSize,
-                        int                                  i_iPageOffset,
-                        int* const                           o_piKeysRemaining,
-                        const unsigned char * const          i_pKeyID,
-                        KMSAgent_ArrayOfKeys** const         o_ppKeys);
-
-/**
- *  returns a key in the #KMS_KEY_STATE_ACTIVE_PROTECT_AND_PROCESS for the specified data unit.  A new
- *  key will be created if the data unit does not have a key in the protect and process state or if the
- *  agent is not authorized to access the key in the protect and process state.
- *  @param i_pProfile                an initialized #KMSClientProfile
- *  @param i_pDataUnit               The Data Unit for which a key in the protect and process state will be returned. 
- *  @param i_pKeyGroupID             Optional. If non-NULL and a new key is to be created, the KMS will associate the key with the specified KeyGroup
- *  @param o_pKey                    A pointer to a buffer for returning the protect and process key.  If the data unit
- *                                   is associated with multiple keys in the protect and process state then the
- *                                   most recently created protect and process key is returned.
- *                                   
- *  @return #KMS_AGENT_STATUS_OK
- *  @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- *  @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- *  @return #KMS_AGENT_STATUS_NO_MEMORY
- *  @return #KMS_AGENT_STATUS_GENERIC_ERROR
- *  @return #KMS_AGENT_STATUS_ACCESS_DENIED
- *  @return #KMS_AGENT_STATUS_KEY_CALLOUT_FAILURE
- *  @return #KMS_AGENT_STATUS_SERVER_BUSY
- *  @return #KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS
- *  @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- *  @return #KMS_AGENT_STATUS_KMS_NO_READY_KEYS
- *  @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- *  @return #KMS_AGENT_AES_KEY_UNWRAP_ERROR
- *  @return #KMS_AGENT_AES_KEY_WRAP_SETUP_ERROR
- */
-KMS_AGENT_STATUS KMSAgent_RetrieveProtectAndProcessKey(
-                        KMSClientProfile* const              i_pProfile,
-                        const KMSAgent_DataUnit* const       i_pDataUnit,
-                        utf8cstr const                       i_pKeyGroupID,
-                        KMSAgent_Key* const                  o_pKey);
-
-/**
- *  Helper function which frees memory allocated for the output to #KMSAgent_RetrieveDataUnitKeys. 
- *  @param i_pArrayOfKeys  The array of keys to be freed 
- */
-void KMSAgent_FreeArrayOfKeys(
-                        KMSAgent_ArrayOfKeys*   i_pArrayOfKeys);
-
-/**
- *  create an entry in the KMS audit log
- *
- *  @param i_pProfile        an initialized #KMSClientProfile
- *  @param i_iRetention      the retention of audit log, can be one of:
- *                           #KMS_AUDIT_LOG_LONG_TERM_RETENTION
- *                           #KMS_AUDIT_LOG_MEDIUM_TERM_RETENTION
- *                           #KMS_AUDIT_LOG_SHORT_TERM_RETENTION
- *  @param i_iCondition      the condition of audit log, can be one of:
- *                           #KMS_AUDIT_LOG_SUCCESS_CONDITION
- *                           #KMS_AUDIT_LOG_ERROR_CONDITION
- *                           #KMS_AUDIT_LOG_WARNING_CONDITION
- *  @param i_bIssueAlert     issue alert (SNMP INFORM) for this audit
- *  @param i_pMessage        the message text to be logged
- *
- *  @return #KMS_AGENT_STATUS_OK
- *  @return #KMS_AGENT_STATUS_INVALID_PARAMETER
- *  @return #KMS_AGENT_STATUS_PROFILE_NOT_LOADED
- *  @return #KMS_AGENT_STATUS_GENERIC_ERROR
- *  @return #KMS_AGENT_STATUS_ACCESS_DENIED
- *  @return #KMS_AGENT_STATUS_SERVER_BUSY
- *  @return #KMS_AGENT_STATUS_KMS_UNAVAILABLE
- *  @return #KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE
- */
-KMS_AGENT_STATUS KMSAgent_CreateAuditLog(
-                        KMSClientProfile*            i_pProfile,
-                        enum KMS_AUDIT_LOG_RETENTION i_iRetention,
-                        enum KMS_AUDIT_LOG_CONDITION i_iCondition,
-                        int                          i_bIssueAlert,
-                        utf8cstr                     i_pMessage );
-
-
-#ifdef KMSUSERPKCS12
-#include <sys/types.h>
-KMS_AGENT_STATUS KMSAgent_ChangeLocalPWD(
-	KMSClientProfile* i_pProfile,
-	utf8cstr const i_pOldPassphrase,
-	utf8cstr const i_pNewPassphrase);
-
-#define	KMSAGENT_PROFILE_FLAGS	uint32_t
-
-KMS_AGENT_STATUS
-KMSAgent_GetProfileStatus(
-	char *i_pProfileName,
-	KMSAGENT_PROFILE_FLAGS *flags);
-
-
-#define	KMSAGENT_PROFILE_EXISTS_FLAG	0x01
-#define	KMSAGENT_CLIENTKEY_EXISTS_FLAG	0x02
-#endif /* KMSUSERPKCS12 */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
--- a/usr/src/lib/libkmsagent/common/KMSAgentAESKeyWrap.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,85 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
- * \file KMSAgentAESKeyWrap.h
- */
-
-#ifndef KMSAgentAESKeyWrap_H
-#define KMSAgentAESKeyWrap_H
-
-#ifdef WIN32
-#include <string.h>
-typedef unsigned char		uint8_t;
-typedef unsigned short		uint16_t;
-typedef unsigned int		uint32_t;
-typedef unsigned long long	uint64_t;
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-    /**
-     * AES Key Wrap (see RFC 3394). No logging is performed since this
-     *  functions must execute in a Known Answer Test prior to 
-     *  #KMSAgent_InitializeLibrary.
-     *  @param  kek  The AES symmetric key-encryption key
-     *  @param  kek_len The size, in bytes, of the KEK
-     *  @param  pt  The plain text key to be AES key wrapped
-     *  @param  len The "n" parameter from RFC3394, i.e. the number of 64-bit key data
-     *          blocks.  For example, with 256 bit plain text keys n=4.
-     *  @param  ct  The resulting AES wrapped key.  The size of ct needs to allow
-     *          for the 64-bit integrity check  value, i.e. sizeof(pt+8)
-     */
-    void aes_key_wrap (const uint8_t *kek,
-                       size_t kek_len,
-                       const uint8_t *pt,
-                       size_t len,
-                       uint8_t *ct);
-
-    /**
-     * AES Key Unwrap (see RFC 3394). No logging is performed since this
-     *  functions must execute in a Known Answer Test prior to 
-     *  #KMSAgent_InitializeLibrary.
-     *  @param  kek  The AES symmetric key-encryption key
-     *  @param  kek_len The size, in bytes, of the KEK
-     *  @param  ct  The AES wrapped key.
-     *  @param  pt  The resulting, unwrapped, plain text key.
-     *  @param  len The "n" parameter from RFC3394, i.e. the number of 64-bit key data
-     *          blocks.  For example, with 256 bit plain text keys n=4.
-     *  @return 0 on success, non-zero otherwise
-     */
-    int aes_key_unwrap (const uint8_t *kek,
-                        size_t kek_len,
-                        const uint8_t *ct,
-                        uint8_t *pt,
-                        size_t len);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* KMSAgentAESKeyWrap_H */
--- a/usr/src/lib/libkmsagent/common/KMSAgentChallenge.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,317 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAgentChallenge.cpp
- */
-
-#include "KMSAgentChallenge.h"
-#include "KMSAgentCryptoUtilities.h"
-#include "KMSAgentStringUtilities.h"
-#include "ApplianceParameters.h"
-#include "SYSCommon.h"
-
-extern "C" int Log2(char* msg1,
-                    char* msg2);
-
-#ifdef METAWARE
-#include "debug.h"
-#endif
-
-
-/**
- *  ComputeChallengeResponse
- */
-bool ComputeChallengeResponse(
-   const unsigned char* i_pAuthenticationSecret,
-   int i_iAuthenticationSecretLength,
-   const unsigned char* i_pRootCACertificate,
-   int i_iRootCACertificateLength,
-   const unsigned char* i_pAuthenticationChallenge,
-   int i_iAuthenticationChallengeLength,
-   unsigned char* o_pAuthenticationChallengeResponse,
-   int i_iAuthenticationChallengeResponseLength )
-{
-
-   bool rc;
-   
-#ifdef DEBUG
-   Log2 ("KMSAgent_LoadProfile::ComputeChallengeResponse", "Entered");
-#endif    
-   FATAL_ASSERT( i_iAuthenticationChallengeResponseLength == HMAC_LENGTH );
-   
-   // challenge response is HMAC-SHA1( RootCACertificate ||
-   // AuthenticationChallenge, AuthenticationSecret )
-   const unsigned char* aBuffersToHMAC[2];
-   int aBuffersToHMACSize[2];
-   
-   aBuffersToHMAC[0]     = i_pRootCACertificate;
-   aBuffersToHMACSize[0] = i_iRootCACertificateLength;
-   
-   aBuffersToHMAC[1]     = i_pAuthenticationChallenge;
-   aBuffersToHMACSize[1] = i_iAuthenticationChallengeLength;
-
-   rc = HMACBuffers(
-      2,
-      aBuffersToHMAC, 
-      aBuffersToHMACSize, 
-      i_pAuthenticationSecret, 
-      i_iAuthenticationSecretLength, 
-      o_pAuthenticationChallengeResponse );
-
-#if defined(METAWARE) && defined(DEBUG)
-   int j=0;
-
-   j+=snprintf(outmsg+j, OUTMSG_SIZE, 
-              "length=%x\n",
-              i_iAuthenticationSecretLength);
-   
-   for (int i=0 ; i< i_iAuthenticationSecretLength; i++)
-   {
-      j+=snprintf(outmsg+j,  OUTMSG_SIZE, 
-                 "%x",
-                 i_pAuthenticationSecret[i]);
-   }
-   snprintf(outmsg+j,  OUTMSG_SIZE, "\n");
-   
-   Log2("Secret = ",outmsg);
-#endif
-   
-#if defined(METAWARE) && defined(DEBUG)
-   j=0;
-   
-   j+=snprintf(outmsg+j,  OUTMSG_SIZE, 
-              "length=%x\n",
-              i_iRootCACertificateLength);
-   
-   for (i=0 ; i< i_iRootCACertificateLength; i++)
-   {
-      j+=snprintf(outmsg+j,  OUTMSG_SIZE, 
-                 "%x",
-                 i_pRootCACertificate[i]);
-   }
-   snprintf(outmsg+j, OUTMSG_SIZE, "\n");
-   
-   Log2("i_pRootCACertificate = ",outmsg);
-#endif
-   
-#if defined(METAWARE) && defined(DEBUG)
-   j=0;
-   
-   j+=snprintf(outmsg+j,  OUTMSG_SIZE, 
-              "length=%x\n",
-              i_iAuthenticationChallengeLength);
-   
-   for (i=0 ; i< i_iAuthenticationChallengeLength; i++)
-   {
-      j+=snprintf(outmsg+j,  OUTMSG_SIZE, 
-                 "%x",
-                 i_pAuthenticationChallenge[i]);
-   }
-   snprintf(outmsg+j,  OUTMSG_SIZE, "\n");
-   
-   Log2("i_pAuthenticationChallenge = ",outmsg);
-#endif
-   
-#if defined(METAWARE) && defined(DEBUG)
-   j=0;
-   
-   j+=snprintf(outmsg+j,  OUTMSG_SIZE, 
-              "length=%x\n",
-              i_iAuthenticationChallengeResponseLength);
-   
-   for (i=0 ; i< i_iAuthenticationChallengeResponseLength; i++)
-   {
-      j+=snprintf(outmsg+j,  OUTMSG_SIZE, 
-                 "%x",
-                 o_pAuthenticationChallengeResponse[i]);
-   }
-   snprintf(outmsg+j,  OUTMSG_SIZE, "\n");
-   
-   Log2("o_pAuthenticationChallengeResponse = ",outmsg);
-#endif
-   
-   return rc;
-   
-#undef __IAM__
-}
-
-/**
- *   ComputeEntityHashedPassphraseAndAuthenticationSecret
- */
-bool ComputeEntityHashedPassphraseAndAuthenticationSecret(
-        const char* i_sPassphrase,
-        char* const o_sHexHashedPassphrase,
-        int* const  o_piAuthenticationHashIterationCount,
-        char* const o_sHexAuthenticationSecret )
-{
-    // HashedPassphrase is SHA1( Passphrase-UTF-8 )
-    // Using UTF-8 ensures the same result on different platforms with
-    // different wide character representations.
-    // This hashed passphrase value is used to wrap entity
-    // private key materials.
-#if defined(METAWARE) && defined(DEBUG)
-    Log2 ("KMSAgent_LoadProfile::ComputeEntityHashedPassphraseAndAuthenticationSecret", 
-          "Entered");
-#endif    
-
-    unsigned char aHashedPassphrase[HASH_LENGTH];
-
-    memset(aHashedPassphrase, 0, HASH_LENGTH);
-
-    if ( strlen(i_sPassphrase) > 0 )
-    {
-        if ( !HashBuffer(
-                    (unsigned char*)i_sPassphrase, 
-                    strlen(i_sPassphrase),
-                    aHashedPassphrase) )
-        {
-            return false;
-        }
-    }
-
-    ConvertBinaryToUTF8HexString( o_sHexHashedPassphrase, 
-                                  aHashedPassphrase, 
-                                  HASH_LENGTH );
-
-    // HexAuthenticationSecret is SHA1( SHA1( ... ( SHA1(
-    // HashedPassphrase ) ) ) The number of iterations is time bounded
-    // at 1/10 of a second, and also bounded by fixed minimum and
-    // maximum values (to prevent too weak of a computation and to
-    // prevent a DoS, respectively).  This value is used as the shared
-    // secret in challenge-response authentication exchanges.
-
-    *o_piAuthenticationHashIterationCount = 0;
-    
-    unsigned long iStartTickCount = K_GetTickCount();
-    
-    while ( *o_piAuthenticationHashIterationCount < 
-            MAX_AUTHENTICATION_ITERATION_COUNT
-            && ( *o_piAuthenticationHashIterationCount < 
-                 MIN_AUTHENTICATION_ITERATION_COUNT
-                 || iStartTickCount + 
-                 AUTHENTICATION_ITERATION_TIME_IN_MILLISECONDS > 
-                 K_GetTickCount() ) )
-    {
-       if ( !HashBuffer(
-               aHashedPassphrase, 
-               HASH_LENGTH,
-               aHashedPassphrase) )
-       {
-          return false;
-       }
-       
-       (*o_piAuthenticationHashIterationCount)++;
-    }
-    
-    ConvertBinaryToUTF8HexString( o_sHexAuthenticationSecret, 
-                                  aHashedPassphrase, HASH_LENGTH );
-
-#if defined(METAWARE) && defined(DEBUG)
-    snprintf(outmsg,  OUTMSG_SIZE, 
-            "o_sHexAuthenticationSecret=%x o_piAuth..."
-            "= %x aHashedPassphrase=%s\n", 
-            o_sHexAuthenticationSecret, 
-            *o_piAuthenticationHashIterationCount,
-            aHashedPassphrase);
-    Log2("ComputeEntityHashedPassphraseAndAuthenticationSecret ",
-         outmsg);
-#endif
-
-    return true;
-}
-
-/**
- *   ComputeFixedEntityHashedPassphraseAndAuthenticationSecret
- */
-bool ComputeFixedEntityHashedPassphraseAndAuthenticationSecret(
-   const char* i_sPassphrase,
-   char* const o_sHexHashedPassphrase,
-   int         i_iAuthenticationHashIterationCount,
-   char* const o_sHexAuthenticationSecret )
-{
-   // compute same values as
-   // ComputeEntityHashedPassphraseAndAuthenticationSecret, except
-   // iteration count is fixed
-#if defined(METAWARE) && defined(DEBUG)
-    Log2 ("KMSAgent_LoadProfile::"
-          "ComputeFixedEntityHashedPassphraseAndAuthenticationSecret", "Entered");
-#endif    
-   
-   // detect attempts to cause weak computation or DoS attack
-   if ( i_iAuthenticationHashIterationCount < 
-        MIN_AUTHENTICATION_ITERATION_COUNT   || 
-        i_iAuthenticationHashIterationCount > 
-        MAX_AUTHENTICATION_ITERATION_COUNT )
-   {
-      return false;
-   }
-
-
-   unsigned char aHashedPassphrase[HASH_LENGTH];
-
-   memset(aHashedPassphrase, 0, HASH_LENGTH);
-
-   if ( strlen(i_sPassphrase) > 0 )
-   {
-      if ( !HashBuffer(
-              (unsigned char*)i_sPassphrase, 
-              strlen(i_sPassphrase),
-              aHashedPassphrase) )
-      {
-         return false;
-      }
-   }
-
-   ConvertBinaryToUTF8HexString( o_sHexHashedPassphrase, 
-                                 aHashedPassphrase, HASH_LENGTH );
-
-   int i;
-   for ( i = 0; i < i_iAuthenticationHashIterationCount; i++ )
-   {
-      if ( !HashBuffer(
-              aHashedPassphrase, 
-              HASH_LENGTH,
-              aHashedPassphrase) )
-      {
-         return false;
-      }
-   }
-
-   ConvertBinaryToUTF8HexString( o_sHexAuthenticationSecret, 
-                                 aHashedPassphrase, HASH_LENGTH );
-
-#if defined(METAWARE) && defined(DEBUG)
-    snprintf(outmsg,  OUTMSG_SIZE, 
-            "i_iAuth %x \n",
-            i_iAuthenticationHashIterationCount);
-    
-    Log2("ComputeEntityHashedPassphraseAndAuthenticationSecret ",
-         outmsg);
-#endif
-
-
-   return true;
-}
--- a/usr/src/lib/libkmsagent/common/KMSAgentChallenge.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,111 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAgentChallenge.h
- */
-
-#ifndef KMSAagentChallenge_H
-#define	KMSAagentChallenge_H
-
-/**
- *   computes the response to the KMA's challenge using
- *   HMAC-SHA1( RootCACertificate || AuthenticationChallenge,
- *      AuthenticationSecret ).  The AuthenticationSecret is
- *   used as the key in the HMAC-SHA1 computation.
- *
- *   @param i_pAuthenticationSecret
- *   @param i_iAuthenticationSecretLength
- *   @param i_pRootCACertificate
- *   @param i_iRootCACertificateLength
- *   @param i_pAuthenticationChallenge
- *   @param i_iAuthenticationChallengeLength
- *   @param o_pAuthenticationChallengeResponse
- *   @param i_iAuthenticationChallengeResponseLength
- *
- *   @return boolean success indicator
- */
-bool ComputeChallengeResponse(
-        const unsigned char* i_pAuthenticationSecret,
-        int i_iAuthenticationSecretLength,
-        const unsigned char* i_pRootCACertificate,
-        int i_iRootCACertificateLength,
-        const unsigned char* i_pAuthenticationChallenge,
-        int i_iAuthenticationChallengeLength,
-        unsigned char* o_pAuthenticationChallengeResponse,
-        int i_iAuthenticationChallengeResponseLength );
-
-/**
- *  computes the SHA1 hash of the specified passphrase.
- *  The number of SHA1 iterations
- *  is recorded in <code>o_iAuthenticationHashIterationCount</code> and the result
- *  stored in o_sHexAuthenticationSecret as a UTF8 hex string.
- *  HexAuthenticationSecret is SHA1( SHA1( ... ( SHA1( HashedPassphrase ) ) )
- *  The number of iterations is time bounded at 1/10 of a second, and also
- *  bounded by fixed minimum and maximum values (to prevent too weak of a
- *  computation and to prevent a DoS, respectively).
- *  This value is used as the shared secret in challenge-response
- *  authentication exchanges.
- 
- *  @param i_sPassphrase            the passphrase to be hashed
- *  @param o_sHexHashedPassphrase   the hashed passphrase
- *                                  returned in UTF8 hexadecimal, this
- *                                  buffer should be at least
- *                                  2*HASH_LENGTH+1 bytes
- *  @param o_iAuthenticationHashIterationCount
- *  @param o_sHexAuthenticationSecret
- *
- *  @return boolean success indicator
- */
-bool ComputeEntityHashedPassphraseAndAuthenticationSecret(
-   const char* const   i_sPassphrase,
-   char* const         o_sHexHashedPassphrase,
-   int* const          o_piAuthenticationHashIterationCount,
-   char* const         o_sHexAuthenticationSecret );
-
-/**
- *  computes the SHA1 hash of the specified passphrase.  The SHA1 is
- *  performed a "fixed" number of times as specified by
- *   <code>i_iAuthenticationHashIterationCount</code>.
- *
- *  @param i_sPassphrase  the passprhase to be SHA1 hashed 
- *  @param o_sHexHashedPassphrase the SHA1 hash
- *            of i_sPassphrase stored as a UTF8 hex string
- *  @param i_iAuthenticationHashIterationCount the number
- *            of times to SHA1 hash the passphrase
- *  @param o_sHexAuthenticationSecret the passphrase hashed
- *            the fixed number of times and stored as a UTF8
- *            hex string
- *
- *  @return boolean success indicator
- */
-bool ComputeFixedEntityHashedPassphraseAndAuthenticationSecret(
-   const char* i_sPassphrase,
-   char* const o_sHexHashedPassphrase,
-   int         i_iAuthenticationHashIterationCount,
-   char* const o_sHexAuthenticationSecret );
-
-#endif	/* KMSAagentChallenge_H */
-
--- a/usr/src/lib/libkmsagent/common/KMSAgentCryptoUtilities.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAgentCryptoUtilities.cpp
- */
-
-#include <openssl/rand.h>
-#include <openssl/hmac.h>
-#include <openssl/err.h>
-#include <openssl/sha.h>
-
-#include "KMSAgentCryptoUtilities.h"
-#include "SYSCommon.h"
-#include "KMSAgentStringUtilities.h"
-//#include "ApplianceParameters.h"
-
-// Find header in CryptoUtilities.h
-bool GetPseudorandomBytes(
-        int i_iNumBytes,
-        unsigned char* o_pBytes )
-{
-    if ( 1 != RAND_bytes( o_pBytes, i_iNumBytes) )
-    {
-        return false;
-    }
-
-    return true;
-}
-
-// assumes o_pHashedBuffer points to HASH_LENGTH bytes
-bool HashBuffer( 
-        const unsigned char* i_pBufferToHash,
-        int i_iBufferToHashSize,
-        unsigned char* o_pHashedBuffer )
-{
-
-    FATAL_ASSERT( HASH_LENGTH == SHA_DIGEST_LENGTH );
-    FATAL_ASSERT( i_pBufferToHash && (i_iBufferToHashSize > 0) && o_pHashedBuffer );
-
-    unsigned char aDigest[HASH_LENGTH];
-
-    if ( NULL == SHA1( i_pBufferToHash, i_iBufferToHashSize, aDigest ) )
-    {
-        return false;
-    }
-
-    memcpy( o_pHashedBuffer, aDigest, HASH_LENGTH );
-
-    return true;
-}
-
-// assumes o_pHMACBuffer points to HMAC_LENGTH bytes
-bool HMACBuffers(
-        int i_iBufferCount,
-        const unsigned char** i_pBufferToHMAC,
-        int* i_pBufferToHMACSize,
-        const unsigned char* i_pHMACKey,
-        int i_iHMACKeySize,
-        unsigned char* o_pHMACBuffer )
-{
-    // assumes o_pHMACBuffer points to HMAC_LENGTH bytes
-
-    FATAL_ASSERT( HMAC_LENGTH == SHA_DIGEST_LENGTH );
-    FATAL_ASSERT( (i_iBufferCount > 0) && 
-                    i_pBufferToHMAC && 
-                    i_pBufferToHMACSize && 
-                    i_pHMACKey && 
-                    (i_iHMACKeySize > 0) && o_pHMACBuffer );
-
-    HMAC_CTX stContext;
-
-    HMAC_CTX_init( &stContext );
-
-    HMAC_Init_ex( &stContext, i_pHMACKey, i_iHMACKeySize, EVP_sha1(), NULL );
-
-    int i;
-    for ( i = 0; i < i_iBufferCount; i++ )
-    {
-        HMAC_Update( &stContext, i_pBufferToHMAC[i], i_pBufferToHMACSize[i] );
-    }
-
-    unsigned int iHMACSize = HMAC_LENGTH;
-
-    HMAC_Final( &stContext, o_pHMACBuffer, &iHMACSize );
-
-    FATAL_ASSERT( iHMACSize == HMAC_LENGTH );
-
-    HMAC_CTX_cleanup( &stContext );
-
-    return true;
-}
-
--- a/usr/src/lib/libkmsagent/common/KMSAgentCryptoUtilities.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAgentCryptoUtilities.h
- */
-
-#ifndef KMSAgentCryptoUtilities_H
-#define KMSAgentCryptoUtilities_H
-
-#ifdef WIN32
-#pragma warning(disable: 4786)
-#endif
-
-#define HASH_LENGTH     20
-#define HMAC_LENGTH     20
-
-/**
- *  Generates a random set of bytes of the specified length.
- *
- *  @return boolean success indicator
- */
-bool GetPseudorandomBytes(
-        int i_iNumBytes,
-        unsigned char* o_pBytes );
-
-/**
- *  computes SHA-1 hash of the buffer
- *  @param i_pBufferToHash
- *  @param i_iBufferToHashSize
- *  @param o_pHashedBuffer buffer to recieve the SHA-1 hash and must be 
- *          #HASH_LENGTH bytes
- *  @return boolean success indicator
- */
-bool HashBuffer( 
-        const unsigned char* i_pBufferToHash,
-        int i_iBufferToHashSize,
-        unsigned char* o_pHashedBuffer );
-
-#ifdef METAWARE
-
-// implemented in KMSAgentCryptoUtilitiesTreckHmac.c
-extern "C" int HMACBuffers(
-   int i_iBufferCount,
-   const unsigned char** i_pBufferToHMAC,
-   int* i_pBufferToHMACSize,
-   const unsigned char* i_pHMACKey,
-   int i_iHMACKeySize,
-   unsigned char* o_pHMACBuffer );
-
-#else
-/**
- *  computes HMAC on the supplied buffers using SHA-1
- *  hashing and the key supplied.  No logging is performed since this
- *  functions must execute in a Known Answer Test prior to 
- *  #KMSAgent_InitializeLibrary.
- *  @param i_iBufferCount number of buffers provided in #i_pBufferToHMAC
- *  @param i_pBufferToHMAC array of buffers
- *  @param i_pBufferToHMACSize array of sizes corresponding to buffers in 
- *      #i_pBufferToHMAC
- *  @param i_pHMACKey secret key
- *  @param i_iHMACKeySize  length of the key in bytes 
- *  @param o_pHMACBuffer  buffer to contain the HMAC, this buffer must be
- *      #HASH_LENGTH bytes
- *  @return boolean success indicator
- */
-bool HMACBuffers(
-        int i_iBufferCount,
-        const unsigned char** i_pBufferToHMAC,
-        int* i_pBufferToHMACSize,
-        const unsigned char* i_pHMACKey,
-        int i_iHMACKeySize,
-        unsigned char* o_pHMACBuffer );
-#endif
-
-
-
-#endif //KMSAgentCryptoUtilities_H
--- a/usr/src/lib/libkmsagent/common/KMSAgentDataUnitCache.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,202 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAgentDataUnitCache.cpp
- */
-
-#include <stdio.h>
-#include "SYSCommon.h"
-#include "KMSClientProfile.h"
-#include "KMSAgentDataUnitCache.h"
-
-CDataUnitCache::CDataUnitCache(int i_iMaxSize)
-{
-    m_iSize = 0;
-    m_iIndex = 0;
-    m_iMaxSize = i_iMaxSize;
-    m_pCache = 0;
-
-    K_CreateMutex(&m_Lock);
-}
-
-CDataUnitCache::~CDataUnitCache()
-{
-    delete[] m_pCache;
-    K_DestroyMutex(m_Lock);
-}
-
-bool CDataUnitCache::Insert(
-                const unsigned char* const i_pDataUnitID,
-                int i_iDataUnitIDMaxLen, 
-                const unsigned char* const i_pDataUnitKeyID ,
-                int i_iDataUnitKeyIDMaxLen,
-                const utf8char* const i_wsApplianceNetworkAddress )
-{
-    FATAL_ASSERT( (i_pDataUnitID && i_iDataUnitIDMaxLen == KMS_DATA_UNIT_ID_SIZE) ||
-                  (i_pDataUnitKeyID && i_iDataUnitKeyIDMaxLen == KMS_KEY_ID_SIZE));
-    FATAL_ASSERT( i_wsApplianceNetworkAddress && 
-                  strlen( i_wsApplianceNetworkAddress ) < KMS_MAX_NETWORK_ADDRESS );
-
-    Lock();
-
-    if ( m_pCache == 0 )
-    {
-        m_pCache = new DataUnitCacheEntry[m_iMaxSize];
-
-        if ( !m_pCache )
-        {
-            // no error logged on out of memory
-            Unlock();
-#if defined(DEBUG) && defined(METAWARE)
-            log_printf("CDataUnitCache::Insert new DataUnitCacheEntry alloc failure\n");
-#endif
-            return false;
-        }
-    }
-
-    if( m_iSize >= m_iMaxSize )
-    {
-        // the cache is full, so reuse an old slot
-
-        m_iIndex  = (m_iIndex + 1) % m_iMaxSize;
-    }
-    else
-    {
-        m_iIndex = m_iSize;
-
-        m_iSize++;
-    }
-
-    strncpy( m_pCache[m_iIndex].m_wsApplianceNetworkAddress, 
-             i_wsApplianceNetworkAddress, 
-             sizeof(m_pCache[m_iIndex].m_wsApplianceNetworkAddress) );
-    m_pCache[m_iIndex].m_wsApplianceNetworkAddress[sizeof(m_pCache[m_iIndex].m_wsApplianceNetworkAddress)-1] = '\0';
-
-    if ( i_pDataUnitID )
-    {
-        memcpy( m_pCache[m_iIndex].m_aDataUnitID, 
-                i_pDataUnitID, 
-                i_iDataUnitIDMaxLen );
-    }
-    else
-    {
-        memset( m_pCache[m_iIndex].m_aDataUnitID,0,KMS_DATA_UNIT_ID_SIZE);
-    }
-
-    if ( i_pDataUnitKeyID )
-    {
-        memcpy( m_pCache[m_iIndex].m_aDataUnitKeyID, 
-            i_pDataUnitKeyID, 
-            i_iDataUnitKeyIDMaxLen );
-    }
-    else
-    {
-        memset(m_pCache[m_iIndex].m_aDataUnitKeyID,0,KMS_KEY_ID_SIZE);
-    }
-
-    Unlock();
-
-    return true;
-}
-
-bool CDataUnitCache::GetApplianceByDataUnitID(
-                const unsigned char* const i_pDataUnitID,
-                int i_iDataUnitIDMaxLen,
-                utf8char* const o_wsApplianceNetworkAddress,
-                int i_iMaxApplianceNetworkAddressLen )
-{
-    FATAL_ASSERT( i_pDataUnitID );
-    FATAL_ASSERT( i_iDataUnitIDMaxLen == KMS_DATA_UNIT_ID_SIZE );
-    FATAL_ASSERT( i_iMaxApplianceNetworkAddressLen <= KMS_MAX_NETWORK_ADDRESS );
-
-    // assumes o_wsApplianceNetworkAddress points to at least KMS_MAX_NETWORK_ADDRESS
-
-    Lock();
-
-    int i;
-    for( i = 0; i < m_iSize; i++ )
-    {
-        if( memcmp(m_pCache[i].m_aDataUnitID, i_pDataUnitID, KMS_DATA_UNIT_ID_SIZE) == 0 )
-        {
-            strncpy( o_wsApplianceNetworkAddress, 
-                m_pCache[i].m_wsApplianceNetworkAddress, 
-                i_iMaxApplianceNetworkAddressLen );
-            o_wsApplianceNetworkAddress[i_iMaxApplianceNetworkAddressLen-1] = '\0';
-            Unlock();
-            return true;
-        }
-    }
-
-    Unlock();
-
-    return false;
-}
-
-bool CDataUnitCache::GetApplianceByDataUnitKeyID(
-                const unsigned char* const i_pDataUnitKeyID,
-                int i_iDataUnitKeyIDMaxLen,
-                utf8char* const o_wsApplianceNetworkAddress,
-                int i_iMaxApplianceNetworkAddressLen )
-{
-    FATAL_ASSERT( i_pDataUnitKeyID );
-    FATAL_ASSERT( i_iDataUnitKeyIDMaxLen == KMS_KEY_ID_SIZE );
-    FATAL_ASSERT( i_iMaxApplianceNetworkAddressLen <= KMS_MAX_NETWORK_ADDRESS );
-
-    // assumes o_wsApplianceNetworkAddress points to at least KMS_MAX_NETWORK_ADDRESS
-
-    Lock();
-
-    int i;
-    for( i = 0; i < m_iSize; i++ )
-    {
-        if( memcmp(m_pCache[i].m_aDataUnitKeyID,
-                i_pDataUnitKeyID, KMS_KEY_ID_SIZE) == 0 )
-        {
-            strncpy( o_wsApplianceNetworkAddress, 
-                m_pCache[i].m_wsApplianceNetworkAddress, 
-                i_iMaxApplianceNetworkAddressLen );
-            o_wsApplianceNetworkAddress[i_iMaxApplianceNetworkAddressLen-1] = '\0';
-
-            Unlock();
-
-            return true;
-        }
-    }
-
-    Unlock();
-
-    return false;
-}
-
-void CDataUnitCache::Lock()
-{
-    K_LockMutex(m_Lock);
-}
-
-void CDataUnitCache::Unlock()
-{
-    K_UnlockMutex(m_Lock);
-}
--- a/usr/src/lib/libkmsagent/common/KMSAgentDataUnitCache.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/** @file             KMSAgentDataUnitCache.h 
- *  @defgroup         EncryptionAgent Encryption Agent API
- *
- */
-#ifndef KMSAGENT_DATA_UNIT_CACHE_H
-#define KMSAGENT_DATA_UNIT_CACHE_H
-
-#define DATA_UNIT_CACHE_MAX_SIZE 128
-
-typedef struct DataUnitCacheEntry
-{
-    utf8char m_wsApplianceNetworkAddress[KMS_MAX_NETWORK_ADDRESS+1];
-    unsigned char m_aDataUnitID[KMS_DATA_UNIT_ID_SIZE];
-    unsigned char m_aDataUnitKeyID[KMS_KEY_ID_SIZE];
-
-} DataUnitCacheEntry;
-
-/**
- *  Maintains an affinity list between KMAs and DUs and KeyIDs. 
- */
-class CDataUnitCache
-{
-
-public:
-    CDataUnitCache(int i_iMaxSize = DATA_UNIT_CACHE_MAX_SIZE);
-    ~CDataUnitCache();
-
-    /**
-     *   insert a new DataUnitCacheEntry into the cache list, either i_pDataUnitID or
-     *   i_pDataUnitKeyID must be specified for affinity with the specified i_wsApplianceNetworkAddress
-     *   @param i_pDataUnitID optional, specifies a DU ID cache entry if specified
-     *   @param i_iDataUnitIDMaxLen ignored if i_pDataUnitID not specified, otherwise
-     *      specifies the length of i_pDataUnitID
-     *   @param i_pDataUnitKeyID optional, specifies a Key ID cache entry if specified
-     *   @param i_iDataUnitKeyIDMaxLen ignored if i_pDataUnitKeyID is not specified, 
-     *      otherwise specifies the length of i_pDataUnitKeyID
-     *   @param i_wsApplianceNetworkAddress required and specifies the KMA affiliated 
-     *      with the DU ID or Key ID
-     *   @return True if successfully inserted into the cache
-     */
-    bool Insert(
-                const unsigned char* const i_pDataUnitID,
-                int i_iDataUnitIDMaxLen, 
-                const unsigned char* const i_pDataUnitKeyID ,
-                int i_iDataUnitKeyIDMaxLen,
-                const utf8char* const i_wsApplianceNetworkAddress );
-
-    bool GetApplianceByDataUnitID(
-                const unsigned char* const i_pDataUnitID,
-                int i_iDataUnitIDMaxLen,
-                utf8char* const o_wsApplianceNetworkAddress,
-                int i_iMaxApplianceNetworkAddressLen );
-
-    bool GetApplianceByDataUnitKeyID(
-                const unsigned char* const i_pDataUnitKeyID,
-                int i_iDataUnitKeyIDMaxLen,
-                utf8char* const o_wsApplianceNetworkAddress,
-                int i_iMaxApplianceNetworkAddressLen );
-
-protected:
-    void Lock();
-    void Unlock();
-
-private:
-    K_MUTEX_HANDLE m_Lock;
-
-    int m_iIndex;
-    int m_iSize;
-    int m_iMaxSize;
-    DataUnitCacheEntry *m_pCache;
-
-};
-
-#endif
--- a/usr/src/lib/libkmsagent/common/KMSAgentFatalState.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,79 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAgentFatalState.cpp
- */
-#include <stdio.h>
-#include <string.h>
-
-#include "SYSCommon.h"
-#include "KMSAgentStringUtilities.h"
-#include "KMSAuditLogger.h"
-
-#define MAX_TIME_STAMP_LENGTH 30
-
-#ifndef METAWARE
-/**
- *  append the state of the application in the <KMSAgentAuditLogger> log file. 
- */
-void process_fatal_application_state(const char* sFile, 
-                                     const char* sFunction, 
-                                     int iLine,
-									 const char* sAdditionalText)
-{
-	
-   // File format: <date/time>,<operation>,<retention>,<audit id>,<network adddress>,<message>
-   char sFileLogEntry[MAX_LOG_FILE_LINE_LENGTH];
-   char sTimeStamp[MAX_TIME_STAMP_LENGTH];
-   char sLine[20];
-   
-   GetCurrentDateTimeISO8601UTC(sTimeStamp, MAX_TIME_STAMP_LENGTH);
-   Int64ToUTF8(sLine, iLine, false, false);
-
-   strncpy(sFileLogEntry, "A fatal application error has occurred. Date: ", sizeof(sFileLogEntry));
-
-   sFileLogEntry[sizeof(sFileLogEntry)-1] = '\0';
-   
-   strncat(sFileLogEntry, sTimeStamp, MAX_LOG_FILE_LINE_LENGTH - strlen(sFileLogEntry));
-    
-   strncat(sFileLogEntry, " File: ", MAX_LOG_FILE_LINE_LENGTH - strlen(sFileLogEntry));
-
-   strncat(sFileLogEntry, sFile, MAX_LOG_FILE_LINE_LENGTH - strlen(sFileLogEntry));
-
-   strncat(sFileLogEntry, " Function: ", MAX_LOG_FILE_LINE_LENGTH - strlen(sFileLogEntry));
-
-   strncat(sFileLogEntry, sFunction, MAX_LOG_FILE_LINE_LENGTH - strlen(sFileLogEntry));
-
-   strncat(sFileLogEntry, " Line: ", MAX_LOG_FILE_LINE_LENGTH - strlen(sFileLogEntry));
-
-   strncat(sFileLogEntry, sLine, MAX_LOG_FILE_LINE_LENGTH - strlen(sFileLogEntry));
-
-   LogToFile( 0, sFileLogEntry );
-
-   exit( -1 );
-}
-
-#endif
--- a/usr/src/lib/libkmsagent/common/KMSAgentKeyCallout.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include "KMSAgentKeyCallout.h"
-
-#ifdef METAWARE
-extern "C" int ecpt_get_pc_key_and_xor( unsigned char * key );
-#endif
-
-/**
- *  Hook function to get the key in the clear (XOR is presently used)
- *  @returns 0=ok, nonzero = bad
- */
-int KMSAgentKeyCallout( unsigned char io_aKey[KMS_MAX_KEY_SIZE] )
-{
-#ifndef METAWARE
-    return 0;
-#else
-    return ecpt_get_pc_key_and_xor( io_aKey );
-#endif    
-}
--- a/usr/src/lib/libkmsagent/common/KMSAgentKeyCallout.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file    KMSAgentKeyCallout.h
- *
- */
-
-#ifndef KMSAGENT_KEYCALLOUT_H
-#define KMSAGENT_KEYCALLOUT_H
-
-#include "KMSAgent.h"
-
-/**
- *  Behavior is up to customizers of the KMS Agent reference implementation. 
- *  A possible usage of this function is to encrypt the plaintext 
- *  key value.  This function will be invoked by the following KMS Agent API
- *  functions upon successful receipt of a key from a KMS transaction:
- *  <ul>
- *  <li>KMSAgent_CreateKey
- *  <li>KMSAgent_RetrieveKey
- *  <li>KMSAgent_RetrieveDataUnitKeys - once for each key retrieved
- *  <li>KMSAgent_RetrieveProtectAndProcessKey
- *  </ul>
- *
- *  @param io_pKey   a plaintext key
- *  @return 0 if success   
- */
-int KMSAgentKeyCallout( unsigned char io_aKey[KMS_MAX_KEY_SIZE] );
-
-
-#endif
-
--- a/usr/src/lib/libkmsagent/common/KMSAgentKnownAnswerTests.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,454 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAgentKnownAnswerTests.cpp
- */
-
-#if defined(K_SOLARIS_PLATFORM) && !defined(SOLARIS10)
-#include <aes_impl.h>
-#define AES_MAXKEYBYTES AES_MAX_KEY_BYTES
-#define	AES_MAXKEYBITS AES_MAXBITS
-#else
-#include "rijndael.h"
-#endif
-#include "KMSAgentCryptoUtilities.h"
-#include "KMSAgentStringUtilities.h"
-
-#ifdef METAWARE
-#include "debug.h"
-#include "sizet.h"
-typedef unsigned char uint8_t;
-typedef unsigned short uint16_t;
-typedef unsigned int uint32_t;
-typedef unsigned long long uint64_t;
-#endif
-
-#include "KMSAgentAESKeyWrap.h"
-#include "KMSAgentKnownAnswerTests.h"
-
-int KnownAnswerTestAESKeyWrap (void)
-{
-
-    /* 
-     * Test Vectors from RFC3394 for 256 bit KEK and 256 bit Key
-     *  Wrap  Input:
-           KEK:
-             000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F
-           Key Data:
-             00112233445566778899AABBCCDDEEFF000102030405060708090A0B0C0D0E0F
-
-           Output:
-           Ciphertext  28C9F404C4B810F4 CBCCB35CFB87F826 3F5786E2D80ED326
-                       CBC7F0E71A99F43B FB988B9B7A02DD21
-
-           Unwrap:
-           Plaintext  A6A6A6A6A6A6A6A6 0011223344556677 8899AABBCCDDEEFF
-                      0001020304050607 08090A0B0C0D0E0F
-
-           Output:
-           Key Data:
-                00112233445566778899AABBCCDDEEFF000102030405060708090A0B0C0D0E0F
-
-     */
-
-    static char sKEK[] = "000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F";
-    static char sKey[] = "00112233445566778899AABBCCDDEEFF000102030405060708090A0B0C0D0E0F";
-    static char sKnownCiphertext[] = "28C9F404C4B810F4CBCCB35CFB87F8263F5786E2D80ED326CBC7F0E71A99F43BFB988B9B7A02DD21";
-
-    //#ifdef KAT_DEBUG
-    //    printf("\nAES Key Wrap Test using Test Vectors from RFC 3394 for 256b KEK and 256b Key\n\n");
-    //    printf("KEK=%s\n", sKEK);
-    //    printf("Key=%s\n", sKey);
-    //#endif
-
-    // key-encryption key
-    unsigned char acKEK[AES_MAXKEYBYTES];
-
-    // plaintext key
-    unsigned char acKey[AES_MAXKEYBYTES];
-
-    // the wrapped key includes an extra 64bits for the integrity check register
-    unsigned char acWrappedKey[AES_MAXKEYBYTES + 8];
-    unsigned char acUnWrappedKey[AES_MAXKEYBYTES];
-    unsigned char acExpectedWrappedKey[AES_MAXKEYBYTES + 8];
-
-    if ((size_t) ConvertUTF8HexStringToBinary(
-        sKnownCiphertext,
-        acExpectedWrappedKey) != strlen(sKnownCiphertext) / 2)
-    {
-        return -1;
-    }
-
-    if (ConvertUTF8HexStringToBinary(
-        sKEK,
-        acKEK) != AES_MAXKEYBYTES)
-    {
-        return -1;
-    }
-
-    if (ConvertUTF8HexStringToBinary(
-        sKey,
-        acKey) != AES_MAXKEYBYTES)
-    {
-        return -1;
-    }
-
-    // for 256 bit Key n=64
-    aes_key_wrap(acKEK, sizeof (acKEK), acKey,
-            4, acWrappedKey);
-
-    if (memcmp(acWrappedKey, acExpectedWrappedKey, sizeof (acWrappedKey)) != 0)
-    {
-        return -1;
-    }
-
-    if (aes_key_unwrap(acKEK, sizeof (acKEK), acWrappedKey,
-        acUnWrappedKey, 4) != 0)
-    {
-        return -1;
-    }
-
-    if (memcmp(acKey, acUnWrappedKey, sizeof (acKey)) != 0)
-    {
-        return -1;
-    }
-
-    return 0;
-}
-
-static int AES_ECB_TestExecution (
-                                  const char * const i_sPlainText, 
-                                  const char * const i_sKnownCypherText, 
-                                  const unsigned char * const i_pKey)
-{
-    unsigned char acPlainText[256];
-    unsigned char acCypherText[sizeof (acPlainText)];
-    unsigned char acKnownCypherText[sizeof (acPlainText)];
-    unsigned char acDecryptedCypherText[sizeof (acPlainText)];
-    memset(acDecryptedCypherText, 0, sizeof (acDecryptedCypherText));
-
-#ifdef KAT_DEBUG    
-    char sComputedCypherText[256];
-#endif
-    
-#if defined(K_SOLARIS_PLATFORM) && !defined(SOLARIS10)
-    void *ks;
-    size_t ks_size;
-#else
-    rijndael_ctx ctx;
-#endif
-
-    if ((size_t) ConvertUTF8HexStringToBinary(
-        i_sPlainText,
-        acPlainText) != strlen(i_sPlainText) / 2)
-    {
-        return -1;
-    }
-    if ((size_t) ConvertUTF8HexStringToBinary(
-        i_sKnownCypherText,
-        acKnownCypherText) != strlen(i_sKnownCypherText) / 2)
-    {
-        return -1;
-    }
-    
-#if defined(K_SOLARIS_PLATFORM) && !defined(SOLARIS10)
-	ks = aes_alloc_keysched(&ks_size, 0);
-	if (ks == NULL)
-		return (-1);
-	aes_init_keysched(i_pKey, AES_MAXKEYBITS, ks);
-	(void) aes_encrypt_block(ks, acPlainText, acCypherText);
-#else
-    rijndael_set_key_enc_only(&ctx, (uint8_t *) i_pKey, AES_MAXKEYBITS);
-
-    rijndael_encrypt(&ctx, acPlainText, (uint8_t *) acCypherText);
-#endif
-    
-#ifdef KAT_DEBUG
-    ConvertBinaryToUTF8HexString(sComputedCypherText,
-            acCypherText,
-            strlen(i_sPlainText) / 2);
-    printf("PlainText=%s\n", i_sPlainText);
-    printf("CypherText=%s\n", sComputedCypherText);
-#endif
-
-    if (memcmp(acCypherText, acKnownCypherText, strlen(i_sKnownCypherText) / 2) != 0)
-    {
-#if defined(K_SOLARIS_PLATFORM) && !defined(SOLARIS10)
-	free(ks);
-#endif
-        return -1;
-    }
-
-#if defined(K_SOLARIS_PLATFORM) && !defined(SOLARIS10)
-	aes_init_keysched(i_pKey, AES_MAXKEYBITS, ks);
-	(void) aes_decrypt_block(ks, acCypherText, acDecryptedCypherText);
-	free(ks);
-#else
-    rijndael_set_key(&ctx, (uint8_t *) i_pKey, AES_MAXKEYBITS);
-    rijndael_decrypt(&ctx, (uint8_t *) acCypherText, acDecryptedCypherText);
-#endif
-
-    if (memcmp(acPlainText, acDecryptedCypherText, strlen(i_sPlainText) / 2) != 0)
-    {
-        return -1;
-    }
-
-    return 0;
-
-}
-
-static int KnownAnswerTestAESECB_GFSbox (void)
-{
-    /* 
-     *  Test Vectors from AES Algorithm Validation Suite(AESAVS)
-     */
-    unsigned char acKey[AES_MAXKEYBYTES];
-    memset(acKey, 0, sizeof (acKey));
-
-    /*  
-        # CAVS 6.1
-        # Config info for Sun 1820 AES
-        # AESVS GFSbox test data for ECB
-        # State : Encrypt and Decrypt
-        # Key Length : 256
-        # Generated on Wed Aug 13 13:39:06 2008
-     */
-    const size_t GFSboxCount = 5;
-    static char sPlainText[GFSboxCount][33];
-    static char sKnownCypherText[GFSboxCount][33];
-    strcpy(sPlainText[0], "014730f80ac625fe84f026c60bfd547d");
-    strcpy(sPlainText[1], "0b24af36193ce4665f2825d7b4749c98");
-    strcpy(sPlainText[2], "761c1fe41a18acf20d241650611d90f1");
-    strcpy(sPlainText[3], "8a560769d605868ad80d819bdba03771");
-    strcpy(sPlainText[4], "91fbef2d15a97816060bee1feaa49afe");
-    
-    strcpy(sKnownCypherText[0], "5c9d844ed46f9885085e5d6a4f94c7d7");
-    strcpy(sKnownCypherText[1], "a9ff75bd7cf6613d3731c77c3b6d0c04");
-    strcpy(sKnownCypherText[2], "623a52fcea5d443e48d9181ab32c7421" );
-    strcpy(sKnownCypherText[3], "38f2c7ae10612415d27ca190d27da8b4" ); 
-    strcpy(sKnownCypherText[4], "1bc704f1bce135ceb810341b216d7abe" );         
-
-    
-    for (size_t i = 0; i < GFSboxCount; i++)
-    {
-        if (AES_ECB_TestExecution(sPlainText[i], sKnownCypherText[i], acKey) != 0)
-        {
-#ifdef KAT_DEBUG
-            printf("GFSbox[%d]: failed\n", i);
-#endif
-            return -1;
-        }
-#ifdef KAT_DEBUG
-        printf("GFSbox[%d]: passed\n", i);
-#endif
-    }
-    return 0;
-}
-
-static int KnownAnswerTestAESECB_KeySbox (void)
-{
-    unsigned char acKey[AES_MAXKEYBYTES];
-    memset(acKey, 0, sizeof (acKey));
-
-    /* 
-        # CAVS 6.1
-        # Config info for Sun 1820 AES
-        # AESVS KeySbox test data for ECB
-        # State : Encrypt and Decrypt
-        # Key Length : 256
-        # Generated on Wed Aug 13 13:39:07 2008
-     */
-    const size_t KeySboxCount = 16;
-    static char sKey[KeySboxCount][65];
-    static char sKnownCypherText[KeySboxCount][33];
-    static char sPlainText[] = "00000000000000000000000000000000";
-
-    strcpy(sKey[0], "c47b0294dbbbee0fec4757f22ffeee3587ca4730c3d33b691df38bab076bc558");
-    strcpy(sKey[1], "28d46cffa158533194214a91e712fc2b45b518076675affd910edeca5f41ac64");
-    strcpy(sKey[2], "c1cc358b449909a19436cfbb3f852ef8bcb5ed12ac7058325f56e6099aab1a1c");
-    strcpy(sKey[3], "984ca75f4ee8d706f46c2d98c0bf4a45f5b00d791c2dfeb191b5ed8e420fd627");
-    strcpy(sKey[4], "b43d08a447ac8609baadae4ff12918b9f68fc1653f1269222f123981ded7a92f");
-    strcpy(sKey[5], "1d85a181b54cde51f0e098095b2962fdc93b51fe9b88602b3f54130bf76a5bd9");
-    strcpy(sKey[6], "dc0eba1f2232a7879ded34ed8428eeb8769b056bbaf8ad77cb65c3541430b4cf");
-    strcpy(sKey[7], "f8be9ba615c5a952cabbca24f68f8593039624d524c816acda2c9183bd917cb9");
-    strcpy(sKey[8], "797f8b3d176dac5b7e34a2d539c4ef367a16f8635f6264737591c5c07bf57a3e");
-    strcpy(sKey[9], "6838d40caf927749c13f0329d331f448e202c73ef52c5f73a37ca635d4c47707");
-    strcpy(sKey[10], "ccd1bc3c659cd3c59bc437484e3c5c724441da8d6e90ce556cd57d0752663bbc");
-    strcpy(sKey[11], "13428b5e4c005e0636dd338405d173ab135dec2a25c22c5df0722d69dcc43887");
-    strcpy(sKey[12], "07eb03a08d291d1b07408bf3512ab40c91097ac77461aad4bb859647f74f00ee");
-    strcpy(sKey[13], "90143ae20cd78c5d8ebdd6cb9dc1762427a96c78c639bccc41a61424564eafe1");
-    strcpy(sKey[14], "b7a5794d52737475d53d5a377200849be0260a67a2b22ced8bbef12882270d07");
-    strcpy(sKey[15], "fca02f3d5011cfc5c1e23165d413a049d4526a991827424d896fe3435e0bf68e");
-    strcpy(sKnownCypherText[0], "46f2fb342d6f0ab477476fc501242c5f");
-    strcpy(sKnownCypherText[1], "4bf3b0a69aeb6657794f2901b1440ad4");
-    strcpy(sKnownCypherText[2], "352065272169abf9856843927d0674fd");
-    strcpy(sKnownCypherText[3], "4307456a9e67813b452e15fa8fffe398");
-    strcpy(sKnownCypherText[4], "4663446607354989477a5c6f0f007ef4");
-    strcpy(sKnownCypherText[5], "531c2c38344578b84d50b3c917bbb6e1");
-    strcpy(sKnownCypherText[6], "fc6aec906323480005c58e7e1ab004ad");
-    strcpy(sKnownCypherText[7], "a3944b95ca0b52043584ef02151926a8");
-    strcpy(sKnownCypherText[8], "a74289fe73a4c123ca189ea1e1b49ad5");
-    strcpy(sKnownCypherText[9], "b91d4ea4488644b56cf0812fa7fcf5fc");
-    strcpy(sKnownCypherText[10], "304f81ab61a80c2e743b94d5002a126b");
-    strcpy(sKnownCypherText[11], "649a71545378c783e368c9ade7114f6c");
-    strcpy(sKnownCypherText[12], "47cb030da2ab051dfc6c4bf6910d12bb");
-    strcpy(sKnownCypherText[13], "798c7c005dee432b2c8ea5dfa381ecc3");
-    strcpy(sKnownCypherText[14], "637c31dc2591a07636f646b72daabbe7");
-    strcpy(sKnownCypherText[15], "179a49c712154bbffbe6e7a84a18e220");
-    
-    for (size_t i = 0; i < KeySboxCount; i++)
-    {
-#ifdef KAT_DEBUG
-        printf("KeySbox[%d]: \n", i);
-#endif
-        unsigned char acKey[256];
-        if ((size_t) ConvertUTF8HexStringToBinary(
-            sKey[i],
-            acKey) != strlen(sKey[i]) / 2)
-        {
-#ifdef KAT_DEBUG
-            printf("KeySbox[%d]: failed hex to binary conversion\n", i);
-#endif
-            return -1;
-        }
-        if (AES_ECB_TestExecution(sPlainText, sKnownCypherText[i], acKey) != 0)
-        {
-#ifdef KAT_DEBUG
-            printf("KeySbox[%d]: failed test\n", i);
-#endif
-            return -1;
-        }
-#ifdef KAT_DEBUG
-        printf("KeySbox[%d]: passed\n", i);
-#endif
-    }
-    return 0;
-}
-
-int KnownAnswerTestHMACSHA1 (void)
-{
-    /* Test Data from RFC2202 */
-    const static char sKey[] = "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b";
-    unsigned char acKey[HMAC_LENGTH];
-    const static char sPlainText[] = "Hi There";
-    const static char sCypherText[] = "b617318655057264e28bc0b6fb378c8ef146be00";
-    const unsigned char* aBuffersToHMAC[1];
-    int aBuffersToHMACSize[1];
-    unsigned char acCypherText[HMAC_LENGTH];
-    unsigned char acComputedCypherText[HMAC_LENGTH];
-    if ((size_t) ConvertUTF8HexStringToBinary(
-        sKey,
-        acKey) != sizeof (acKey))
-    {
-#ifdef KAT_DEBUG
-        printf("HMAC-SHA1: failed hex to binary conversion for Key\n");
-#endif
-        return -1;
-    }
-    if ((size_t) ConvertUTF8HexStringToBinary(
-        sCypherText,
-        acCypherText) != sizeof (acCypherText))
-    {
-#ifdef KAT_DEBUG
-        printf("HMAC-SHA1: failed hex to binary conversion for CypherText\n");
-#endif
-        return -1;
-    }
-
-    aBuffersToHMAC[0] = (unsigned char *) sPlainText;
-    aBuffersToHMACSize[0] = strlen(sPlainText);
-
-    if (!HMACBuffers(
-        1,
-        aBuffersToHMAC,
-        aBuffersToHMACSize,
-        acKey,
-        sizeof (acKey),
-        acComputedCypherText))
-    {
-#ifdef KAT_DEBUG
-        printf("HMAC-SHA1: failed in HMACBuffers\n");
-#endif
-        return -1;
-    }
-    if (memcmp(acCypherText, acComputedCypherText, sizeof (acCypherText)) != 0)
-    {
-#ifdef KAT_DEBUG
-        printf("HMAC-SHA1: failed comparison with expected cycphertext\n");
-#endif
-        return -1;
-    }
-
-    return 0;
-}
-
-
-int KnownAnswerTestAESECB (void)
-{
-    if (KnownAnswerTestAESECB_GFSbox() != 0)
-    {
-#ifdef KAT_DEBUG
-        printf("GFSbox: test suite failed\n");
-#endif
-        return -1;
-    }
-
-    if (KnownAnswerTestAESECB_KeySbox() != 0)
-    {
-#ifdef KAT_DEBUG
-        printf("KeySbox: test suite failed\n");
-#endif
-        return -1;
-    }
-
-    return 0;
-}
-
-#ifdef STAND_ALONE_TEST
-
-int main ()
-{
-    // Known Answer Test on AES Key Wrap code
-    if (KnownAnswerTestAESKeyWrap() != 0)
-    {
-        return -1;
-    }
-
-    if (KnownAnswerTestAESECB() != 0)
-    {
-        return -1;
-    }
-
-    if (KnownAnswerTestHMACSHA1() != 0)
-    {
-        return -1;
-    }
-
-    return 0;
-}
-#endif
-
-
--- a/usr/src/lib/libkmsagent/common/KMSAgentKnownAnswerTests.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/** @file             KMSAgent.h 
- *  @defgroup         EncryptionAgent Encryption Agent API
- *
- * The Agent API is used to communicate with the KMS Appliance for the
- * purpose of registering storage devices, obtaining device keys, and
- * receiving notifications of storage device events such as destruction.
- *
- */
-#ifndef KMS_AGENT_KNOWN_ANSWER_TESTS_H
-#define KMS_AGENT_KNOWN_ANSWER_TESTS_H
-
-/**
- *  This function exercises both <code>aes_key_wrap</code> and <code>aes_key_unwrap</code>
- *  in order to satisfy a FIPS 140-2 requirement for a known answer test, aka KAT.  Test
- *  vectors from RFC 3394 are used for this test.
- *  @return 0 on success, non-zero otherwise
- */
-int KnownAnswerTestAESKeyWrap(void);
-    
-/**
- *  This function exercises both <code>rijndael_encrypt</code> and <code>rijndael_decrypt</code>
- *  in order to satisfy a FIPS 140-2 requirement for a known answer test, aka KAT.  Test
- *  vectors from Infoguard are used for this test.
- *  @return 0 if KAT passed, non-zero otherwise
- */
-int KnownAnswerTestAESECB(void);
-
-/**
- *  This function exercises  #HMACBuffers
- *  in order to satisfy a FIPS 140-2 requirement for a known answer test, aka KAT.  Test
- *  vectors from Infoguard are used for this test.
- *  @return 0 if KAT passed, non-zero otherwise
- */
-int KnownAnswerTestHMACSHA1(void);
-
-#endif
-
-
--- a/usr/src/lib/libkmsagent/common/KMSAgentLoadBalancer.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1169 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAgentLoadBalancer.cpp
- */
-
-#ifdef WIN32
-#define _WIN32_WINNT 0x0400
-#include <windows.h>
-#include <process.h>
-#endif
-
-#include <stdlib.h>
-
-#include "KMS_AgentH.h"
-#include "KMSClientProfile.h"
-#include "KMSAgentSoapUtilities.h"
-#include "KMSAgentStringUtilities.h"
-#include "KMSClientProfileImpl.h"
-#include "KMSAgent.h"
-#include "KMSAuditLogger.h"
-#include "ApplianceParameters.h"
-#include "KMSAgentCryptoUtilities.h"
-
-#ifdef METAWARE
-#include "debug.h"
-#include "sizet.h"
-typedef unsigned char		uint8_t;
-typedef unsigned short		uint16_t;
-typedef unsigned int		uint32_t;
-typedef unsigned long long	uint64_t;
-#endif
-#include "KMSAgentAESKeyWrap.h"
-
-#ifdef METAWARE
-#include "stdsoap2.h" /* makes fewer platform assumptions 
-                          than the standard stdsoap2.h */
-
-int time (char *);
-#include "literals.h"
-#else
-#include "stdsoap2.h"
-#endif
-
-#include "AutoMutex.h"
-
-// real declaration of soap *
-#include "KMSAgentDataUnitCache.h"
-
-#include "ClientSoapFaultCodes.h"
-#include "KMSAgentPKICommon.h"
-#include "KMSAgentLoadBalancer.h" // needs to be after stdsoap2.h to use the
-
-CAgentLoadBalancer::CAgentLoadBalancer (KMSClientProfile * const i_pProfile)
-: m_pProfile (i_pProfile),
-m_iTransactionStartTimeInMilliseconds (0),
-m_bFIPS (false),
-m_iKWKEntryNum (0),
-m_iLastAttemptedWhenNoneResponding (0)
-{
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) m_pProfile->m_pLock);
-
-    // initialize the aCluster, let it contain the default appliance
-    m_iClusterNum = 1;
-    memset(&(m_aCluster[0]), 0, sizeof (KMSClusterEntry));
-    strncpy(m_aCluster[0].m_wsApplianceNetworkAddress,
-            i_pProfile->m_wsApplianceAddress,
-            sizeof(m_aCluster[0].m_wsApplianceNetworkAddress));
-    m_aCluster[0].m_wsApplianceNetworkAddress[sizeof(m_aCluster[0].m_wsApplianceNetworkAddress)-1] = '\0';
-
-    // This may not be known because the initial 
-    // appliance's Alias is not yet entered.
-    strcpy(m_aCluster[0].m_wsApplianceAlias, "");
-    strcpy(m_sURL, "");
-    memset(m_aKWKEntries, 0, KMS_MAX_CLUSTER_NUM * sizeof(struct KWKEntry *));
-}
-
-CAgentLoadBalancer::~CAgentLoadBalancer ()
-{
-    // free up KWK entries
-    for( int i=0; i < m_iKWKEntryNum && i < KMS_MAX_CLUSTER_NUM; i++)
-    {
-        if (m_aKWKEntries[i] != NULL)
-        {
-            delete m_aKWKEntries[i];
-        }
-    }
-    return;
-}
-
-char *CAgentLoadBalancer::GetHTTPSURL (int i_iIndex, int i_iPort)
-{
-    if (i_iIndex < 0 || i_iIndex >= m_iClusterNum)
-    {
-        strcpy(m_sURL, "");
-    }
-    else
-    {
-        K_snprintf(m_sURL, KMS_MAX_URL, "https://%s:%d",
-                m_aCluster[i_iIndex].m_wsApplianceNetworkAddress,
-                i_iPort);
-    }
-
-    return m_sURL;
-}
-
-char *CAgentLoadBalancer::GetHTTPURL (int i_iIndex, int i_iPort)
-{
-    if (i_iIndex < 0 || i_iIndex >= m_iClusterNum)
-    {
-        strcpy(m_sURL, "");
-    }
-    else
-    {
-        K_snprintf(m_sURL, KMS_MAX_URL, "http://%s:%d",
-                m_aCluster[i_iIndex].m_wsApplianceNetworkAddress,
-                i_iPort);
-    }
-
-    return m_sURL;
-}
-
-int CAgentLoadBalancer::Balance ()
-{
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) m_pProfile->m_pLock);
-
-    int i;
-    unsigned int iSelected = 0;
-    unsigned int iSelected2 = 0;
-
-    // clear the failover attempts
-    m_pProfile->m_iFailoverAttempts = 0;
-
-    // This assumes Balance()/BalanceBy...() are called at the top of
-    // each Agent Library transaction
-    // m_iTransactionStartTimeInMilliseconds is used to determine if
-    // enough time remains
-    // (vs. KMSClientProfile::m_iTransactionTimeout) to retry a
-    // request if there was a Server Busy error.
-
-    m_iTransactionStartTimeInMilliseconds = K_GetTickCount();
-
-    // if not enabling load balancing, return the default appliance & if
-    // its FIPS compatible when running in FIPS_MODE
-
-    if (m_pProfile->m_iClusterDiscoveryFrequency == 0)
-    {
-        if (m_bFIPS && !FIPScompatibleKMA(m_aCluster[0].m_sKMAVersion))
-        {
-            return NO_FIPS_KMA_AVAILABLE;
-        }
-        return 0;
-    }
-
-    int iCurrentTime = K_GetTickCount() / 1000;
-
-    // if it is the first time or time to get cluster information
-    if ((!m_pProfile->m_bIsClusterDiscoveryCalled) ||
-        ((iCurrentTime - m_pProfile->m_iLastClusterDiscoveryTime) >
-        m_pProfile->m_iClusterDiscoveryFrequency))
-    {
-        if (!KMSClient_GetClusterInformation(m_pProfile,
-            m_pProfile->m_wsEntitySiteID,
-            sizeof (m_pProfile->m_wsEntitySiteID),
-            &(m_pProfile->m_iClusterNum),
-            m_pProfile->m_aCluster,
-            KMS_MAX_CLUSTER_NUM))
-        {
-            // if failed due to some error, return default one
-            // KMSClient_GetClusterInformation logs
-
-            return 0;
-        }
-
-        m_pProfile->m_bIsClusterDiscoveryCalled = true;
-
-        // Reset the transaction start time to not include the time spent
-        // calling KMSClient_GetClusterInformation.
-
-        m_iTransactionStartTimeInMilliseconds = K_GetTickCount();
-
-        // reset this index since cluster size may have changed
-        m_iLastAttemptedWhenNoneResponding = 0;
-
-        // TODO: Adjust timeouts to guarentee a response to the Agent
-        // Library called in m_iTransactionTimeout seconds?  This means
-        // not adjusting m_iTransactionStartTimeInMilliseconds, but also
-        // reducing socket timeouts for subsequent calls.
-    }
-
-    // sort the cluster array by Load
-
-    KMSClient_SortClusterArray(m_pProfile);
-
-    // copy all Appliances to this object
-
-    for (i = 0; i < m_pProfile->m_iClusterNum; i++)
-    {
-        m_aCluster[i] = m_pProfile->m_aCluster[i];
-    }
-
-    m_iClusterNum = m_pProfile->m_iClusterNum;
-
-    int iCandidateAppliances = 0;
-
-    // the initial set of candidates for load balancing are all enabled,
-    // responding and unlocked KMAs (assumes they are at the top of the sort
-    // order) & FIPS compatible if we're in that mode
-
-    for (i = 0; i < m_iClusterNum; i++)
-    {
-        if ((m_aCluster[i].m_iResponding == TRUE) &&
-            (m_aCluster[i].m_iEnabled == TRUE ) &&
-			(m_aCluster[i].m_iKMALocked == FALSE))
-        {
-            iCandidateAppliances++;
-        }
-    }
-
-    // check if there are any enabled and responding Appliances in the
-    // same site as this Agent, and if so make those the candidates
-    // (assumes they are at the top of the sort order)
-
-    int iCandidateAppliancesInSameSite = 0;
-
-    if (strlen(m_pProfile->m_wsEntitySiteID) > 0)
-    {
-        for (i = 0; i < iCandidateAppliances; i++)
-        {
-            if (strncmp(m_aCluster[i].m_wsApplianceSiteID,
-                m_pProfile->m_wsEntitySiteID,
-                sizeof(m_aCluster[i].m_wsApplianceSiteID)) == 0)
-            {
-                iCandidateAppliancesInSameSite++;
-            }
-        }
-    }
-
-    // reduce the candidate set to just KMAs within the site
-    if (iCandidateAppliancesInSameSite > 0)
-    {
-        iCandidateAppliances = iCandidateAppliancesInSameSite;
-    }
-
-    // constrain the candidate set to just FIPS compatible KMAs
-    if (m_bFIPS)
-    {
-        int iCandidateFIPSKMAs = 0;
-        
-        for (i = 0; i < iCandidateAppliances; i++)
-        {
-            if ( FIPScompatibleKMA(m_aCluster[i].m_sKMAVersion ))
-            {
-                iCandidateFIPSKMAs++;
-            }
-        }
-        
-        // select only from FIPS capable KMAs
-        iCandidateAppliances = iCandidateFIPSKMAs;
-    }
-    
-    // if there are no candidate Appliances, use the default Appliance unless
-    // we're in FIPS mode
-
-    if (!m_bFIPS && iCandidateAppliances <= 1)
-    {
-        return 0;
-    }
-    
-    // FIPS mode
-    else if (iCandidateAppliances <= 0)
-    {
-        return NO_FIPS_KMA_AVAILABLE;
-    }
-    else if (iCandidateAppliances == 1)
-    {
-        return 0;
-    }
-
-    // randomly select two candidate Appliances and select the one
-    // with the smaller load
-
-    // choose one random number between 0 -- iCandidateAppliances - 1
-    iSelected = rand() % iCandidateAppliances;
-    iSelected2 = (iSelected + 1) % iCandidateAppliances;
-
-    // select the one with the smaller load
-
-    if (m_aCluster[iSelected2].m_lLoad < m_aCluster[iSelected].m_lLoad)
-    {
-        iSelected = iSelected2;
-    }
-
-    return iSelected;
-}
-
-int CAgentLoadBalancer::BalanceByDataUnitID (
-                                             const unsigned char * const i_pDataUnitID,
-                                             int i_iDataUnitIDMaxLen)
-{
-    FATAL_ASSERT(i_pDataUnitID);
-
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) m_pProfile->m_pLock);
-
-    // clear the failover attempts
-    m_pProfile->m_iFailoverAttempts = 0;
-
-    // This assumes Balance(), or BalanceBy...(),
-    // is called at the top of each Agent Library transaction 
-    // m_iTransactionStartTimeInMilliseconds is used to determine if enough time remains
-    // (vs. KMSClientProfile::m_iTransactionTimeout) to retry a request if there was
-    // a Server Busy error.
-
-    m_iTransactionStartTimeInMilliseconds = K_GetTickCount();
-
-    // look in cache
-
-    CDataUnitCache *pDataUnitCache = (CDataUnitCache *) m_pProfile->m_pDataUnitCache;
-
-    // if not enabling load balancing, return the default appliance & if
-    // its FIPS compatible when running in FIPS_MODE
-
-    if (m_pProfile->m_iClusterDiscoveryFrequency == 0)
-    {
-        if (m_bFIPS && !FIPScompatibleKMA(m_aCluster[0].m_sKMAVersion))
-        {
-            return NO_FIPS_KMA_AVAILABLE;
-        }
-        return 0;
-    }
-
-    // if the Data Unit ID is in the server affinity cache, use that Appliance
-
-    utf8char wsApplianceNetworkAddress[KMS_MAX_NETWORK_ADDRESS];
-    int iIndex = CLIENT_SIDE_ERROR;
-
-    if (pDataUnitCache->GetApplianceByDataUnitID(
-        i_pDataUnitID,
-        i_iDataUnitIDMaxLen,
-        wsApplianceNetworkAddress,
-        sizeof(wsApplianceNetworkAddress)))
-    {
-        iIndex = FindIndexByNetworkAddress(wsApplianceNetworkAddress);
-    }
-
-    if (iIndex != CLIENT_SIDE_ERROR)
-    {
-        if (m_bFIPS && !FIPScompatibleKMA(m_aCluster[iIndex].m_sKMAVersion))
-        {
-            // in spite of caching we need to attempt an alternate KMA due
-            // to the FIPS mode setting
-            return Balance();
-        }
-        return iIndex;
-    }
-
-    // normal balancing
-    return Balance();
-}
-
-int CAgentLoadBalancer::BalanceByDataUnitKeyID (
-                                                const unsigned char * const i_pDataUnitKeyID,
-                                                int i_iDataUnitKeyIDMaxLen)
-{
-    FATAL_ASSERT(i_pDataUnitKeyID);
-
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) m_pProfile->m_pLock);
-
-    // clear the failover attempts
-    m_pProfile->m_iFailoverAttempts = 0;
-
-    // This assumes Balance()/BalanceBy...()
-    // are called at the top of each Agent Library transaction 
-    // m_iTransactionStartTimeInMilliseconds is used to determine if enough time remains
-    // (vs. KMSClientProfile::m_iTransactionTimeout) to retry a request if there was
-    // a Server Busy error.
-
-    m_iTransactionStartTimeInMilliseconds = K_GetTickCount();
-
-    // look in cache
-
-    CDataUnitCache *pDataUnitCache = (CDataUnitCache *) m_pProfile->m_pDataUnitCache;
-
-    // if not enabling load balancing, return the default appliance & if
-    // its FIPS compatible when running in FIPS_MODE
-
-    if (m_pProfile->m_iClusterDiscoveryFrequency == 0)
-    {
-        if (m_bFIPS && !FIPScompatibleKMA(m_aCluster[0].m_sKMAVersion))
-        {
-            return NO_FIPS_KMA_AVAILABLE;
-        }
-        return 0;
-    }
-
-    // if the Data Unit Key ID is in the server affinity cache, use that Appliance
-
-    utf8char sApplianceNetworkAddress[KMS_MAX_NETWORK_ADDRESS];
-    int iIndex = CLIENT_SIDE_ERROR;
-
-    if (pDataUnitCache->GetApplianceByDataUnitKeyID(
-        i_pDataUnitKeyID,
-        i_iDataUnitKeyIDMaxLen,
-        sApplianceNetworkAddress,
-        sizeof(sApplianceNetworkAddress)))
-    {
-        iIndex = FindIndexByNetworkAddress(sApplianceNetworkAddress);
-    }
-
-    if (iIndex != CLIENT_SIDE_ERROR)
-    {
-        if (m_bFIPS && !FIPScompatibleKMA(m_aCluster[iIndex].m_sKMAVersion))
-        {
-            // in spite of caching we need to attempt an alternate KMA due
-            // to the FIPS mode setting
-            return Balance();
-        }
-        return iIndex;
-    }
-
-    // normal balancing
-    return Balance();
-}
-
-int CAgentLoadBalancer::FindIndexByNetworkAddress
-(char * i_wsApplianceNetworkAddress)
-{
-    FATAL_ASSERT(i_wsApplianceNetworkAddress);
-
-    for (int i = 0; i < m_iClusterNum; i++)
-    {
-
-        if ((strncmp(m_aCluster[i].m_wsApplianceNetworkAddress,
-            i_wsApplianceNetworkAddress,
-            sizeof(m_aCluster[i].m_wsApplianceNetworkAddress)) == 0) &&
-            m_aCluster[i].m_iEnabled == TRUE &&
-            m_aCluster[i].m_iResponding == TRUE)
-        {
-            return i;
-        }
-
-    }
-
-    return CLIENT_SIDE_ERROR;
-}
-
-char* CAgentLoadBalancer::GetApplianceNetworkAddress (int i_iIndex)
-{
-    if (i_iIndex < 0 || i_iIndex >= m_iClusterNum)
-    {
-        return (char *)"";
-    }
-
-    return m_aCluster[i_iIndex].m_wsApplianceNetworkAddress;
-}
-
-bool CAgentLoadBalancer::FailOverLimit (void)
-{
-    if (m_pProfile->m_iFailoverLimit >= 0 &&
-        m_pProfile->m_iFailoverAttempts > m_pProfile->m_iFailoverLimit)
-        return true;
-    else
-        return false;
-}
-
-int CAgentLoadBalancer::FailOver (int i_iFailedApplianceIndex,
-                                  struct soap *i_pstSoap)
-{
-    FATAL_ASSERT(i_pstSoap);
-
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) m_pProfile->m_pLock);
-
-    const char *strError = GET_SOAP_FAULTSTRING(i_pstSoap);
-    int iSoapErrno = i_pstSoap->errnum;
-    int iErrorCode = GET_FAULT_CODE(strError);
-    int i;
-
-    if ( m_bFIPS &&
-        KMSClient_NoFIPSCompatibleKMAs(m_pProfile))
-    {
-        return NO_FIPS_KMA_AVAILABLE;
-    }
-
-    m_pProfile->m_iFailoverAttempts++;
-
-    /*
-     *  if KWK is not registered, or mismatched, most likely KMA lost its key due to a service
-     *  restart.  Call RegisterKWK to re-register the KWK.
-     *  If RegisterKWK  fails proceed from here with new failover info
-     */
-    if ( iErrorCode == CLIENT_ERROR_AGENT_KWK_NOT_REGISTERED ||
-         iErrorCode == CLIENT_ERROR_AGENT_KWK_ID_MISMATCH )
-    {
-        LogError(m_pProfile,
-                AGENT_LOADBALANCER_FAILOVER,
-                NULL,
-                m_aCluster[i_iFailedApplianceIndex].m_wsApplianceNetworkAddress,
-                "KWK not registered or ID mismatch - registering");
-        // delete the KWK entry since the KMA no longer has it
-        DeleteKWKEntry( GetKMAID(i_iFailedApplianceIndex));
-        
-        return i_iFailedApplianceIndex;
-    }
-
-    bool bServerError = false;
-
-    // if the request failed due to a Server Busy error, and if
-    //  - transaction timeout has not been exceeded OR
-    //  - failover attempts remain
-    // then failover
-
-    if (iErrorCode == CLIENT_ERROR_SERVER_BUSY &&
-        (K_GetTickCount() < m_iTransactionStartTimeInMilliseconds + (m_pProfile->m_iTransactionTimeout * 1000) ||
-        !CAgentLoadBalancer::FailOverLimit()))
-    {
-        LogError(m_pProfile,
-                AGENT_LOADBALANCER_FAILOVER,
-                NULL,
-                m_aCluster[i_iFailedApplianceIndex].m_wsApplianceNetworkAddress,
-                "Server Busy - failing over");
-        bServerError = true;
-    }
-    else if (ServerError(strError,iSoapErrno))
-    {
-        bServerError = true;
-    }
-    else
-    {
-        if (i_iFailedApplianceIndex == AES_KEY_WRAP_SETUP_ERROR)
-        {
-            return AES_KEY_WRAP_SETUP_ERROR;
-        }
-        else
-        {
-            return CLIENT_SIDE_ERROR; // it is a client side problem, don't fail over
-        }
-    }
-
-    // disable the failed Appliance in the profile, and
-    // re-sort the cluster array, so transactions in other threads
-    // will not send requests to the same failed Appliance
-#if defined(METAWARE)
-    log_cond_printf(ECPT_LOG_AGENT, "CAgentLoadBalancer::Failover(): FailoverAttempts=%d\n",
-            m_pProfile->m_iFailoverAttempts);
-#endif
-    for (i = 0; i < m_pProfile->m_iClusterNum; i++)
-    {
-        if (m_pProfile->m_aCluster[i].m_lApplianceID ==
-            m_aCluster[i_iFailedApplianceIndex].m_lApplianceID)
-        {
-            m_pProfile->m_aCluster[i].m_iResponding = FALSE;
-            break;
-        }
-    }
-
-    KMSClient_SortClusterArray(m_pProfile);
-
-    // mark the failed Appliance as not responding (unlike the case
-    // above which is conditional on bServerError, this marking is
-    // only local to this transaction; it must be done to ensure that
-    // this transaction does not cycle in its fail-over loop.)
-
-    m_aCluster[i_iFailedApplianceIndex].m_iResponding = FALSE;
-
-    if (!CAgentLoadBalancer::FailOverLimit())
-    {
-        // now try to fail over to all other Appliances that are
-        // apparently enabled and responding 
-
-        for (i = 0; i < m_iClusterNum; i++)
-        {
-            if (m_aCluster[i].m_iEnabled == TRUE &&
-                m_aCluster[i].m_iResponding == TRUE &&
-				m_aCluster[i].m_iKMALocked == FALSE)
-            {
-                Log(AGENT_LOADBALANCER_FAILOVER,
-                        NULL,
-                        m_aCluster[i].m_wsApplianceNetworkAddress,
-                        "Failing over to this addr");
-
-                return i;
-            }
-        }
-
-        // now retry KMAs previously reported as not responding
-
-        m_iLastAttemptedWhenNoneResponding++;
-
-        if (m_iLastAttemptedWhenNoneResponding >= m_iClusterNum)
-        {
-            m_iLastAttemptedWhenNoneResponding = m_iLastAttemptedWhenNoneResponding % m_iClusterNum;
-        }
-
-        Log(AGENT_LOADBALANCER_FAILOVER,
-                NULL,
-                m_aCluster[m_iLastAttemptedWhenNoneResponding].m_wsApplianceNetworkAddress,
-                "Failing over to retry this addr");
-
-        return m_iLastAttemptedWhenNoneResponding;
-    }
-    else
-    {
-         Log(AGENT_LOADBALANCER_FAILOVER,
-                NULL,
-                NULL,
-                "Failover limit reached");       
-    }
-
-    return m_bFIPS ? NO_FIPS_KMA_AVAILABLE : NO_KMA_AVAILABLE;
-}
-
-void CAgentLoadBalancer::UpdateResponseStatus(int i_iIndex)
-{
-    bool bStatusChanged = false;
-    
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) m_pProfile->m_pLock);
-
-    // enable the responding Appliance in the profile, and
-    // re-sort the cluster array, so transactions in other threads
-    // will not send requests to the same failed Appliance
-
-    for (int i = 0; i < m_pProfile->m_iClusterNum; i++)
-    {
-        if (m_pProfile->m_aCluster[i].m_lApplianceID ==
-            m_aCluster[i_iIndex].m_lApplianceID)
-        {
-            if (m_pProfile->m_aCluster[i].m_iResponding == FALSE)
-            {
-                bStatusChanged = true;
-            }
-            m_pProfile->m_aCluster[i].m_iResponding = TRUE;
-            break;
-        }
-    }
-
-    // only resort if the responding status actually changed
-    if (bStatusChanged)
-    {
-        KMSClient_SortClusterArray(m_pProfile);
-    }
-
-    // mark the Appliance as now responding
-    m_aCluster[i_iIndex].m_iResponding = TRUE;
-
-    return;
-}
-
-Long64 CAgentLoadBalancer::GetKMAID (
-                                     int i_iIndex)
-{
-    if (i_iIndex < 0 || i_iIndex >= m_iClusterNum)
-    {
-        return -1;
-    }
-
-    return m_aCluster[i_iIndex].m_lApplianceID;
-}
-
-CAgentLoadBalancer::KWKEntry *CAgentLoadBalancer::GetKWK (
-                                                          Long64 i_lKMAID)
-{
-    if (i_lKMAID == -1)
-    {
-        return NULL;
-    }
-    
-    for (int i = 0; i < m_iKWKEntryNum && i < KMS_MAX_CLUSTER_NUM; i++)
-    {
-        if (m_aKWKEntries[i] != NULL &&
-            m_aKWKEntries[i]->m_lKMAID == i_lKMAID )
-        {
-            return m_aKWKEntries[i];
-        }
-    }
-
-    return NULL;
-}
-
-CAgentLoadBalancer::KWKEntry *CAgentLoadBalancer::CreateKWK (
-                                         Long64 i_lKMAID,
-                                         struct soap * const i_pstSoap,
-                                         const char * const i_sURL,
-                                         bool * const o_pbClientAESKeyWrapSetupError)
-{
-    FATAL_ASSERT(i_pstSoap);
-    FATAL_ASSERT(i_sURL);
-
-    int bSuccess = FALSE;
-    KWKEntry *oKWKEntry = new KWKEntry;
-
-    oKWKEntry->m_lKMAID = i_lKMAID;
-    *o_pbClientAESKeyWrapSetupError = false;
-    
-    bSuccess = GetPseudorandomBytes(sizeof (oKWKEntry->m_acKWK),
-            oKWKEntry->m_acKWK);
-    if (!bSuccess)
-    {
-        Log(AUDIT_CLIENT_AGENT_CREATE_KWK_RNG_ERROR,
-                NULL,
-                NULL,
-                "Error from RNG");
-        *o_pbClientAESKeyWrapSetupError = true;
-        delete(oKWKEntry);
-        return NULL;
-    }
-
-#if defined(DEBUG)
-    char sHexKWK[2*KMS_MAX_KEY_SIZE+1];
-    ConvertBinaryToUTF8HexString( sHexKWK, oKWKEntry->m_acKWK, sizeof (oKWKEntry->m_acKWK));
-#if defined(METAWARE)
-    log_printf("CAgentLoadBalancer::CreateKWK(): KWK hex=%s\n",
-            sHexKWK);
-#else
-//    printf("CAgentLoadBalancer::CreateKWK(): KWK hex=%s\n",
-//            sHexKWK);
-#endif    
-#endif
-    
-    CPublicKey oPublicKEK;
-
-    bSuccess = GetKWKWrappingKey(i_pstSoap, i_sURL, &oPublicKEK);
-
-    if (!bSuccess)
-    {
-        // GetKWKWrappingKey logs errors   
-        
-        if (!ServerError(GET_SOAP_FAULTSTRING(i_pstSoap),i_pstSoap->errnum))
-        {
-            *o_pbClientAESKeyWrapSetupError = true;
-        }
-        delete(oKWKEntry);
-        return NULL;
-    }
-
-    unsigned char acWrappedKWK[MAX_RSA_PUB_KEY_LENGTH];
-    int iWrappedKWKLength;
-    bSuccess = oPublicKEK.Encrypt(sizeof (oKWKEntry->m_acKWK),
-            oKWKEntry->m_acKWK, (unsigned char *) acWrappedKWK, &iWrappedKWKLength);
-
-    if (!bSuccess)
-    {
-        Log(AUDIT_CLIENT_AGENT_CREATE_KWK_PUBLIC_ENCRYPT_ERROR,
-                NULL,
-                NULL,
-                "Error encrypting KWK with KMA public key");
-        *o_pbClientAESKeyWrapSetupError = true;
-        delete(oKWKEntry);
-        return NULL;
-    }
-//#if defined(DEBUG) && !defined(METAWARE)
-//    char sHexWrappedKWK[2*MAX_RSA_PUB_KEY_LENGTH+1];
-//    ConvertBinaryToUTF8HexString( sHexWrappedKWK, acWrappedKWK, iWrappedKWKLength);
-//    printf("CAgentLoadBalancer::CreateKWK(): wrapped KWK hex=%s\n",
-//            sHexWrappedKWK);
-//#endif
-
-    // register the new KWK
-    bSuccess = RegisterKWK(iWrappedKWKLength, acWrappedKWK, i_pstSoap,
-            i_sURL, oKWKEntry->m_acKWKID);
-
-    if (!bSuccess)
-    {
-        // RegisterKWK logs errors       
-        if (!ServerError(GET_SOAP_FAULTSTRING(i_pstSoap), i_pstSoap->error))
-        {
-            *o_pbClientAESKeyWrapSetupError = true;
-        }
-        delete(oKWKEntry);
-        return NULL;
-    }
-
-    // save the new KWK entry in an empty slot in the array
-    for (int i=0; i < m_iKWKEntryNum && i < KMS_MAX_CLUSTER_NUM; i++)
-    {
-        if (m_aKWKEntries[i] == NULL)
-        {
-            m_aKWKEntries[i] = oKWKEntry; 
-            return oKWKEntry;
-        }
-    }
-    
-    // no empty slots so add it to the end
-    m_aKWKEntries[m_iKWKEntryNum++] = oKWKEntry;
-
-    return oKWKEntry;
-}
-
-void CAgentLoadBalancer::DeleteKWKEntry(Long64 i_lKMAID)
-{
-    for (int i=0; i < m_iKWKEntryNum && i < KMS_MAX_CLUSTER_NUM; i++)
-    {
-        if (m_aKWKEntries[i] && m_aKWKEntries[i]->m_lKMAID == i_lKMAID)
-        {
-            delete(m_aKWKEntries[i]);
-            m_aKWKEntries[i] = NULL;
-            return;
-        }
-    }
-    // should not occur
-    FATAL_ASSERT(0);
-    return;
-}
-
-bool CAgentLoadBalancer::AESKeyWrapSupported (int i_iIndex)
-{
-    if (i_iIndex < 0 || i_iIndex >= m_iClusterNum)
-    {
-        return false;
-    }
-    return (strcmp(m_aCluster[i_iIndex].m_sKMAVersion,
-                    FIPS_COMPATIBLE_KMA_VERSION) >= 0);
-}
-
-int CAgentLoadBalancer::GetKWKID (
-                                  int    i_Index,
-                                  Long64 i_lKMAID,
-                                  struct soap * const i_pstSoap,
-                                  UTF8_KEYID o_pKWKID,
-                                  bool * const o_pbClientAESKeyWrapSetupError)
-{
-    FATAL_ASSERT(i_Index >= 0 && i_Index <= m_iClusterNum);
-    FATAL_ASSERT(i_lKMAID != 0);
-    FATAL_ASSERT(i_pstSoap);
-    FATAL_ASSERT(o_pKWKID);
-    FATAL_ASSERT(o_pbClientAESKeyWrapSetupError);
-
-    *o_pbClientAESKeyWrapSetupError = false;
-    
-    // check if the KMA for this cluster index is at a version supporting
-    // AES key wrap
-    if (!AESKeyWrapSupported(i_Index))
-    {
-        strcpy(o_pKWKID, "");
-        return TRUE;
-    }
-
-    // AES Key Wrap Mode
-
-    struct KWKEntry* pKWKentry = GetKWK(i_lKMAID);
-
-    if (pKWKentry == NULL)
-    {
-        const char* sURL = GetHTTPSURL(
-                i_Index,
-                m_pProfile->m_iPortForAgentService);
-
-        pKWKentry = CreateKWK(i_lKMAID, i_pstSoap, sURL, o_pbClientAESKeyWrapSetupError);
-
-        if (pKWKentry == NULL)
-        {
-            return FALSE;
-        }
-    }
-
-#if defined(DEBUG) && defined(METAWARE)
-    log_printf("CAgentLoadBalancer::GetKWKID(): KWK IDhex=%s\n",
-            pKWKentry->m_acKWKID,
-            sizeof (UTF8_KEYID));
-#endif
-    
-    strncpy(o_pKWKID, pKWKentry->m_acKWKID, sizeof(UTF8_KEYID));
-    o_pKWKID[sizeof(UTF8_KEYID)-1] = '\0';
-
-    return TRUE;
-};
-
-int CAgentLoadBalancer::GetKWKWrappingKey (
-                                           struct soap * const i_pstSoap,
-                                           const char * const i_sURL,
-                                           CPublicKey * const  o_opPublicKEK)
-{
-    FATAL_ASSERT(i_pstSoap);
-    FATAL_ASSERT(i_sURL);
-    FATAL_ASSERT(o_opPublicKEK);
-
-    int bSuccess = TRUE;
-    struct KMS_Agent::KMS_Agent__GetAgentKWKPublicKeyResponse oResponse;
-    char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH];
-    char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH];
-
-    bSuccess = KMS_Agent::soap_call_KMS_Agent__GetAgentKWKPublicKey(
-            const_cast<struct soap *> (i_pstSoap),
-            i_sURL,
-            NULL,
-            oResponse) == SOAP_OK;
-
-    if (!bSuccess)
-    {
-        GetSoapFault(sSoapFaultMsg, const_cast<struct soap *> (i_pstSoap));
-        GetPeerNetworkAddress(sKmaAddress, const_cast<struct soap *> (i_pstSoap));
-
-        LogError(m_pProfile,
-                AUDIT_CLIENT_GET_KWK_WRAPPING_KEY_SOAP_ERROR,
-                NULL,
-                sKmaAddress,
-                sSoapFaultMsg);
-
-        return FALSE;
-    }
-
-    // Validate the response structure
-    if (bSuccess)
-    {
-        if (oResponse.KWKPublicKey.__ptr == NULL
-            || oResponse.KWKPublicKey.__size < 1)
-        {
-            bSuccess = FALSE;
-
-            GetPeerNetworkAddress(sKmaAddress, const_cast<struct soap *> (i_pstSoap));
-
-            LogError(m_pProfile,
-                    AUDIT_CLIENT_GET_KWK_WRAPPING_KEY_INVALID_KEY_RESPONSE,
-                    NULL,
-                    sKmaAddress,
-                    NULL);
-        }
-        else
-        {
-            bSuccess = o_opPublicKEK->Load(oResponse.KWKPublicKey.__ptr,
-                    oResponse.KWKPublicKey.__size, PKI_FORMAT);
-            if (!bSuccess)
-            {
-                GetPeerNetworkAddress(sKmaAddress, const_cast<struct soap *> (i_pstSoap));
-
-                LogError(m_pProfile,
-                        AUDIT_CLIENT_GET_KWK_WRAPPING_KEY_INVALID_RSA_PUB_KEY,
-                        NULL,
-                        sKmaAddress,
-                        NULL);
-            }
-        }
-    }
-
-    // Note: no SOAP cleanup as caller's environment will get destroyed
-
-    return bSuccess;
-};
-
-int CAgentLoadBalancer::RegisterKWK (
-                                     int i_iWrappedKWKSize,
-                                     const unsigned char * const i_acWrappedKWK,
-                                     struct soap * const i_pstSoap,
-                                     const char * const i_sURL,
-                                     UTF8_KEYID o_acUTF8KeyID)
-{
-    FATAL_ASSERT(i_iWrappedKWKSize > 0);
-    FATAL_ASSERT(i_acWrappedKWK);
-    FATAL_ASSERT(i_pstSoap);
-    FATAL_ASSERT(i_sURL);
-    FATAL_ASSERT(o_acUTF8KeyID);
-
-    int bSuccess;
-
-    struct KMS_Agent::xsd__hexBinary oKWK;
-
-#if defined(DEBUG) && defined(METAWARE)
-    char sHexWrappedKWK[512];
-    ConvertBinaryToUTF8HexString( sHexWrappedKWK, i_acWrappedKWK, i_iWrappedKWKSize);
-    log_printf("CAgentLoadBalancer::RegisterKWK(): Wrapped KWK hex=%s, len=%d\n",
-            sHexWrappedKWK, i_iWrappedKWKSize);
-#endif
-    
-    if (!PutBinaryIntoSoapBinary(i_pstSoap,
-        i_acWrappedKWK,
-        i_iWrappedKWKSize,
-        oKWK.__ptr,
-        oKWK.__size))
-    {
-        return FALSE;
-    }
-
-    char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH];
-    char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH];
-    struct KMS_Agent::KMS_Agent__RegisterAgentKWKResponse oResponse;
-
-    bSuccess = KMS_Agent::soap_call_KMS_Agent__RegisterAgentKWK(
-            const_cast<struct soap *> (i_pstSoap),
-            i_sURL, NULL, oKWK, oResponse) == SOAP_OK;
-
-    if (bSuccess)
-    {
-        // verify response
-        if (oResponse.AgentKWKID &&
-            strlen(oResponse.AgentKWKID) == 2 * KMS_KWK_KEY_ID_SIZE)
-        {
-#if defined(DEBUG) && defined(METAWARE)
-            log_printf("CAgentLoadBalancer::RegisterKWK(): KWK ID hex=%s\n",
-                    oResponse.AgentKWKID,
-                    sizeof (UTF8_KEYID));
-#endif
-            strncpy(o_acUTF8KeyID, oResponse.AgentKWKID, sizeof(UTF8_KEYID));
-            o_acUTF8KeyID[sizeof(UTF8_KEYID)-1] = '\0';
-        }
-        else
-        {
-            GetPeerNetworkAddress(sKmaAddress, const_cast<struct soap *> (i_pstSoap));
-            GetSoapFault(sSoapFaultMsg, const_cast<struct soap *> (i_pstSoap));
-
-            Log(AUDIT_CLIENT_AGENT_REGISTER_KWK_INVALID_KEYID_RESPONSE,
-                    NULL,
-                    sKmaAddress,
-                    sSoapFaultMsg);
-            bSuccess = FALSE;
-        }
-    }
-    else
-    {
-        GetPeerNetworkAddress(sKmaAddress, const_cast<struct soap *> (i_pstSoap));
-        GetSoapFault(sSoapFaultMsg, const_cast<struct soap *> (i_pstSoap));
-
-        Log(AUDIT_CLIENT_AGENT_REGISTER_KWK_ERROR,
-                NULL,
-                sKmaAddress,
-                sSoapFaultMsg);
-        bSuccess = FALSE;
-    }
-
-    // Note: Clean up SOAP must happen in caller, not here
-
-    return bSuccess;
-
-};
-
-bool CAgentLoadBalancer::AESKeyUnwrap (
-                                       int * const io_pIndex,
-                                       const WRAPPED_KEY i_pAESWrappedKey,
-                                       KEY o_pPlainTextKey)
-{
-    FATAL_ASSERT(io_pIndex);
-    FATAL_ASSERT(*io_pIndex >= 0);
-    FATAL_ASSERT(o_pPlainTextKey);
-    FATAL_ASSERT(i_pAESWrappedKey);
-
-    struct KWKEntry * pKWKEntry = GetKWK(GetKMAID(*io_pIndex));
-
-    if (pKWKEntry == NULL)
-    {
-        Log(AGENT_LOADBALANCER_AESKEYUNWRAP_GETKWK_RETURNED_NULL,
-                NULL,
-                m_aCluster[*io_pIndex].m_wsApplianceNetworkAddress,
-                NULL);
-        *io_pIndex = CAgentLoadBalancer::AES_KEY_UNWRAP_ERROR;
-        
-        return false;
-    }
-
-#if defined(DEBUG) && defined(METAWARE)
-    char sHexKWK[2*KMS_MAX_KEY_SIZE+1];
-    ConvertBinaryToUTF8HexString( sHexKWK, pKWKEntry->m_acKWK, sizeof (pKWKEntry->m_acKWK));
-    log_printf("CAgentLoadBalancer::AESKeyUnwrap(): KWK hex=%s\n",
-            sHexKWK);
-#endif
-    
-    if (aes_key_unwrap(pKWKEntry->m_acKWK,
-        sizeof (pKWKEntry->m_acKWK),
-        i_pAESWrappedKey,
-        o_pPlainTextKey, 4) != 0)
-    {
-        Log(AGENT_LOADBALANCER_AESKEYUNWRAP_KEY_UNWRAP_FAILED,
-                NULL,
-                m_aCluster[*io_pIndex].m_wsApplianceNetworkAddress,
-                NULL);
-        *io_pIndex = CAgentLoadBalancer::AES_KEY_UNWRAP_ERROR;
-        return false;
-    }
-
-    return true;
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSClient_SortClusterArray
- *
- *--------------------------------------------------------------------------*/
-void CAgentLoadBalancer::KMSClient_SortClusterArray (KMSClientProfile * const i_pProfile)
-{
-    FATAL_ASSERT(i_pProfile);
-
-    CAutoMutex oAutoMutex((K_MUTEX_HANDLE) i_pProfile->m_pLock);
-
-    int i;
-
-
-    // adjust loads according to availability, site and FIPS compatibility
-    for (i = 0; i < i_pProfile->m_iClusterNum; i++)
-    {
-        if ((i_pProfile->m_aCluster[i].m_iEnabled == FALSE
-            || i_pProfile->m_aCluster[i].m_iResponding == FALSE
-			|| i_pProfile->m_aCluster[i].m_iKMALocked))
-        {
-            ((unsigned char*) &(i_pProfile->m_aCluster[i].m_lLoad))[sizeof (int)+1] = 1;
-        }
-        else
-        {
-            ((unsigned char*) &(i_pProfile->m_aCluster[i].m_lLoad))[sizeof (int)+1] = 0;
-        }
-
-        if (strcmp(i_pProfile->m_aCluster[i].m_wsApplianceSiteID,
-            i_pProfile->m_wsEntitySiteID) != 0)
-        {
-            ((unsigned char*) &(i_pProfile->m_aCluster[i].m_lLoad))[sizeof (int)] = 1;
-        }
-        else
-        {
-            ((unsigned char*) &(i_pProfile->m_aCluster[i].m_lLoad))[sizeof (int)] = 0;
-        }
-        
-        if ( m_bFIPS && 
-                !FIPScompatibleKMA(i_pProfile->m_aCluster[i].m_sKMAVersion))
-        {
-            ((unsigned char*) &(i_pProfile->m_aCluster[i].m_lLoad))[sizeof (int)+2] = 1;
-        }
-        else
-        {
-            ((unsigned char*) &(i_pProfile->m_aCluster[i].m_lLoad))[sizeof (int)+2] = 0;
-        }
-    }
-
-    // sort ascending by load
-
-    // gnome sort: the simplest sort algoritm
-    // http://www.cs.vu.nl/~dick/gnomesort.html
-
-    //void gnomesort(int n, int ar[]) {
-    //    int i = 0;
-    //
-    //    while (i < n) {
-    //        if (i == 0 || ar[i-1] <= ar[i]) i++;
-    //        else {int tmp = ar[i]; ar[i] = ar[i-1]; ar[--i] = tmp;}
-    //    }
-    //}    
-
-    i = 0;
-    while (i < i_pProfile->m_iClusterNum)
-    {
-        if (i == 0 || i_pProfile->m_aCluster[i - 1].m_lLoad <= i_pProfile->m_aCluster[i].m_lLoad)
-        {
-            i++;
-        }
-        else
-        {
-            KMSClusterEntry tmp = i_pProfile->m_aCluster[i];
-            i_pProfile->m_aCluster[i] = i_pProfile->m_aCluster[i - 1];
-            i_pProfile->m_aCluster[--i] = tmp;
-        }
-    }
-}
--- a/usr/src/lib/libkmsagent/common/KMSAgentLoadBalancer.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,339 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAgentLoadBalancer.h
- */
-
-#ifndef KMS_AGENT_LOAD_BALANCER_H
-#define KMS_AGENT_LOAD_BALANCER_H
-typedef char UTF8_KEYID[2*KMS_KWK_KEY_ID_SIZE+1];
-
-class CAgentLoadBalancer
-{
-public:
-
-    /**
-     *  the load balancer retains a pointer to the specified profile 
-     */
-    CAgentLoadBalancer(
-            KMSClientProfile * const i_pProfile );
-
-    ~CAgentLoadBalancer ();
-   
-    /**
-     *  This method must be called at the top of each agent library transaction.
-     *  Responsibilities:
-     *  <ul>
-     *  <li>clear profile failover attempts
-     *  <li>sets transaction start time
-     *  <li>performs discovery at the frequency specified in the profile
-     *  <li>maintains the status of KMAs within the cluster
-     *  </ul>
-     *  @return a random KMA from the "available" KMAs within the agent's site
-     *      or a random KMA from any of the "available" KMA's if none are available
-     *      within the agent's site.  
-     *      When operating in FIPS mode then only KMAs that are
-     *      FIPS compatible will be selected, see <code>FIPScompatibleKMA</code>.  
-     *      Available KMAs
-     *      are KMAs that are enabled and responding.  If no FIPS compatible KMAs
-     *      are available then <code>NO_FIPS_KMA_AVAILABLE</code> is returned.
-     *      When <code>m_iClusterDiscoveryFrequency</code> is set to 0 in the profile
-    *       then load balancing and automatic discovery
-     *      are disabled so the default KMA is returned.
-     */
-    int Balance();
-
-    /**
-     *  @return a KMA from the cache that has affinity with the specified DataUnitID,
-     *  if possible, otherwise return a KMA from <code>Balance</code>.  See
-     *  <code>Balance</code> for <code>FIPS_MODE</code> behavior and disabled load balancing.
-     */
-    int BalanceByDataUnitID(
-            const unsigned char * const i_pDataUnitID,
-            int i_iDataUnitIDMaxLen );
-
-    /**
-     *  @return a KMA from the cache that has affinity with the specified DataUnitKeyID,
-     *  if possible, otherwise return a KMA from <code>Balance</code>.  See
-     *  <code>Balance</code> for <code>FIPS_MODE</code> behavior and disabled load balancing.
-     */
-    int BalanceByDataUnitKeyID(
-            const unsigned char * const i_pDataUnitKeyID,
-            int i_iDataUnitKeyIDMaxLen );
-
-    enum ERRORS
-    {
-        CLIENT_SIDE_ERROR = -1,
-        NO_KMA_AVAILABLE = -2,
-        AES_KEY_UNWRAP_ERROR = -3,
-        AES_KEY_WRAP_SETUP_ERROR = -4,
-        NO_FIPS_KMA_AVAILABLE = -5,
-        KWK_NOT_REGISTERED = -6
-    };
-    
-    /**
-     *  Makes a failover determination based upon soap error information and profile settings.
-     *  Responsibilities:
-     *  <ul>
-     *  <li>updates the status of the failed KMA within the profile's cluster array
-     *  <li>Client Faults - no failover, same KMA will be returned if a Server Busy error 
-     *  occurred and
-     *  either the transaction timeout has not been exceeded or failover limit has not been exceeded
-     *  <li>Server Faults - a failover KMA is chosen if the limit specified set in the profile
-     *  has not been exceed
-     *  <li>For <code>CLIENT_ERROR_AGENT_KWK_NOT_REGISTERED</code> the KWK is deleted and 
-     *  i_iFailedApplianceIndex is returned.  The caller should re-regsiter the
-     *  KWK with this appliance.
-     *  </ul> 
-     *  If all KMAs are disabled or non-responding then give up.
-     *  <li>increments profile failover attempts
-     *  </ul>
-     *  @param i_iFailedApplianceIndex the index within the profile's cluster array of the failed KMA
-     *  @param i_pstSoap the gSoap runtime from which error information can be analyzed
-     *  @return index of KMA in cluster to failover to, <code>CLIENT_SIDE_ERROR</code> to give up due to client side error, 
-     *  <code>NO_KMA_AVAILABLE</code> or <code>NO_FIPS_KMA_AVAILABLE</code> if running in FIPS_MODE
-     *  if server error but no KMA to failover to 
-     */
-    int FailOver(
-            int i_iFailedApplianceIndex,
-            struct soap *i_pstSoap );
-    
-    /**
-     *  Updates the response status for the specified KMA to responding.  
-     */
-    void UpdateResponseStatus(int i_iIndex);
-
-    /**
-     *   @return HTTPS protocol URL for the KMA referenced by the specified index entry within this
-     *   object's cluster array and the specified web service port.
-     */
-    char* GetHTTPSURL(
-            int i_iIndex,
-            int i_iPort );
-    /**
-     *   @return HTTP protocol URL for the KMA referenced by the specified index entry within this
-     *   object's cluster array and the specified web service port.
-     */
-    char* GetHTTPURL(
-            int i_iIndex,
-            int i_iPort );
-
-    /**
-     *    @return the KMA IP address for the specified index entry within this object's cluster 
-     *    array.
-     */
-    char* GetApplianceNetworkAddress(
-            int i_iIndex );
-
-    /**
-     *    @return the KMA ID for the specified index entry within this 
-     *    object's cluster.  Returns -1 if an invalid
-     *    index is provided
-     */
-    Long64 GetKMAID(
-            int i_iIndex );
-
-    /**
-     *  retrieves the KWKID for a specified KMA in the cluster.
-     *  @param i_Index element in this object's KMS cluster as returned by
-     *      one of the Balance methods or the Failover method.
-     *  @param i_lKMAID the KMAID for which a KWK is desired
-     *  @param i_pstSoap non-NULL pointer to an initialized gSoap runtime to be 
-     *  used, if necessary, for KWK registration with the KMA.
-     *  @param o_pKWKID pointer to UTF8 hex character string to receive the KWKID 
-     *  for the specified KMA in the cluster.
-     *  @param o_pbClientAESKeyWrapSetupError this arg gets set to true if an
-     *  error occurs that is client side related and pertaining to establishment
-     *  of the AES Key Wrapping Keys.
-     *  If the KMS cluster does not support AES KeyWrap o_pKWKID is set to
-     *  a zero-length string.  A new KWK may be registered with the KMA if a value 
-     *  has not yet been registered for this instance of CAgentLoadBalancer.
-     *  @return TRUE if successful and FALSE otherwise with soap fault available
-     *  in the gSoap runtime provided by the caller and io_pIndex set to 
-     *  AES_KEY_WRAP_SETUP_ERROR.  Use ServerError() to
-     *  determine if failover is appropriate. 
-     */
-    int GetKWKID(
-            int                 i_Index,
-            Long64              i_lKMAID,
-            struct soap * const i_pstSoap,
-            UTF8_KEYID          o_pKWKID,
-            bool * const        o_pbClientAESKeyWrapSetupError);
-  
-    /**
-     *  performs AES Key unwrapping according to RFC3394.
-     *  @param  io_pIndex Cluster index for KMA that wrapped the key. On error
-     *  the cluster index is set to AES_KEY_UNWRAP_ERROR
-     *  @param  i_pAESWrappedKey pointer to the wrapped key
-     *  @param  o_pPlainTextKey point to buffer to receive unwrapped key
-     *  @return true for success, false otherwise and sets *io_pIndex to 
-     *  AES_KEY_UNWRAP_ERROR
-     */
-    bool AESKeyUnwrap (
-                       int * const io_pIndex,
-                       const WRAPPED_KEY i_pAESWrappedKey,
-                       KEY o_pPlainTextKey );
-    
-    /**
-     *  @return true if the KMA referenced by the specified cluster
-     *  index supports AES key wrap
-     */
-    bool AESKeyWrapSupported (
-                              int i_iIndex);
-    
-protected:
-    /**
-     *  @return the cluster array index of the KMA with the specified IP address
-     *  or CLIENT_SIDE_ERROR if the KMA is not responding or not enabled
-     */
-    int FindIndexByNetworkAddress (
-                                   char* i_wsApplianceNetworkAddress);
-
-private:
-
-    /**
-     *  Sorts the cluster array ascending by load.
-     *  Before sorting, the other site's KMAs' load are added by 0x10000000000 and
-     *  the disabled/non-responding/locked KMAs are added by 0x1000000000000 and KMAs
-     *  not matching the agent's FIPS setting the load is bumped by 0x100000000000000.
-     *  This ensures that KMAs
-     *  in the current site are sorted before KMAs in other sites and
-     *  disabled/non-responding/locked KMAs are after those enabled KMAs.  When the agent is
-     *  in FIPS mode the non-FIPS KMAs are sorted last.
-     */
-    void KMSClient_SortClusterArray (
-                                     KMSClientProfile * const i_pProfile);
-    
-    static const int MAX_RSA_PUB_KEY_LENGTH = 256;
-    int m_iClusterNum;
-    
-    /**
-     *  this array is reinitialized from the profile's Cluster array each time Balance() is called.
-     *  Failover() will resort the profile's Cluster array so this array may not
-     *  match the sort order in the profile
-     */
-    KMSClusterEntry m_aCluster[KMS_MAX_CLUSTER_NUM];
-    KMSClientProfile *m_pProfile;
-    char m_sURL[KMS_MAX_URL+1];
-    unsigned int m_iTransactionStartTimeInMilliseconds;
-    bool m_bFIPS;
-    
-    /**
-     *  number of elements in KWKEntries
-     */
-    int m_iKWKEntryNum;
-
-    /**
-     *  in a failover scenario, if all KMAs are not responding this
-     *  member variable tracks the index into m_aCluster of the last KMA attempted.
-     */
-    int m_iLastAttemptedWhenNoneResponding;
-    
-    /**
-     *  @return true if the failover limit has been exceeded. If failover
-     *  limit of -1 is specified in the profile then always return false.
-     */
-    bool FailOverLimit(void);
-        
-    /**
-     *  \struct for each KMA used in a profile session there will be
-     *  a KWKEntry in KWKEntries.  These values do not persist
-     *  beyond a profile session
-     */
-    struct KWKEntry
-    {
-        /**
-         *  The KMA associated with this KWK.  This KMA
-         *  receives the KWK via the KMS_Agent__RegisterAgentKWK()
-         *  agent service which returns the KMA assigned value for
-         *  m_acKWKID
-         */
-        Long64      m_lKMAID;
-        
-        /**
-         *  the KeyID for this KWK, provided by the KMA
-         */
-        UTF8_KEYID      m_acKWKID;
-        
-        /**
-         *  the plaintext value of the AES KWK
-         */
-        KEY         m_acKWK;
-    };
-            
-    /**
-     *  set of KWKEntry ptrs for KMAs used in this profile session.
-     */
-    struct KWKEntry * m_aKWKEntries[KMS_MAX_CLUSTER_NUM];
-    
-    /**
-     *  retrieve the Key Wrapping Key for a KMA
-     *  @param  i_lKMAID KMA identifier, must not be equal to -1 
-     *  @return pointer to the KWKEntry for the specified KMAID, NULL
-     *  if the entry does not exist
-     */
-    struct KWKEntry *GetKWK( 
-                    Long64 i_lKMAID );
-    
-    /**
-     *  creates a new KWKEntry on the heap and store a ptr to it in an
-     *  unused slot in <code>m_aKWKEntries</code>. 
-     *  @return NULL on error, otherwise a pointer to the newly
-     *  created KWKEntry
-     */
-    struct KWKEntry *CreateKWK( 
-                    Long64              i_lKMAID,
-                    struct soap * const i_pstSoap,
-                    const char * const  i_sURL,
-                    bool * const        o_pbClientAESKeyWrapSetupError);
-                    
-    /**
-     *   free the <code>KWKEntry</code> corresponding to the specified KMA ID
-     *   and set the slot it occupied in <code>m_aKWKEntries</code> to NULL. 
-     */
-    void DeleteKWKEntry(Long64 i_lKMAID);
-    
-    /**
-     *  retrieve the RSA public key to be used for wrapping a KWK
-     */
-    int GetKWKWrappingKey(
-                    struct soap * const i_pstSoap,
-                    const char * const  i_sURL,
-                    CPublicKey * const  o_opPublicKEK );
-    
-    /**
-     *  register the KWK with a specified KMA and return the KWK ID
-     */
-    int RegisterKWK( 
-                    int                         i_iWrappedKWKSize,
-                    const unsigned char * const i_acWrappedKWK, 
-                    struct soap * const         i_pstSoap, 
-                    const char * const          i_sURL, 
-                    UTF8_KEYID                  o_acUTF8KeyID );
-    
-};
-
-#endif //KMS_AGENT_LOAD_BALANCER_H
--- a/usr/src/lib/libkmsagent/common/KMSAgentPKICert.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,308 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- *  \file KMSAgentPKICert.cpp
- *
- *  This is an implementation of PKICommon.h CCertificate class.
- */
-
-#include <stdio.h>
-#include <memory.h>
-#include <time.h>
-#include <string.h>
-
-#ifdef KMSUSERPKCS12
-#include <openssl/bio.h>
-#include <openssl/evp.h>
-#include <openssl/conf.h>
-#include <openssl/err.h>
-#include <openssl/asn1.h>
-#include <openssl/x509.h>
-#include <openssl/x509v3.h>
-#include <openssl/objects.h>
-#include <openssl/pem.h>
-#include <openssl/pkcs12.h>
-#endif
-
-#include "SYSCommon.h"
-#include "KMSAgentPKICommon.h"
-#include "KMSAgentPKIimpl.h"
-
-/////////////////////////////////////////////////////////////////////////
-// CCertificate
-//
-CCertificate::CCertificate()
-{
-   m_pCertImpl = InitializeCertImpl();
-   
-   FATAL_ASSERT( m_pCertImpl != NULL );
-}
-
-
-CCertificate::~CCertificate()
-{
-   if ( m_pCertImpl != NULL )
-   {
-      FinalizeCertImpl( m_pCertImpl );
-   }
-}
-
-/**
- * Save - This OVERLOADED method saves the Cert into a file
- *  @param i_pcFileName      - filename of file to save into
- *  @param i_iFormat         - IGNORED
- * 
- *  @returns bool   - success (true = successful)
- */
-bool CCertificate::Save( const char * const i_pcFileName, 
-                         int i_iFormat )
-{ 
-   return SaveX509CertTofile( m_pCertImpl, i_pcFileName );
-}
-
-/**
- *  Save - This OVERLOADED method saves the Cert into a buffer
- *  @param i_pcBuffer       - buffer to save into
- *  @param i_BufferLength   - length of buffer to save
- *  @param o_pActualLength  - length of buffer saved
- *  @param i_iFormat         - IGNORED
- * 
- *  @returns bool   - success (true = successful)
- */
-bool CCertificate::Save( unsigned char * const      i_pcBuffer, 
-                         int                        i_iBufferLength,
-                         int * const                o_pActualLength,
-                         int                        i_iFormat )
-{
-   return SaveX509CertToBuffer( m_pCertImpl, 
-                                i_pcBuffer, 
-                                i_iBufferLength, 
-                                o_pActualLength );
-}
-
-/**
- * Load
- * This OVERLOADED method loads the Cert from a FILE
- * @param i_pcFileName   - name of file to load from
- * @param i_iFormat      -  IGNORED
- * 
- * @returns bool   - success (true = successful)
- */
-
-bool CCertificate::Load( const char * const i_pcFileName, 
-                         int                i_iFormat )
-{
-   return LoadX509CertFromFile( m_pCertImpl, i_pcFileName );
-}
-
-/**
- * Load 
- * This OVERLOADED method loads the Cert from a buffer
- * @param i_pcBuffer   - buffer to load from 
- * @param i_iLength    - amount to load from buffer
- * @param i_iFormat    -  IGNORED
- * 
- * @returns bool   - success (true = successful)
- */
-bool CCertificate::Load( unsigned char * const i_pcBuffer,
-                         int                   i_iLength,
-                         int                   i_iFormat )
-{
-   return LoadX509CertFromBuffer( m_pCertImpl, i_pcBuffer, i_iLength );
-}
-
-/** 
- * Dump
- * dump the readable format to standard output
- * @returns bool   - success (true = successful)
- */
-bool CCertificate::Dump()
-{
-   return PrintX509Cert( m_pCertImpl );
-}
-
-#ifdef KMSUSERPKCS12
-bool
-CCertificate::LoadPKCS12CertAndKey(
-	char *filename,
-	int i_iFormat,
-        CPrivateKey *i_pPrivateKey,
-	char *i_pPassphrase)
-{
-	BIO *pFileBio= NULL;
-	X509 *pRequest =NULL;
-
-	pFileBio = BIO_new(BIO_s_file());
-	if (pFileBio == NULL)
-		return false;
-	if (!BIO_read_filename(pFileBio, filename)) {
-		BIO_free(pFileBio);
-		return (false);
-	}
-
-	switch( i_iFormat ) {
-		case FILE_FORMAT_DER:
-
-		pRequest=d2i_X509_bio(pFileBio, NULL);
-		if (pRequest == NULL) {
-			// fixme: log: invalid certificate format
-			return false;
-		}
-		break;
-
-		case FILE_FORMAT_PEM:
-
-		pRequest=PEM_read_bio_X509(pFileBio, NULL, NULL, NULL);
-		if (pRequest == NULL) {
-			// fixme: log: invalid certificate format
-			return false;
-		}
-		break;
-
-		case FILE_FORMAT_PKCS12:
-		PKCS12* pPKCS12Request = d2i_PKCS12_bio(pFileBio, NULL);
-		if (pPKCS12Request == NULL) {
-			// fixme: log: invalid certificate format
-			return false;
-		}
-
-		// convert PKCS12 to X509
-		EVP_PKEY *pKeyTemp = NULL;
-		if (!PKCS12_parse(pPKCS12Request, i_pPassphrase,
-		    &pKeyTemp, &pRequest, NULL)) {
-			// fixme: log: invalid certificate format or passphrase
-			PKCS12_free(pPKCS12Request);
-			return false;
-		}
-
-		if (pKeyTemp && i_pPrivateKey) {
-			i_pPrivateKey->SetNative((void *)pKeyTemp);
-		} else if (pKeyTemp)
-			EVP_PKEY_free(pKeyTemp);
-
-		PKCS12_free(pPKCS12Request);
-		break;
-	}
-	if (pRequest != NULL) {
-		SetCert(m_pCertImpl, (void *)pRequest);
-	}
-
-	return (true);
-}
-
-void *
-CCertificate::SaveCertToPKCS12MemoryBIO(
-	CPrivateKey* i_pPrivateKey,
-	char *i_sPassphrase)
-{
-    BIO *pMemBio = NULL;
-    int iReturn;
-
-    // create memory BIO
-    pMemBio = BIO_new(BIO_s_mem());
-
-    if(pMemBio == NULL)
-    {
-        //fixme: log -- no memory
-        return NULL;
-    }
-
-    PKCS12 *p12 = PKCS12_create(i_sPassphrase,
-                    NULL,
-                    (EVP_PKEY *)i_pPrivateKey->GetNative(),
-                    (X509 *)GetCert(m_pCertImpl),
-                    NULL,
-                    0,
-                    0,
-                    0,
-                    0,
-                    0);
-    if ( ! p12 )
-    {
-        return NULL;
-    }
-
-    // now pMemBIO != NULL, remember to free it before exiting
-    iReturn = i2d_PKCS12_bio(pMemBio, p12);
-
-    if(!iReturn) // return 0: means error occurs
-    {
-        //fixme: log -- could not export private key
-        BIO_free(pMemBio);
-        return NULL;
-    }
-
-    return (void *)pMemBio;
-}
-
-bool
-CCertificate::SavePKCS12(
-	unsigned char *i_pcBuffer,
-	int i_iBufferLength,
-	int *o_pActualLength,
-	CPrivateKey* i_pPrivateKey,
-	char* i_sPassphrase )
-{
-    BIO *pMemBio = NULL;
-    char *pData = NULL;
-    int iLength;
-
-    // sanity check
-    if(i_pcBuffer == NULL) return false;
-    if(i_iBufferLength <= 0) return false;
-    if(o_pActualLength == NULL) return false;
-
-    // create memory BIO
-    pMemBio = (BIO *)SaveCertToPKCS12MemoryBIO(i_pPrivateKey, i_sPassphrase);
-
-    if(pMemBio == NULL)
-    {
-        //fixme: log -- no memory
-        return false;
-    }
-
-    iLength = BIO_get_mem_data(pMemBio, &pData);
-
-    // If the output buffer is a string, it needs to be NULL terminated
-    // So always append a NULL to the output
-    if(iLength + 1 > i_iBufferLength)
-    {
-        //fixme: log -- buffer too small
-        BIO_free(pMemBio);
-        return false;
-    }
-    // copy the data to given buffer
-    memcpy(i_pcBuffer, pData, iLength);
-    // NULL terminate the string
-    i_pcBuffer[iLength] = '\0';
-    *o_pActualLength = iLength;
-
-    // free memory
-    BIO_free(pMemBio);
-
-    return true;
-}
-#endif /* PKCS12 */
--- a/usr/src/lib/libkmsagent/common/KMSAgentPKICertOpenSSL.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,313 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAgentPKICertOpenSSL.cpp
- */
-
-#include <stdio.h>
-#include <openssl/bio.h>
-#include <openssl/pem.h>
-
-#include "SYSCommon.h"
-#include "KMSAgentPKIimpl.h"
-
-typedef struct X509control
-{
-    X509*   pX509;
-} X509control;
-
-void * InitializeCertImpl()
-{
-    X509control *pX509Control = (X509control *) malloc(sizeof(X509control));
-
-    if ( pX509Control != NULL )
-    {
-        pX509Control->pX509 = NULL;
-    }
-
-    return pX509Control;
-}
-
-/**
- * export the Cert to a memory BIO, if error, return NULL
- */
-BIO* SaveCertToMemoryBIO( X509control* i_pX509control )
-{
-    BIO *pMemBio = NULL;
-    int iReturn;
-
-    // create memory BIO
-    pMemBio = BIO_new(BIO_s_mem());
-
-    if(pMemBio == NULL)
-    {
-        //fixme: log -- no memory
-        return NULL;
-    }
-
-    //iReturn = PEM_write_bio_X509(pMemBio, m_pNative);
-    iReturn = PEM_write_bio_X509(pMemBio, i_pX509control->pX509);
-
-    if(!iReturn) // return 0: means error occurs
-    {
-        //fixme: log -- could not export private key
-        BIO_free(pMemBio);
-        return NULL;
-    }
-
-    return pMemBio;
-}
-
-bool SaveX509CertTofile( 
-                        void* const i_pImplResource,
-                        const char * const i_pcFileName )
-{
-    FATAL_ASSERT( i_pImplResource != NULL && i_pcFileName );
-
-    X509control* pX509control = (X509control*)i_pImplResource;
-    // the BIO for output, need cleanup when exiting
-    BIO *pMemBio = NULL;
-    int iLength;
-    unsigned char *pData;
-    FILE *fp;
-
-    // create memory BIO
-    pMemBio = SaveCertToMemoryBIO( pX509control );
-
-    if(pMemBio == NULL)
-    {
-        return false;
-    }
-
-    // now pMemBIO != NULL, remember to free it before exiting
-    iLength = BIO_get_mem_data(pMemBio, &pData);
-
-    // open the file
-    fp = fopen(i_pcFileName, "wb");
-    if(fp == NULL)
-    {
-        //fixme: log -- could not open file for exporting Cert
-        BIO_free(pMemBio);
-        return false;
-    }
-
-    fwrite(pData, 1, iLength, fp);
-    fclose(fp);
-
-    BIO_free(pMemBio); // BIO_free close the file and clean the BIO
-    return true;
-}
-
-bool SaveX509CertToBuffer(
-                        void* const             i_pImplResource,
-                        unsigned char * const   i_pcBuffer,
-                        int                     i_iBufferLength,
-                        int * const             o_pActualLength )
-{
-    FATAL_ASSERT( i_pImplResource != NULL && 
-                  i_pcBuffer && 
-                  o_pActualLength &&
-                  i_iBufferLength > 0 );
-
-    X509control* pX509control = (X509control*)i_pImplResource;
-
-    BIO *pMemBio = NULL;
-    char *pData = NULL;
-    int iLength;
-
-    // create memory BIO
-    pMemBio = SaveCertToMemoryBIO( pX509control );
-
-    if( pMemBio == NULL )
-    {
-        //fixme: log -- no memory
-        return false;
-    }
-
-    iLength = BIO_get_mem_data( pMemBio, &pData );
-
-    // If the output buffer is a string, it needs to be NULL terminated
-    // So always append a NULL to the output
-    if(iLength + 1 > i_iBufferLength)
-    {
-        //fixme: log -- buffer too small
-        BIO_free(pMemBio);
-        return false;
-    }
-    // copy the data to given buffer
-    memcpy(i_pcBuffer, pData, iLength);
-    // NULL terminate the string
-    i_pcBuffer[iLength] = '\0';
-    *o_pActualLength = iLength;
-
-    // free memory
-    BIO_free(pMemBio);
-
-    return true;
-}
-
-/**
- * import the Cert from a BIO, if error, return NULL
- */
-bool LoadCertFromBIO(X509control* i_pX509control, BIO *i_pBio)
-{
-    X509 *pRequest = NULL;
-
-    if (i_pX509control == NULL) return false;
-
-    if(i_pBio == NULL) return false;
-
-    //if(m_pNative != NULL) return false; // do not allow overwrite
-    if (i_pX509control->pX509 != NULL ) return false;
-
-    pRequest=PEM_read_bio_X509(i_pBio, NULL, NULL, NULL);
-
-    if (pRequest == NULL)
-    {
-        // fixme: log: invalid certificate format
-        return false;
-    }
-    //m_pNative = pRequest;
-    i_pX509control->pX509 = pRequest;
-
-    return true;
-}
-
-bool LoadX509CertFromFile( 
-                            void* const i_pImplResource,
-                            const char * const i_pcFileName )
-
-{
-    X509control* pX509control = (X509control*) i_pImplResource;
-    if (pX509control == NULL) 
-    {
-        return false;
-    }
-
-    BIO *pFileBio=NULL;
-    bool bReturn;
-
-    pFileBio=BIO_new(BIO_s_file());
-    if (pFileBio == NULL)
-    {
-        //fixme: log -- no memory
-        return false;
-    }
-
-    if (!BIO_read_filename(pFileBio,i_pcFileName))
-    {
-        //fixme log -- could not open file
-        BIO_free(pFileBio);
-        return false;
-    }
-
-    bReturn = LoadCertFromBIO(pX509control, pFileBio);
-
-    BIO_free(pFileBio);
-
-    return bReturn;
-}
-
-
-bool LoadX509CertFromBuffer(
-                           void* const i_pImplResource,
-                           void* const i_pX509Cert,
-                           int         i_iLength)
- {
-    X509control* pX509control = (X509control*)i_pImplResource;
-
-    if(pX509control == NULL)
-    {
-        return false;
-    }
-
-    BIO *pMemBio;
-    bool bReturn;
-    // create a mem bio from the given buffer
-    // Note that BIO_new_mem_buf() creates a BIO which never destroy the memory
-    //    attached to it.
-    pMemBio = BIO_new_mem_buf(i_pX509Cert, i_iLength);
-    if (pMemBio == NULL)
-    {
-        //fixme: log -- no memory
-        return false;
-    }
-    bReturn = LoadCertFromBIO(pX509control, pMemBio);
-
-    BIO_free(pMemBio);
-
-    return bReturn;
-}
-
-void FinalizeCertImpl( void* i_pImplResource )
-{
-    if ( i_pImplResource != NULL )
-    {
-        free(i_pImplResource);
-    }
-}
-
-bool PrintX509Cert( void* const i_pImplResource )
-{
-    BIO *pMemBio;
-    char *pData;
-    int iLength,i;
-    X509control* pX509control = (X509control*)i_pImplResource;
-    pMemBio = BIO_new(BIO_s_mem());
-    if(pMemBio == NULL)
-    {
-        return false;
-    }
-
-    //X509_print(pMemBio,m_pNative);
-    X509_print(pMemBio, pX509control->pX509);
-
-    iLength = BIO_get_mem_data(pMemBio, &pData);
-
-    for(i = 0; i < iLength; i++)
-    {
-        printf("%c", pData[i]);
-    }
-
-    BIO_free(pMemBio);
-
-    return true;
-
-}
-#ifdef K_SOLARIS_PLATFORM
-void *GetCert(void* i_pImplResource )
-{
-	X509control* pX509control = (X509control*)i_pImplResource;
-	return ((void *)pX509control->pX509);
-}
-
-void SetCert(void* i_pImplResource, void *cert)
-{
-	X509control* pX509control = (X509control*)i_pImplResource;
-	pX509control->pX509 = (X509 *)cert;
-	return;
-}
-#endif
--- a/usr/src/lib/libkmsagent/common/KMSAgentPKICommon.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,159 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAgentPKICommon.cpp
- */
-#include <stdio.h>
-
-#include "SYSCommon.h"
-#include "KMSAgentPKICommon.h"
-#include "KMSAgentStringUtilities.h"
-
-#include "KMSAgent_direct.h"
-
-
-//////////////////////////////////////////////////////////////////////
-// Construction/Destruction
-//////////////////////////////////////////////////////////////////////
-
-CPKI::CPKI()
-{
-   m_iKeyLength = DEFAULT_KEY_SIZE;
-   
-   // used for CA
-   m_pCACertificate = NULL;
-   m_pCAPrivateKey = NULL;
-}
-
-// BEN - make these
-// global lengths
-int iLength1 = 0;
-int iLength2 = 0;
-
-// THIS CAN'T BE STACK DATA - TOO BIG
-static unsigned char aTempBuffer[MAX_CERT_SIZE + MAX_KEY_SIZE];
-#ifdef METAWARE
-static char aNotherTempBuffer[50];
-#endif
-
-// used by StoreAgentPKI - KMSAgentStorage.cpp
-
-bool CPKI::ExportCertAndKeyToFile(
-   CCertificate* const         i_pCertificate,  
-   CPrivateKey*  const         i_pPrivateKey,
-   const char* const           i_pcFileName,
-   const char* const           i_sPassphrase,
-   EnumPKIFileFormat           i_eFileFormat )
-{
-   FATAL_ASSERT( i_pCertificate && i_pPrivateKey && i_pcFileName );
-   
-   
-   memset( aTempBuffer, 0, MAX_CERT_SIZE + MAX_KEY_SIZE );
-
-#ifdef KMSUSERPKCS12
-    if ( i_eFileFormat == FILE_FORMAT_PKCS12 )
-    {
-        if ( !i_pCertificate->SavePKCS12(aTempBuffer,
-                                MAX_CERT_SIZE,
-                                &iLength1,
-                                i_pPrivateKey,
-                                (char*)i_sPassphrase ) )
-        {
-            return false;
-        }
-    } else {
-#endif
-   
-   // Overloaded Save method implemented in KMSAgentPKICert.cpp
-   // this method saves Certificate to the temporary buffer, not a file
-   // but a side effect is to get the actual file length
-   if ( !i_pCertificate->Save(aTempBuffer, 
-                              MAX_CERT_SIZE, 
-                              &iLength1,          /* returned - actual length
-                                                     written */
-                              i_eFileFormat) )
-   {
-      return false;
-   }
-   
-   // Overloaded Save method implemented in KMSAgentPKIKey.cpp
-   // this method saves keys to the temporary buffer, not a file,
-   // but a side effect is to get the actual file length
-   if ( !i_pPrivateKey->Save(aTempBuffer + iLength1, 
-                             MAX_KEY_SIZE, 
-                             &iLength2,          /* returned - actual length
-                                                    written */
-                             i_sPassphrase, 
-                             i_eFileFormat) )
-   {
-      return false;
-   }
-   
-#ifdef KMSUSERPKCS12
-	}
-#endif
-
-   // now write the temporary buffer to a file
-   myFILE* pFile = fopen( i_pcFileName, "wb" );
-   if ( pFile == NULL )
-   {
-      return false;
-   }
-
-#ifdef KMSUSERPKCS12
-#ifdef K_SOLARIS_PLATFORM
-	int fd = fileno(pFile);
-
-	/* Make sure this file is read/write for the OWNER only! */
-	(void) fchmod(fd, 0600);
-#endif
-#endif
-
-#ifdef METAWARE
-   // write out the two file lengths
-   snprintf(aNotherTempBuffer, sizeof(aNotherTempBuffer), "iLength1=%x\n", iLength1);
-   fputs((const char*)aNotherTempBuffer, pFile);
-   
-   snprintf(aNotherTempBuffer, sizeof(aNotherTempBuffer), "iLength2=%x\n", iLength2);
-   fputs((const char*)aNotherTempBuffer, pFile);
-#endif
-
-   int iBytesWritten = fwrite( (const char*)aTempBuffer,  // from
-                               1,                         // size
-                               iLength1+iLength2,         // actual file length
-                               pFile );                   // to-file
-   
-   fclose( pFile );
-   
-   return ( iBytesWritten == (iLength1+iLength2) );
-}
-
-
-CPKI::~CPKI()
-{
-   // empty
-}
-
--- a/usr/src/lib/libkmsagent/common/KMSAgentPKICommon.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,293 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*-------------------------------------------------------------------------*/
-/**
- * \file KMSAgentPKICommon.h
- *
- * X.509 Certificate and Private Key Support Interface
- *
- * This module provides simple interfaces to support SSL communication
- * for the KMS Agent enrollment protocol.  Basic classes supporting 
- * X.509 certificates, private key management are provided and hide
- * specific implementations from users of these classes.
- */
-/*-------------------------------------------------------------------------*/
-
-#ifndef K_KMSAgentPKICommon_h
-#define K_KMSAgentPKICommon_h
-
-#ifdef WIN32
-#pragma warning(disable: 4786)
-#endif
-
-#define MAX_CERT_SIZE                                       4096
-#define MAX_KEY_SIZE                                        4096
-
-#define DEFAULT_KEY_SIZE                                    2048
-
-#ifdef KMSUSERPKCS12
-enum EnumPKIFileFormat { FILE_FORMAT_DER, FILE_FORMAT_PEM, FILE_FORMAT_PKCS12 };
-#else
-enum EnumPKIFileFormat { FILE_FORMAT_DER, FILE_FORMAT_PEM };
-#endif
-
-/**
- *   This class provides a simple interface for the management of
- *   public keys.  Simple load and store operations are provided for
- *   storage and retrieval from memory buffers.
- */
-class CPublicKey
-{
-
-public:
-
-	CPublicKey();
-
-	/**
-     * This method saves public key into a buffer,
-     * it also returns the actual used buffer length.
-     * @param i_pcBuffer Buffer to receive public key
-     * @param i_iBufferLength length of the buffer provided
-     * @param o_pActualLength actual length of the public key stored into the buffer
-     * @param i_iFormat key format, @see EnumPKIFileFormat
-     */
-    bool Save(unsigned char * const i_pcBuffer, 
-            int                     i_iBufferLength, 
-            int * const             o_pActualLength,
-			int                     i_iFormat);
-   /**
-     *  This method loads the public key from a buffer
-     *  @param i_pcBuffer
-     *  @param i_iLength
-     *  @param i_iFormat   one of the enums from EnumPKIFileFormat,
-     *                     only FILE_FORMAT_PEM is supported.
-     *  @return true for success, false otherwise
-     */
-    bool Load (unsigned char * const i_pcBuffer,
-               int i_iLength,
-               int i_iFormat);
-    
-   /**
-     *   use this object's public key to encrypt plaintext buffer
-     */
-    bool Encrypt (int i_iLength,
-                  const unsigned char * const i_pcPlainText,
-                  unsigned char * const o_pcCypherText,
-                  int * const o_pActualLength);
-    
-    ~CPublicKey();
-
-private:
-   void *m_pPublicKeyImpl;
-};
-
-/**
- *   This class provides a simple interface for the management of
- *   private keys.  Simple load and store operations are provided for
- *   storage and retrieval from memory buffers.
- *
- */
-class CPrivateKey
-{
-
-  public:
-
-   CPrivateKey();
-    
-   /**
-    *   Saves the private key to a memory buffer specified by
-    *   i_pcBuffer. Currently just the PEM format is supported.
-    *   Specification of a passphrase allows encryption of the private
-    *   key subject to the choice of the implementation.
-    *
-    *   @param[in]   i_pcBuffer
-    *   @param[in]   i_iBufferLength
-    *   @param[out]  o_pActualLength
-    *   @param[in]   i_pPassphrase optional, if non-null the private key is
-    *   wrapped using this passphrase
-    *   @param[in]   i_iFormat   one of the enums from EnumPKIFileFormat,
-    *                      only FILE_FORMAT_PEM is supported.
-    *   @return true for success, false otherwise
-    */
-   bool Save( unsigned char * const      i_pcBuffer, 
-              int                        i_iBufferLength,
-              int * const                o_pActualLength,
-              const char * const         i_pPassphrase, 
-              int                        i_iFormat );
-
-   /**
-    *  This method loads the private key from a buffer
-    *  @param i_pcBuffer
-    *  @param i_iLength
-    *  @param i_pPassphrase optional, if non-null the private key is
-    *   unwrapped using this passphrase
-    *  @param i_iFormat   one of the enums from EnumPKIFileFormat,
-    *                     only FILE_FORMAT_PEM is supported.
-    *  @return true for success, false otherwise
-    */
-   bool Load(unsigned char * const i_pcBuffer,
-             int                   i_iLength,
-             const char * const    i_pPassphrase,
-             int                   i_iFormat);
-
-   ~CPrivateKey();
-
-#ifdef KMSUSERPKCS12
-	void *GetNative();
-	void SetNative(void *);
-#endif
-  private:
-   void *m_pPKeyImpl;
-
-};
-
-/**
- *   This class provides a simple interface for managing X.509
- *   certificates providing only simple load and save operations for
- *   storage and retrieval.
- *
- */
-class CCertificate
-{
-
-public:
-	CCertificate();
-
-	~CCertificate();
-    
-    /**
-     *   save the certificate to the specified file name. Currently,
-     *   only FILE_FORMAT_PEM is supported.
-     */
-	bool Save(  const char * const  i_pcFileName, 
-                int                 i_iFormat);
-
-    /**
-     *  save the certificate to the specified buffer. Currently, only
-     *  FILE_FORMAT_PEM is supported.
-     */      
-	bool Save( unsigned char * const i_pcBuffer,
-               int                   i_iBufferLength,
-               int * const           o_pActualLength,
-               int                   i_iFormat);
-
-    /**
-     *   load a certificate from the specified filename. Currently,
-     *   only FILE_FORMAT_PEM is supported.
-     */      
-    bool Load( const char * const i_pcFileName, 
-               int                i_iFormat );
-
-    /**
-     *   load a certificate from the specified buffer. Currently, only
-     *   FILE_FORMAT_PEM is supported.
-     */          
-    bool Load( unsigned char * const i_pcBuffer,
-               int                   i_iLength,
-               int                   i_iFormat );
-
-    /**
-     *   prints the certificate to stdout
-     */          
-    bool Dump();
-        
-#ifdef KMSUSERPKCS12
-	bool LoadPKCS12CertAndKey(char *filename,
-		int i_iFormat,
-		CPrivateKey *i_pPrivateKey,
-		char *i_pPassphrase);
-
-	bool SavePKCS12(
-	    unsigned char *i_pcBuffer,
-	    int i_iBufferLength,
-	    int *o_pActualLength,
-	    CPrivateKey* i_pPrivateKey,
-	    char* i_sPassphrase );
-#endif
-
-private:
-    /**
-     *  an opague pointer to implementation specific resources to be
-     *  freed by the Destructor.
-     */
-    void    *m_pCertImpl;
-#ifdef KMSUSERPKCS12
-    /**
-     * saves certificate to PKCS#12 memory BIO
-     * @param i_pPrivateKey
-     * @param i_sPassphrase
-     * @return pointer to the Memory BIO
-     */
-    void* SaveCertToPKCS12MemoryBIO(
-            CPrivateKey* i_pPrivateKey,
-            char *i_sPassphrase);
-#endif
-
-};
-
-
-/**
- *  This class provides a method for storing an X.509 certificate and
- *  private key to a file.  The private key is appended to the
- *  certificate and optionally encrypted with the specified passphrase
- *  for encoding and storage in PEM format.
- */
-class CPKI
-{
-  public:
-   CPKI();
-   ~CPKI();
-
-  public:
-
-      /**
-       *   exports a certificate and associated private key to the
-       *   specified file.
-       *   @param i_pCertificate a pointer to an instance of a certificate
-       *   @param i_pPrivateKey  a pointer to an instance of a private key 
-       *   @param i_pcFileName  the name of the file to store the cert and private key
-       *   @param i_sPassphrase optional but when provided supplies a
-       *   pass phrase to use for encrypting the private key.  The cipher
-       *   used for encryption is determined by the underlying implementation 
-       *   which for the reference implementation uses triple DES by default.
-       *   @param i_eFileFormat the encoding format to use for the certificate and private key
-       */
-      bool ExportCertAndKeyToFile(
-            CCertificate* const         i_pCertificate,  
-            CPrivateKey*  const         i_pPrivateKey,
-            const char* const           i_pcFileName,
-            const char* const           i_sPassphrase,
-            EnumPKIFileFormat           i_eFileFormat );
-
-  private:
-
-   int m_iKeyLength;
-
-   CCertificate *m_pCACertificate;
-   CPrivateKey *m_pCAPrivateKey;
- };
-
-#endif  //K_KMSAgentPKICommon_h
--- a/usr/src/lib/libkmsagent/common/KMSAgentPKIKey.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,153 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAgentPKIKey.cpp
- */
-#include <stdio.h>
-
-#include "SYSCommon.h"
-#include "KMSAgentPKICommon.h"
-#include "KMSAgentPKIimpl.h"
-
-///////////////////////////////////////////////////////////////////////////////////////
-// public key methods
-///////////////////////////////////////////////////////////////////////////////////////
-CPublicKey::CPublicKey()
-{
-   m_pPublicKeyImpl = InitializePKeyImpl();
-   
-   FATAL_ASSERT( m_pPublicKeyImpl != NULL );
-   
-}
-
-/**
- * This method saves public key into a buffer,
- * it also returns the actual used buffer length.
- * @param i_pcBuffer Buffer to receive public key
- * @param i_iBufferLength length of the buffer provided
- * @param o_pActualLength actual length of the public key stored into the buffer
- * @param i_iFormat key format, @see EnumPKIFileFormat
- */
-bool CPublicKey::Save(  unsigned char * const      i_pcBuffer, 
-                        int                        i_iBufferLength,
-                        int * const                o_pActualLength,
-                        int                        i_iFormat )
-{
-   return SavePublicKeyToBuffer( m_pPublicKeyImpl, 
-                                 i_pcBuffer, 
-                                 i_iBufferLength, 
-                                 o_pActualLength, 
-                                 i_iFormat );
-}
-
-bool CPublicKey::Load(unsigned char * const i_pcBuffer,
-                       int                   i_iLength,
-                       int                   i_iFormat)
-{ 
-   return LoadPublicKeyFromBuffer( m_pPublicKeyImpl, 
-                                    i_pcBuffer, 
-                                    i_iLength, 
-                                    i_iFormat );
-}
-
-bool CPublicKey::Encrypt (int i_iLength,
-                  const unsigned char * const i_pcPlainText,
-                  unsigned char * const o_pcCypherText,
-                  int * const o_pActualLength)
-{
-    return PublicKeyEncrypt(i_iLength,i_pcPlainText,o_pcCypherText,o_pActualLength, m_pPublicKeyImpl );
-}
-
-CPublicKey::~CPublicKey()
-{
-   if(m_pPublicKeyImpl != NULL)
-   {
-      FinalizePKeyImpl( m_pPublicKeyImpl );
-   }
-}
-
-///////////////////////////////////////////////////////////////////////////////////////
-// private key methods
-///////////////////////////////////////////////////////////////////////////////////////
-
-CPrivateKey::CPrivateKey()
-{
-   m_pPKeyImpl = InitializePKeyImpl();
-   
-   FATAL_ASSERT( m_pPKeyImpl != NULL );
-   
-}
-
-/**
- * This method saves private key into a buffer,
- * it also returns the actual used buffer length.
- */
-bool CPrivateKey::Save( unsigned char * const      i_pcBuffer, 
-                        int                        i_iBufferLength,
-                        int * const                o_pActualLength,
-                        const char * const         i_pPassphrase, 
-                        int                        i_iFormat )
-{
-   return SavePrivateKeyToBuffer(m_pPKeyImpl, 
-                                 i_pcBuffer, 
-                                 i_iBufferLength, 
-                                 o_pActualLength, 
-                                 i_pPassphrase, 
-                                 i_iFormat );
-}
-
-bool CPrivateKey::Load(unsigned char * const i_pcBuffer,
-                       int                   i_iLength,
-                       const char * const    i_pPassphrase,
-                       int                   i_iFormat)
-{ 
-   return LoadPrivateKeyFromBuffer( m_pPKeyImpl, 
-                                    i_pcBuffer, 
-                                    i_iLength, 
-                                    i_pPassphrase, 
-                                    i_iFormat );
-}
-
-CPrivateKey::~CPrivateKey()
-{
-   if(m_pPKeyImpl != NULL)
-   {
-      FinalizePKeyImpl( m_pPKeyImpl );
-   }
-}
-#ifdef KMSUSERPKCS12
-void
-*CPrivateKey::GetNative()
-{
-	return GetPKey(m_pPKeyImpl);
-}
-void
-CPrivateKey::SetNative(void *pKey)
-{
-	SetPKey(m_pPKeyImpl, pKey);
-	return;
-}
-#endif
--- a/usr/src/lib/libkmsagent/common/KMSAgentPKIKeyOpenSSL.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,412 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAgentPKIKeyOpenSSL.cpp
- */
-
-#include <stdio.h>
-#include <openssl/bio.h>
-#include <openssl/pem.h>
-#include <openssl/rsa.h>
-
-#include "SYSCommon.h"
-#include "KMSAgentPKIimpl.h"
-
-typedef struct PKeyControl
-{
-    EVP_PKEY*   pPKey;
-} PKeyControl;
-
-void * InitializePKeyImpl()
-{
-    PKeyControl *pPKeyControl = 
-       (PKeyControl *) malloc(sizeof(PKeyControl));
-
-    if ( pPKeyControl != NULL )
-    {
-        pPKeyControl->pPKey = NULL;
-    }
-
-    return pPKeyControl;
-}
-
-void FinalizePKeyImpl( void * i_pPKeyImpl )
-{
-    if ( i_pPKeyImpl != NULL )
-    {
-        free(i_pPKeyImpl);
-    }
-}
-
-#ifdef KMSUSERPKCS12
-void *GetPKey(void *i_pPKeyImpl) {
-	PKeyControl* pPKeyControl = (PKeyControl*) i_pPKeyImpl;
-	return ((void *)pPKeyControl->pPKey);
-}
-
-void SetPKey(void *i_pPKeyImpl, void *pKey) {
-	PKeyControl* pPKeyControl = (PKeyControl*) i_pPKeyImpl;
-	pPKeyControl->pPKey = (EVP_PKEY *)pKey;
-	return;
-}
-#endif
-
-/**
- * export the private key to a memory BIO, if error, return NULL
- */
-BIO* SavePrivateKeyToMemoryBIO(PKeyControl* const i_pPKeyControl,
-                               const char * const i_pPassphrase)
-{
-   BIO *pMemBio = NULL;
-   const EVP_CIPHER *pCipher = NULL;
-   int iReturn;
-
-   // set cipher, if passphrase is not empty
-   if(i_pPassphrase != NULL)
-   {
-      pCipher= EVP_des_ede3_cbc(); //NULL means no password protection
-   }
-
-   // create memory BIO
-   pMemBio = BIO_new(BIO_s_mem());
-
-   if(pMemBio == NULL)
-   {
-      //fixme: log -- no memory
-      return NULL;
-   }
-
-  iReturn = PEM_write_bio_PrivateKey
-     (pMemBio, 
-      i_pPKeyControl->pPKey,
-      pCipher, 
-      NULL,0,NULL, (char*) i_pPassphrase);
-
-   if(!iReturn) // return 0: means error occurs
-   {
-      //fixme: log -- could not export private key
-      BIO_free(pMemBio);
-      return NULL;
-   }
-
-   return pMemBio;
-}
-
-bool SavePrivateKeyToBuffer(
-   void * const          i_pPKeyImpl,
-   unsigned char * const i_pcBuffer, 
-   int                   i_iBufferLength, 
-   int * const           o_pActualLength,
-   const char * const    i_pPassphrase, 
-   int                   i_iFormat)
-{
-    PKeyControl* pPKeyControl = (PKeyControl*) i_pPKeyImpl;
-
-    FATAL_ASSERT( pPKeyControl && 
-        i_pcBuffer && 
-        i_iBufferLength > 0 && 
-        o_pActualLength );
-
-    BIO *pMemBio = NULL;
-	char *pData = NULL;
-	int iLength;
-
-	// create memory BIO
-	pMemBio = SavePrivateKeyToMemoryBIO( pPKeyControl, i_pPassphrase );
-
-	if(pMemBio == NULL)
-	{
-		//fixme: log -- no memory
-		return false;
-	}
-
-	iLength = BIO_get_mem_data(pMemBio, &pData);
-
-    // If the output buffer is a string, it needs to be NULL terminated
-    // So always append a NULL to the output
-    if(iLength + 1 > i_iBufferLength)
-	{
-		//fixme: log -- buffer too small
-		BIO_free(pMemBio);
-		return false;
-	}
-	// copy the data to given buffer
-	memcpy(i_pcBuffer, pData, iLength);
-    // NULL terminate the string
-    i_pcBuffer[iLength] = '\0';
-	*o_pActualLength = iLength;
-
-	// free memory
-	BIO_free(pMemBio);
-
-	return true;
-}
-
-/**
- * import the private key from a BIO, if error, return NULL
- */
-bool LoadPrivateKeyFromBIO(PKeyControl* const io_pPKeyControl,
-                           BIO *i_pBio, 
-                           char *i_pPassphrase ) 
-{
-    if (io_pPKeyControl == NULL)
-    {
-        return false;
-    }
-    
-    EVP_PKEY *pKey = NULL;
-
-	if(i_pBio == NULL) 
-    {
-        return false;
-    }
-
-    if ( io_pPKeyControl != NULL && io_pPKeyControl->pPKey != NULL )
-    {
-        return false; // do not allow overwrite
-    }
-
-	pKey=PEM_read_bio_PrivateKey(i_pBio,NULL,NULL,i_pPassphrase);
-	if (pKey == NULL)
-	{
-		// fixme: log: invalid private key format or passphrase
-		return false;
-	}
-
-    io_pPKeyControl->pPKey = pKey;
-
-	return true;
-}
-
-bool LoadPrivateKeyFromBuffer(
-   void * const        i_pPKeyImpl,
-   unsigned char *     i_pcBuffer,
-   int                 i_iLength, 
-   const char * const  i_pPassphrase, 
-   int                 i_iFormat)
-{ 
-    PKeyControl* const pPKeyControl = (PKeyControl*) i_pPKeyImpl;
-
-    FATAL_ASSERT( i_pPKeyImpl && i_pcBuffer );
-
-    bool bReturn;
-	BIO *pMemBio;
-	// create a mem bio from the given buffer
-	// Note that BIO_new_mem_buf() creates a BIO which never 
-        // destroy the memory attached to it.
-	pMemBio = BIO_new_mem_buf(i_pcBuffer, i_iLength);
-	if (pMemBio == NULL)
-	{
-		//fixme: log -- no memory
-		return false;
-	}
-	bReturn = LoadPrivateKeyFromBIO( pPKeyControl, 
-                    pMemBio, (char *)i_pPassphrase );
-
-	BIO_free(pMemBio);
-
-	return bReturn;
-}
-
-/**
- * export the public key to a memory BIO, if error, return NULL
- */
-BIO* SavePublicKeyToMemoryBIO(PKeyControl* const i_pPublicKeyControl )
-{
-   BIO *pMemBio = NULL;
-
-   int iReturn;
-
-   // create memory BIO
-   pMemBio = BIO_new(BIO_s_mem());
-
-   if(pMemBio == NULL)
-   {
-      //fixme: log -- no memory
-      return NULL;
-   }
-   
-   iReturn = PEM_write_bio_PUBKEY(pMemBio,       
-                        i_pPublicKeyControl->pPKey );
-
-   if(!iReturn) // return 0: means error occurs
-   {
-      //fixme: log -- could not export private key
-      BIO_free(pMemBio);
-      return NULL;
-   }
-
-   return pMemBio;
-}
-
-bool SavePublicKeyToBuffer(
-   void * const          i_pPKeyImpl,
-   unsigned char * const i_pcBuffer, 
-   int                   i_iBufferLength, 
-   int * const           o_pActualLength,
-   int                   i_iFormat)
-{
-    PKeyControl* pPublicKeyControl = (PKeyControl*) i_pPKeyImpl;
-
-    FATAL_ASSERT( pPublicKeyControl && 
-        i_pcBuffer && 
-        i_iBufferLength > 0 && 
-        o_pActualLength );
-
-    BIO *pMemBio = NULL;
-	char *pData = NULL;
-	int iLength;
-
-	// create memory BIO
-	pMemBio = SavePublicKeyToMemoryBIO( pPublicKeyControl );
-
-	if(pMemBio == NULL)
-	{
-		return false;
-	}
-
-	iLength = BIO_get_mem_data(pMemBio, &pData);
-
-    // If the output buffer is a string, it needs to be NULL terminated
-    // So always append a NULL to the output
-    if(iLength + 1 > i_iBufferLength)
-	{
-		BIO_free(pMemBio);
-		return false;
-	}
-	// copy the data to given buffer
-	memcpy(i_pcBuffer, pData, iLength);
-    // NULL terminate the string
-    i_pcBuffer[iLength] = '\0';
-	*o_pActualLength = iLength;
-
-	// free memory
-	BIO_free(pMemBio);
-
-	return true;
-}
-
-/**
- * import the public key from a BIO, if error, return NULL
- */
-bool LoadPublicKeyFromBIO(PKeyControl* const io_pPublicKeyControl,
-                           BIO *i_pBio ) 
-{
-	EVP_PKEY *pKey = NULL;
-
-    if(io_pPublicKeyControl == NULL) 
-    {
-        return false;
-    }
-    
-    if(i_pBio == NULL) 
-    {
-        return false;
-    }
-
-    if ( io_pPublicKeyControl != NULL && io_pPublicKeyControl->pPKey != NULL )
-    {
-        return false; // do not allow overwrite
-    }
-
-    pKey = PEM_read_bio_PUBKEY(i_pBio, NULL, NULL, NULL);
-    if (pKey == NULL)
-    {
-        // fixme: log: invalid public key format or passphrase
-        return false;
-    }
-
-    io_pPublicKeyControl->pPKey = pKey;
-
-	return true;
-}
-
-bool LoadPublicKeyFromBuffer(
-   void * const        i_pPublicKeyImpl,
-   unsigned char *     i_pcBuffer,
-   int                 i_iLength, 
-   int                 i_iFormat)
-{ 
-    PKeyControl* const pPublicKeyControl = (PKeyControl*) i_pPublicKeyImpl;
-
-    FATAL_ASSERT( i_pPublicKeyImpl && i_pcBuffer );
-
-    bool bReturn;
-	BIO *pMemBio;
-	// create a mem bio from the given buffer
-	// Note that BIO_new_mem_buf() creates a BIO which never 
-        // destroy the memory attached to it.
-	pMemBio = BIO_new_mem_buf(i_pcBuffer, i_iLength);
-	if (pMemBio == NULL)
-	{
-		//fixme: log -- no memory
-		return false;
-	}
-	bReturn = LoadPublicKeyFromBIO( pPublicKeyControl, 
-                    pMemBio );
-
-	BIO_free(pMemBio);
-
-	return bReturn;
-}
-
-bool PublicKeyEncrypt (int i_iLength,
-                       const unsigned char * const i_pcPlainText,
-                       unsigned char * const o_pcCypherText,
-                       int * const o_pActualLength,
-                       void * pPKeyControl )
-{
-    FATAL_ASSERT( i_pcPlainText );
-    FATAL_ASSERT( o_pcCypherText );
-    FATAL_ASSERT( o_pActualLength );
-    FATAL_ASSERT( pPKeyControl );
-    
-    PKeyControl *pKeyControl = (PKeyControl *)pPKeyControl;
-    EVP_PKEY * pEVP_PKEY = pKeyControl->pPKey;
-    RSA * pRSAPublicKey = pEVP_PKEY->pkey.rsa;
-
-//#if defined(DEBUG)
-//    RSA_print_fp(stdout, pRSAPublicKey, 0);
-//    printf("PublicKeyEncrypt(): RSA_size()=%d, cyphertextLen=%d\n", 
-//            RSA_size(pRSAPublicKey),
-//            i_iLength);
-//#endif
-    
-    *o_pActualLength = RSA_public_encrypt(i_iLength,
-                                          i_pcPlainText, 
-                                          o_pcCypherText, 
-                                          pRSAPublicKey,
-                                          RSA_PKCS1_PADDING);
-
-    if ( *o_pActualLength < 0 )
-    {
-        return false;     
-    }
-    else
-    {
-        return true;
-    }
-}
--- a/usr/src/lib/libkmsagent/common/KMSAgentPKIimpl.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,165 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAgentPKIimpl.h
- */
-
-#ifndef K_KMSAgentPKIimpl_h
-#define K_KMSAgentPKIimpl_h
-
-/**
- *   initializes the implementation environment for an X509
- *   certificate implementation and returns an opague handle to any
- *   resources that should be freed when use of the X.509
- *   implementation is complete.  This handle is used on all
- *   subsequent calls that may need to access this resource.
- */
-void * InitializeCertImpl();
-
-/**
- *  Save the X.509 Certificate in PEM format to the specified filename
- */
-bool SaveX509CertTofile( 
-                        void* const i_pImplResource,
-                        const char * const i_pcFileName );
-
-/**
- *  Save the X.509Certificate in PEM format to the specified buffer
- *  and set the length of the certificate in the location referenced
- *  by o_pActualLength
- */
-bool SaveX509CertToBuffer(
-                        void* const             i_pImplResource,
-                        unsigned char * const   i_pcBuffer,
-                        int                     i_iBufferLength,
-                        int * const             o_pActualLength );
-
-/**
- *  loads the X.509 certificate from i_pcFileName and keeps a reference to it
- *  via i_pImplResource
- */
-bool LoadX509CertFromFile( 
-                            void* const i_pImplResource,
-                            const char * const i_pcFileName );
-
-/**
- *  load the X.509 certificate from i_pX509Buffer and keeps a reference to it
- *  via i_pImplResource
- */
-bool LoadX509CertFromBuffer( 
-                           void* const i_pImplResource,
-                           void* const i_pX509Cert,
-                           int         i_iLength);
-                                                    
-/**
- *   frees any resources allocated by <code>InitializeCertImpl</code>
- */ 
-void FinalizeCertImpl(
-                        void* i_pImplResource);
-
-/**
- *  print the X.509 certificate to stdout
- */
-bool PrintX509Cert( void* const i_pImplResource );
-
-/**
- *   initializes the implementation environment for a public or private key
- *   and returns an opague handle to any resources that should be freed
- *   when use of the key is complete.  This handle is used
- *   on all subsequent calls that may need to access this resource.
- */
-void * InitializePKeyImpl();
-
-/**
- *   frees any resources allocated by <code>InitializePKeyImpl</code>
- */ 
-void FinalizePKeyImpl( void * i_pPKeyImpl );
-
-#ifdef KMSUSERPKCS12
-void *GetPKey( void *i_pImplResource);
-void SetPKey( void *i_pImplResource, void *i_pPKey);
-void *GetCert( void *i_pImplResource);
-void SetCert( void *i_pImplResource, void *cert);
-#endif
-
-/**
- *   Stores the private key in a memory buffer referenced by
- *   i_pcBuffer with the length of the key being stored in the area
- *   referenced by o_pActualLength.
- *
- */
-bool SavePrivateKeyToBuffer(
-                        void * const          i_pPKeyImpl,
-                        unsigned char * const i_pcBuffer, 
-                        int                   i_iBufferLength, 
-                        int * const           o_pActualLength,
-			            const char * const    i_pPassphrase, 
-                        int                   i_iFormat);
-
-/**
- *   load the private key into this object from the specified buffer
- */
-bool LoadPrivateKeyFromBuffer(
-                        void * const        i_pPKeyImpl,
-                        unsigned char *     i_pcBuffer,
-			            int                 i_iLength, 
-                        const char * const  i_pPassphrase, 
-                        int                 i_iFormat);
-
-/**
- *   Stores the pubic key in a memory buffer referenced by
- *   i_pcBuffer with the length of the key being stored in the area
- *   referenced by o_pActualLength.
- *
- */
-bool SavePublicKeyToBuffer(
-                        void * const          i_pPKeyImpl,
-                        unsigned char * const i_pcBuffer, 
-                        int                   i_iBufferLength, 
-                        int * const           o_pActualLength,
-                        int                   i_iFormat);
-
-/**
- *  load a public key into this object from the specified buffer
- */
-bool LoadPublicKeyFromBuffer(
-                        void * const        i_pPKeyImpl,
-                        unsigned char *     i_pcBuffer,
-			            int                 i_iLength, 
-                        int                 i_iFormat);
-
-/**
- *  encrypt the plaintext using RSA encryption with the RSA public
- *  key provided and return resulting cyphertext
- */
-bool PublicKeyEncrypt (int i_iLength,
-                       const unsigned char * const i_pcPlainText,
-                       unsigned char * const o_pcCypherText,
-                       int * const o_pActualLength,
-                       void * i_pRSAPublicKey);
-
-#endif // K_KMSAgentPKIimpl_h
-
--- a/usr/src/lib/libkmsagent/common/KMSAgentSoapUtilities.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include "KMSAgentSoapUtilities.h"
-#include "KMSAgentStringUtilities.h"
-#include "ApplianceParameters.h"
-
-#include "stdsoap2.h"
-
-/**
- * Get the peer's network address
- */
-void GetPeerNetworkAddress (char* const o_psPeerNetworkAddress,
-                            struct soap* i_pSoap)
-{
-    FATAL_ASSERT(o_psPeerNetworkAddress);
-
-    if (strlen(i_pSoap->host) > 0)
-    {
-        // IPv4 addresses can appear as ::ffff:a.b.c.d, strip off the prefix
-        if (strncmp(i_pSoap->host, "::ffff:", 7) == 0)
-        {
-            strncpy(o_psPeerNetworkAddress, &i_pSoap->host[7], g_iMAX_PEER_NETWORK_ADDRESS_LENGTH);
-            o_psPeerNetworkAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH-1] = '\0';
-            return;
-        }
-        strncpy(o_psPeerNetworkAddress, i_pSoap->host, g_iMAX_PEER_NETWORK_ADDRESS_LENGTH);
-        o_psPeerNetworkAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH-1] = '\0';
-        return;
-    }
-
-    // i_pSoap->ip == 0 could not represent a valid 
-    // Peer Network Address (IPv4), check i_pSoap->session_host
-    // for an IPv6 address
-    if (i_pSoap->ip == 0)
-    {
-#ifndef METAWARE
-        if (strlen(i_pSoap->session_host) > 0)
-        {
-            // IPv4 addresses can appear as ::ffff:a.b.c.d, strip off the
-            // prefix
-
-            if (strncmp(i_pSoap->session_host, "::ffff:", 7) == 0)
-            {
-                strncpy(o_psPeerNetworkAddress, &i_pSoap->session_host[7], g_iMAX_PEER_NETWORK_ADDRESS_LENGTH);
-                o_psPeerNetworkAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH-1] = '\0';
-                return;
-            }
-
-            strncpy(o_psPeerNetworkAddress, i_pSoap->session_host, g_iMAX_PEER_NETWORK_ADDRESS_LENGTH);
-            o_psPeerNetworkAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH-1] = '\0';
-            return;
-        }
-#endif
-        strcpy(o_psPeerNetworkAddress, "");
-        return;
-    }
-    
-    K_snprintf(o_psPeerNetworkAddress, 
-            g_iMAX_PEER_NETWORK_ADDRESS_LENGTH,
-            "%d.%d.%d.%d",
-            (int) (i_pSoap->ip >> 24)&0xFF,
-            (int) (i_pSoap->ip >> 16)&0xFF,
-            (int) (i_pSoap->ip >> 8)&0xFF,
-            (int) (i_pSoap->ip)&0xFF);
-
-    return;
-}
-
-/**
- * Get the soap fault code and print it 
- */
-void GetSoapFault(char* o_psFaultMessage, 
-                  struct soap *i_pstSoap) 
-{
-   FATAL_ASSERT( i_pstSoap );
-   
-   strncpy (o_psFaultMessage, " SoapFaultCode=",g_iMAX_SOAP_FAULT_MESSAGE_LENGTH);
-   o_psFaultMessage[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH-1] = '\0';
-   strncat (o_psFaultMessage, GET_SOAP_FAULTCODE(i_pstSoap),
-           g_iMAX_SOAP_FAULT_MESSAGE_LENGTH-strlen(o_psFaultMessage));
-   strncat (o_psFaultMessage, " SoapFaultString=",
-           g_iMAX_SOAP_FAULT_MESSAGE_LENGTH-strlen(o_psFaultMessage));
-   strncat (o_psFaultMessage, GET_SOAP_FAULTSTRING(i_pstSoap),
-           g_iMAX_SOAP_FAULT_MESSAGE_LENGTH-strlen(o_psFaultMessage));
-   strncat (o_psFaultMessage, " SoapFaultDetail=",
-           g_iMAX_SOAP_FAULT_MESSAGE_LENGTH-strlen(o_psFaultMessage));
-   strncat (o_psFaultMessage, GET_SOAP_FAULTDETAIL(i_pstSoap),
-           g_iMAX_SOAP_FAULT_MESSAGE_LENGTH-strlen(o_psFaultMessage));
-   
-   return;
-}
-
-bool PutBinaryIntoSoapBinary(
-        struct soap* i_pSoap,
-        const unsigned char* i_pBinary,
-        int i_iBinarySize,
-        unsigned char*& o_pSoapBinary,
-        int& o_iSoapBinarySize )
-{
-    FATAL_ASSERT( i_pSoap );
-
-    o_pSoapBinary = 0;
-    o_iSoapBinarySize = 0;
-
-    if ( i_iBinarySize > 0 )
-    {
-        o_pSoapBinary =
-                    (unsigned char*)soap_malloc(
-                        i_pSoap,
-                        sizeof(unsigned char) * i_iBinarySize);
-
-        if ( !o_pSoapBinary )
-        {
-            // No log for out of memory condition
-
-            return false;
-        }
-
-        o_iSoapBinarySize = i_iBinarySize;
-
-        memcpy(o_pSoapBinary, i_pBinary, i_iBinarySize);
-    }
-
-    return true;
-}
--- a/usr/src/lib/libkmsagent/common/KMSAgentSoapUtilities.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAgentSoapUtilities.h
- */
-
-#ifndef KMSAgentSoapUtilities_h
-#define KMSAgentSoapUtilities_h
-
-/**
- *  maximum length of a network IP address 
- */
-static const int g_iMAX_PEER_NETWORK_ADDRESS_LENGTH = 50;
-
-/**
- *  maximum length of a soap fault message string 
- */
-static const int g_iMAX_SOAP_FAULT_MESSAGE_LENGTH = 256;
-
-//BEN CHANGE - removed predeclaration of struct soap
-// need the real declaration
-//struct soap;
-
-/**
- *  copies at most g_iMAX_PEER_NETWORK_ADDRESS_LENGTH characters
- *  from the peer's network address from the soap runtime context.
- *  <code>o_psPeerNetworkAddress</code> should be at least 
- *  <code>g_iMAX_PEER_NETWORK_ADDRESS_LENGTH</code> in length.
- */
-void GetPeerNetworkAddress( char* const  o_psPeerNetworkAddress,
-                            struct soap* i_pSoap );
-
-/**
- *  creates a soap fault message and stores it in o_psFaultMessage.  The fault message
- *  has the form:  " SoapFaultCode=%s SoapFaultString=%s SoapFaultDetail=%s" with the
- *  appropriate values substitued for %s from the soap runtime.
- *  @param o_psFaultMessage a buffer for the fault message that is at least 
- *  <code>g_iMAX_SOAP_FAULT_MESSAGE_LENGTH</code> in size.
- *  @param i_pstSoap the soap runtime context to process for fault information
- */
-// BEN - removed const
-void GetSoapFault(char* o_psFaultMessage, 
-                  struct soap *i_pstSoap);
-
-bool PutBinaryIntoSoapBinary(
-        struct soap* i_pSoap,
-        const unsigned char* i_pBinary,
-        int i_iBinarySize,
-        unsigned char*& o_pSoapBinary,
-        int& o_iSoapBinarySize );
-
-#endif //KMSAgentSoapUtilities_h
--- a/usr/src/lib/libkmsagent/common/KMSAgentStorage.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1575 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- *  \file   KMSAgentStorage.cpp
- *  This file provides an implementation of the KMSAgentStorage.h 
- *  interface utilizing a filesystem for storage of KMS Client 
- *  Profile elements.
- *
- *  For storage of Certificates and Private key material the PKICommon 
- *  interface is used.
- */
-
-#include <stdio.h>
-#include <string.h>
-
-#ifndef METAWARE
-#include <errno.h>
-#endif
-
-#ifdef K_SOLARIS_PLATFORM
-#ifndef SOLARIS10
-#include <cryptoutil.h>
-#endif
-#include <pthread.h>
-#include <fcntl.h>
-#endif
-
-#include "stdsoap2.h"
-
-#include "KMSClientProfile.h"  // must be before agentstorage
-#include "KMSAgentPKICommon.h" // must be before agentstorage
-#include "KMSAgentStorage.h"
-
-#include "SYSCommon.h"
-#include "AutoMutex.h"
-#include "KMSAuditLogger.h"
-#include "KMSClientProfileImpl.h"
-
-#include "KMSAgent_direct.h"
-#ifdef K_SOLARIS_PLATFORM
-#include "KMSAgent.h"
-#endif
-#include "k_setupssl.h"        // K_ssl_client_context
-
-#ifdef METAWARE
-extern "C" int K_ssl_client_context(struct soap *soap,
-                                    int flags,
-                                    const char *keyfile,  // NULL - SERVER
-                                    const char *password, // NULL - SERVER
-                                    const char *cafile,
-                                    const char *capath,   // ALWAYS NULL 
-                                    const char *randfile); // ALWAYS NULL
-#include "debug.h"
-#endif
-
-
-#define CA_CERTIFICATE_FILE    "ca.crt"
-#define CLIENT_KEY_FILE        "clientkey.pem"
-
-#define PROFILE_CONFIG_FILE         "profile.cfg"
-#define PROFILE_CLUSTER_CONFIG_FILE "cluster.cfg"
-
-static char g_sWorkingDirectory[KMS_MAX_PATH_LENGTH+1];
-static char g_sStringbuf[10000]; // too large to be on the 9840D stack
-
-static void BuildFullProfilePathWithName(utf8cstr          o_pProfilePath,
-                                         const char* const i_pWorkingDirectory,
-                                         const char* const i_pProfileName)
-{
-   int len;
-   FATAL_ASSERT( o_pProfilePath );
-   FATAL_ASSERT( i_pWorkingDirectory );
-   FATAL_ASSERT( i_pProfileName );
-   FATAL_ASSERT( (strlen(i_pWorkingDirectory) > 0) );
-   FATAL_ASSERT( (strlen(i_pProfileName) > 0) );
-
-#if defined(DEBUG_TRACE) && defined(METAWARE)
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, BuildFullProfilePathWithName );
-#endif
-
-   strncpy(o_pProfilePath, i_pWorkingDirectory, 
-           KMS_MAX_FILE_NAME );
-   
-   if ( o_pProfilePath[ strlen(o_pProfilePath) -1 ] != PATH_SEPARATOR )
-   {
-      len = strlen(o_pProfilePath);
-      o_pProfilePath[ len ] = PATH_SEPARATOR ;
-      o_pProfilePath[ len + 1 ] = '\0';
-   }
-   
-   strncat( o_pProfilePath, i_pProfileName, KMS_MAX_FILE_NAME );
-   len = strlen(o_pProfilePath);
-   o_pProfilePath[ len ] = PATH_SEPARATOR ;
-   o_pProfilePath[ len +1 ] = '\0';
-   
-   return;
-}
-
-static void BuildFullProfilePath(utf8cstr          o_sProfilePath,
-                                 const char* const i_pWorkingDirectory,
-                                 const char* const i_pProfileName)
-{
-   FATAL_ASSERT( o_sProfilePath );
-   FATAL_ASSERT( i_pWorkingDirectory );
-   FATAL_ASSERT( i_pProfileName );
-   FATAL_ASSERT( (strlen(i_pProfileName) > 0) );
-
-   BuildFullProfilePathWithName( o_sProfilePath, 
-                                 i_pWorkingDirectory, 
-                                 i_pProfileName );
-
-   return;
-}
-
-#ifdef K_SOLARIS_PLATFORM
-static struct flock cfgfl = {
-	0, 0, 0, 0, 0, 0,
-	{0, 0, 0, 0}
-};
-static struct flock clusterfl = {
-	0, 0, 0, 0, 0, 0,
-	{0, 0, 0, 0}
-};
-
-pthread_mutex_t cfg_mutex = PTHREAD_MUTEX_INITIALIZER;
-pthread_mutex_t cluster_mutex = PTHREAD_MUTEX_INITIALIZER;
-pthread_mutex_t keyfile_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-static int
-flock_fd(int fd, int cmd, struct flock *fl, pthread_mutex_t *mutex)
-{
-	int ret = 0;
-
-	(void) pthread_mutex_lock(mutex);
-
-	fl->l_type = cmd;
-
-	while ((ret = fcntl(fd, F_SETLKW, fl)) == -1) {
-		if (errno != EINTR)
-			break;
-	}
-	(void) pthread_mutex_unlock(mutex);
-	return (ret);
-}
-
-#endif
-
-static bool Profile_WriteConfigFile(KMSClientProfile *i_pProfile, 
-                                    const char *i_pFileName)
-{
-   FATAL_ASSERT( i_pProfile );
-   FATAL_ASSERT( i_pFileName );
-   
-   CAutoMutex oAutoMutex( (K_MUTEX_HANDLE)i_pProfile->m_pLock );
-
-#if defined(DEBUG_TRACE) && defined(METAWARE)
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, Profile_WriteConfigFile );
-#endif
-
-   char *sp = g_sStringbuf;
-   size_t  bytesWritten = 0;
-   
-   // save config parameters
-   
-   myFILE *fp = fopen(i_pFileName, "w");
-   if(fp == NULL)
-   {
-      LogError(i_pProfile,
-               AUDIT_PROFILE_WRITE_CONFIG_FILE_OPEN_CONFIGURATION_FILE_FAILED,
-               NULL,
-               NULL,
-               i_pFileName);
-      
-      return false;
-   }
-
-#ifdef K_SOLARIS_PLATFORM
-   int fd = fileno(fp);
-   (void) flock_fd(fd, F_WRLCK, &cfgfl, &cfg_mutex);
-#endif
-   
-const char* const sProfileName = i_pProfile->m_wsProfileName;
-   
-   sp += K_snprintf(sp, sizeof(i_pProfile->m_wsProfileName), "ProfileName=%s\n", sProfileName);
-   
-   sp += K_snprintf(sp, sizeof(i_pProfile->m_wsProfileName), "AgentID=%s\n", i_pProfile->m_wsEntityID);
-   
-   sp += K_snprintf(sp, sizeof(i_pProfile->m_wsProfileName), "ClusterDiscoveryFrequency=%d\n",
-                 i_pProfile->m_iClusterDiscoveryFrequency);
-   
-   sp += K_snprintf(sp, sizeof(i_pProfile->m_wsProfileName), "CAServicePortNumber=%d\n",
-                 i_pProfile->m_iPortForCAService);
-   
-   sp += K_snprintf(sp, sizeof(i_pProfile->m_wsProfileName), "CertificateServicePortNumber=%d\n",
-                 i_pProfile->m_iPortForCertificateService);
-   
-   if(i_pProfile->m_iPortForAgentService != 0)
-   {
-      sp += K_snprintf(sp, sizeof(i_pProfile->m_wsProfileName), "AgentServicePortNumber=%d\n",
-                    i_pProfile->m_iPortForAgentService);
-   }
-   
-   if(i_pProfile->m_iPortForDiscoveryService != 0)
-   {
-      sp += K_snprintf(sp, sizeof(i_pProfile->m_wsProfileName), "DiscoveryServicePortNumber=%d\n",
-                    i_pProfile->m_iPortForDiscoveryService);
-   }
-   
-   sp += K_snprintf(sp, sizeof(i_pProfile->m_wsProfileName), "ApplianceAddress=%s\n", i_pProfile->m_wsApplianceAddress);
-   
-   sp += K_snprintf(sp, sizeof(i_pProfile->m_wsProfileName), "Timeout=%d\n", i_pProfile->m_iTransactionTimeout);
-   
-   sp += K_snprintf(sp, sizeof(i_pProfile->m_wsProfileName), "FailoverLimt=%d\n", i_pProfile->m_iFailoverLimit);
-
-   sp += K_snprintf(sp, sizeof(i_pProfile->m_wsProfileName), "HexHashedPassphrase=%s\n", i_pProfile->m_sHexHashedPassphrase);
-   
-   bytesWritten = fputs(g_sStringbuf, fp);
-
-#ifdef K_SOLARIS_PLATFORM
-   (void) flock_fd(fd, F_UNLCK, &cfgfl, &cfg_mutex);
-#endif
-
-#ifndef WIN32
-   if ( strlen(g_sStringbuf) != bytesWritten )
-#else
-   if ( bytesWritten < 0 )
-#endif
-   {
-      fclose(fp);
-      return false;
-   }
-   fclose(fp);
-   
-   return true;
-}
-
-static bool Profile_ReadConfigFile
-( KMSClientProfile *i_pProfile, 
-  const char *i_pFileName)
-{
-   FATAL_ASSERT( i_pProfile  );
-   FATAL_ASSERT( i_pFileName );
-
-#if defined(DEBUG_TRACE) && defined(METAWARE)
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, Profile_ReadConfigFile ) ;
-#endif
-   
-   CAutoMutex oAutoMutex( (K_MUTEX_HANDLE)i_pProfile->m_pLock );
-   
-   const int iMaxLineSize = 1024;
-   
-   myFILE *fp;
-   char acBuffer[iMaxLineSize+1];
-   
-   fp = fopen(i_pFileName, "r");
-   if(fp == NULL)
-   {
-      LogError(i_pProfile,
-               AUDIT_PROFILE_READ_CONFIG_FILE_OPEN_CONFIGURATION_FILE_FAILED,
-               NULL,
-               NULL,
-               i_pFileName);
-      return false;
-   }
-   
-#ifdef K_SOLARIS_PLATFORM
-   int fd = fileno(fp);
-   (void) flock_fd(fd, F_RDLCK, &cfgfl, &cfg_mutex);
-#endif
-   // read file one line by one line
-   while(1)
-   {
-      int i;
-      char *pName, *pValue;
-      
-      memset(acBuffer, 0, iMaxLineSize+1);
-      
-      //---------------------------
-      // get info from the file
-      //---------------------------
-      if(fgets(acBuffer, iMaxLineSize+1, fp) == NULL)
-         break;
-      
-      if(strlen(acBuffer) < 3)
-         continue;
-      
-      if(acBuffer[0] == '#' || 
-         acBuffer[0] == ';' || 
-         acBuffer[0] == '[')  // jump comments
-         continue;
-      
-      pName = acBuffer; 
-      pValue = NULL;
-      
-      for(i = 0; acBuffer[i] != '\0'; i++)
-      {
-         if(acBuffer[i] == '=')
-            pValue = acBuffer + i + 1;
-         
-         if(acBuffer[i] == '=' ||
-            acBuffer[i] == '\r' || 
-            acBuffer[i] == '\n')
-            acBuffer[i] = '\0';
-      }
-      
-      if(pValue == NULL)
-      {
-         LogError(i_pProfile,
-                  AUDIT_PROFILE_READ_CONFIG_FILE_INVALID_CONFIGURATION_FILE_FORMAT,
-                  NULL,
-                  NULL,
-                  i_pFileName);
-#ifdef K_SOLARIS_PLATFORM
-	(void) flock_fd(fd, F_UNLCK, &cfgfl, &cfg_mutex);
-#endif
-         fclose(fp);
-         return false;
-      }
-
-      if(strcmp(pName, "ProfileName") == 0)
-      {
-         utf8cstr wsValue = pValue;
-         strncpy(i_pProfile->m_wsProfileName, wsValue, KMS_MAX_ENTITY_ID);
-         i_pProfile->m_wsProfileName[KMS_MAX_ENTITY_ID] = 0;
-      }
-
-      if(strcmp(pName, "AgentID") == 0)
-      {
-         utf8cstr wsValue = pValue;
-         strncpy(i_pProfile->m_wsEntityID, wsValue, KMS_MAX_ENTITY_ID);
-         i_pProfile->m_wsEntityID[KMS_MAX_ENTITY_ID] = 0;
-      }
-      
-      if(strcmp(pName, "ClusterDiscoveryFrequency") == 0)
-      {
-         sscanf(pValue, "%d", &(i_pProfile->m_iClusterDiscoveryFrequency));
-      }
-      
-      if(strcmp(pName, "CAServicePortNumber") == 0)
-      {
-         sscanf(pValue, "%d", &(i_pProfile->m_iPortForCAService));
-      }
-
-      if(strcmp(pName, "CertificateServicePortNumber") == 0)
-      {
-         sscanf(pValue, "%d", &(i_pProfile->m_iPortForCertificateService));
-      }
-
-      if(strcmp(pName, "AgentServicePortNumber") == 0)
-      {
-         sscanf(pValue, "%d", &(i_pProfile->m_iPortForAgentService));
-      }
-
-      if(strcmp(pName, "DiscoveryServicePortNumber") == 0)
-      {
-         sscanf(pValue, "%d", &(i_pProfile->m_iPortForDiscoveryService));
-      }
-
-      if(strcmp(pName, "ApplianceAddress") == 0)
-      {
-         utf8cstr wsValue = pValue;
-         strncpy(i_pProfile->m_wsApplianceAddress, 
-                 wsValue, KMS_MAX_NETWORK_ADDRESS);
-         i_pProfile->m_wsApplianceAddress[KMS_MAX_NETWORK_ADDRESS] = 0;
-      }
-
-      if(strcmp(pName, "Timeout") == 0)
-      {
-         sscanf(pValue, "%d", &(i_pProfile->m_iTransactionTimeout));
-      }
-
-      if(strcmp(pName, "FailoverLimt") == 0)
-      {
-         sscanf(pValue, "%d", &(i_pProfile->m_iFailoverLimit));
-      }
-
-      if(strcmp(pName, "HexHashedPassphrase") == 0)
-      {
-         sscanf(pValue, "%s", i_pProfile->m_sHexHashedPassphrase);
-      }
-   }
-   
-#ifdef K_SOLARIS_PLATFORM
-   (void) flock_fd(fd, F_UNLCK, &cfgfl, &cfg_mutex);
-#endif
-   fclose(fp);
-
-   return true;
-}
-
-
-
-
-
-/*! ProfileExists
- *
- */
-extern "C" bool ProfileExists(
-   const char* const i_pWorkingDirectory,
-   const char* const i_pProfileName)
-{
-   FATAL_ASSERT( i_pWorkingDirectory );
-   FATAL_ASSERT( i_pProfileName );
-   
-#if defined(DEBUG_TRACE) && defined(METAWARE)
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, ProfileExists );
-#endif
-
-
-   // the profile is stored in the working folder
-   strncpy( g_sWorkingDirectory, 
-            i_pWorkingDirectory, 
-            KMS_MAX_PATH_LENGTH );
-   
-   char sFullProfileDir[KMS_MAX_FILE_NAME+1];
-   BuildFullProfilePath( sFullProfileDir, 
-                         i_pWorkingDirectory, 
-                         i_pProfileName ); 
-   
-   char sConfigFile[KMS_MAX_FILE_NAME+1] = "";
-   strncpy( sConfigFile, sFullProfileDir, KMS_MAX_FILE_NAME );
-   sConfigFile[KMS_MAX_FILE_NAME] = '\0';
-   strncat( sConfigFile, PROFILE_CONFIG_FILE, KMS_MAX_FILE_NAME );
-   
-   // just try to open the file to test if it exists
-   
-   bool bProfileExists = false;
-   
-   myFILE* pfFile = fopen( sConfigFile, "rb" );
-   
-   if ( pfFile != NULL )
-   {
-      bProfileExists = true;
-      
-      fclose(pfFile);
-   }
-   
-   return bProfileExists;
-}
-
-
-/*! CreateProfile
- *
- */
-bool CreateProfile(
-   KMSClientProfile* const io_pProfile,
-   const char* const       i_pWorkingDirectory,
-   const char* const       i_pProfileName)
-{
-   FATAL_ASSERT( io_pProfile );
-   FATAL_ASSERT( i_pWorkingDirectory );
-   FATAL_ASSERT( i_pProfileName );
-   FATAL_ASSERT( (strlen(i_pProfileName) > 0) );
-
-#if defined(DEBUG_TRACE) && defined(METAWARE)
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, CreateProfile );
-   
-#endif
-   
-   bool bSuccess = false;
-   CAutoMutex oAutoMutex( (K_MUTEX_HANDLE)io_pProfile->m_pLock );
-
-   char sFullProfileDir[KMS_MAX_FILE_NAME];
-   BuildFullProfilePath( sFullProfileDir,
-                         i_pWorkingDirectory, 
-                         i_pProfileName ); 
-
-   bSuccess = ( K_CreateDirectory( sFullProfileDir ) == 0 );
-
-   if ( !bSuccess )
-   {
-      Log(AUDIT_CLIENT_LOAD_PROFILE_CREATE_DIRECTORY_FAILED,
-          NULL,
-          NULL,
-          NULL );
-   }
-   strncpy( g_sWorkingDirectory, i_pWorkingDirectory, KMS_MAX_PATH_LENGTH );
-
-   bSuccess = StoreConfig( io_pProfile );
-   if ( !bSuccess )
-   {
-      Log(AUDIT_CLIENT_LOAD_PROFILE_CREATE_PROFILE_CONFIG_FAILED,
-          NULL,
-          NULL,
-          NULL );
-   }
-   else
-   {
-      Log(AUDIT_CLIENT_LOAD_PROFILE_CREATE_PROFILE_CONFIG_SUCCEEDED,
-          NULL,
-          NULL,
-          NULL );
-   }
-
-   return bSuccess;
-}
-
-
-/*! StoreConfig
- * Store the configuration to persistent storage
- */
-bool StoreConfig(
-   KMSClientProfile* const i_pProfile )
-{
-   FATAL_ASSERT( i_pProfile );
-
-#if defined(DEBUG_TRACE) && defined(METAWARE)
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, StoreConfig ) ;
-#endif
-   
-   char sConfigFile[KMS_MAX_FILE_NAME];
-   BuildFullProfilePath( sConfigFile, 
-                         g_sWorkingDirectory, i_pProfile->m_wsProfileName );
-   
-   strncat( sConfigFile, PROFILE_CONFIG_FILE, KMS_MAX_FILE_NAME );
-   
-   return Profile_WriteConfigFile(i_pProfile, sConfigFile );
-}
-
-/*! StoreCluster
- * Store the cluster to persistent storage
- */
-bool StoreCluster(            
-   KMSClientProfile* const i_pProfile )
-{
-   FATAL_ASSERT( i_pProfile );
-   
-   myFILE *fp;
-   int sCount;
-   char *sp = g_sStringbuf;
-   
-   char sFullProfileDir[KMS_MAX_FILE_NAME+1];
-   BuildFullProfilePath( sFullProfileDir, 
-                         g_sWorkingDirectory, i_pProfile->m_wsProfileName );
-
-   char sClusterFile[KMS_MAX_FILE_NAME+1] = "";
-   strncpy( sClusterFile, sFullProfileDir, KMS_MAX_FILE_NAME ); 
-   sClusterFile[KMS_MAX_FILE_NAME] = '\0';
-   strncat( sClusterFile, PROFILE_CLUSTER_CONFIG_FILE, KMS_MAX_FILE_NAME );   
-   
-#if defined(DEBUG_TRACE) && defined(METAWARE)
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, StoreCluster );
-#endif
-
-
-   fp = fopen(sClusterFile, "w");
-   if (fp == NULL)
-   {
-      LogError(i_pProfile,
-               AUDIT_CLIENT_SAVE_CLUSTER_INFORMATION_OPEN_CLUSTER_FILE_FAILED,
-               NULL,
-               NULL,
-               sClusterFile );
-      return false;
-   }
-
-#ifdef K_SOLARIS_PLATFORM
-   int fd = fileno(fp);
-   (void) flock_fd(fd, F_WRLCK, &clusterfl, &cluster_mutex);
-#endif
-
-   sp += K_snprintf(sp, sizeof(g_sStringbuf), "EntitySiteID=%s\n\n", i_pProfile->m_wsEntitySiteID);
-   
-   for (int i = 0;  i < i_pProfile->m_iClusterNum; i++)
-   {
-      if ( i > 0 )
-      {
-         sp += K_snprintf(sp, sizeof(g_sStringbuf), "\n");
-      }
-      
-      if (( sCount = K_snprintf(sp, sizeof(g_sStringbuf),"<StartAppliance>\n")) < 0 )
-      {
-#ifdef K_SOLARIS_PLATFORM
-	(void) flock_fd(fd, F_UNLCK, &clusterfl, &cluster_mutex);
-#endif
-        fclose(fp);
-	return false; }
-      sp += sCount;
-
-#ifdef WIN32
-      if (( sCount = K_snprintf(sp, sizeof(g_sStringbuf), "ApplianceID=%I64d\n",
-                             i_pProfile->m_aCluster[i].m_lApplianceID)) < 0 ) 
-      { fclose(fp); return false; }
-      sp += sCount;
-      
-#else
-      if (( sCount = K_snprintf(sp, sizeof(g_sStringbuf), "ApplianceID=%lld\n",
-                             i_pProfile->m_aCluster[i].m_lApplianceID)) < 0 )
-      {
-#ifdef K_SOLARIS_PLATFORM
-	(void) flock_fd(fd, F_UNLCK, &clusterfl, &cluster_mutex);
-#endif
-        fclose(fp);
-	return false; }
-      sp += sCount;
-#endif
-
-      if (( sCount = K_snprintf(sp, sizeof(g_sStringbuf), "Enabled=%d\n",
-                             i_pProfile->m_aCluster[i].m_iEnabled)) < 0 )
-	{
-#ifdef K_SOLARIS_PLATFORM
-	(void) flock_fd(fd, F_UNLCK, &clusterfl, &cluster_mutex);
-#endif
-        fclose(fp);
-	return false; }
-      sp += sCount;
-      
-      if (( sCount = K_snprintf(sp, sizeof(g_sStringbuf), "Responding=%d\n",
-                             i_pProfile->m_aCluster[i].m_iResponding)) < 0 )
-	{
-#ifdef K_SOLARIS_PLATFORM
-	(void) flock_fd(fd, F_UNLCK, &clusterfl, &cluster_mutex);
-#endif
-        fclose(fp);
-	return false; }
-      sp += sCount;
-      
-      if (( sCount = K_snprintf(sp, sizeof(g_sStringbuf), "Load=%lld\n",
-                             i_pProfile->m_aCluster[i].m_lLoad)) < 0 )
-	{
-#ifdef K_SOLARIS_PLATFORM
-	(void) flock_fd(fd, F_UNLCK, &clusterfl, &cluster_mutex);
-#endif
-        fclose(fp);
-	return false; }
-      sp += sCount;
-      
-      if (( sCount = K_snprintf(sp, sizeof(g_sStringbuf), "ApplianceAlias=%s\n",
-                             i_pProfile->m_aCluster[i].m_wsApplianceAlias)) < 0 )
-	{
-#ifdef K_SOLARIS_PLATFORM
-	(void) flock_fd(fd, F_UNLCK, &clusterfl, &cluster_mutex);
-#endif
-        fclose(fp);
-	return false; }
-      sp += sCount;
-      
-      if (( sCount = K_snprintf(sp, sizeof(g_sStringbuf), "ApplianceNetworkAddress=%s\n",
-                             i_pProfile->m_aCluster[i].m_wsApplianceNetworkAddress)) < 0 )
-	{
-#ifdef K_SOLARIS_PLATFORM
-	(void) flock_fd(fd, F_UNLCK, &clusterfl, &cluster_mutex);
-#endif
-        fclose(fp);
-	return false; }
-      sp += sCount;
-      
-      if (( sCount = K_snprintf(sp, sizeof(g_sStringbuf), "ApplianceSiteID=%s\n",
-                             i_pProfile->m_aCluster[i].m_wsApplianceSiteID)) < 0 )
-	{
-#ifdef K_SOLARIS_PLATFORM
-	(void) flock_fd(fd, F_UNLCK, &clusterfl, &cluster_mutex);
-#endif
-        fclose(fp);
-	return false; }
-      sp += sCount;
-      
-      if (( sCount = K_snprintf(sp, sizeof(g_sStringbuf), "KMAVersion=%s\n",
-                             i_pProfile->m_aCluster[i].m_sKMAVersion)) < 0 )
-	{
-#ifdef K_SOLARIS_PLATFORM
-	(void) flock_fd(fd, F_UNLCK, &clusterfl, &cluster_mutex);
-#endif
-        fclose(fp);
-	return false; }
-      sp += sCount;
-      
-      if (( sCount = K_snprintf(sp, sizeof(g_sStringbuf), "KMALocked=%d\n",
-                             i_pProfile->m_aCluster[i].m_iKMALocked)) < 0 )
-	{
-#ifdef K_SOLARIS_PLATFORM
-	(void) flock_fd(fd, F_UNLCK, &clusterfl, &cluster_mutex);
-#endif
-        fclose(fp);
-	return false; }
-      sp += sCount;
-
-      if (( sCount = K_snprintf(sp, sizeof(g_sStringbuf), "<EndAppliance>\n")) < 0 )
-	{
-#ifdef K_SOLARIS_PLATFORM
-	(void) flock_fd(fd, F_UNLCK, &clusterfl, &cluster_mutex);
-#endif
-        fclose(fp);
-	return false; }
-      sp += sCount;
-   }
-
-   fputs(g_sStringbuf, fp);
-#ifdef K_SOLARIS_PLATFORM
-	(void) flock_fd(fd, F_UNLCK, &clusterfl, &cluster_mutex);
-#endif
-   fclose(fp);
-   Log(AUDIT_CLIENT_SAVE_CLUSTER_INFORMATION_SUCCEEDED,
-          NULL,
-          NULL,
-          NULL );
-    
-   return true;
-}
-
-/*! GetConfig
- * get the configuration file from persistent storage
- */
-bool GetConfig(
-   KMSClientProfile* const io_pProfile )
-{
-   FATAL_ASSERT( io_pProfile );
-   char sFullProfileDir[KMS_MAX_FILE_NAME+1];
-   
-   BuildFullProfilePath( sFullProfileDir, 
-                         g_sWorkingDirectory, 
-                         io_pProfile->m_wsProfileName ); 
-
-   char sConfigFile[KMS_MAX_FILE_NAME+1];
-   
-   strncpy( sConfigFile, sFullProfileDir, KMS_MAX_FILE_NAME );
-   sConfigFile[KMS_MAX_FILE_NAME] = '\0';
-   strncat( sConfigFile, PROFILE_CONFIG_FILE, KMS_MAX_FILE_NAME );
-
-   return Profile_ReadConfigFile( io_pProfile, sConfigFile );
-}
-
-/** GetCluster
- * get the cluster information from persistent storage
- */
-bool GetCluster(
-   KMSClientProfile* const io_pProfile,
-   int&                   o_bClusterInformationFound )
-
-{
-   FATAL_ASSERT( io_pProfile );
-
-   const int iMaxLineSize = 1024;
-
-   myFILE *fp;
-   char acBuffer[iMaxLineSize+1];
-   char sFullProfileDir[KMS_MAX_FILE_NAME+1];
-
-   BuildFullProfilePath( sFullProfileDir, 
-                         g_sWorkingDirectory, 
-                         io_pProfile->m_wsProfileName );
-
-   char sClusterFile[KMS_MAX_FILE_NAME+1];
-
-#if defined(DEBUG_TRACE) && defined(METAWARE)
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, GetCluster );
-#endif
-
-   strncpy( sClusterFile, sFullProfileDir, KMS_MAX_FILE_NAME );
-   sClusterFile[KMS_MAX_FILE_NAME] = '\0';
-   strncat( sClusterFile, PROFILE_CLUSTER_CONFIG_FILE, KMS_MAX_FILE_NAME );
-   
-   fp = fopen( sClusterFile, "r" );
-
-   if ( fp == NULL )
-   {
-#ifdef METAWARE
-      // Assume file doesn't exist.  This isn't an error (no support for
-      // errno in metaware).
-      o_bClusterInformationFound = 0;
-      return true;
-#else
-      if ( errno == ENOENT )
-      {
-         // File doesn't exist.  This isn't an error.
-         o_bClusterInformationFound = 0;
-         return true;
-      }
-
-      LogError(io_pProfile,
-               AUDIT_CLIENT_LOAD_CLUSTER_INFORMATION_OPEN_CLUSTER_FILE_FAILED,
-               NULL,
-               NULL,
-               sClusterFile );
-      return false;
-#endif
-   }
-
-#ifdef K_SOLARIS_PLATFORM
-   int fd = fileno(fp);
-   (void) flock_fd(fd, F_WRLCK, &clusterfl, &cluster_mutex);
-#endif
-
-   o_bClusterInformationFound = 1;
-   int i;
-   // KMAVersion is new to Cluster config with 2.1 KMS and will not exist
-   // in persisted cluster configs from earlier agents
-   for ( i = 0; i < KMS_MAX_CLUSTER_NUM; i++ )
-   {
-        io_pProfile->m_aCluster[i].m_sKMAVersion[0] = '\0';
-   }
-    
-   int iClusterNum = 0;
-   // read file one line by one line
-   while(1)
-   {
-      int i;
-      char *pName, *pValue;
-
-      memset(acBuffer, 0, iMaxLineSize+1);
-
-      // get info from the file
-      if(fgets(acBuffer, iMaxLineSize+1, fp) == NULL)
-         break;
-
-      if(strlen(acBuffer) < 3)
-         continue;
-
-      if(acBuffer[0] == '#' || 
-         acBuffer[0] == ';' || 
-         acBuffer[0] == '[')  // jump comments
-         continue;
-
-      pName = acBuffer; pValue = NULL;
-      for(i = 0; acBuffer[i] != '\0'; i++)
-      {
-         if(acBuffer[i] == '=')
-            pValue = acBuffer + i + 1;
-
-         if(acBuffer[i] == '=' || 
-            acBuffer[i] == '\r' || 
-            acBuffer[i] == '\n')
-            acBuffer[i] = '\0';
-      }
-
-      if(strcmp(pName, "<StartAppliance>") == 0)
-      {
-         continue;
-      }
-      if(strcmp(pName, "<EndAppliance>") == 0)
-      {
-         iClusterNum++;
-      }
-
-      if(pValue == NULL)
-      {
-         if(strcmp(pName,"<StartAppliance>") == 0)
-            continue;
-
-         if(strcmp(pName,"<EndAppliance>") == 0)
-            continue;
-            
-#ifdef K_SOLARIS_PLATFORM
-	(void) flock_fd(fd, F_UNLCK, &clusterfl, &cluster_mutex);
-#endif
-         fclose(fp);
-            
-         LogError(io_pProfile,
-                  AUDIT_CLIENT_LOAD_CLUSTER_INFORMATION_INVALID_CLUSTER_FILE_FORMAT,
-                  NULL,
-                  NULL,
-                  sClusterFile );
-         return false;
-      }
-        
-      if(strcmp(pName, "EntitySiteID") == 0)
-      {
-         utf8cstr wsValue = pValue;
-         strncpy(io_pProfile->m_wsEntitySiteID, wsValue, KMS_MAX_ENTITY_SITE_ID);
-         io_pProfile->m_wsEntitySiteID[KMS_MAX_ENTITY_SITE_ID] = 0;
-      }
-        
-        
-      if(strcmp(pName, "ApplianceID") == 0)
-      {
-#ifdef WIN32
-         sscanf(pValue, "%lld",
-                &(io_pProfile->m_aCluster[iClusterNum].m_lApplianceID));
-#else
-         sscanf(pValue, "%lld", 
-                &(io_pProfile->m_aCluster[iClusterNum].m_lApplianceID));
-#endif
-      }
-      if(strcmp(pName, "Enabled") == 0)
-      {
-         sscanf(pValue, "%d", 
-                &(io_pProfile->m_aCluster[iClusterNum].m_iEnabled));
-      }
-
-      // assume it is responding by default  
-      io_pProfile->m_aCluster[iClusterNum].
-         m_iResponding = TRUE; 
-        
-      if(strcmp(pName, "Load") == 0)
-      {
-         sscanf(pValue, "%lld", 
-                &(io_pProfile->m_aCluster[iClusterNum].m_lLoad));
-      }
-      if(strcmp(pName, "ApplianceAlias") == 0)
-      {
-         utf8cstr wsValue = pValue;
-         strncpy(io_pProfile->m_aCluster[iClusterNum].m_wsApplianceAlias, 
-                 wsValue,
-                 KMS_MAX_ENTITY_ID);
-         io_pProfile->m_aCluster[iClusterNum].
-            m_wsApplianceAlias[KMS_MAX_ENTITY_ID] = 0;
-            
-      }
-      if(strcmp(pName, "ApplianceNetworkAddress") == 0)
-      {
-         utf8cstr wsValue = pValue;
-         strncpy(io_pProfile->m_aCluster[iClusterNum].
-                 m_wsApplianceNetworkAddress, 
-                 wsValue,
-                 KMS_MAX_NETWORK_ADDRESS);
-         io_pProfile->m_aCluster[iClusterNum].
-            m_wsApplianceNetworkAddress[KMS_MAX_NETWORK_ADDRESS] = 0;
-      }
-      if(strcmp(pName, "ApplianceSiteID") == 0)
-      {
-         utf8cstr wsValue = pValue;
-         strncpy(io_pProfile->m_aCluster[iClusterNum].m_wsApplianceSiteID, 
-                 wsValue,
-                 KMS_MAX_ENTITY_SITE_ID);
-         io_pProfile->m_aCluster[iClusterNum].
-            m_wsApplianceSiteID[KMS_MAX_ENTITY_SITE_ID] = 0;
-      }
-      if(strcmp(pName, "KMAVersion") == 0)
-      {
-         utf8cstr wsValue = pValue;
-         strncpy(io_pProfile->m_aCluster[iClusterNum].m_sKMAVersion, 
-                 wsValue,
-                 KMS_MAX_VERSION_LENGTH);
-         io_pProfile->m_aCluster[iClusterNum].
-            m_sKMAVersion[KMS_MAX_VERSION_LENGTH] = '\0';
-      }
-      if(strcmp(pName, "KMALocked") == 0)
-      {
-         sscanf(pValue, "%d",
-            &(io_pProfile->m_aCluster[iClusterNum].m_iKMALocked));
-      }
-   }
-   io_pProfile->m_iClusterNum = iClusterNum;
-    
-#ifdef K_SOLARIS_PLATFORM
-	(void) flock_fd(fd, F_UNLCK, &clusterfl, &cluster_mutex);
-#endif
-   fclose(fp);
-    
-   return true;
-}
-
-/*! DeleteCluster
- *
- */
-bool DeleteCluster( KMSClientProfile* const io_pProfile )                   
-{
-   FATAL_ASSERT( io_pProfile );
-   FATAL_ASSERT( io_pProfile->m_wsProfileName );
-
-#if defined(DEBUG_TRACE) && defined(METAWARE)
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, DeleteCluster );
-#endif
-   
-   bool bSuccess = true;
-   char sFullProfileDir[KMS_MAX_FILE_NAME]; 
-   char sClusterInformationFile[KMS_MAX_FILE_NAME];
-    
-   BuildFullProfilePathWithName( sFullProfileDir, g_sWorkingDirectory, 
-                                 io_pProfile->m_wsProfileName );
-    
-   strcpy( sClusterInformationFile, sFullProfileDir );
-   strncat( sClusterInformationFile, PROFILE_CLUSTER_CONFIG_FILE, 
-            KMS_MAX_FILE_NAME );
-    
-   myFILE* pfFile = fopen( sClusterInformationFile, "rb" );
-    
-   if ( pfFile != NULL )
-   {
-      fclose(pfFile);
-      if ( my_unlink(sClusterInformationFile) )
-         bSuccess = false;
-   }
-    
-   return true;
-}
-
-/*! StoreCACertificate
- *  Store CA Certificate to a persistent storage file
- *  @param i_pProfile
- *  @param i_pCACertificate
- * 
- *  @returns     boolean success or failure
- */
-bool StoreCACertificate(
-   KMSClientProfile* const i_pProfile,
-   CCertificate* const     i_pCACertificate )
-{
-   FATAL_ASSERT( i_pProfile );
-   FATAL_ASSERT( i_pCACertificate );
-
-   char sCACertificateFile[KMS_MAX_FILE_NAME];
-
-#if defined(DEBUG_TRACE) && defined(METAWARE)
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, StoreCACertificate );
-#endif
-
-   BuildFullProfilePath( sCACertificateFile, 
-                         g_sWorkingDirectory, 
-                         i_pProfile->m_wsProfileName );
-
-   strncat( sCACertificateFile, CA_CERTIFICATE_FILE, KMS_MAX_FILE_NAME );
-
-   // OVERLOADED Save method - 2 parameters means save to a file
-   if ( !( i_pCACertificate->Save(sCACertificateFile, PKI_FORMAT)) )
-   {
-      LogError(i_pProfile,
-               AUDIT_CLIENT_LOAD_PROFILE_SAVE_CA_CERTIFICATE_FAILED,
-               NULL,
-               NULL,
-               sCACertificateFile );
-      return false;
-   }
-   return true;
-
-}
-
-/*! StoreAgentPKI
- *  Store Private Keys a persistent storage file
- *
- */
-#ifndef K_SOLARIS_PLATFORM
-static
-#endif
-bool StoreAgentPKI(
-   KMSClientProfile* const i_pProfile,
-   CCertificate* const     i_pAgentCertificate,
-   CPrivateKey* const      i_pAgentPrivateKey,
-   const char* const       i_sHexHashedPassphrase )
-{
-   FATAL_ASSERT( i_pProfile );
-   FATAL_ASSERT( i_pAgentCertificate );
-
-   bool bSuccess;
-   char sClientKeyFile[KMS_MAX_FILE_NAME];
-
-#if defined(DEBUG_TRACE) && defined(METAWARE)
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, StoreAgentPKI ) ;
-#endif
-
-   BuildFullProfilePath( sClientKeyFile, 
-         g_sWorkingDirectory,
-         i_pProfile->m_wsProfileName );
-
-   strncat( sClientKeyFile, 
-#ifdef KMSUSERPKCS12
-   	CLIENT_PK12_FILE,
-#else
-            CLIENT_KEY_FILE,
-#endif
-            KMS_MAX_FILE_NAME );
-
-   CPKI oPKI;
-
-   // save Certificate and Private Key to file named sClientKeyFile(CLIENT_KEY_FILE)
-   bSuccess = oPKI.ExportCertAndKeyToFile(
-      i_pAgentCertificate,
-      i_pAgentPrivateKey,
-      sClientKeyFile,
-      i_sHexHashedPassphrase,
-#ifdef KMSUSERPKCS12
-      PKCS12_FORMAT
-#else
-      PKI_FORMAT
-#endif
-      );
-
-   if ( !bSuccess )
-   {
-      LogError(i_pProfile,
-               AUDIT_CLIENT_LOAD_PROFILE_EXPORT_CERTIFICATE_AND_KEY_FAILED,
-               NULL,
-               NULL,
-               sClientKeyFile );
-   }
-   return bSuccess;
-}
-
-/*! StorePKIcerts
- * Store PKI objects to persistent storage files
- */
-bool StorePKIcerts(
-   KMSClientProfile* const     io_pProfile,
-   CCertificate* const         i_pCACertificate,
-   CCertificate* const         i_pAgentCertificate,
-   CPrivateKey* const          i_pAgentPrivateKey,
-   const char* const           i_sHexHashedPassphrase )
-{
-   FATAL_ASSERT( io_pProfile );
-   FATAL_ASSERT( i_pAgentCertificate );
-
-   bool bSuccess = false;
-
-   bSuccess = StoreCACertificate( io_pProfile, i_pCACertificate );
-
-   if ( bSuccess )
-   {
-      bSuccess = StoreAgentPKI( io_pProfile, 
-                                i_pAgentCertificate, 
-                                i_pAgentPrivateKey, 
-                                i_sHexHashedPassphrase );
-   }
-
-   if ( bSuccess )
-   {
-       io_pProfile->m_iEnrolled = TRUE;
-   }
-
-   return bSuccess;
-}
-
-#ifdef KMSUSERPKCS12
-
-/*
- * Test to see if the PKCS12 file exists.
- */
-bool ClientKeyP12Exists(char *profileName)
-{
-	bool bSuccess = true;
-	char sFullProfileDir[KMS_MAX_FILE_NAME+1];
-	char sAgentPK12File[KMS_MAX_FILE_NAME+1];
-	struct stat statp;
-
-	BuildFullProfilePath(sFullProfileDir,
-	    g_sWorkingDirectory, profileName);
-
-	strncpy( sAgentPK12File, sFullProfileDir, KMS_MAX_FILE_NAME );
-	strncat( sAgentPK12File, CLIENT_PK12_FILE, KMS_MAX_FILE_NAME );
-
-	bSuccess = false;
-	if (stat(sAgentPK12File, &statp) == -1)
-		bSuccess = false;
-	else if (statp.st_size > 0)
-		bSuccess = true;
-
-	return (bSuccess);
-}
-
-/*
- * Load the cert and the private key from the PKCS12 file.
- */
-bool GetPKCS12CertAndKey(
-	KMSClientProfile* const io_pProfile,
-	utf8char	*i_pPassphrase,
-	CCertificate	*i_pEntityCert,
-	CPrivateKey	*i_pEntityPrivateKey)
-{
-	bool bSuccess = true;
-	char sFullProfileDir[KMS_MAX_FILE_NAME+1];
-	char sAgentPK12File[KMS_MAX_FILE_NAME+1];
-
-	BuildFullProfilePath(sFullProfileDir,
-	    g_sWorkingDirectory, io_pProfile->m_wsProfileName );
-
-	strncpy( sAgentPK12File, sFullProfileDir, KMS_MAX_FILE_NAME );
-	strncat( sAgentPK12File, CLIENT_PK12_FILE, KMS_MAX_FILE_NAME );
-
-	bSuccess = i_pEntityCert->LoadPKCS12CertAndKey(
-	    sAgentPK12File, FILE_FORMAT_PKCS12,
-	    i_pEntityPrivateKey, i_pPassphrase);
-
-	if (!bSuccess)
-		io_pProfile->m_iLastErrorCode = KMS_AGENT_LOCAL_AUTH_FAILURE;
-
-	return (bSuccess);
-}
-
-bool StoreTempAgentPKI(
-   KMSClientProfile* const i_pProfile,
-   CCertificate* i_pAgentCertificate,
-   CPrivateKey* i_pAgentPrivateKey)
-{
-   FATAL_ASSERT( i_pProfile );
-   FATAL_ASSERT( i_pAgentCertificate );
-
-   bool bSuccess;
-   char sClientKeyFile[KMS_MAX_FILE_NAME];
-
-   BuildFullProfilePath( sClientKeyFile,
-                         g_sWorkingDirectory,
-                         i_pProfile->m_wsProfileName );
-
-   strncat(sClientKeyFile,
-           CLIENT_KEY_FILE,
-           KMS_MAX_FILE_NAME );
-
-   CPKI oPKI;
-
-   // save Certificate and Private Key to file named sClientKeyFile(CLIENT_KEY_FILE)
-   bSuccess = oPKI.ExportCertAndKeyToFile(
-      i_pAgentCertificate,
-      i_pAgentPrivateKey,
-      sClientKeyFile,
-      NULL,
-      PKI_FORMAT);
-
-   if ( !bSuccess )
-   {
-      LogError(i_pProfile,
-               AUDIT_CLIENT_LOAD_PROFILE_EXPORT_CERTIFICATE_AND_KEY_FAILED,
-               NULL,
-               NULL,
-               sClientKeyFile );
-   }
-   return bSuccess;
-}
-
-void CleanupPrivateKeyFile(KMSClientProfile* const io_pProfile)
-{
-   char sClientKeyFile[KMS_MAX_FILE_NAME];
-
-   BuildFullProfilePath( sClientKeyFile,
-                         g_sWorkingDirectory,
-                         io_pProfile->m_wsProfileName );
-
-   strncat(sClientKeyFile,
-           CLIENT_KEY_FILE,
-           KMS_MAX_FILE_NAME );
-
-   (void) unlink(sClientKeyFile);
-   return;
-}
-#endif /* PKCS12 */
-
-/** 
- *  GetPKIcerts verifies that CA and Agent certificates are available in
- *  persistent storage and updates profile with an indicator
- */
-bool GetPKIcerts(
-   KMSClientProfile* const     io_pProfile )
-{
-   FATAL_ASSERT( io_pProfile );
-
-   bool bSuccess = true;
-   char sFullProfileDir[KMS_MAX_FILE_NAME+1];
-   char sCAcertFile[KMS_MAX_FILE_NAME+1];
-   char sAgentCertFile[KMS_MAX_FILE_NAME+1];
-#ifndef K_SOLARIS_PLATFORM
-   myFILE* pfFile;
-#endif
-
-#if defined(DEBUG_TRACE) && defined(METAWARE)
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, GetPKIcerts );
-#endif
-
-  io_pProfile->m_iEnrolled = FALSE;
-
-   BuildFullProfilePath( sFullProfileDir,
-       g_sWorkingDirectory, io_pProfile->m_wsProfileName ); 
- 
-   strncpy( sCAcertFile, sFullProfileDir, KMS_MAX_FILE_NAME );
-   sCAcertFile[KMS_MAX_FILE_NAME] = '\0';
-   strncat( sCAcertFile, CA_CERTIFICATE_FILE, KMS_MAX_FILE_NAME );
-
-#ifdef K_SOLARIS_PLATFORM
-	/*
-	 * stat(2) is preferred over fopen(3C)
-	 * fopen for checking if a file is present.
-	 */
-	struct stat statp;
-	if (stat(sCAcertFile, &statp)) {
-		LogError(io_pProfile,
-			AUDIT_CLIENT_LOAD_PROFILE_FAILED,
-			NULL,
-			NULL,
-			"Test for presence of CA Certificate failed" );
-		return false;
-	}
-
-#else
-   pfFile = fopen( sCAcertFile, "rb" );
-   
-   if ( pfFile != NULL )
-   {      
-      fclose(pfFile);
-   }
-   else
-   {
-      LogError(io_pProfile,
-               AUDIT_CLIENT_LOAD_PROFILE_FAILED,
-               NULL,
-               NULL,
-               "Test for presence of CA Certificate failed" );
-      return false;
-   }
-#endif
-
-   // open the file containing client certificate and private key
-   // checking if the file exists.
-   strncpy( sAgentCertFile, sFullProfileDir, KMS_MAX_FILE_NAME );
-   sAgentCertFile[KMS_MAX_FILE_NAME] = '\0';
-   strncat( sAgentCertFile, CLIENT_KEY_FILE, KMS_MAX_FILE_NAME ); 
-
-#ifdef K_SOLARIS_PLATFORM
-	/*
-	 * stat(2) is safer than "fopen" for checking if a file is
-	 * present or not.
-	 */
-	if (stat(sAgentCertFile, &statp)) {
-		LogError(io_pProfile,
-			AUDIT_CLIENT_LOAD_PROFILE_FAILED,
-			NULL,
-			NULL,
-			"Test for presence of Agent Certificate failed" );
-		return false;
-	}
-#else
-
-   pfFile = fopen( sAgentCertFile, "rb" );
-   
-   if ( pfFile != NULL )
-   {      
-      fclose(pfFile);
-   }
-   else
-   {
-      LogError(io_pProfile,
-               AUDIT_CLIENT_LOAD_PROFILE_FAILED,
-               NULL,
-               NULL,
-               "Test for presence of Agent Certificate failed" );
-      return false;
-   }
-#endif
-
-   io_pProfile->m_iEnrolled = TRUE;
-
-   return bSuccess;
-}
-
-/**
- * DeleteStorageProfile
- */
-bool DeleteStorageProfile( 
-   const char* const i_pName)
-{
-   FATAL_ASSERT( i_pName );
-
-#if defined(DEBUG_TRACE) && defined(METAWARE)
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, DeleteStorageProfile );
-#endif
-
-   bool bSuccess = true;
-   char sFullProfileDir[KMS_MAX_FILE_NAME+1]; 
-   char sConfigFile[KMS_MAX_FILE_NAME+1]; 
-   char sClusterInformationFile[KMS_MAX_FILE_NAME+1];
-   char sCACertificateFile[KMS_MAX_FILE_NAME+1];
-   char sClientKeyFile[KMS_MAX_FILE_NAME+1];
-#ifdef KMSUSERPKCS12
-   char sClientP12File[KMS_MAX_FILE_NAME+1];
-#endif
-
-   BuildFullProfilePathWithName( sFullProfileDir, 
-                                 g_sWorkingDirectory, i_pName );
-   strncpy( sConfigFile, sFullProfileDir, KMS_MAX_FILE_NAME );  
-   sConfigFile[KMS_MAX_FILE_NAME] = '\0';
-   strncat( sConfigFile, PROFILE_CONFIG_FILE, KMS_MAX_FILE_NAME );
-
-   strncpy( sClusterInformationFile, sFullProfileDir, KMS_MAX_FILE_NAME );
-   sClusterInformationFile[KMS_MAX_FILE_NAME] = '\0';
-   strncat( sClusterInformationFile, 
-            PROFILE_CLUSTER_CONFIG_FILE, 
-            KMS_MAX_FILE_NAME );
-
-   strncpy( sCACertificateFile, sFullProfileDir, KMS_MAX_FILE_NAME ); 
-   sCACertificateFile[KMS_MAX_FILE_NAME] = '\0';
-   strncat( sCACertificateFile, CA_CERTIFICATE_FILE, KMS_MAX_FILE_NAME );
-
-   strncpy( sClientKeyFile, sFullProfileDir, KMS_MAX_FILE_NAME ); 
-   sClientKeyFile[KMS_MAX_FILE_NAME] = '\0';
-   strncat( sClientKeyFile, CLIENT_KEY_FILE, KMS_MAX_FILE_NAME );
-
-   myFILE* pfFile = fopen( sConfigFile, "rb" );
-
-   if ( pfFile != NULL )
-   {
-      fclose(pfFile);
-      if ( my_unlink(sConfigFile) )
-         bSuccess = false;
-   }
-
-   pfFile = fopen( sClusterInformationFile, "rb" );
-
-   if ( pfFile != NULL )
-   {
-      fclose(pfFile);
-      if ( my_unlink(sClusterInformationFile) )
-         bSuccess = false;
-   }
-
-   pfFile = fopen( sCACertificateFile, "rb" );
-
-   if ( pfFile != NULL )
-   {
-      fclose(pfFile);
-      if ( my_unlink(sCACertificateFile) )
-         bSuccess = false;
-   }
-
-   pfFile = fopen( sClientKeyFile, "rb" );
-
-   if ( pfFile != NULL )
-   {
-      fclose(pfFile);
-      if ( my_unlink(sClientKeyFile) )
-         bSuccess = false;
-   }
-
-#ifdef KMSUSERPKCS12
-   strncpy( sClientP12File, sFullProfileDir, KMS_MAX_FILE_NAME );
-   sClientP12File[KMS_MAX_FILE_NAME] = '\0';
-   strncat( sClientP12File, CLIENT_KEY_FILE, KMS_MAX_FILE_NAME );
-
-   /* Just unlink, no need to open/close first. */
-   if ( my_unlink(sClientP12File) )
-         bSuccess = false;
-#endif
-
-   pfFile = fopen( sFullProfileDir, "rb" );
-
-   if ( pfFile != NULL )
-   {
-      fclose(pfFile);
-      if ( my_rmdir(sFullProfileDir) )
-         bSuccess = false;
-   }
-
-   return bSuccess;
-}
-
-
-
-
-/**
- * K_soap_ssl_client_context
- * Parse client context and send to soap, either using a soap call
- *  for openSSL or user implemented call for Treck SSL
- * 
- * @param i_pProfile     - pointer to KMSClientProfile
- * @param io_pSoap       - pointer to soap structure
- * @param i_iFlags       - input flags (CLIENT or SERVER auth)
- *
- * @returns 0=success, non-zero=fail
- */
-int K_soap_ssl_client_context
-(  KMSClientProfile* const   i_pProfile,  // input KMSClientProfile
-   struct soap *             io_pSoap,    // i/o soap profile
-   unsigned short            i_iFlags )   // input flags
-{
-   FATAL_ASSERT( i_pProfile );
-   FATAL_ASSERT( io_pSoap );
-
-#if defined(DEBUG_TRACE) && defined(METAWARE)
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, K_soap_ssl_client_context ) ;
-#endif
-
-   
-   char sCACertificateFile[KMS_MAX_FILE_NAME];
-   char sClientKeyFile[KMS_MAX_FILE_NAME];
-
-   
-   BuildFullProfilePath( sCACertificateFile,            // out
-                         g_sWorkingDirectory,           // out
-                         i_pProfile->m_wsProfileName ); // in
-   
-   strncat( sCACertificateFile,   // path
-            CA_CERTIFICATE_FILE,  // name
-            KMS_MAX_FILE_NAME );
-
-
-   switch ( i_iFlags )
-   {
-      case SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION:
-      {
-         BuildFullProfilePath( sClientKeyFile, 
-                               g_sWorkingDirectory, 
-                               i_pProfile->m_wsProfileName );
-         
-         strncat( sClientKeyFile,      // path
-                  CLIENT_KEY_FILE,     // name
-                  KMS_MAX_FILE_NAME );
-
-         // this sends the following to the SSL Layer
-#ifdef METAWARE 
-         return K_ssl_client_context(
-            io_pSoap,                           // i/o
-            i_iFlags,                           // flags
-            sClientKeyFile,                     // keyfile - client cert and private key
-            i_pProfile->m_sHexHashedPassphrase, // password 
-            sCACertificateFile,                 // cafile - CA certificate
-            NULL,                               // capath
-            NULL );                             // randfile
-#else
-         return soap_ssl_client_context(
-            io_pSoap,                           // i/o
-#ifndef SOAP_SSL_SKIP_HOST_CHECK
-            i_iFlags,                           // flags
-#else
-            i_iFlags | SOAP_SSL_SKIP_HOST_CHECK, // flags
-#endif
-            sClientKeyFile,                     // keyfile - client cert and private key
-            i_pProfile->m_sHexHashedPassphrase, // password
-            sCACertificateFile,                 // cafile - CA certificate
-            NULL,                               // capath
-            NULL );                             // randfile
-#endif
-      }
-      case SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION:
-      {
-#ifdef METAWARE
-         return K_ssl_client_context(
-            io_pSoap,                           // i/o
-            i_iFlags,                           // flags
-            NULL,                               // keyfile
-            NULL,                               // password
-            sCACertificateFile,                 // cafile
-            NULL,                               // capath
-            NULL );                             // randfile
-#else
-         return soap_ssl_client_context(
-            io_pSoap,                           // i/o
-#ifndef SOAP_SSL_SKIP_HOST_CHECK
-            i_iFlags,                           // flags
-#else
-            i_iFlags | SOAP_SSL_SKIP_HOST_CHECK, // flags
-#endif
-            NULL,                               // keyfile
-            NULL,                               // password
-            sCACertificateFile,                 // cafile
-            NULL,                               // capath
-            NULL );                             // randfile
-#endif         
-      }
-      default:
-         // unauthenticated sessions are not supported
-         return 1;
-   }
-}
--- a/usr/src/lib/libkmsagent/common/KMSAgentStorage.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,175 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file    KMSAgentStorage.h
- *
- *  This header provides an interface for the agent library to persist profile information, including
- *  <ul>
- *  <li>Profile Configuration properties
- *  <li>Profile KMS Cluster information
- *  <li>PKI Certificates and Agent Private Key
- *  </ul>
- *  With the storage management of PKI elements is an interface for initialization of the gSoap SSL 
- *  client context.
- *  <p>
- *  The reference implementation of this interface maps these storage elements into files.
- *  Other implmentations may need to persist these elements into other types of non-volatile
- *  storage.
- */
-
-#ifndef KMSAGENT_STORAGE_H
-#define KMSAGENT_STORAGE_H
-
-/**
- *  checks if a profile exists in the working directory with the name specified in the io_pProfile struct
- */
-extern "C" bool ProfileExists(
-                const char* const i_pWorkingDirectory,
-                const char* const i_pProfileName);
-
-/**
- *   creates a Storage object in the working directory with the specified name.  
- *   The storage object's contents are empty.
- */
-bool CreateProfile(
-   KMSClientProfile* const io_pProfile,
-   const char* const i_pWorkingDirectory,
-   const char* const i_pProfileName);
-
-/**
- *  saves the Config portion of the profile into persistent storage
- */
-bool StoreConfig(
-            KMSClientProfile* const i_pProfile );
-
-/**
- *  saves the Cluster information from the profile into persistent storage
- */
-bool StoreCluster(            
-            KMSClientProfile* const i_pProfile );
-
-/**
- *  retrieve the Config information from persistent storage into the profile
- */
-bool GetConfig(
-        KMSClientProfile* const io_pProfile );
-
-
-/**
- *  populate cluster array with names from storage.  If the profile does
- *  does not contain cluster information then sets o_bClusterInformationFound
- *  to true.
- */
-bool GetCluster(
-   KMSClientProfile* const io_pProfile,
-   int&                   o_bClusterInformationFound );
-
-/**
- *   delete the cluster information from persistent storage
- */
-bool DeleteCluster( KMSClientProfile* const io_pProfile );
-
-/**
- *  saves the CA certificate into persistent storage
- */
-bool StoreCACertificate(
-   KMSClientProfile* const     i_pProfile,
-   CCertificate* const         i_pCACertificate );
-
-
-/**
- *  save the CA certificate, agent certificate and agent
- *  private key material to persistent storage
- *  @param i_sHexHashedPassphrase this is an optional passphrase
- *  that is required when the caller wishes the private key to be
- *  encrypted.  The private key will then be encrypted using this
- *  pass phrase.
- */
-bool StorePKIcerts(
-        KMSClientProfile* const     io_pProfile,
-        CCertificate* const         i_pCACertificate,
-        CCertificate* const         i_pAgentCertificate,
-        CPrivateKey* const          i_pAgentPrivateKey,
-        const char* const           i_sHexHashedPassphrase );
-
-/**
- *  retrieve the CA certificate, agent certificate and agent
- *  private key material from persistent storage and reference
- *  from the profile
- */
-bool GetPKIcerts(
-        KMSClientProfile* const     io_pProfile );
-
-#ifdef KMSUSERPKCS12
-bool StoreAgentPKI(
-	KMSClientProfile* const i_pProfile,
-	CCertificate* const     i_pAgentCertificate,
-	CPrivateKey* const      i_pAgentPrivateKey,
-	const char* const       i_sHexHashedPassphrase);
-
-bool GetPKCS12CertAndKey(
-	KMSClientProfile* const io_pProfile,
-	utf8char        *i_pPassphrase,
-	CCertificate    *i_pEntityCert,
-	CPrivateKey     *i_pEntityPrivateKey);
-
-bool StoreTempAgentPKI(
-	KMSClientProfile* const io_pProfile,
-	CCertificate    *i_pEntityCert,
-	CPrivateKey     *i_pEntityPrivateKey);
-
-bool ClientKeyP12Exists(char *profileName);
-
-void CleanupPrivateKeyFile(KMSClientProfile* const io_pProfile);
-#endif
-
-/**
- *  Provides a wrapper to gSoap's soap_ssl_client_context()
- *  that hides how Certificates and Private key material are presented to the underlying SSL
- *  layer.
- *  @param  i_pProfile The profile must contain a reference to the CA certificate and for 
- *                  SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION the Agent's certificate and private key material.
- *  @param  io_pSoap  gSoap runtime
- *  @param  i_iFlags  These are the gSoap authentication flags, either 
- *                  SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION or SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION.  
- *                  The private key password argument is only applicable
- *                  for SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION.
- *
- *  @return value from gSoap's soap_ssl_client_context()
- */
-int K_soap_ssl_client_context(
-        KMSClientProfile* const   i_pProfile,
-        struct soap *             io_pSoap, 
-        unsigned short            i_iFlags ); 
-
-/**
- *  deletes the persistent storage object specified by name and its contents
- */
-bool DeleteStorageProfile( 
-                const char* const i_pName);
-
-#endif // KMSAGENT_STORAGE_H
-
--- a/usr/src/lib/libkmsagent/common/KMSAgentStringUtilities.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,235 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#ifndef WIN32
-#include <ctype.h>
-
-  #ifndef METAWARE
-    #include <wctype.h>
-  #endif
-
-#endif
-
-#ifndef METAWARE
-  #include <sys/timeb.h>
-#endif
-
-#include "KMSAgentStringUtilities.h"
-
-#ifdef WIN32
-#include <stdlib.h>
-#include <time.h>
-#define gmtime_r(clock,result) ( *(result) = *gmtime(clock), result )
-#endif
-
-// Find header in KMSAgentStringUtilities.h
-int64 UTF8ToInt64( const char* i_sNumber )
-{
-    FATAL_ASSERT( i_sNumber );
-
-#ifdef WIN32
-    return _atoi64( i_sNumber );
-#else
-    return atoll( i_sNumber );
-#endif
-}
-
-void Int64ToUTF8(char* const o_psUTF8, 
-                 int64 i_iNumber, 
-                 int i_bPad, 
-                 int i_bHex )
-{
-    //string sFormat;
-    char sFormat[10];
-
-    if ( i_bPad && i_bHex )
-    {
-#ifdef WIN32
-        strcpy(sFormat,"%016I64X");
-#else
-        strcpy(sFormat,"%016llX");
-#endif
-    }
-    else if ( i_bPad && !i_bHex )
-    {
-#ifdef WIN32
-        strcpy(sFormat, "%019I64d");
-#else
-        strcpy(sFormat, "%019lld");
-#endif
-    }
-    else if ( !i_bPad && i_bHex )
-    {
-#ifdef WIN32
-        strcpy(sFormat, "%I64X");
-#else
-        strcpy(sFormat, "%llX");
-#endif
-    }
-    else //( !i_bPad && !i_bHex )
-    {
-#ifdef WIN32
-        strcpy(sFormat, "%I64d");
-#else
-        strcpy(sFormat, "%lld");
-#endif
-    }
-
-#ifndef METAWARE
-    int iReturn = sprintf( o_psUTF8, sFormat, i_iNumber);
-
-    //int iReturn = K_snprintf(o_psUTF8, iBufferSize, sFormat, i_iNumber);
-#else
-    int iReturn = sprintf( o_psUTF8, sFormat, i_iNumber);
-#endif
-    if ( iReturn < 0 )
-    {
-        // Our buffer wasn't big enough. Shouldn't happen.
-        FATAL_ASSERT(0);
-    }
-
-    return;
-
-}
-
-// Find header in KMSAgentStringUtilities.h
-int ConvertUTF8HexStringToBinary(
-            const char* i_sHexString,
-            unsigned char* o_pBinaryBuffer)
-{   
-    int iHexLen = i_sHexString ? strlen(i_sHexString) : 0;
-    FATAL_ASSERT( (iHexLen % 2) == 0 ); // to be valid, the hex string must have an even number of characters
-
-    if ( !o_pBinaryBuffer )
-    {
-       return ( iHexLen / 2 );
-    }
-
-    if ( iHexLen <= 0 )
-    {
-        return 0;
-    }
-
-    int iDigitValue = 0;
-
-    for ( int i = 0; i < iHexLen; i++)
-    {
-        if (i_sHexString[i] >= '0' && i_sHexString[i] <= '9')
-        {
-            iDigitValue = i_sHexString[i] - '0';
-        }
-        else if (i_sHexString[i] >= 'A' && i_sHexString[i] <= 'F')
-        {
-            iDigitValue = i_sHexString[i] - 'A' + 10;
-        }
-        else if (i_sHexString[i] >= 'a' && i_sHexString[i] <= 'f')
-        {
-            iDigitValue = i_sHexString[i] - 'a' + 10;
-        }
-        else
-        {
-            iDigitValue = 0;
-        }
-
-        if (i % 2 == 0)
-        {
-            o_pBinaryBuffer[i/2] = (char)(iDigitValue << 4);
-        }
-        else
-        {
-            o_pBinaryBuffer[i/2] |= (char)iDigitValue;
-        }
-    }
-
-    return ( iHexLen / 2 );
-}
-
-// Find header in KMSAgentStringUtilities.h
-void ConvertBinaryToUTF8HexString(
-                             char* const                o_sHexString, 
-                             const unsigned char* const i_pBinaryBuffer, 
-                             int                        i_iBinaryBufferSize )
-{
-    const char HEXCHARS[] = "0123456789ABCDEF";
-
-    FATAL_ASSERT( o_sHexString );
-
-    if ( (i_pBinaryBuffer == 0) || (i_iBinaryBufferSize == 0) )
-    {
-        strcpy(o_sHexString, "");
-        return;
-    }
-    
-    FATAL_ASSERT( i_pBinaryBuffer );
-    
-    for ( int i = 0; i < (2 * i_iBinaryBufferSize); i++ ) 
-    {
-        unsigned char ucFourBits = i_pBinaryBuffer[i / 2];
-        if ( (i % 2) == 0 ) // high four bits of the current byte
-            ucFourBits = (ucFourBits >> 4) & 0xF; // shift down and blank out upper bits
-        else                // low four bits of the current byte
-            ucFourBits = ucFourBits & 0xF; // blank out upper bits
-
-        o_sHexString[i] = HEXCHARS[ucFourBits];
-    }
-
-    o_sHexString[i_iBinaryBufferSize * 2] = '\0';
-
-    return;
-}
-
-
-// Find header in StringUtilities.h
-void GetCurrentDateTimeISO8601UTC(char* const o_psDateTimeISO8601UTC,
-                                  int i_iLength)
-{
-
-#ifndef METAWARE
-    timeb stTime;
-    ftime(&stTime);
-
-    FATAL_ASSERT( o_psDateTimeISO8601UTC );
-
-    struct tm* pstTime = gmtime( &(stTime.time) );
-
-    K_snprintf( 
-        o_psDateTimeISO8601UTC, 
-        i_iLength,
-        "%04d-%02d-%02d %02d:%02d:%02d.%03dZ",
-        pstTime->tm_year+1900,
-        pstTime->tm_mon+1,
-        pstTime->tm_mday,
-        pstTime->tm_hour,
-        pstTime->tm_min,
-        pstTime->tm_sec,
-        stTime.millitm);
-
-#else
-    // no time functions for the metaware environment
-    strcpy( o_psDateTimeISO8601UTC, "" );
-#endif
-    return;
-}
-
--- a/usr/src/lib/libkmsagent/common/KMSAgentStringUtilities.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,135 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * @file KMSAgentStringUtilities.h
- */
-
-#ifndef KMSAgentStringUtilities_h
-#define KMSAgentStringUtilities_h
-
-#ifdef WIN32
-#pragma warning(disable: 4786)
-#endif
-
-#include <stdio.h>
-
-#include "SYSCommon.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-//
-// Functions for conversions between integers and strings.
-//
-
-/*---------------------------------------------------------------------------*/
-/**
- *  Converts a UTF8 string to an int64.
- *
- *  @param   i_sNumber: A string representation of the number to convert.
- *  @return  The integer the input string represented.
- */
-/*---------------------------------------------------------------------------*/
- int64 UTF8ToInt64( const char* i_sNumber );
-
-/**
- * Formats an int64 into a UTF8 string.
- *
- * A note on padding: If i_bPad is true, the string will be padded to the 
- * maximum size necessary to hold a an int64 representation. For decimal this 
- * is 19, for hex it is 16.
- *
- *  @param i_iNumber The number to format.
- *  @param i_bPad If true, the string will be padded with zeroes. (See note above.)
- *  @param i_bHex Indicates whether the string format should be a hexadecimal 
- *    representation of the integer (true) or a decimal representation (false).
- *  @param o_psUTF8 the string representation of the integer
- *
- *  @return  void
- */
-void Int64ToUTF8(char* const o_psUTF8, 
-                 int64 i_iNumber, 
-                 int i_bPad, 
-                 int i_bHex );
-
-//
-// Functions for converting between binary buffer and hex string
-//
-
-/*--------------------------------------------------------------------------*/
-/**
- *  Converts a UTF8 hex string to its binary representation.
- *
- *  If o_pBinaryBuffer is null, the function will return the required size.
- *  (The required size is always strlen(i_sHexString)/2.)
- *
- *  @param   i_sHexString:     The hex string to convert.
- *  @param   o_pBinaryBuffer:  The buffer in which to put the binary
- *     representation of the hex string. If this is null, the function
- *     returns the required size.
- *     If this is not null, it must be large enough to hold binary conversion.
- *
- *  @return The number of bytes put into o_pBinaryBuffer (or the number of bytes
- *     required, if o_pBinaryBuffer was null).
- */
-/*---------------------------------------------------------------------------*/
-int ConvertUTF8HexStringToBinary(
-   const char* i_sHexString,
-   unsigned char* o_pBinaryBuffer);
-
-/**
- * Converts a binary buffer to its UTF8 hex string representation.
- * 
- *  @param i_pBinaryBuffer: The binary buffer to convert.
- *  @param i_iBinaryBufferSize: The size of i_pBinaryBuffer;
- *  @param o_sHexString The hex string representation of the
- *                      binary buffer which should be at least
- *                      (i_iBinaryBufferSize * 2) + 1 characters long
- */
-void ConvertBinaryToUTF8HexString(
-                             char* const                o_sHexString, 
-                             const unsigned char* const i_pBinaryBuffer, 
-                             int                        i_iBinaryBufferSize );
-
-//
-// Functions for date strings
-//
-
-/**
- *  populates o_psDateTimeISO8601UTC with a null terminated ISO 8601
- *  formatted timestamp string from the current UTC time of the
- *  system.  The timestamp length will be restricted to i_iLength-1
- *  characters.
- */
-void GetCurrentDateTimeISO8601UTC(char* const o_psDateTimeISO8601UTC,
-                                  int i_iLength);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //KMSAgentStringUtilities_h
--- a/usr/src/lib/libkmsagent/common/KMSAgent_direct.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,942 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file direct.h
- *
- * This file is included in KMSAgentStorage.cpp to provide file handling
- * hooks. It also contains our EEPROM file handling functions.
- *
- * HISTORY:
- * 8/6/07   BJB  Added code for 9840D encryption sectors
- * 4/7/08   BJB  Changed to remove 'file is junk' message - EVT
- *                 didn't like it.
- * 4/24/08  BJB  Added function call back to T10000/9840D code
- *                 to lookup eeprom address -
- *                 so it isn't a hardcoded value.
- * 05/09/08 BJB  Added being more conservative about EEPROM so as to change
- *                 frequency of 32CA problems
- * 
- */
-
-
-#ifndef KMSAGENT_DIRECT_H
-#define KMSAGENT_DIRECT_H
-
-#include <stdio.h>
-#include <string.h>
-
-#ifdef WIN32
-#include <direct.h>
-#endif
-
-#define my_unlink(a) unlink(a)
-#define my_rmdir(a)  rmdir(a)
-
-#ifndef METAWARE
-
-#define myFILE FILE
-
-#else // METAWARE
-
-#include "SYSCommon.h"
-#include "debug.h"
-#include <snprintf.h>
-
-extern "C" void ecpt_trace_msg(ECPT_TRACE_ENTRY*,const char*,...);
-
-extern char st[256];
-
-
-#ifndef I_KNOW_REAL_NAMES
-#undef fopen
-#undef fclose
-#undef fputs
-#undef fgets
-#undef fwrite
-#undef fread
-#undef unlink
-#undef rmdir
-
-#define fopen  my_eeprom_fopen
-#define fclose my_eeprom_fclose
-#define fputs  my_eeprom_fputs
-#define fwrite my_eeprom_fwrite
-#define fread  my_eeprom_fread
-#define fgets  my_eeprom_fgets
-#define unlink my_eeprom_unlink
-#define rmdir  my_eeprom_rmdir
-
-#define my_eeprom_rmdir(a)  (1)
-
-#endif
-
-
-#include "KMSClientProfile.h"
-extern char KMSAgent_Version[KMS_MAX_VERSION_LENGTH];
-
-unsigned char volatile* eeprom_addr_lookup_FILESYSTEM_START_ADDR(void);
-unsigned int  EEPROM_Sector_size(void);
-
-#define FILESYSTEM_SECTOR     (eeprom_addr_lookup_FILESYSTEM_START_ADDR())
-// was ((unsigned char volatile*)0xf20000)   on 9840
-// was ((unsigned char volatile*)0x41dc0000) on T10000
-
-#define FILESYSTEM_SECTOR_SIZE (EEPROM_Sector_size())
-// was hardcoded 0x20000
-
-#define EEPROM_ERASED_BYTE      0xFF
-
-/* size of a file allowed (not counting the name) */
-#define EEPROM_FILE_SECT_SIZE   0x1800
-
-/* size of a file name allowed (+ the null) */
-#define EEPROM_FNAME_SIZE       0x80
-
-// 1000h = 4096d
-#define EEPROM_BLOCK_SIZE       (EEPROM_FILE_SECT_SIZE - EEPROM_FNAME_SIZE - 4)
-
-/*  number of 'files' available */
-#define FTABLE_SIZE             0x5
-
-
-#define UCHAR8 unsigned char
-#define UINT32 unsigned long
-
-
-extern "C" unsigned long
-EEPROM_Sector_Erase( unsigned char volatile *sector_address );
-
-extern "C" unsigned long
-Flash_Write( UCHAR8 *destinationP,
-             UCHAR8 *sourceP,
-             UINT32  byteCount);
-   
-extern "C" unsigned long
-Flash_Read( UCHAR8 *dstP,
-            UCHAR8 *srcP,
-            UINT32  byteCount);
-
-/* a eeprom file */
-struct eepromBlockStruct
-{
-   unsigned long fsize;
-   char          fname[EEPROM_FNAME_SIZE];
-   unsigned char fdata[EEPROM_BLOCK_SIZE];
-};
-
-
-struct fileSystem
-{
-   struct eepromBlockStruct ftable[FTABLE_SIZE];
-   /* what level of toolkit wrote this - for
-      future compatibility */
-   char writingversion[KMS_MAX_VERSION_LENGTH+1];
-};
-
-
-#define MODE_WRITE 0x01
-#define MODE_READ  0x02
-
-#define MYFILE_CLOSED      0x0
-#define MYFILE_OPEN_READ   0x1
-#define MYFILE_OPEN_WRITE  0x2
-
-
-/* an open file */
-typedef struct fileStruct
-{
-   unsigned char *readptr;
-   unsigned long readsize;
-   unsigned char *writeptr;
-   struct eepromBlockStruct *memptr;
-   unsigned long mode;
-   unsigned long file_number;
-} myFILE;
-
-
-extern "C" myFILE *my_eeprom_fopen  (const char *filename, const char *mode);
-extern "C" int     my_eeprom_fclose (myFILE *stream);
-extern "C" int     my_eeprom_fputs  (const char *s, myFILE *stream);
-extern "C" int     my_eeprom_fwrite (const char *s, int size, int nobj, myFILE *f);
-extern "C" int     my_eeprom_fread  (char *s, int size, int nobj, myFILE *f);
-extern "C" char   *my_eeprom_fgets  (char *s, int n, myFILE *stream);
-extern "C" int     my_eeprom_unlink (const char *filename);
-extern "C" int     my_eeprom_fsys_erase(void);
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifdef DEFINE_STORAGE
-/* ram copy of the file system */
-struct fileSystem ramFileSystem;
-int file_read = FALSE;
-
-/* file state - open/closed/etc */
-unsigned long fstate[FTABLE_SIZE] = {MYFILE_CLOSED,
-                                     MYFILE_CLOSED,
-                                     MYFILE_CLOSED,
-                                     MYFILE_CLOSED,
-                                     MYFILE_CLOSED};
-#else
-/* ram copy of the file system */
-extern struct fileSystem ramFileSystem;
-extern int file_read;
-
-/* file state - open/closed/etc */
-extern unsigned long fstate[FTABLE_SIZE];
-
-#endif
-
-
-
-#ifdef DEFINE_STORAGE
-
-
-extern "C" unsigned long
-
-
-/* UNIT TEST */
-int TESTV = 0;
-
-/* UNIT TEST */
-#define MY_FLASH_READ(a,b,c) \
-  Flash_Read(a,b,c); \
-  if (TESTV++ < 5) { \
-     ramFileSystem.ftable[0].fname[0] = EEPROM_ERASED_BYTE; \
-     ramFileSystem.ftable[1].fsize = EEPROM_BLOCK_SIZE+1;   \
-  } 
- 
-
-
-/**
- * my_eeprom_fopen()
- * my filesystem fileopen
- */
-extern "C" myFILE *my_eeprom_fopen(const char *filename, const char *mode)
-{
-   int i;
-   myFILE *file;
-   int open_for_write = TRUE;
-   static int Firsttime = TRUE;
-   int retries = 100;
-
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, my_eeprom_fopen ) ;
-   ecpt_trace_msg( trace, "file %s", (char*)filename);
-  
-   FATAL_ASSERT(filename);
-   FATAL_ASSERT(mode);
-
-   if ( (strcmp(mode,"wb") == 0) ||
-        (strcmp(mode,"w") == 0))
-   {
-      // write
-      open_for_write = TRUE;
-   }
-   else if ( (strcmp(mode,"r") == 0) ||
-             (strcmp(mode,"rb") == 0) )
-   {
-      // read binary
-      open_for_write = FALSE;
-   }
-   else
-   {
-      FATAL_APPLICATION_STATE("my_eeprom_fopen : Illegal mode");
-   }
-   
-   /* read the file table from eeprom? */
-   if (!file_read)
-   {
-     RETRY:
-      
-      MY_FLASH_READ((unsigned char *)&ramFileSystem,
-                    (unsigned char *)FILESYSTEM_SECTOR,
-                    sizeof(ramFileSystem));
-
-      /* Audit the filesystem - if it looks junked, reclaim bad files */
-
-      for (i=0; i < FTABLE_SIZE; i++)
-      {
-         if ( (ramFileSystem.ftable[i].fname[0] == EEPROM_ERASED_BYTE) ||
-              (ramFileSystem.ftable[i].fsize >     EEPROM_BLOCK_SIZE)  )
-         {
-            /* if this looks bad, don't accept this outcome until
-               100 retries */
-            if (retries-- > 0)
-            {
-               ecpt_trace_msg( trace, "file was junk - retrying %s", (char*)filename);
-               log_error_printf(
-                  "KMSAgent_direct::fopen file %d is junk - (name %x, "
-                  "size %x, data %x) RETRYING \n",
-                  i,
-                  ramFileSystem.ftable[i].fname[0],
-                  ramFileSystem.ftable[i].fsize ,
-                  ramFileSystem.ftable[i].fdata[0]);
-               
-               goto RETRY;
-            }
-            else
-            {
-               ecpt_trace_msg( trace, "file was junk - formatting %s", (char*)filename);
-               log_error_printf(
-                  "KMSAgent_direct::fopen file %d is junk - (name %x, "
-                  "size %x, data %x) formatting it\n",
-                  i,
-                  ramFileSystem.ftable[i].fname[0],
-                  ramFileSystem.ftable[i].fsize ,
-                  ramFileSystem.ftable[i].fdata[0]);
-               
-               /* set data to reasonable starting values */
-               ramFileSystem.ftable[i].fname[0] = 0;
-               ramFileSystem.ftable[i].fsize    = 0;
-               ramFileSystem.ftable[i].fdata[0] = 0;
-            }
-               
-         }
-         
-      } /* for */
-         
-      file_read = TRUE;
-         
-   } /* !file read */
-   
-   /* read the file table */
-   for (i=0; i < FTABLE_SIZE; i++)
-   {
-      /* compare filename to ram copy filename */
-      if (strcmp(filename, (const char *)ramFileSystem.ftable[i].fname) == 0)
-      {
-
-         if (fstate[i] != MYFILE_CLOSED)
-         {
-            log_printf("KMSAgent_direct::fopen FN=%s file matches, "
-                       "FILE %d WAS ALREADY OPEN for %s with mode %s"
-                       "file size is %d \n",
-                       filename,
-                       i,
-                       (fstate[i] == MYFILE_OPEN_WRITE ? "WRITE": "READ"),
-                       mode,
-                       ramFileSystem.ftable[i].fsize);
-         }
-         
-         /* create a new ramfile handle */
-         file = malloc(sizeof(myFILE));
-
-         /* since file is being rewritten, it is now size 0 */
-         if (open_for_write)
-            ramFileSystem.ftable[i].fsize = 0;
-
-         /* remember the file is open */
-         fstate[i]= open_for_write ? MYFILE_OPEN_WRITE : MYFILE_OPEN_READ;
-         
- 
-         /* if filename matches, set file pointers to it */
-         file->writeptr = file->readptr = ramFileSystem.ftable[i].fdata;
-         file->memptr   = &ramFileSystem.ftable[i];
-         file->readsize = 0;
-         file->mode = open_for_write ? MODE_WRITE : MODE_READ;
-         file->file_number = i;
-
-
-         log_printf("KMSAgent_direct::fopen FN=%s file matches, "
-                    "opening existing file number %d with mode %s"
-                    "file size is %d \n",
-                    filename,
-                    i,
-                    mode,
-                    ramFileSystem.ftable[i].fsize);
-
-         break;
-      }
-      
-   }
-   
-   /* if no existing entry was found, assign a new entry to this filename */
-   if (i == FTABLE_SIZE)
-   {
-      /* couldn't find an old file and opened for read so return NULL */
-      if (open_for_write == FALSE)
-      {
-
-
-         log_printf("KMSAgent_direct::fopen FN=%s no file match, "
-                    "file opened for read so return NULL %d\n",
-                    filename,
-                    i);
-
-         
-         return NULL;
-      }
-      
-      /* find a free file pointer */
-      for (i=0; i < FTABLE_SIZE ; i++)
-      {
-         /* empty data will be 0xffffffff since it was copied
-            straight from EEPROM */
-         if (ramFileSystem.ftable[i].fname[0] == '\0')
-         {
-            log_printf("KMSAgent_direct::fopen FN=%s no file match, "
-                       "opening new file %d\n",
-                       filename,
-                       i);
-
-            /* give it a filename - marks this as in use */
-            strcpy ((char *)ramFileSystem.ftable[i].fname, filename);
-            
-            /* set filesize to zero */
-            ramFileSystem.ftable[i].fsize = 0;
-
-            /* remember the file is open */
-            fstate[i]= open_for_write ? MYFILE_OPEN_WRITE : MYFILE_OPEN_READ;
-
-            
-            /* create a new ramfile handle */
-            file = malloc(sizeof(myFILE));
-            
-            /* if filename matches, set file pointers to it */
-            file->writeptr = file->readptr = ramFileSystem.ftable[i].fdata;
-            file->memptr =  &ramFileSystem.ftable[i];
-            file->readsize = 0;
-            file->mode = open_for_write ? MODE_WRITE : MODE_READ;
-            file->file_number = i;
-            
-            break;
-         }
-         
-      }
-      
-      if (i == FTABLE_SIZE)
-      {
-         log_error_printf("KMSAgent_direct::fopen FN=%s no free files \n",
-                          filename);
-         /* no free entries - bail */
-         return NULL;
-      }
-      
-   }
-
-   /* return pointer to the myFILE struct created */
-   return file;
-   
-}
-
-/**
- * my_eeprom_fclose()
- * my filesystem fileclose
- */
-extern "C" int  my_eeprom_fclose(myFILE *f)
-{
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, my_eeprom_fclose ) ;
-   ecpt_trace_msg( trace, "entered");
-   
-   FATAL_ASSERT(f);
-
-#ifdef DEBUG
-   log_printf("KMSAgent_direct::fclose FN=%s, "
-              "FILE %d "
-              "file size is %d \n",
-              ramFileSystem.ftable[f->file_number].fname,
-              f->file_number,
-              ramFileSystem.ftable[f->file_number].fsize);
-#endif
-
-   if (fstate[f->file_number] == MYFILE_CLOSED)
-   {
-      log_error_printf("KMSAgent_direct::fclose FN=%s, "
-                       "FILE %d WAS ALREADY CLOSED "
-                       "file size is %d \n",
-                       ramFileSystem.ftable[f->file_number].fname,
-                       f->file_number,
-                       ramFileSystem.ftable[f->file_number].fsize);
-   }
-
-   /* remember the file is closed */
-   fstate[f->file_number]= MYFILE_CLOSED;
-   
-   /* don't rewrite eeprom unless file was opened for writing */
-   if (f->mode == MODE_WRITE)
-   {
-      /* Erase the sector we are rewriting */
-      EEPROM_Sector_Erase( (unsigned char*)FILESYSTEM_SECTOR ) ;
-
-      /* remember the version of toolkit that wrote this filesystem
-         (for any future compatibility problems). */
-      strncpy(ramFileSystem.writingversion,
-              KMSAgent_Version,
-              sizeof(KMSAgent_Version));
-
-      /* flush the memory indicated by myFILE * out to EEPROM */
-      /* see boot_eeprom.c for details on Flash_Write */
-      Flash_Write ((unsigned char*)FILESYSTEM_SECTOR,
-                   (unsigned char*)&ramFileSystem,
-                   FILESYSTEM_SECTOR_SIZE);
-   }
-   
-   /* delete the placeholder file */
-   free(f);
-
-   return 0;
-}
-
-/**
- * my_eeprom_fputs()
- * my filesystem put string
- */
-extern "C" int  my_eeprom_fputs(const char *s, myFILE *f)
-{
-   /* put the string to the memory indicated by myFILE */
-   int i;
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, my_eeprom_fputs ) ;
-
-   ecpt_trace_msg (trace, "\nmy_eeprom_fputs : Entered");
-   
-#ifdef DEBUG
-   log_printf(
-      "\nKMSAgent_direct::my_eeprom_fputs "
-      "f->writeptr =%x "
-      "f->readptr=%x "
-      "f->readsize=%x "
-      "f->memptr=%x"
-      "f->memptr->fsize=%x\n",
-      f->writeptr,
-      f->readptr,
-      f->readsize,
-      f->memptr,
-      f->memptr->fsize);
-   
-#endif
-
-   FATAL_ASSERT(s);
-   FATAL_ASSERT(f);
-   
-   for (i=0;;i++)
-   {
-      /* end of input string? quit */
-      if (*s == '\0')
-         break;
-
-      /* end of max file memory, quit */
-      if ((unsigned char*)s >=
-          (unsigned char*)(f->memptr + sizeof(struct eepromBlockStruct)))
-         break;
-      
-      /* copy */
-      *(f->writeptr) = *s++;
-      f->writeptr++;
-      
-      /* increment the filesize */
-      f->memptr->fsize += 1;
-      
-   }
-
-#ifdef DEBUG
-   log_printf(
-           "\nKMSAgent_direct::fputs wrote %d chars, "
-           "filesize is %d\n",
-           i,
-           f->memptr->fsize );
-#endif
-   
-   /* return how many chars were written */
-   return i;
-}
-
-
-/**
- * my_eeprom_fwrite()
- * my filesystem put string
- */
-extern "C" int  my_eeprom_fwrite(const char *s,
-                                 int size,
-                                 int nobj,
-                                 myFILE *f)
-{
-   /* put the string to the memory indicated by myFILE */
-   int i,j;
-   
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, my_eeprom_fwrite ) ;
-   ecpt_trace_msg ( trace, "Entered");
-
-   log_printf(
-           "\nKMSAgent_direct::my_eeprom_fputs "
-           "f->writeptr =%x "
-           "f->readptr=%x "
-           "f->readsize=%x "
-           "f->memptr=%x"
-           "f->memptr->fsize=%x\n",
-           f->writeptr,
-           f->readptr,
-           f->readsize,
-           f->memptr,
-           f->memptr->fsize);
-
-   FATAL_ASSERT(s);
-   FATAL_ASSERT(f);
-   FATAL_ASSERT((size*nobj) > 0);
-   
-   for (i=0; i<nobj; i++)
-   {
-      for (j=0; j<size; j++)
-      {
-         /* end of max file memory, quit */
-         if ((unsigned char*)s >=
-             (unsigned char*)(f->memptr + sizeof(struct eepromBlockStruct)))
-            goto DONE;
-      
-         /* copy */
-         *(f->writeptr) = *s++;
-         f->writeptr++;
-      
-         /* increment the filesize */
-         f->memptr->fsize += 1;
-      }
-      
-   }
-
-  DONE:
-   
-   
-#ifdef DEBUG
-   log_printf(
-           "\nKMSAgent_direct::fwrite wrote %d chars, "
-           "filesize is %d\n",
-           i,
-           f->memptr->fsize );
-#endif
-   
-   /* return how many objects were written */
-   return i;
-}
-
-
-
-/**
- * my_eeprom_fgets()
- * my filesystem getstring
- */
-extern "C" char *my_eeprom_fgets(char *s, int n, myFILE *f)
-{
-   /* put the string to the memory indicated by myFILE */
-   int i;
-   char *tmp = s;
-
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, my_eeprom_fgets ) ;
-   ecpt_trace_msg (trace, "entered");
-   
-   FATAL_ASSERT(s);
-   FATAL_ASSERT(n > 0);
-   FATAL_ASSERT(f);
-   
-#ifdef DEBUG
-   log_printf(
-           "\nKMSAgent_direct::my_eeprom_fgets from file %s "
-           "fileptr %x "
-           "readptr = %x "
-           "readsize = %d "
-           "filesize = %d \n",
-           f->memptr->fname,
-           f,
-           f->readptr,
-           f->readsize,
-           f->memptr->fsize);
-#endif    
-
-   /* get up to n-1 (and a \0) chars */
-   for (i=0; i < n; i++)
-   {
-      /* end of read line? quit */
-      if (*f->readptr == '\n')
-      {
-         /* increment the number of bytes read */
-         f->readptr++;
-         f->readsize++;
-         break;
-      }
-      
-      /* trying to read beyond what was written? quit */
-      if (f->readsize >
-          f->memptr->fsize)
-      {
-#ifdef DEBUG
-         log_printf(
-                  "\nKMSAgent_direct::fgets eof after %d chars, "
-                  "readsize is %d "
-                  "filesize is %d\n",
-                  i,
-                  f->readsize,
-                  f->memptr->fsize);
-#endif    
-         return NULL;
-      }
-
-      /* trying to read beyond max file memory, quit */
-      if ((unsigned char*)f->readptr >=
-          (unsigned char*)(f->memptr + sizeof(struct eepromBlockStruct)))
-      {
-#ifdef DEBUG
-         log_printf(
-                 "\nKMSAgent_direct::fgets end of max file after %d chars "
-                 "readsize is %d "
-                 "filesize is %d\n",
-                 i,
-                 f->readsize,
-                 f->memptr->fsize);
-#endif    
-         /* EOF or error is signalled by NULL return */
-         return NULL;
-      }
-      
-      /* copy a char */
-      *tmp++ = *f->readptr;
-
-      /* increment the number of bytes read */
-      f->readptr++;
-      f->readsize++;
-      
-   } /* for */
-
-   /* terminate the returned string with a 0, but not a \n */
-   *tmp='\0';
-   
-#ifdef DEBUG
-   /* terminate returned string after a non-absurd number of chars
-    */   
-   log_printf(
-           "\nKMSAgent_direct::fgets string [%s] "
-           "end of line after %d chars "
-           "readsize is %d "
-           "filesize is %d\n",
-           s,
-           i,
-           f->readsize,
-           f->memptr->fsize);
-#endif    
-
-   /* on success, return the original pointer */
-   return s;
-}
-
-
-
-
-/**
- * my_eeprom_fread()
- * my filesystem read a file
- */
-extern "C" int my_eeprom_fread(char *s, int size, int nobj, myFILE *f)
-{
-   /* put the string to the memory indicated by myFILE */
-   int i,j;
-   
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, my_eeprom_fread ) ;
-   ecpt_trace_msg (trace, "entered");
-
-   FATAL_ASSERT(s);
-   FATAL_ASSERT(f);
-   FATAL_ASSERT((size*nobj) > 0);
-   
-   for (i=0; i<nobj; i++)
-   {
-      for (j=0; j<size; j++)
-      {
-         /* end of written file memory, quit */
-         if ( (unsigned char*) s >=
-              (unsigned char*) (f->memptr + f->memptr->fsize) )
-            goto DONE;
-      
-         /* copy */
-         *s++ = *(f->readptr);
-         f->readptr++;
-      }
-      
-   }
-
-  DONE:
-   
-#ifdef DEBUG
-   log_printf(
-           "\nKMSAgent_direct::fread read %d chars, "
-           "filesize is %d\n",
-           i,
-           f->memptr->fsize );
-#endif
-   
-   /* return how many objects were written */
-   return i;
-
-}
-
-
-
-
-
-
-/**
- * my_eeprom_unlink() - delete the file named
- */
-extern "C" int my_eeprom_unlink(const char *filename)
-{
-   int i;
-   
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, my_eeprom_fgets ) ;
-   ecpt_trace_msg (trace, "Entered fn=%s", (char*)filename);
-   
-   /* assume the file is closed */
-   FATAL_ASSERT(filename);
-   
-   /* read the file table */
-   for (i=0; i < FTABLE_SIZE; i++)
-   {
-
-      if (fstate[i] != MYFILE_CLOSED)
-      {
-         log_error_printf("KMSAgent_direct::unlink FN=%s file matches, "
-                          "FILE %d WAS STILL OPEN for %s" 
-                          "file size is %d \n",
-                          filename,
-                          i,
-                          (fstate[i] == MYFILE_OPEN_WRITE ? "WRITE": "READ"),
-                          ramFileSystem.ftable[i].fsize);
-      }
-      
-      /* compare input filename to ram copy filename */
-      if (strcmp(filename, (const char*)ramFileSystem.ftable[i].fname) == 0)
-      {
-         /* if filename matches, zero it out to delete the file */
-         ramFileSystem.ftable[i].fname[0] = '\0';
-         ramFileSystem.ftable[i].fsize    = 0;
-         ramFileSystem.ftable[i].fdata[0] = 1;
-
-         /* remember the file is closed */
-         fstate[i]= MYFILE_CLOSED;
- 
-         EEPROM_Sector_Erase( FILESYSTEM_SECTOR ) ;
-
-         /* remember the version of toolkit that wrote this filesystem
-            (for any future compatibility problems). */
-         strncpy(ramFileSystem.writingversion,
-                 KMSAgent_Version,
-                 sizeof(KMSAgent_Version));
-         
-         /* flush the memory indicated by myFILE * out to EEPROM */
-         Flash_Write ((unsigned char*)FILESYSTEM_SECTOR,
-                      (unsigned char*)&ramFileSystem,
-                      FILESYSTEM_SECTOR_SIZE);
-         
-         break;
-      }
-  
-   }
-   
-#ifdef DEBUG
-   log_printf ("my_eeprom_unlink : returning");
-#endif 
-
-   if (i == FTABLE_SIZE)
-      return -1;
-
-   /* success */
-   return 0;
-}
-
-
-/**
- * my_eeprom_fsys_erase() - delete all files
- */
-extern "C" int my_eeprom_fsys_erase(void)
-{
-   int i;
-
-   ECPT_TRACE_ENTRY   *trace = NULL;  
-   ECPT_TRACE( trace, my_eeprom_fread ) ;
-   ecpt_trace_msg (trace, "my_eeprom_fsys_erase : entering ");
-   
-   /* read the file table */
-   for (i=0; i < FTABLE_SIZE; i++)
-   {
-      if (fstate[i] != MYFILE_CLOSED)
-      {
-         log_error_printf("KMSAgent_direct::fsys_erase FN=%s file "
-                          "FILE %d WAS STILL OPEN for %s "
-                          "file size is %d \n",
-                          ramFileSystem.ftable[i].fname,
-                          i,
-                          (fstate[i] == MYFILE_OPEN_WRITE ? "WRITE": "READ"),
-                          ramFileSystem.ftable[i].fsize);
-      }
-
-      /* zero filename out to delete the file */
-      ramFileSystem.ftable[i].fname[0] = '\0';
-      ramFileSystem.ftable[i].fsize    = 0;
-      ramFileSystem.ftable[i].fdata[0] = 2;
-      
-      /* remember the file is closed */
-      fstate[i]= MYFILE_CLOSED;
-
-      EEPROM_Sector_Erase( FILESYSTEM_SECTOR ) ;
-
-      /* remember the version of toolkit that wrote this filesystem
-         (for any future compatibility problems). */
-      strncpy(ramFileSystem.writingversion,
-              KMSAgent_Version,
-              sizeof(KMSAgent_Version));
-
-      /* flush the memory indicated by myFILE * out to EEPROM */
-      Flash_Write ((unsigned char*)FILESYSTEM_SECTOR,
-                   (unsigned char*)&ramFileSystem,
-                   FILESYSTEM_SECTOR_SIZE);
-         
-  
-   }
-   
-#ifdef DEBUG
-   log_printf ("\nmy_eeprom_fsys_erase : returning");
-#endif
-   
-   if (i == FTABLE_SIZE)
-      return -1;
-
-   /* success */
-   return 0;
-}
-
-
-
-
-#endif  // DEFINE_STORAGE
-#endif  // METAWARE
-#endif
-
--- a/usr/src/lib/libkmsagent/common/KMSAuditLogger.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,191 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAuditLogger.cpp
- */
-
-#ifndef WIN32
-//#include <syslog.h>
-#include <stdarg.h>
-#endif
-
-#include <stdio.h>
-
-#ifndef METAWARE
-#include <sys/timeb.h>
-#endif
-
-#include <time.h>
-
-#include "KMSAuditLogger.h"
-#include "ApplianceParameters.h"
-
-#define AGENT_LOG_FILE              "KMSAgentLog.log"
-
-// globals for file logging
-static FILE* g_fpLogFileHandle = NULL;
-static K_MUTEX_HANDLE g_stLogFileMutex;
-static char g_sLogFileName[MAX_LOG_FILE_NAME_LENGTH];
-
-// Find header in AuditLogger.h
-int InitializeFileLogging( const char* const i_sWorkingDirectory )
-{
-    FATAL_ASSERT( i_sWorkingDirectory );
-    if ( g_fpLogFileHandle != NULL )
-    {
-        return false;
-    }    
-
-    char sLogFileName[MAX_LOG_FILE_NAME_LENGTH];
-    strncpy( sLogFileName, i_sWorkingDirectory, MAX_LOG_FILE_NAME_LENGTH );
-
-    if ( sLogFileName[ strlen( sLogFileName )-1 ] != PATH_SEPARATOR )
-    {
-        sLogFileName[ strlen(sLogFileName) ] = PATH_SEPARATOR ;
-        sLogFileName[ strlen(sLogFileName) + 1 ] = '\0';
-    }
-
-    strncat( sLogFileName, AGENT_LOG_FILE, MAX_LOG_FILE_NAME_LENGTH );
-
-    strcpy(g_sLogFileName, sLogFileName);
-
-    if ( K_CreateMutex( &g_stLogFileMutex ) != K_SYS_OK )
-    {
-        return false;
-    }
-
-    if ( NULL == ( g_fpLogFileHandle = fopen( g_sLogFileName, "a+t" ) ) )
-    {
-        return false;
-    }
-
-    return true;
-}
-
-// Find header in AuditLogger.h
-int FinalizeFileLogging()
-{
-    FATAL_ASSERT( g_fpLogFileHandle != NULL );
-
-    K_DestroyMutex( g_stLogFileMutex );
-
-    bool bSuccess = ( 0 == fclose( g_fpLogFileHandle ) );
-
-    g_fpLogFileHandle = NULL;
-
-    return bSuccess;
-}
-
-// Find header in AuditLogger.h
-extern "C" int LogToFile( int i_iErrno, 
-               const char* const i_sLogLine )
-{
-    if ( g_fpLogFileHandle == NULL )
-    {
-        return false;
-    }        
-
-    CAutoMutex oAutoMutex( g_stLogFileMutex );
-
-    if (0 > fputs( i_sLogLine, g_fpLogFileHandle ) )
-    {
-        return false;
-    }
-
-    if ( 0 > fputs( "\n", g_fpLogFileHandle ) )
-    {
-        return false;
-    }
-
-    if ( fflush( g_fpLogFileHandle ) != 0 )
-    {
-        return false;
-    }
-
-    return true;
-}
-
-static const int g_iMaxLogFileLineLength = MAX_LOG_FILE_LINE_LENGTH;
-
-
-int Log_function(
-   int i_iErrno,
-   const char* const i_sOperation,
-   const char* const i_sEntityID,
-   const char* const i_sNetworkAddress,
-   const char* const i_sMessage )
-{
-    char sFileLogEntry[500];
-    const int iTempSize = 100;
- 
-    timeb stTime;
-    ftime(&stTime);
-
-    struct tm* pstTime = gmtime( &(stTime.time) );
-
-    K_snprintf( 
-        sFileLogEntry, 
-        iTempSize,
-        "%04d-%02d-%02d %02d:%02d:%02d.%03dZ",
-        pstTime->tm_year+1900,
-        pstTime->tm_mon+1,
-        pstTime->tm_mday,
-        pstTime->tm_hour,
-        pstTime->tm_min,
-        pstTime->tm_sec,
-        stTime.millitm);
-
-    if ( i_sEntityID )
-    {
-        strcat(sFileLogEntry," AgentID=");
-        strcat(sFileLogEntry,i_sEntityID);
-    }
-
-    if ( i_sNetworkAddress )
-    {
-        strcat(sFileLogEntry," KMA Address=");
-        strcat(sFileLogEntry, i_sNetworkAddress);
-    }
-    if ( i_sOperation )
-    {
-        strcat(sFileLogEntry, " Operation=");
-        strcat(sFileLogEntry,i_sOperation);
-    }
-
-    if ( i_sMessage )
-    {
-        strcat(sFileLogEntry, " Msg=");
-        strcat(sFileLogEntry, i_sMessage);
-    }
-
-    return LogToFile( i_iErrno, sFileLogEntry );
-}
-
-int Log2(char* msg1,
-         char* msg2)
-{
-   return 0;
-}
--- a/usr/src/lib/libkmsagent/common/KMSAuditLogger.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSAuditLogger.h
- */
-
-#ifndef KMSAuditLogger_h
-#define KMSAuditLogger_h
-
-#ifndef METAWARE
-#ifdef WIN32
-#pragma warning(disable: 4786)
-#endif
-
-// SYSCommon.h needs the following include
-#include <stdio.h>
-
-#include "SYSCommon.h"
-#include "AutoMutex.h"
-#endif // METAWARE
-
-#include "ApplianceParameters.h"
-
-
-#define MAX_LOG_FILE_LINE_LENGTH    MAXIMUM_UTF8_STRING_VALUE_LENGTH + 128
-#define MAX_LOG_FILE_NAME_LENGTH    256
-
-/**
- *  Opens a logging file for appending, or creation, 
- *  with the name "KMSAgentLog.log" beneath the specified directory.
- *  @return true on success
- */
-int InitializeFileLogging( const char* const i_sWorkingDirectory );
-
-/**
- *  closes the log file
- *  @return true if successful close
- */
-int FinalizeFileLogging();
-
-/**
- *  write a log entry to the log file
- *  @return true if successful
- */
-extern "C" int LogToFile( int i_iErrno,
-                          const char* const i_sLogLine );
-
-/**
- *  Formats a message and to the log file using <code>LogToFile</code>, 
- *  generating a ISO8601UTC timestamp and
- *  appending the various function arguments together.
- *  @param i_sOperation optional, an operation and error condition string
- *  @param i_sEntityID optional, the name of the entity performing the operation
- *  @param i_sNetworkAddress optional, the address of the KMS involved in the operation
- *  @param i_sMessage optional, the error message details
- *  @return 0 if successful
- */
-int Log_function(
-   int i_iErrno,
-   const char* const i_sOperation,
-   const char* const i_sEntityID,
-   const char* const i_sNetworkAddress,
-   const char* const i_sMessage );
-
-// helper macro to convert value to a string
-#define Log(a,b,c,d) Log_function(a, #a, b, c, d)
-
-#define AUDIT_CLIENT_LOG_BASE 0x200
-
-#define AUDIT_CLIENT_LOAD_PROFILE_CREATE_DIRECTORY_FAILED           (AUDIT_CLIENT_LOG_BASE + 0x0)
-#define AUDIT_CLIENT_LOAD_PROFILE_CREATE_PROFILE_CONFIG_FAILED      (AUDIT_CLIENT_LOG_BASE + 0x1)
-#define AUDIT_CLIENT_LOAD_PROFILE_CREATE_PROFILE_CONFIG_SUCCEEDED   (AUDIT_CLIENT_LOG_BASE + 0x2)
-#define AUDIT_CLIENT_SAVE_CLUSTER_INFORMATION_SUCCEEDED             (AUDIT_CLIENT_LOG_BASE + 0x3)
-
-#define AUDIT_CLIENT_GET_ROOT_CA_CERTIFICATE_SUCCESS                (AUDIT_CLIENT_LOG_BASE + 0x4)
-#define AUDIT_CLIENT_GET_CERTIFICATE_SUCCESS                        (AUDIT_CLIENT_LOG_BASE + 0x5)
-#define AUDIT_CLIENT_LOAD_PROFILE                                   (AUDIT_CLIENT_LOG_BASE + 0x6)
-#define AUDIT_CLIENT_GetClusterInformation                          (AUDIT_CLIENT_LOG_BASE + 0x7)
-
-#define AGENT_LOADBALANCER_FAILOVER                                 (AUDIT_CLIENT_LOG_BASE + 0x8)
-
-#define AUDIT_CLIENT_AGENT_GET_CLUSTER_INFORMATION_INVALID_PARAMETERS      (AUDIT_CLIENT_LOG_BASE + 0x9)
-#define AUDIT_CLIENT_AGENT_SELECT_APPLIANCE_INVALID_PARAMETERS             (AUDIT_CLIENT_LOG_BASE + 0xa)
-#define AUDIT_CLIENT_AGENT_LOAD_PROFILE_INVALID_PARAMETERS                 (AUDIT_CLIENT_LOG_BASE + 0xc)
-#define AUDIT_CLIENT_AGENT_UNLOAD_PROFILE_INVALID_PARAMETERS               (AUDIT_CLIENT_LOG_BASE + 0xd)
-#define AUDIT_CLIENT_AGENT_LIST_KEY_GROUPS_INVALID_PARAMETERS              (AUDIT_CLIENT_LOG_BASE + 0xe)
-#define AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_PARAMETERS                   (AUDIT_CLIENT_LOG_BASE + 0xf)
-#define AUDIT_CLIENT_AGENT_CREATE_DATA_UNIT_INVALID_PARAMETERS             (AUDIT_CLIENT_LOG_BASE + 0x10)
-#define AUDIT_CLIENT_AGENT_DISASSOCIATE_DATA_UNIT_KEYS_INVALID_PARAMETERS  (AUDIT_CLIENT_LOG_BASE + 0x11)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_PARAMETERS                 (AUDIT_CLIENT_LOG_BASE + 0x12)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_INVALID_PARAMETERS           (AUDIT_CLIENT_LOG_BASE + 0x13)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_BY_EXTERNAL_UNIQUE_ID_INVALID_PARAMETERS      (AUDIT_CLIENT_LOG_BASE + 0x14)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_PARAMETERS      (AUDIT_CLIENT_LOG_BASE + 0x15)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_PARAMETERS      (AUDIT_CLIENT_LOG_BASE + 0x16)
-#define AUDIT_CLIENT_AGENT_CREATE_AUDIT_LOG_INVALID_PARAMETERS              (AUDIT_CLIENT_LOG_BASE + 0x17)
-#define AUDIT_CLIENT_AGENT_CREATED_AUDIT_LOG_INVALID_PARAMETERS             (AUDIT_CLIENT_LOG_BASE + 0x18)
-#define AUDIT_CLIENT_AGENT_LOAD_PROFILE_PROFILE_ALREADY_LOADED              (AUDIT_CLIENT_LOG_BASE + 0x19)
-#define AGENT_LOADBALANCER_AESKEYUNWRAP_GETKWK_RETURNED_NULL                (AUDIT_CLIENT_LOG_BASE + 0x1a)
-#define AGENT_LOADBALANCER_AESKEYUNWRAP_KEY_UNWRAP_FAILED                   (AUDIT_CLIENT_LOG_BASE + 0x1b)
-#define AUDIT_CLIENT_FILTER_CLUSTER_FAILED                                  (AUDIT_CLIENT_LOG_BASE + 0x1c)
-#define AUDIT_CLIENT_FILTER_CLUSTER                                         (AUDIT_CLIENT_LOG_BASE + 0x1d)
-
-
-
-
-
-
-int Log_function(int i_iErrno,
-                 const char* const i_sOperation,
-                 const char* const i_sEntityID,
-                 const char* const i_sNetworkAddress,
-                 const char* const i_sMessage );
-
-/**
- * Log generically 2 parameters (presumably to the screen,
- * but could be to a file
- */
-extern "C" int Log2(char* msg1,
-                    char* msg2);
-
-#endif //KMSAuditLogger_h
--- a/usr/src/lib/libkmsagent/common/KMSClientProfile.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2878 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include <stdio.h>
-#include <errno.h>
-
-#if !defined(UNIX) && !defined(METAWARE)
-#include "KMSAgent_direct.h"
-#endif
-
-#include <string.h>
-
-#include "KMSClientProfile.h"
-
-#include "KMSAgent.h"
-#include "KMS_CAStub.h"
-#include "KMS_CertificateStub.h"
-#include "KMS_DiscoveryStub.h"
-#include "KMSClientProfileImpl.h"
-#include "KMSAuditLogger.h"
-#include "KMSAgentSoapUtilities.h"
-#include "KMSAgentStringUtilities.h"
-
-
-#include "KMSAgentPKICommon.h" // must be before agentstorage
-
-#include "stdsoap2.h"          
-#include "KMSAgentStorage.h"   // uses KMSClientProfile
-
-
-#include "KMSAgentWebServiceNamespaces.h"
-#include "k_setupssl.h"
-#include "KMSAgentChallenge.h"
-#include "KMSAgentCryptoUtilities.h"
-#include "ApplianceParameters.h"
-#include "AutoMutex.h"
-
-#include "KMSAgentLoadBalancer.h"
-#include "KMSAgentDataUnitCache.h"
-
-#include "ClientSoapFaultCodes.h"
-#ifdef METAWARE
-#include "debug.h"
-#include "sizet.h"
-typedef unsigned char		uint8_t;
-typedef unsigned short		uint16_t;
-typedef unsigned int		uint32_t;
-typedef unsigned long long	uint64_t;
-#include "literals.h"
-#endif
-#include "KMSAgentAESKeyWrap.h"
-
-#if defined(METAWARE) && defined(DEBUG)
-#include "debug.h"
-#endif
-#include "KMSAuditLogger.h"
-#include "KMSClientProfileImpl.h"
-
-#ifdef METAWARE
-extern "C" void
-tnMsg( const char   *format,
-       ... );
-#endif
-
-bool g_bUseFileLog = false;
-char g_wsWorkingDirectory[KMS_MAX_PATH_LENGTH+1] = "./";
-
-
-static bool InitializeLogging( 
-   const utf8cstr  i_wsWorkingDirectory,
-   int i_bUseFileLog )
-{
-   FATAL_ASSERT( !i_bUseFileLog || i_wsWorkingDirectory );
-   
-   bool bFileLogSuccess = true;
-   
-   g_bUseFileLog = ( i_bUseFileLog != 0 );
-   
-   // InitializeFileLogging must always be called, 
-   // because the file is always used by FATALs.
-   
-   bFileLogSuccess = InitializeFileLogging( i_wsWorkingDirectory ) ? true:false;
-   
-   return bFileLogSuccess;
-}
-
-static void FinalizeLogging()
-{
-   // FinalizeFileLogging must always be called, 
-   // because the file is always used by FATALs.
-   FinalizeFileLogging();
-   
-   return;
-}
-
-
-
-
-/*---------------------------------------------------------------------------
- * Function: KMSClient_InitializeLibrary
- *
- *--------------------------------------------------------------------------*/
-
-bool KMSClient_InitializeLibrary(
-   const utf8cstr  i_wsWorkingDirectory,
-   int i_bUseFileLog)
-{
-   bool bSuccess;
-   
-#if defined(DEBUG) && defined(METAWARE)
-   log_printf("KMSClient_InitializeLibrary : ENTERING");
-#endif
-
-   // setup SSL
-   bSuccess = K_SetupSSL() == 1;
-   if(!bSuccess)
-   {
-      return false;
-   }
-
-#if defined(DEBUG) && defined(METAWARE)
-   log_printf("KMSClient_InitializeLibrary : set current directory");
-#endif
-
-   // if i_wsWorkingDirectory is null, caller means current directory
-   if ( i_wsWorkingDirectory != NULL )
-   {
-#if defined(DEBUG) && defined(METAWARE)
-      log_printf("KMSClient_InitializeLibrary : check working directory");
-#endif
-
-      // string is there but is empty or junk
-      if (strlen(i_wsWorkingDirectory) <= 0)
-      {
-         strcpy(i_wsWorkingDirectory, ".");
-      }
-
-      if ( strlen(i_wsWorkingDirectory) >= KMS_MAX_PATH_LENGTH )
-      {
-         return false;
-      }
-
-#if defined(DEBUG) && defined(METAWARE)
-      log_printf("KMSClient_InitializeLibrary : set global working directory");
-#endif
-      
-      // set global working directory to input
-      strncpy(g_wsWorkingDirectory, 
-              i_wsWorkingDirectory,
-              KMS_MAX_PATH_LENGTH); 
-      g_wsWorkingDirectory[KMS_MAX_PATH_LENGTH] = 0;
-   }
-   else   
-   {
-      strcpy(g_wsWorkingDirectory, ".");
-   }
-
-#if defined(DEBUG) && defined(METAWARE)
-   log_printf("KMSClient_InitializeLibrary : Initialize logging");
-#endif
-
-   // initialize file logging
-   bSuccess = InitializeLogging( g_wsWorkingDirectory,
-                                 i_bUseFileLog);
-    
-   return bSuccess;
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: KMSClient_FinalizeLibrary 
- *--------------------------------------------------------------------------*/
-bool KMSClient_FinalizeLibrary()
-{
-#if defined(DEBUG) && defined(METAWARE)
-   log_printf("KMSClient_FinalizeLibrary : ENTERING");
-#endif
-   
-   K_CleanupSSL();
-   
-   FinalizeLogging();
-   
-   return true; /* always */
-}
-
-
-int LogError_lastErrno;
-
-
-/** 
- * Construct a message for the KMSAuditLogger and store the message
- *  in the profile as the last error message.  
- */
-void LogError_function(KMSClientProfile *i_pProfile,
-                       int i_iErrno,
-                       const char* i_sOperation,
-                       const char* i_sEntityID,
-                       const char* i_sNetworkAddress,
-                       const char* i_sMessage )
-{
-   FATAL_ASSERT( i_pProfile && i_sOperation );
-
-   // save for caller's use - this shouldn't be a global, but I don't
-   // want this as an item in the profile as I don't want it persisted
-   LogError_lastErrno = i_iErrno;
-
-   // log the message to a data file (and internal logs)
-#ifndef METAWARE
-   if ( g_bUseFileLog )
-#endif
-   {
-      Log_function(i_iErrno, 
-                   i_sOperation, 
-                   i_sEntityID, 
-                   i_sNetworkAddress, 
-                   i_sMessage);
-   }
-
-#ifdef METAWARE
-   /* print this to the T10000/9840 VOP */
-   /* NOTE the \n is important to VOP - leave it in */
-   tnMsg("`msg`KMS2.0:msg#=%i,op=%s\r\n",
-         i_iErrno,
-         i_sOperation);
-   
-   tnMsg("`msg`msg=%s,eid=%s,addr=%s\r\n", 
-         i_sMessage,
-         i_sEntityID, 
-         i_sNetworkAddress);
-   
-#endif
-
-   // copy the error message into the profile (for later reference)
-   strncpy(i_pProfile->m_wsErrorString, 
-           i_sOperation,
-           KMS_MAX_ERROR_STRING);
-
-   // make sure to NUL out the end
-   i_pProfile->m_wsErrorString[KMS_MAX_ERROR_STRING] = 0;
-
-   if ( i_sEntityID )
-   {
-      strncat(i_pProfile->m_wsErrorString, 
-              i_sEntityID,
-              KMS_MAX_ERROR_STRING);
-   }
-
-   if ( i_sNetworkAddress )
-   {
-      strncat(i_pProfile->m_wsErrorString, 
-              ",Address=",
-              KMS_MAX_ERROR_STRING);
-      strncat(i_pProfile->m_wsErrorString, 
-              i_sNetworkAddress,
-              KMS_MAX_ERROR_STRING);
-   }
-
-   if ( i_sMessage )
-   {
-      strncat(i_pProfile->m_wsErrorString, 
-              ",Msg=",
-              KMS_MAX_ERROR_STRING);
-      strncat(i_pProfile->m_wsErrorString, 
-              i_sMessage,
-              KMS_MAX_ERROR_STRING);
-   }
-
-   // make sure to NUL out the end
-   i_pProfile->m_wsErrorString[KMS_MAX_ERROR_STRING] = 0;
-   
-}
-
-// see KMSClientProfileImpl.h
-bool SSL_InvalidCertificate (const char * const i_sErrorString)
-{
-    if (
-        // OpenSSL generates this msg
-        strstr(i_sErrorString, "sslv3 alert certificate unknown"))
-    {
-        return true;
-    }
-    return false;
-
-}
-
-// see KMSClientProfileImpl.h
-bool ServerError (const char * i_sErrorString, int i_iErrno )
-{
-    // The Client Soap Fault Code returned by the KMA
-    // may be at the start of i_sErrorString or immediately
-    // follwing "SoapFaultString=" depending on the caller's
-    // string
-
-    int iErrorCode;
-    
-    const char* sFaultstringStart  = strstr(i_sErrorString, "SoapFaultString=" );
-    if ( sFaultstringStart )
-    {
-        iErrorCode = GET_FAULT_CODE( sFaultstringStart + strlen("SoapFaultString=") );
-    }
-    else
-    {
-        // This may be zero if there is no error code at the start of the string.
-        iErrorCode = GET_FAULT_CODE( i_sErrorString );
-    }
-
-    // the following is commented out so the former check can be observed.  This check is no longer
-    // made since invalid certificate failures may be due to a KMA that is behind on
-    // replication updates hence failover would succeed.
-//    if (
-//            // OpenSSL generates this msg
-//            SSL_InvalidCertificate(i_sErrorString))
-//    {
-//        return false;
-//    }
-            
-    if (
-       // when the KMA is locked
-       iErrorCode == CLIENT_ERROR_AGENT_APPLIANCE_LOCKED
-
-       // KMS 2.2 change when the KMA is locked
-       || iErrorCode == CLIENT_ERROR_MANAGER_APPLIANCE_LOCKED
-
-       // KMS 2.2 change for core security internal error
-       || iErrorCode == CLIENT_ERROR_MANAGER_INTERNAL
-
-       // if the KMA's pre-gen'd key pool is depleted
-       || iErrorCode == CLIENT_ERROR_AGENT_NO_READY_KEYS
-
-       // if the KMA's HSM is broke and the KMA is in FIPS mode
-       || iErrorCode == CLIENT_ERROR_SERVER_HSM_REQUIRED_BUT_MISSING
-        
-       // when the server is too slow
-       || NULL != strstr( i_sErrorString, "Timeout" )
-       || NULL != strstr( i_sErrorString, "Operation interrupted or timed out" )
-       
-       // The Appliance is powered down, or is not reachable
-       || NULL != strstr( i_sErrorString, "Connection refused" )
-
-       || NULL != strstr( i_sErrorString, "Unknown error" )
-
-       // SOAP EOF
-       || NULL != strstr( i_sErrorString, "End of file or no input:" )
-
-       // Appliance server software is not running (while Appliance machine is OK)
-       || NULL != strstr( i_sErrorString, "connect failed in tcp_connect()" )
-
-       // If the server has an internal error but still responds
-       || NULL != strstr( i_sErrorString, "Server Error" )
-
-       // OpenSSL protocol errors (Note: the SSL_ERROR_SSL may be due
-       // to invalid client-side values, but for now it's used as a
-       // catch-all; a side-effect is that any actual invalid client-side
-       // value will cause one audit log entry to be created on each
-       // Appliance in the cluster).
-       || NULL != strstr( i_sErrorString, 
-                       "Error observed by underlying BIO: No error" )
-       || NULL != strstr( i_sErrorString, 
-                          "EOF was observed that violates the protocol" )
-       || NULL != strstr( i_sErrorString, 
-                          "SSL_ERROR_SSL" ) )
-    {
-        return true;
-    }
-
-#ifndef WIN32
-	// check for errno values that imply connection problems to the server
-    switch (i_iErrno)
-    {
-        case ECONNABORTED : return true; // Connection aborted.
-        case ECONNREFUSED : return true; // Connection refused.
-        case ECONNRESET :   return true; // Connection reset.
-        case EHOSTUNREACH : return true; // Host is unreachable.
-        case ENETDOWN :     return true; // Network is down.
-        case ENETRESET :    return true; // Connection aborted by network.
-        case ENETUNREACH :  return true; // Network unreachable.
-        case ENOPROTOOPT :  return true; // Protocol not available.
-#ifndef METAWARE
-        case ETIME :        return true; // Stream ioctl() timeout.
-#endif
-        case ETIMEDOUT :    return true; // Connection timed out.
-    }
-#endif    
-    // at this point we conclude its a client side issue
-    return false;
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSClient_GetLastErrorMessage
- *
- *--------------------------------------------------------------------------*/
-
-// extern "C"
-utf8char * KMSClient_GetLastErrorMessage(KMSClientProfile *i_pProfile)
-{
-   FATAL_ASSERT(i_pProfile);
-   
-   CAutoMutex oAutoMutex( 0 );
-   if ( i_pProfile->m_pLock )
-   {
-      oAutoMutex.Lock( (K_MUTEX_HANDLE)i_pProfile->m_pLock );
-   }
-   
-   return i_pProfile->m_wsErrorString;
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: KMSClient_RetrieveEntityCertificate
- * Get the Root CA Certificate and store it into the profile
- *--------------------------------------------------------------------------*/
-static bool KMSClient_RetrieveEntityCertificate(
-   KMSClientProfile* i_pProfile,
-   utf8cstr  i_wsEntityID,
-   utf8cstr  i_wsPassphrase,
-   char* const o_sHexHashedPassphrase )
-{
-   FATAL_ASSERT( i_pProfile && i_wsEntityID && i_wsPassphrase );
-
-#if defined(DEBUG) && defined(METAWARE)
-    log_printf("KMSClient_RetrieveEntityCertificate : entered");
-#endif
-   
-   CAutoMutex oAutoMutex( (K_MUTEX_HANDLE)i_pProfile->m_pLock );
-   char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH];
-   char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH];
-   
-   strcpy(o_sHexHashedPassphrase, "");
-   
-   bool bSuccess = true;
-   bool bTryFailOver = false;
-   
-   struct soap *pstCASoap;
-   pstCASoap = (struct soap *) malloc( sizeof(struct soap) );
-   if(pstCASoap == NULL)
-   {
-#if defined(DEBUG) && defined(METAWARE)
-      log_printf("Malloc %x pstCASoap returned null\n", sizeof(struct soap));
-#endif
-      LogError(i_pProfile,
-               LoadProfile_AUDIT_CLIENT_GET_ROOT_CA_CERTIFICATE_SOAP_ERROR,
-               NULL,
-               NULL,
-               "malloc failure for pstCASoap" );
-      return false;
-   }
-
-   // initialize the SOAP connection that will get the RootCA 
-   soap_init2( pstCASoap, (SOAP_XML_STRICT | SOAP_C_UTFSTRING), (SOAP_XML_STRICT | SOAP_C_UTFSTRING) );
-
-#ifdef METAWARE
-   K_SetupCallbacks ( pstCASoap );
-#endif
-
-   CCertificate* pRootCACertificate = 0;
-   CCertificate* pEntityCertificate = 0;
-   CPrivateKey*  pEntityPrivateKey = 0;
-
-   soap_set_namespaces( pstCASoap, KMS_CA_namespaces );
-   
-   pstCASoap->connect_timeout = i_pProfile->m_iTransactionTimeout;
-   pstCASoap->send_timeout    = i_pProfile->m_iTransactionTimeout;
-   pstCASoap->recv_timeout    = i_pProfile->m_iTransactionTimeout;
-   
-   struct soap *pstCertificateSoap;
-
-   pstCertificateSoap = (struct soap *) malloc( sizeof(struct soap) );
-
-   if(pstCertificateSoap == NULL)
-   {
-#if defined(METAWARE)
-      log_printf("Malloc %x pstCertificateSoap returned null\n", 
-                 sizeof(struct soap));
-#endif
-      soap_free( pstCASoap );
-      free(pstCASoap);
-      return false;
-   }
-
-   // initialize the SOAP connection that will get the Certificate
-   soap_init2( pstCertificateSoap, (SOAP_XML_STRICT | SOAP_C_UTFSTRING), (SOAP_XML_STRICT | SOAP_C_UTFSTRING) );
-    
-#ifdef METAWARE
-   K_SetupCallbacks ( pstCertificateSoap );
-#endif
-
-   soap_set_namespaces( pstCertificateSoap, KMS_Certificate_namespaces );
-   
-   pstCertificateSoap->connect_timeout = i_pProfile->m_iTransactionTimeout;
-   pstCertificateSoap->send_timeout = i_pProfile->m_iTransactionTimeout;
-   pstCertificateSoap->recv_timeout = i_pProfile->m_iTransactionTimeout;
-   
-   CAgentLoadBalancer oLoadBalancer(i_pProfile);
-   int iIndex = oLoadBalancer.Balance();
-
-#if defined(DEBUG) && defined(METAWARE)
-   log_printf("KMSClient_RetrieveEntityCertificate : call KMS_CA__RetrieveRootCACertificate");
-#endif
-
-   // get the server's URL that will provide SOAP services
-   do
-   {
-      bSuccess = true;
-      bTryFailOver = false;
-      bool bFailedOnRetrieveRootCA = false;
-      const char* sURL = 0;
-      
-      if ( bSuccess )
-      {
-         sURL = oLoadBalancer.GetHTTPURL(iIndex, 
-                                         i_pProfile->m_iPortForCAService);
-         
-         if ( !sURL )
-         {
-            bSuccess = false;
-         }
-      }
-      
-      if ( bSuccess )
-      {
-         strncpy(i_pProfile->m_sURL, sURL, KMS_MAX_URL);
-         i_pProfile->m_sURL[KMS_MAX_URL] = 0;
-      }      
-      
-
-      // SOAP CALL -  retrieve Root CA Certificate from the Server
-      struct KMS_CA::
-         KMS_CA__RetrieveRootCACertificateResponse stRootCACertificateResponse;
-      
-      if ( bSuccess )
-      {
-#if defined(DEBUG) && defined(METAWARE)
-         log_printf("KMSClient_RetrieveCertificate : call KMS_CA__RetrieveRootCACertificate again");
-#endif
-         bSuccess = 
-            KMS_CA::soap_call_KMS_CA__RetrieveRootCACertificate(
-               pstCASoap, 
-               i_pProfile->m_sURL,
-               NULL,
-               i_wsEntityID,
-               stRootCACertificateResponse ) == SOAP_OK;
-
-         if ( !bSuccess )
-         {            
-            GetSoapFault(sSoapFaultMsg, (struct soap*)pstCASoap);      
-            GetPeerNetworkAddress(sKmaAddress, pstCASoap);
-            LogError(i_pProfile,
-                     LoadProfile_AUDIT_CLIENT_GET_ROOT_CA_CERTIFICATE_SOAP_ERROR,
-                     NULL,
-                     sKmaAddress,
-                     sSoapFaultMsg );
-
-            bTryFailOver = ServerError(GET_SOAP_FAULTSTRING(pstCASoap), pstCASoap->errnum);
-            bFailedOnRetrieveRootCA = true;
-         }
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 1\n");
-      }
-#endif
-
-
-      // Validate the SOAP response
-      if ( bSuccess )
-      {
-         if ( stRootCACertificateResponse.RootCACertificate.__size < 1 ||
-              stRootCACertificateResponse.RootCACertificate.__ptr == NULL ||
-              stRootCACertificateResponse.AuthenticationHashIterationCount < 
-              MIN_AUTHENTICATION_ITERATION_COUNT ||
-              stRootCACertificateResponse.AuthenticationHashIterationCount > 
-                  MAX_AUTHENTICATION_ITERATION_COUNT ||
-              stRootCACertificateResponse.ClientAuthenticationChallenge.__size != 
-                  AUTHENTICATION_CHALLENGE_LENGTH ||
-              stRootCACertificateResponse.ClientAuthenticationChallenge.__ptr == NULL )
-         {
-            bSuccess = false;
-
-            GetPeerNetworkAddress(sKmaAddress, pstCASoap);
-            LogError(i_pProfile,
-                     AUDIT_CLIENT_GET_ROOT_CA_CERTIFICATE_INVALID_RESPONSE_FORMAT,
-                     NULL,
-                     sKmaAddress,
-                     NULL);
-         }
-         else
-         {
-            GetPeerNetworkAddress(sKmaAddress, pstCASoap);
-            Log(AUDIT_CLIENT_GET_ROOT_CA_CERTIFICATE_SUCCESS,
-                 NULL,
-                 sKmaAddress,
-                 NULL);
-         }
-
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 2\n");
-      }
-#endif
-
-      // build our RootCACertificate object
-      if ( bSuccess )
-      {
-         pRootCACertificate = new CCertificate;
-
-         // make sure the new was successful
-         bSuccess = ( pRootCACertificate != 0 );
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 3\n");
-      }
-#endif
-
-      if ( bSuccess )
-      {
-         // OVERLOADED Load method - 3 parameters means 
-         // recall from BUFFER
-         bSuccess =
-            pRootCACertificate->Load(
-               stRootCACertificateResponse.RootCACertificate.__ptr,  // to here
-               stRootCACertificateResponse.RootCACertificate.__size, // size
-               PKI_FORMAT );                                         // ignored
-
-         if( !bSuccess )
-         {          
-            GetPeerNetworkAddress(sKmaAddress, pstCASoap);
-            LogError(i_pProfile,
-                     AUDIT_CLIENT_GET_ROOT_CA_CERTIFICATE_INVALID_CA_CERTIFICATE_FORMAT,
-                     NULL,
-                     sKmaAddress,
-                     NULL);
-         }
-
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 4\n");
-      }
-#endif
-
-      
-      if ( bSuccess )
-      {
-         // save the built CACertificate object to a FILE (i_pProfile gets the
-         // persistent handle to that file) 
-         bSuccess = StoreCACertificate( i_pProfile, pRootCACertificate );
-         
-         if ( !bSuccess )
-         {
-            LogError(i_pProfile,AUDIT_CLIENT_GET_CERTIFICATE_SAVE_CA_CERTIFICATE_FAILED,
-                     NULL,
-                     NULL,
-                     NULL);
-         }           
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 5\n");
-      }
-#endif
-	
-      //-------------------------------
-      // Initialize SSL - use SERVER AUTH
-      //-------------------------------
-      if ( bSuccess )
-      {
-         // SERVER_AUTHENTICATION needs just the pstCertificateSoap
-         bSuccess =
-            K_soap_ssl_client_context( 
-               i_pProfile,                            // in ->m_wsProfileName,->m_sHexHashedPassphrase
-               pstCertificateSoap,                    // in - soap structure
-               SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION // in - flags
-               ) == SOAP_OK;
-         
-         if ( !bSuccess )
-         {
-            GetSoapFault(sSoapFaultMsg, (struct soap*)pstCertificateSoap);
-            GetPeerNetworkAddress(sKmaAddress, pstCertificateSoap);
-            LogError(i_pProfile,AUDIT_CLIENT_GET_CERTIFICATE_SOAP_ERROR,
-                     NULL,
-                     sKmaAddress,
-                     sSoapFaultMsg );
-         }
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 6\n");
-      }
-#endif
-
-      // hash the passphrase passed in
-      char sHexAuthenticationSecret[2*HASH_LENGTH+1];
-
-      if ( bSuccess )
-      {
-         bSuccess = ComputeFixedEntityHashedPassphraseAndAuthenticationSecret(
-            i_wsPassphrase,
-            o_sHexHashedPassphrase,
-            stRootCACertificateResponse.AuthenticationHashIterationCount,
-            sHexAuthenticationSecret );
-
-         if ( !bSuccess )
-         {
-            LogError(i_pProfile,AUDIT_CLIENT_COMPUTE_FIXED_FAILED,
-                     NULL,
-                     NULL,
-                     NULL);
-         }
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 7\n");
-      }
-#endif
-      
-      // copy received Root CA into buffer for input 
-      // into challenge-response computation
-      unsigned char aRootCACertificate[MAX_CERT_SIZE];
-      int iRootCACertificateLength;
-
-      if ( bSuccess )
-      {
-         // OVERLOADED save method - save iRootCACertificateLength to aRootCACertificate
-         // buffer 
-         bSuccess = pRootCACertificate->Save( 
-            aRootCACertificate,    
-            MAX_CERT_SIZE, 
-            &iRootCACertificateLength,   
-            PKI_FORMAT );
-
-         if ( !bSuccess )
-         {
-            LogError(i_pProfile,AUDIT_CLIENT_SAVE_ROOTCA_FAILED,
-                     NULL,
-                     NULL,
-                     NULL);
-         }
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 8\n");
-      }
-#endif
-
-      // respond to server's challenge
-      unsigned char aAuthenticationSecret[AUTHENTICATION_SECRET_LENGTH];
-      unsigned char 
-         aClientAuthenticationChallengeResponse[AUTHENTICATION_RESPONSE_LENGTH];
-      
-      if ( bSuccess )
-      {
-         FATAL_ASSERT( AUTHENTICATION_SECRET_LENGTH == 
-                       ConvertUTF8HexStringToBinary( 
-                          sHexAuthenticationSecret, NULL ) );
-
-         ConvertUTF8HexStringToBinary( 
-            sHexAuthenticationSecret, aAuthenticationSecret );
-
-         // client authentication response
-         bSuccess = ComputeChallengeResponse(
-            aAuthenticationSecret,
-            AUTHENTICATION_SECRET_LENGTH,
-            aRootCACertificate,
-            iRootCACertificateLength,
-            stRootCACertificateResponse.ClientAuthenticationChallenge.__ptr,
-            AUTHENTICATION_CHALLENGE_LENGTH,
-            aClientAuthenticationChallengeResponse,
-            AUTHENTICATION_RESPONSE_LENGTH );
-         
-         if ( !bSuccess )
-         {
-            LogError(i_pProfile,AUDIT_CLIENT_COMPUTE_CHALLENGE_RESPONSE_FAILED,
-                     NULL,
-                     NULL,
-                     NULL);
-         }
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 9\n");
-      }
-#endif
-
-      struct KMS_Certificate::xsd__hexBinary stClientAuthenticationResponse;
-
-      if ( bSuccess )
-      {
-         stClientAuthenticationResponse.__size = 
-            AUTHENTICATION_RESPONSE_LENGTH;
-         stClientAuthenticationResponse.__ptr = 
-            (unsigned char*)soap_malloc( 
-               pstCertificateSoap, AUTHENTICATION_RESPONSE_LENGTH );
-
-         if ( stClientAuthenticationResponse.__ptr != NULL )
-         {
-            memcpy( stClientAuthenticationResponse.__ptr, 
-                    aClientAuthenticationChallengeResponse, 
-                    AUTHENTICATION_RESPONSE_LENGTH );
-         }
-         else
-         {
-            bSuccess = false;
-         }
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 10\n");
-      }
-#endif
-
-      // generate challenge nonce
-      struct KMS_Certificate::xsd__hexBinary stServerAuthenticationChallenge;
-
-      if ( bSuccess )
-      {
-         stServerAuthenticationChallenge.__size = 
-            AUTHENTICATION_CHALLENGE_LENGTH;
-         stServerAuthenticationChallenge.__ptr = 
-            (unsigned char*)soap_malloc( pstCertificateSoap, 
-                                         AUTHENTICATION_CHALLENGE_LENGTH );
-            
-         bSuccess = ( stServerAuthenticationChallenge.__ptr != NULL );
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 11\n");
-      }
-#endif      
-
-      if ( bSuccess )
-      {
-         bSuccess = GetPseudorandomBytes( 
-            AUTHENTICATION_CHALLENGE_LENGTH, 
-            stServerAuthenticationChallenge.__ptr );
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 12\n");
-      }
-#endif      
-
-      if ( bSuccess )
-      {
-         sURL = oLoadBalancer.GetHTTPSURL(iIndex, 
-                                          i_pProfile->
-                                          m_iPortForCertificateService);
-
-         if ( !sURL )
-         {
-            bSuccess = false;
-         }
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 13\n");
-      }
-#endif      
-
-      // Verify that the same URL is used for Root CA Certificate
-      // retrieval as for Entity Certificate retrieval
-        
-      if ( bSuccess )
-      {            
-         char sTempCAURL[KMS_MAX_URL + 1];
-         strncpy( sTempCAURL, i_pProfile->m_sURL, KMS_MAX_URL );
-         sTempCAURL[KMS_MAX_URL] = 0;
-
-         char * sRetrieveRootCACertificateURL = strtok( sTempCAURL, ":" );
-        
-         sRetrieveRootCACertificateURL = strtok(NULL, ":");
-
-         char sTempAgentURL[KMS_MAX_URL + 1];
-         strncpy( sTempAgentURL, sURL, KMS_MAX_URL );
-         sTempAgentURL[KMS_MAX_URL] = 0;
-         char * sRetrieveAgentCertificateURL = strtok( sTempAgentURL, ":" );
-         sRetrieveAgentCertificateURL = strtok(NULL, ":");
-
-         FATAL_ASSERT( strcmp( sRetrieveRootCACertificateURL, 
-                               sRetrieveAgentCertificateURL ) == 0 );
-
-         strncpy(i_pProfile->m_sURL, sURL, KMS_MAX_URL);
-         i_pProfile->m_sURL[KMS_MAX_URL] = 0;
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 14\n");
-      }
-#endif
-
-      KMS_Certificate::KMS_Certificate__RetrieveEntityCertificateResponse 
-         stRetrieveEntityCertificateResponse;
-
-      // SOAP - retrieve ENTITY Certificate, passing the challenge response,
-      // a challenge to the server and get back the server's response
-      if ( bSuccess )
-      {
-         bSuccess =
-            KMS_Certificate::soap_call_KMS_Certificate__RetrieveEntityCertificate(
-               pstCertificateSoap,
-               sURL,
-               NULL,
-               (utf8cstr )i_wsEntityID,
-               stClientAuthenticationResponse,
-               stServerAuthenticationChallenge,
-               stRetrieveEntityCertificateResponse ) == SOAP_OK;
-
-         if( !bSuccess )
-         {                
-            GetSoapFault(sSoapFaultMsg, (struct soap*)pstCertificateSoap);
-            GetPeerNetworkAddress(sKmaAddress, pstCertificateSoap);
-            LogError(i_pProfile,AUDIT_CLIENT_GET_CERTIFICATE_SOAP_ERROR,
-                     NULL,
-                     sKmaAddress,
-                     sSoapFaultMsg );
- 
-            bTryFailOver = ServerError(GET_SOAP_FAULTSTRING(pstCertificateSoap),
-                                        pstCertificateSoap->errnum);
-         }
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 15\n");
-      }
-#endif      
-
-      // Validate the response structure
-      if ( bSuccess )
-      {
-         if ( stRetrieveEntityCertificateResponse.
-              ServerAuthenticationResponse.__ptr == NULL 
-
-              || stRetrieveEntityCertificateResponse.
-              ServerAuthenticationResponse.__size != 
-              AUTHENTICATION_RESPONSE_LENGTH
-
-              || stRetrieveEntityCertificateResponse.Certificate.__size < 1
-
-              || stRetrieveEntityCertificateResponse.Certificate.__ptr == 0
-
-              || stRetrieveEntityCertificateResponse.
-              WrappedPrivateKeyMaterial.__size < 1
-
-              || stRetrieveEntityCertificateResponse.
-              WrappedPrivateKeyMaterial.__ptr == 0 )
-         {
-            bSuccess = false;
-
-            GetPeerNetworkAddress(sKmaAddress, pstCertificateSoap);
-            LogError(i_pProfile,AUDIT_CLIENT_GET_CERTIFICATE_INVALID_RESPONSE_FORMAT,
-                     NULL,
-                     sKmaAddress,
-                     NULL );
-         }
-         else
-         {
-            GetPeerNetworkAddress(sKmaAddress, pstCertificateSoap);
-            Log(AUDIT_CLIENT_GET_CERTIFICATE_SUCCESS,
-                 NULL,
-                 sKmaAddress,
-                 NULL );
-         }
-     }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 16\n");
-      }
-#endif      
-
-      // if valid, calculate the correct challenge-response
-      unsigned char 
-         aServerAuthenticationChallengeResponse[AUTHENTICATION_RESPONSE_LENGTH];
-
-      if ( bSuccess )
-      {
-         bSuccess = ComputeChallengeResponse(
-            aAuthenticationSecret,
-            AUTHENTICATION_SECRET_LENGTH,
-            aRootCACertificate,
-            iRootCACertificateLength,
-            stServerAuthenticationChallenge.__ptr,
-            AUTHENTICATION_CHALLENGE_LENGTH,
-            aServerAuthenticationChallengeResponse,
-            AUTHENTICATION_RESPONSE_LENGTH );
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 17\n");
-      }
-#endif      
-
-      // if successful, check if the server provided the correct challenge-response
-      if ( bSuccess )
-      {
-         if ( 0 != memcmp(
-            aServerAuthenticationChallengeResponse,
-            stRetrieveEntityCertificateResponse.ServerAuthenticationResponse.__ptr,
-            AUTHENTICATION_RESPONSE_LENGTH )  )
-         {
-            bSuccess = false;
-
-            GetPeerNetworkAddress(sKmaAddress, pstCertificateSoap);
-            LogError(i_pProfile,AUDIT_CLIENT_GET_CERTIFICATE_INVALID_CHALLENGE_RESPONSE,
-                     NULL,
-                     sKmaAddress,
-                     NULL );
-         }
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 18\n");
-      }
-#endif      
-
-
-      if ( bSuccess )
-      {
-         pEntityCertificate = new CCertificate;
-         // if certificate was obtained
-         bSuccess = ( pEntityCertificate != 0 );
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 19\n");
-      }
-#endif      
-
-      if ( bSuccess )
-      {
-         // Load(recall) the signed certificate using OVERLOADED load method
-         // 3 parameters means load from a buffer
-         bSuccess = pEntityCertificate->Load(
-            stRetrieveEntityCertificateResponse.Certificate.__ptr,  // load into
-            stRetrieveEntityCertificateResponse.Certificate.__size, 
-            PKI_FORMAT );
-
-         if ( !bSuccess )
-         {
-            GetPeerNetworkAddress(sKmaAddress, pstCertificateSoap);
-            LogError(i_pProfile,AUDIT_CLIENT_GET_CERTIFICATE_INVALID_CERTIFICATE_FORMAT,
-                     NULL,
-                     sKmaAddress,
-                     NULL );
-         }
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 20\n");
-      }
-#endif      
-
-      if ( bSuccess )
-      {
-         pEntityPrivateKey = new CPrivateKey;
-         bSuccess = ( pEntityPrivateKey != 0 );
-      }
-#if defined(DEBUG) && defined(METAWARE)
-      else
-      {
-         log_printf("!bSuccess 21\n");
-      }
-#endif      
-
-
-      if ( bSuccess )
-      {
-         // Load the Private Key using OVERLOADED Load method - 3 parameters
-         // means load from a buffer
-
-         // TODO: change this when certificate service supports requesting unwrapped private keys
-         bSuccess = pEntityPrivateKey->Load(
-            stRetrieveEntityCertificateResponse.WrappedPrivateKeyMaterial.__ptr, // load into
-            stRetrieveEntityCertificateResponse.WrappedPrivateKeyMaterial.__size, 
-            NULL, 
-            PKI_FORMAT );
-
-         if (!bSuccess )
-         {
-
-            GetPeerNetworkAddress(sKmaAddress, pstCertificateSoap);
-            LogError(i_pProfile,AUDIT_CLIENT_GET_CERTIFICATE_INVALID_KEY_FORMAT,
-                     NULL,
-                     sKmaAddress,
-                     NULL );
-         }
-      }
-
-      if ( bSuccess )
-      {
-            strncpy(i_pProfile->m_wsEntityID,
-                i_wsEntityID,
-                KMS_MAX_ENTITY_ID );
-            i_pProfile->m_wsEntityID[KMS_MAX_ENTITY_ID] = 0;
-
-            // store PKI certificates and unwrapped private key  
-            bSuccess = StorePKIcerts( i_pProfile, 
-                            pRootCACertificate, 
-                            pEntityCertificate, 
-                            pEntityPrivateKey,
-#ifdef KMSUSERPKCS12
-			    i_wsPassphrase
-#else
-                            NULL
-#endif
-			    );
-#ifdef KMSUSERPKCS12
-		if (bSuccess) {
-			/*
-			 * Write out the cert and key individually so GetPKIcerts
-			 * can use them.
-			 */
-			bSuccess = StoreTempAgentPKI(i_pProfile,
-			    pEntityCertificate, pEntityPrivateKey);
-		}
-
-#endif
-	}
-
-      if ( !bSuccess )
-      {
-         if (pRootCACertificate)
-         {
-             delete pRootCACertificate;
-         }
-         if (pEntityCertificate)
-         {
-             delete pEntityCertificate;
-         }
-         if (pEntityPrivateKey)
-         {
-             delete pEntityPrivateKey;
-         }
-
-         i_pProfile->m_iEnrolled = FALSE;
-
-         if ( bTryFailOver )
-         {
-            iIndex = oLoadBalancer.FailOver(iIndex, bFailedOnRetrieveRootCA ? pstCASoap : pstCertificateSoap);
-         }
-      }
-   } 
-   while ( bTryFailOver && (iIndex >= 0) && !bSuccess );
-
-   // certs are now persisted so free up space
-   if ( bSuccess )
-   {
-        delete pRootCACertificate;
-        delete pEntityCertificate;
-        delete pEntityPrivateKey;
-   }
-
-   // Clean up SOAP resources for pstCASoap
-   soap_destroy( pstCASoap );
-   soap_end( pstCASoap );
-   soap_done( pstCASoap );
-
-   // Clean up SOAP resources for pstCertificateSoap
-   soap_destroy( pstCertificateSoap );
-   soap_end( pstCertificateSoap );
-   soap_done( pstCertificateSoap );
-
-   free(pstCASoap);
-   free(pstCertificateSoap);
-
-   return bSuccess;
-}
-
-/*--------------------------------------------------------------------------
- * LoadClusterInformation
- *  calls GetCluster - that's it.
- *    If there is no cluster file, this function will return true, 
- *    but o_bClusterInformationFound will be false.
- *-------------------------------------------------------------------------*/
-static bool LoadClusterInformation( KMSClientProfile* i_pProfile, 
-                                    int& o_bClusterInformationFound )
-{
-    FATAL_ASSERT( i_pProfile );
-
-    o_bClusterInformationFound = false;
-
-    CAutoMutex oAutoMutex( (K_MUTEX_HANDLE)i_pProfile->m_pLock );    
-
-    return GetCluster( i_pProfile, o_bClusterInformationFound ) ;
-    
-}
-
-
-/*--------------------------------------------------------------------------
- * EnrollAgent
- *  calls functions to perform enrollment and save PKI info to persistent storage 
- *  stores configuration in persistent storage
- *-------------------------------------------------------------------------*/
-
-static bool EnrollAgent( KMSClientProfile * io_pProfile,
-                         utf8cstr           i_wsEntityID,
-                         utf8cstr           i_wsPassphrase )
-{
-    FATAL_ASSERT( io_pProfile && i_wsEntityID && i_wsPassphrase );
-
-    bool bSuccess = true;
-
-    // see KMSAgentCryptoUtilities for HASH_LENGTH, aka KMS_MAX_HASH_SIZE
-    char sHexHashedPassphrase[2*KMS_MAX_HASH_SIZE+1];
-
-    if ( bSuccess )
-    {
-        // performs enrollment and saves PKI info to persistent storage 
-        bSuccess = KMSClient_RetrieveEntityCertificate(
-                                    io_pProfile,
-                                    i_wsEntityID,
-                                    i_wsPassphrase,
-                                    sHexHashedPassphrase );
-
-        // KMSClient_RetrieveCertificate logs errors
-    }
-
-    if (bSuccess)
-    {
-        strncpy(io_pProfile->m_sHexHashedPassphrase, 
-            sHexHashedPassphrase,
-            2*KMS_MAX_HASH_SIZE );
-        io_pProfile->m_sHexHashedPassphrase[2*KMS_MAX_HASH_SIZE] = 0;
-        
-        // persist the profile now updated with the hashed passphrase
-        bSuccess = StoreConfig( io_pProfile ); 
-
-        if (!bSuccess)
-        {
-              Log(AUDIT_CLIENT_LOAD_PROFILE,
-                  i_wsEntityID,
-                  NULL,
-                  "store config failed following enrollment" );
-        }
-    }
-
-    return bSuccess;
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSClient_LoadProfile
- *
- *--------------------------------------------------------------------------*/
-bool KMSClient_LoadProfile(
-                KMSClientProfile *io_pProfile,
-                utf8char *i_wsProfileName,
-                utf8char *i_wsEntityID,
-                utf8char *i_wsPassphrase,
-                utf8char *i_wsApplianceAddress,
-                int      i_iTransactionTimeout,
-                int      i_iFailOverLimit,
-                int      i_iClusterDiscoveryFrequency,
-                int       i_eKMSmode)
-{
-    FATAL_ASSERT(io_pProfile);
-    FATAL_ASSERT(i_wsProfileName);
-
-    bool bSuccess = true;
-
-    char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH];
-    char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH];
-
-#if defined(DEBUG) && defined(METAWARE)
-    log_printf("KMSClient_LoadProfile : entered");
-#endif
-    
-    memset( io_pProfile, 0, sizeof(KMSClientProfile) );
-
-    // create lock
-
-    if (bSuccess)
-    {
-        bSuccess = 
-           ( K_CreateMutex((K_MUTEX_HANDLE *)&io_pProfile->m_pLock) == 
-             K_SYS_OK );
-    }
-
-    // initialize profile with parameters
-
-    strncpy(io_pProfile->m_wsProfileName,
-            i_wsProfileName,
-            KMS_MAX_ENTITY_ID); 
-    io_pProfile->m_wsProfileName[KMS_MAX_ENTITY_ID] = 0;
-
-    io_pProfile->m_iPortForCAService = 
-       DEFAULT_CA_SERVICE_PORT_NUMBER;
-    io_pProfile->m_iPortForCertificateService = 
-       DEFAULT_CERTIFICATE_SERVICE_PORT_NUMBER;
-    io_pProfile->m_iPortForDiscoveryService = 
-       DEFAULT_DISCOVERY_SERVICE_PORT_NUMBER;
-    io_pProfile->m_iPortForAgentService = 
-       DEFAULT_AGENT_SERVICE_PORT_NUMBER;
-    strncpy(io_pProfile->m_wsApplianceAddress,
-            i_wsApplianceAddress,
-            KMS_MAX_NETWORK_ADDRESS); 
-    io_pProfile->m_wsApplianceAddress[KMS_MAX_NETWORK_ADDRESS] = 0;
-    io_pProfile->m_iClusterDiscoveryFrequency = i_iClusterDiscoveryFrequency;
-    io_pProfile->m_iTransactionTimeout = i_iTransactionTimeout;
-    io_pProfile->m_iFailoverLimit = i_iFailOverLimit;
-    io_pProfile->m_eKMSmode = i_eKMSmode;
-
-    // if the file isn't found, create a new one
-    bool bProfileExists = ProfileExists( g_wsWorkingDirectory,  /* pass in default */
-                                         io_pProfile->m_wsProfileName );
-
-#ifdef KMSUSERPKCS12
-	/*
-	 * Fix logic for determining if this request is for enrollment.
-	 * Look to see if the server cert and clientkey.p12 file exist.
-	 * We always expect a password for Solaris which is used to
-	 * validate that the user has access to the clientkey data by
-	 * attempting to use it to open the PKCS12 file.
-	 */
-	 bool bEnrolling = !ClientKeyP12Exists(io_pProfile->m_wsProfileName);
-#else
-    bool bEnrolling = i_wsEntityID && i_wsPassphrase;
-#endif
-
-    if ( bSuccess && !bEnrolling && !bProfileExists )
-    {
-       // when not enrolling a profile must exist
-       bSuccess = false;
-       Log(AUDIT_CLIENT_LOAD_PROFILE,
-           i_wsProfileName,
-           NULL,
-           "Enrollment attempted but profile could not be found" );
-    }
-
-    // if the file isn't found, create a new one
-    if ( bSuccess && !bProfileExists )
-    {
-       strncpy(io_pProfile->m_wsEntityID,
-               i_wsEntityID,
-               KMS_MAX_ENTITY_ID );
-       io_pProfile->m_wsEntityID[KMS_MAX_ENTITY_ID] = 0;
-       bSuccess = CreateProfile( io_pProfile, 
-                                 g_wsWorkingDirectory, 
-                                 io_pProfile->m_wsProfileName );
-    }
-    
-    // load profile.cfg file
-    if ( bSuccess )
-    {
-        bSuccess = GetConfig( io_pProfile );
-
-    }
-
-    // if profile settings changed then update the profile storage
-    if ( bSuccess && 
-         ( strncmp(io_pProfile->m_wsApplianceAddress, 
-                   i_wsApplianceAddress, KMS_MAX_NETWORK_ADDRESS ) != 0 ||
-           io_pProfile->m_iClusterDiscoveryFrequency != i_iClusterDiscoveryFrequency ||
-           io_pProfile->m_iTransactionTimeout != i_iTransactionTimeout ||
-           io_pProfile->m_iFailoverLimit != i_iFailOverLimit
-         ))
-    {
-        strncpy(io_pProfile->m_wsApplianceAddress,
-                i_wsApplianceAddress,
-                KMS_MAX_NETWORK_ADDRESS); 
-        io_pProfile->m_wsApplianceAddress[KMS_MAX_NETWORK_ADDRESS] = 0;
-        io_pProfile->m_iClusterDiscoveryFrequency = i_iClusterDiscoveryFrequency;
-        io_pProfile->m_iTransactionTimeout = i_iTransactionTimeout;
-        io_pProfile->m_iFailoverLimit = i_iFailOverLimit;
-
-        bSuccess = StoreConfig( io_pProfile );
-    }
-
-    // get PKI info from prior enrollment
-    if ( bSuccess && !bEnrolling )
-    {
-#ifdef KMSUSERPKCS12
-	/*
-	 * Decrypt the PKCS12 file with the client cert and key using
-	 * the given password.  If it fails, then return an auth failure
-	 * status.  If success, write the client cert and key to the client file
-	 * so it can be used later by the SOAP SSL functions.
-	 */
-	CCertificate* pEntityCertificate = new CCertificate;;
-	CPrivateKey*  pEntityPrivateKey = new CPrivateKey;
-	bSuccess = GetPKCS12CertAndKey(io_pProfile,
-	    i_wsPassphrase,
-	    pEntityCertificate,
-	    pEntityPrivateKey);
-	if (!bSuccess) {
-		Log(AUDIT_CLIENT_LOAD_PROFILE,
-			i_wsProfileName,
-			NULL,
-			"Enrollment Certificate and Private Key "\
-			"were not loaded from PKCS12" );
-	} else {
-		/*
-		 * Write out the cert and key individually so GetPKIcerts
-		 * can use them.
-		 */
-		 bSuccess = StoreTempAgentPKI(io_pProfile,
-		    pEntityCertificate, pEntityPrivateKey);
-		 if (!bSuccess) {
-			Log(AUDIT_CLIENT_LOAD_PROFILE,
-				i_wsProfileName,
-				NULL,
-				"Enrollment Certificate and Private Key "\
-				"were not stored to file." );
-		 }
-	}
-	delete pEntityCertificate;
-	delete pEntityPrivateKey;
-
-#endif
-	if (bSuccess)
-        	bSuccess = GetPKIcerts( io_pProfile );
-    }
-
-    // if not enrolling then previously enrolled PKI info should now be initialized
-    if ( bSuccess && !bEnrolling && 
-        (!io_pProfile->m_sHexHashedPassphrase || 
-        !io_pProfile->m_iEnrolled  ))
-    {
-        bSuccess = false;
-        Log(AUDIT_CLIENT_LOAD_PROFILE,
-          i_wsProfileName,
-          NULL,
-          "Enrollment Certificates and Private Key were not loaded from profile" );
-    }
-
-    io_pProfile->m_bIsClusterDiscoveryCalled = false;
-
-    // allocate main soap struct
-    struct soap* pstSoap = 0;
-
-    if ( bSuccess )
-    {
-        pstSoap = (struct soap*)malloc( sizeof(struct soap) );
-
-        io_pProfile->m_pvSoap = pstSoap;
-
-        bSuccess = ( pstSoap != NULL );
-
-        if ( bSuccess )
-        {
-            soap_init2( pstSoap, 
-                    (SOAP_XML_STRICT | SOAP_C_UTFSTRING ),
-                    (SOAP_XML_STRICT | SOAP_C_UTFSTRING) );
-            
-#ifdef METAWARE
-            K_SetupCallbacks ( pstSoap );
-#endif
-
-            soap_set_namespaces( pstSoap, KMS_Agent_namespaces );
-
-            pstSoap->connect_timeout = io_pProfile->m_iTransactionTimeout;
-            pstSoap->send_timeout = io_pProfile->m_iTransactionTimeout;
-            pstSoap->recv_timeout = io_pProfile->m_iTransactionTimeout;
-        }
-        else
-        {
-#if defined(DEBUG) && defined(METAWARE)
-           log_printf("Malloc %x pstSoap returned null\n", 
-                      sizeof(struct soap));
-#endif
-           
-        }      
-    }
-
-    // delete the existing cluster config if the input IP address 
-    // does not match one already known to the cluster config
-
-    // Note that KMSClientProfile may be too large to fit on the stack, so we're
-    // going to put it on the heap.
-
-    KMSClientProfile* pstTempProfile = 0;
-    bool bFound = false;
-    int i;
-
-    if ( bSuccess )
-    {
-        pstTempProfile = (KMSClientProfile*)malloc( sizeof(KMSClientProfile) );
-        bSuccess = (pstTempProfile != 0);
-#if defined(METAWARE)
-        if (!bSuccess) 
-           log_printf("Malloc %x pstTempProfile returned null\n", 
-                      sizeof(KMSClientProfile));
-#endif
-
-    }
-
-    int bClusterInformationFound = false;
-
-    if ( bSuccess )
-    {
-        memcpy( pstTempProfile, io_pProfile, sizeof(KMSClientProfile) );
-
-        bSuccess = LoadClusterInformation( pstTempProfile, bClusterInformationFound );
-    }
-
-    // got cluster info from persistent storage
-    if ( bSuccess && bClusterInformationFound )
-    {
-       // see if address is a member of the remembered cluster or is a 
-       // new kma, meaning this KMA joins the cluster as the 
-       // discovery KMA.
-        for ( i = 0; i < pstTempProfile->m_iClusterNum; i++ )
-        {
-            bFound = (strncmp( pstTempProfile->m_aCluster[i].m_wsApplianceNetworkAddress, 
-                              io_pProfile->m_wsApplianceAddress,
-                              KMS_MAX_NETWORK_ADDRESS) == 0);
-
-            if ( bFound )
-            {
-                break;
-            }
-#if defined(DEBUG) && defined(METAWARE)
-            else
-               log_printf ("KMSClient_LoadProfile : Appliance Address doesn't match");
-#endif
-        }
-        
-        if ( !bFound ) 
-        {
-#if defined(DEBUG) && defined(METAWARE)
-           log_printf ("KMSClient_LoadProfile : delete cluster");
-#endif
-           DeleteCluster( pstTempProfile );
-           char msg[256];
-           K_snprintf(msg, 256,
-               "KMSClientProfile.LoadProfile(): deleting previous cluster config, %s not found\n",
-                io_pProfile->m_wsApplianceAddress);
-           Log(AUDIT_CLIENT_LOAD_PROFILE,
-              i_wsProfileName,
-              NULL,
-              msg );
-           DeleteCluster( pstTempProfile );
-        }
-        else
-        {
-            // since address is a member of the persisted cluster copy the persisted cluster info to the profile 
-            io_pProfile->m_iClusterNum = pstTempProfile->m_iClusterNum;
-            memcpy(io_pProfile->m_aCluster,
-                   pstTempProfile->m_aCluster,
-                    sizeof(KMSClusterEntry)*io_pProfile->m_iClusterNum);
-        }
-    }
-#if defined(DEBUG) && defined(METAWARE)
-    else
-       log_printf ("KMSClient_LoadProfile : no persisted cluster information");
-#endif
-
-    if ( pstTempProfile )
-    {
-#if defined(DEBUG) && defined(METAWARE)
-       log_printf ("KMSClient_LoadProfile : free the temporary profile");
-#endif
-        free( pstTempProfile );
-        pstTempProfile = 0;
-    }
-
-    if ( bSuccess && !io_pProfile->m_iEnrolled )
-    {
-#if defined(DEBUG) && defined(METAWARE)
-       log_printf ("KMSClient_LoadProfile : call EnrollAgent");
-#endif
-        // enroll the agent
-        bSuccess = EnrollAgent( io_pProfile,
-                                i_wsEntityID,
-                                i_wsPassphrase );
-    }
-#if defined(DEBUG) && defined(METAWARE)
-    else if (io_pProfile->m_iEnrolled)
-       log_printf ("KMSClient_LoadProfile : Already Enrolled");
-#endif
-
-
- 
-    if (bSuccess)
-    {
-       // Initialize SSL - use CLIENT AUTH
-       // CLIENT_AUTHENTICATION needs the pstSoap, and expects 
-       // the profile io_pProfile to be full (have the other certificates 
-       // and keypair)
-
-        if ( bSuccess )
-        {
-            bSuccess = 
-                K_soap_ssl_client_context( 
-                   io_pProfile,                            // in/out
-                   pstSoap,                                // out
-                   SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION  // in - flags
-                    ) == SOAP_OK;
-
-            if ( !bSuccess )
-            {
-#if defined(DEBUG) && defined(METAWARE)
-                if (!bSuccess)
-                  log_printf ("KMSClient_LoadProfile : K_soap_ssl_client_context failed");
-#endif
-                GetSoapFault(sSoapFaultMsg, (struct soap*)pstSoap);      
-                GetPeerNetworkAddress(sKmaAddress, pstSoap);
-
-                LogError(io_pProfile,
-                    AUDIT_CLIENT_LOAD_PROFILE_SOAP_ERROR,
-                    NULL,
-                    sKmaAddress,
-                    sSoapFaultMsg );
-            }
-        }
-        
-        // discover the cluster
-
-        if ( bSuccess && 
-            io_pProfile->m_iClusterDiscoveryFrequency > 0 )
-         {
-              bSuccess = ( KMSClient_GetClusterInformation(
-                                            io_pProfile,
-                                            io_pProfile->m_wsEntitySiteID, 
-                                            sizeof(io_pProfile->m_wsEntitySiteID),
-                                            &(io_pProfile->m_iClusterNum),
-                                            io_pProfile->m_aCluster,
-                                            KMS_MAX_CLUSTER_NUM) != 0 );
-              // KMSClient_GetClusterInformation logs errors
-              
-              if (bSuccess && i_eKMSmode == FIPS_MODE)
-              {
-                    bSuccess = !KMSClient_NoFIPSCompatibleKMAs(io_pProfile);
-                    if (!bSuccess)
-                    {
-                        LogError(io_pProfile,
-                            AUDIT_CLIENT_AGENT_LOAD_PROFILE_NO_FIPS_COMPATIBLE_KMAS_AVAILABLE,
-                            NULL,
-                            NULL,
-                            NULL );                        
-                    }
-              }
-         }
-#if defined(DEBUG) && defined(METAWARE)
-        if (!bSuccess)
-           log_printf ("KMSClient_LoadProfile : getClusterInformation failed");
-#endif
-
-#ifdef KMSUSERPKCS12
-	/*
-	 * Once the SSL context is established, delete the
-	 * private key file.
-	 */
-	 (void) CleanupPrivateKeyFile(io_pProfile);
-#endif
-    }
-#if defined(DEBUG) && defined(METAWARE)
-    else if (!bSuccess)
-       log_printf ("KMSClient_LoadProfile : EnrollAgent failed");
-#endif
-
-    CAgentLoadBalancer *pAgentLoadBalancer = new CAgentLoadBalancer(io_pProfile);
-    if(pAgentLoadBalancer == NULL)
-    {
-        bSuccess = false;
-    }
-
-#if defined(DEBUG) && defined(METAWARE)
-    if (!bSuccess)
-       log_printf ("KMSClient_LoadProfile : new CAgentLoadBalancer failed");
-#endif
-
-    io_pProfile->m_pAgentLoadBalancer = pAgentLoadBalancer;
-
-    // create a data unit server affinity cache for Agents
-
-    if ( bSuccess )
-    {
-        io_pProfile->m_pDataUnitCache = new CDataUnitCache();
-
-        bSuccess = ( io_pProfile->m_pDataUnitCache != NULL );
-    }
-
-    if ( bSuccess )
-    {
-#if defined(DEBUG) && defined(METAWARE)
-       log_printf ("KMSClient_LoadProfile : set version to KMS_AGENT_VERSION = %x", 
-                   KMS_AGENT_VERSION);
-       log_printf ("KMSClient_LoadProfile : profile is: %x\n", io_pProfile);
-#endif
-       // this is checked later by ProfileLoaded and is taken 
-       // to indicate that the profile was correctly loaded
-	   io_pProfile->m_iVersion = KMS_AGENT_VERSION;
-    }
-
-    if( !bSuccess )
-    {
-        K_DestroyMutex((K_MUTEX_HANDLE)io_pProfile->m_pLock);
-        io_pProfile->m_pLock = 0;
-
-        if ( io_pProfile->m_pvSoap )
-        {
-            soap_destroy( (struct soap*)io_pProfile->m_pvSoap );
-            soap_end( (struct soap*)io_pProfile->m_pvSoap );
-            soap_done( (struct soap*)io_pProfile->m_pvSoap );
-
-            free( (struct soap*)io_pProfile->m_pvSoap );
-            io_pProfile->m_pvSoap = 0;
-
-            if( io_pProfile->m_pAgentLoadBalancer != NULL)
-            {
-                delete(reinterpret_cast <CAgentLoadBalancer *>(io_pProfile->m_pAgentLoadBalancer));
-            }
-
-            if( io_pProfile->m_pDataUnitCache != NULL)
-            {
-                delete(reinterpret_cast <CDataUnitCache *>(io_pProfile->m_pDataUnitCache));
-            }
-
-        }
-#if defined(DEBUG) && defined(METAWARE)
-        log_printf ("KMSClient_LoadProfile : failed - returning");
-#endif
-    }
-
-    return bSuccess;
-}
-
-/**
- *  compare cluster entries having equivalent KMA names (aka Appliance alias) and 
- *  return true if equal.  Note:  KMANetworkAddress comparison is handled separately
- *  due to IPv4/IPv6
- */
-static bool EqualClusterEntry( 
-                       struct KMS_Discovery::KMS_Discovery_ClusterMember const *i_pLeft, 
-                       KMSClusterEntry                                   const *i_pRight)
-{
-    bool bEnabled = i_pRight->m_iEnabled ? true : false;
-    if ( i_pLeft->Enabled != bEnabled )
-    {
-        return false;
-    }
-    if ( i_pLeft->KMAID != i_pRight->m_lApplianceID )
-    {
-        return false;
-    }
-    if ( strncmp(i_pLeft->KMASiteID, 
-            i_pRight->m_wsApplianceSiteID,
-            KMS_MAX_ENTITY_SITE_ID) != 0 )
-    {
-        return false;
-    }
-    //    Note: we now minimize persistence of cluster changes by not saving 
-    //      whenever m_iResponding changes
-
-    return true;
-}
-/**
- *  @return true if the current address matches the provided IPv6Address
- *  when the i_bUseIPv6 arg is true, otherwise compare the current address
- *  with the IPv4Address.  If i_bUseIPv6 then i_pCurrentAddress must be
- *  enclosed in brackets, i.e. as in RFC 2396.
- */
-static bool EqualKMANetworkAddress (
-                                    bool i_bUseIPv6,
-                                    const char * const i_pIPv6Address,
-                                    const char * const i_pIPv4Address,
-                                    const char * const i_pCurrentAddress
-                                    )
-{
-    bool bEqualAddress = true;
-    
-    if ( i_pCurrentAddress == NULL )
-    {
-        return false;
-    }
-    
-    if (i_bUseIPv6)
-    {
-        if ( i_pIPv6Address == NULL )
-        {
-            return false;
-        }
-        char sIPv6Address[KMS_MAX_NETWORK_ADDRESS] = "[";
-        
-        strcat(sIPv6Address, i_pIPv6Address);
-        
-        char * pLoc = strchr(sIPv6Address, '/');
-                
-        if ( pLoc != NULL )
-        {
-            // remove prefix from address
-            *pLoc = '\0';
-        }
-        strcat(sIPv6Address, "]");
-        bEqualAddress = strncmp(sIPv6Address, i_pCurrentAddress, KMS_MAX_NETWORK_ADDRESS) == 0;
-    }
-    else
-    {
-        if ( i_pIPv4Address == NULL )
-        {
-            return false;
-        }
-        bEqualAddress = strncmp(i_pIPv4Address, i_pCurrentAddress, KMS_MAX_NETWORK_ADDRESS) == 0;
-    }
-    
-    return bEqualAddress;
-}
-
-/**
- *  compares the profile's current cluster state with the filtered discover
- *  cluster response and returns true if the repsonse
- *  differs from i_pProfile->m_aCluster.  A cluster has changed if the state of any
- *  cluster node has changed or if the set of cluster nodes has changed.
- *  The order of nodes is immaterial.
- */
-static bool ClusterConfigChanged (
-                                  KMSClientProfile const *i_pProfile,
-                                  char * const i_sResponseEntitySiteID,
-                                  struct KMS_Discovery::KMS_Discovery__ArrayOfClusterMembers const *i_pFilteredCluster)
-{
-    int i, j;
-
-    FATAL_ASSERT(i_pProfile);
-    FATAL_ASSERT(i_pFilteredCluster);
-
-    // cardinality check
-    if (i_pProfile->m_iClusterNum !=
-        i_pFilteredCluster->__size)
-    {
-        return true;
-    }
-
-    // check if the agent's site ID changed
-    if (strncmp(i_pProfile->m_wsEntitySiteID,
-        i_sResponseEntitySiteID, KMS_MAX_ENTITY_SITE_ID) != 0)
-    {
-        return true;
-    }
-
-    // for all KMAs in filtered response check if they exist unchanged in the profile
-    for (i = 0; i < i_pFilteredCluster->__size; i++)
-    {
-        bool bFound = false;
-        for (j = 0; j < i_pProfile->m_iClusterNum; j++)
-        {
-            if (strncmp(i_pFilteredCluster->__ptr[i].KMAName,
-                    i_pProfile->m_aCluster[j].m_wsApplianceAlias,
-                    KMS_MAX_ENTITY_ID) == 0)
-            {
-                bFound = true;
-                if (
-                !EqualKMANetworkAddress(
-                    strchr(i_pProfile->m_wsApplianceAddress, ':') ? true : false,
-                    i_pFilteredCluster->__ptr[i].KMANetworkAddressIPv6,
-                    i_pFilteredCluster->__ptr[i].KMANetworkAddress,
-                    i_pProfile->m_aCluster[j].m_wsApplianceNetworkAddress) ||
-                !EqualClusterEntry((i_pFilteredCluster->__ptr + i),
-                    &i_pProfile->m_aCluster[j]))
-                
-                {
-                    return true;
-                }
-            }
-        }
-        if ( !bFound )
-        {
-            return true;
-        }
-    }
-    return false;
-}
-
-/**
- *  returns true if the string is a valid IPv6 address syntactically
- */
-static bool ValidIPv6KMAaddress( const char * const i_pIPAddress )
-{
-    FATAL_ASSERT( i_pIPAddress );
-    
-    if ( strlen(i_pIPAddress) <= 0 )
-    {
-        return false;
-    }
-    
-    // simple check
-    if ( strchr( i_pIPAddress, ':'))
-    {
-        return true;
-    }
-    
-    return false;
-}
-/**
- *
- */
-static void FreeFilteredCluster (
-                                  struct KMS_Discovery::KMS_Discovery__ArrayOfClusterMembers * const io_stFilteredCluster,
-                                  int iLimit )
-{
-    int j = 0;
-    for (; j < iLimit; j++ )
-    {
-        free( io_stFilteredCluster->__ptr[j].KMAName );
-        free( io_stFilteredCluster->__ptr[j].KMASiteID );
-        free( io_stFilteredCluster->__ptr[j].KMAHostName );
-        free( io_stFilteredCluster->__ptr[j].KMANetworkAddress );
-        free( io_stFilteredCluster->__ptr[j].KMAVersion );
-        free( io_stFilteredCluster->__ptr[j].KMAHostNameIPv6 );
-        free( io_stFilteredCluster->__ptr[j].KMANetworkAddressIPv6 );
-    }
-
-    free( io_stFilteredCluster->__ptr );
-}
-
-/**
- *  filters the discover cluster response to be less than or equal to KMS_MAX_CLUSTER_NUM KMAs.  The heuristic used to filter
- *  the response is the same as used by CAgentLoadBalancer::KMSClient_SortClusterArray(), FIPS compatibility, then within site,
- *  then responding and enabled KMAs.
- *  @param i_stResponse pointer to gsoap discover cluster service response
- *  @param io_stFilteredCluster pointer to gsoap discover cluster array to be populated with the filtered list of KMAs
- *  @return true on success and io_stFilteredCluster->__size less than or equal to KMS_MAX_CLUSTER_NUM,
- *  otherwise io_stFilteredCluster is undefined. io_stFilteredCluster->__ptr is populated with the array of elements
- *  malloc'd.
- */
-static bool FilterCluster (struct KMS_Discovery::KMS_Discovery__DiscoverClusterResponse * const i_stResponse,
-                           bool i_bFIPS,
-                           struct KMS_Discovery::KMS_Discovery__ArrayOfClusterMembers * const io_stFilteredCluster)
-{
-    /*
-     *  do something like KMSAgentLoadBalancer:SortClusterArray() to the stResponse array
-     *  return 1st KMS_MAX_CLUSTER_NUM entries and free the rest.
-    */
-
-    FATAL_ASSERT(i_stResponse);
-    FATAL_ASSERT(io_stFilteredCluster);
-
-    io_stFilteredCluster->__size = i_stResponse->ArrayOfClusterMembers.__size;
-    io_stFilteredCluster->__ptr = reinterpret_cast < struct KMS_Discovery::KMS_Discovery_ClusterMember * >
-            ( calloc( io_stFilteredCluster->__size,
-                      sizeof (struct KMS_Discovery::KMS_Discovery_ClusterMember ) ) );
-
-    if (io_stFilteredCluster->__ptr == NULL)
-    {
-        Log(AUDIT_CLIENT_FILTER_CLUSTER_FAILED,
-                NULL,
-                NULL,
-                "calloc failed");
-        return false;
-    }
-
-    if (io_stFilteredCluster->__size <= 0)
-    {
-        Log(AUDIT_CLIENT_FILTER_CLUSTER_FAILED,
-                NULL,
-                NULL,
-                "returned cluster size is not positive");
-        return false;
-    }
-
-    // copy response cluster members
-    for (int i = 0; i < io_stFilteredCluster->__size; i++)
-    {
-        bool bSuccess = true;
-
-        size_t iKMANameSize = 0, iKMASiteIDSize = 0, iKMAHostNameSize = 0,
-                iKMANetworkAddressSize = 0, iKMAVersionSize = 0, iKMAHostNameIPv6Size = 0,
-                iKMANetworkAddressIPv6Size = 0;
-        
-        // allocate storage for the various struct member's arrays
-        iKMANameSize = strlen(i_stResponse->ArrayOfClusterMembers.__ptr[i].KMAName)+1;
-        io_stFilteredCluster->__ptr[i].KMAName = reinterpret_cast <char *> (malloc(iKMANameSize));
-
-        iKMASiteIDSize = strlen(i_stResponse->ArrayOfClusterMembers.__ptr[i].KMASiteID)+1;
-        io_stFilteredCluster->__ptr[i].KMASiteID = reinterpret_cast <char *> (malloc(iKMASiteIDSize));
-
-        iKMAHostNameSize = strlen(i_stResponse->ArrayOfClusterMembers.__ptr[i].KMAHostName)+1;
-        io_stFilteredCluster->__ptr[i].KMAHostName = reinterpret_cast <char *> (malloc(iKMAHostNameSize));
-
-        iKMANetworkAddressSize = strlen(i_stResponse->ArrayOfClusterMembers.__ptr[i].KMANetworkAddress)+1;
-        io_stFilteredCluster->__ptr[i].KMANetworkAddress = reinterpret_cast <char *> (malloc(iKMANetworkAddressSize));
-
-        // KMAVersion is an optional field derived from an xml attribute in the soap interface that will not be present in 2.0 KMAs
-        if (i_stResponse->ArrayOfClusterMembers.__ptr[i].KMAVersion)
-        {
-            iKMAVersionSize = strlen(i_stResponse->ArrayOfClusterMembers.__ptr[i].KMAVersion)+1;
-            io_stFilteredCluster->__ptr[i].KMAVersion = reinterpret_cast <char *> (malloc(iKMAVersionSize));
-            if (io_stFilteredCluster->__ptr[i].KMAVersion == NULL)
-            {
-                bSuccess = false;
-            }
-        }
-        else
-        {
-            io_stFilteredCluster->__ptr[i].KMAVersion = NULL;
-        }
-
-        // KMAHostNameIPv6 is an optional field derived from an xml attribute in the soap interface that will not be present in 2.0 KMAs
-        if (i_stResponse->ArrayOfClusterMembers.__ptr[i].KMAHostNameIPv6)
-        {
-            iKMAHostNameIPv6Size = strlen(i_stResponse->ArrayOfClusterMembers.__ptr[i].KMAHostNameIPv6)+1;
-            io_stFilteredCluster->__ptr[i].KMAHostNameIPv6 = reinterpret_cast <char *> (malloc(iKMAHostNameIPv6Size));
-            if ( io_stFilteredCluster->__ptr[i].KMAHostNameIPv6 == NULL )
-            {
-                bSuccess = false;
-            }
-        }
-        else
-        {
-            io_stFilteredCluster->__ptr[i].KMAHostNameIPv6 = NULL;
-        }
-
-        // KMANetworkAddressIPv6 is an optional field derived from an xml attribute in the soap interface that will not be present in 2.0 KMAs
-        if (i_stResponse->ArrayOfClusterMembers.__ptr[i].KMANetworkAddressIPv6)
-        {
-            iKMANetworkAddressIPv6Size = strlen(i_stResponse->ArrayOfClusterMembers.__ptr[i].KMANetworkAddressIPv6)+1;
-            io_stFilteredCluster->__ptr[i].KMANetworkAddressIPv6 = reinterpret_cast <char *> (malloc(iKMANetworkAddressIPv6Size));
-            if ( io_stFilteredCluster->__ptr[i].KMANetworkAddressIPv6 == NULL )
-            {
-                bSuccess = false;
-            }
-            }
-        else
-        {
-            io_stFilteredCluster->__ptr[i].KMANetworkAddressIPv6 = NULL;
-        }
-
-        if ( io_stFilteredCluster->__ptr[i].KMAName == NULL ||
-             io_stFilteredCluster->__ptr[i].KMASiteID == NULL ||
-             io_stFilteredCluster->__ptr[i].KMAHostName == NULL ||
-             io_stFilteredCluster->__ptr[i].KMANetworkAddress == NULL ||
-             !bSuccess )
-        {
-            // cleanup and return
-            FreeFilteredCluster( io_stFilteredCluster, i+1 );
-            Log( AUDIT_CLIENT_FILTER_CLUSTER_FAILED,
-                    NULL,
-                    NULL,
-                    "malloc failed" );
-            return false;
-        }
-
-        strncpy(io_stFilteredCluster->__ptr[i].KMAName,
-                i_stResponse->ArrayOfClusterMembers.__ptr[i].KMAName,
-                iKMANameSize);
-        io_stFilteredCluster->__ptr[i].KMAName[iKMANameSize-1] = '\0';
-
-        strncpy(io_stFilteredCluster->__ptr[i].KMASiteID,
-                i_stResponse->ArrayOfClusterMembers.__ptr[i].KMASiteID,
-                iKMASiteIDSize);
-        io_stFilteredCluster->__ptr[i].KMASiteID[iKMASiteIDSize-1] = '\0';
-
-        strncpy(io_stFilteredCluster->__ptr[i].KMAHostName,
-                i_stResponse->ArrayOfClusterMembers.__ptr[i].KMAHostName,
-                iKMAHostNameSize);
-        io_stFilteredCluster->__ptr[i].KMAHostName[iKMAHostNameSize-1] = '\0';
-
-        strncpy(io_stFilteredCluster->__ptr[i].KMANetworkAddress,
-                i_stResponse->ArrayOfClusterMembers.__ptr[i].KMANetworkAddress,
-                iKMANetworkAddressSize);
-        io_stFilteredCluster->__ptr[i].KMANetworkAddress[iKMANetworkAddressSize-1] = '\0';
-
-        if ( io_stFilteredCluster->__ptr[i].KMAVersion )
-        {
-            strncpy( io_stFilteredCluster->__ptr[i].KMAVersion,
-                    i_stResponse->ArrayOfClusterMembers.__ptr[i].KMAVersion,
-                    iKMAVersionSize );
-            io_stFilteredCluster->__ptr[i].KMAVersion[iKMAVersionSize-1] = '\0';
-        }
-
-        if (io_stFilteredCluster->__ptr[i].KMAHostNameIPv6)
-        {
-            strncpy(io_stFilteredCluster->__ptr[i].KMAHostNameIPv6,
-                    i_stResponse->ArrayOfClusterMembers.__ptr[i].KMAHostNameIPv6,
-                    iKMAHostNameIPv6Size);
-            io_stFilteredCluster->__ptr[i].KMAHostNameIPv6[iKMAHostNameIPv6Size-1] = '\0';
-        }
-
-        if ( io_stFilteredCluster->__ptr[i].KMANetworkAddressIPv6 )
-        {
-            strncpy( io_stFilteredCluster->__ptr[i].KMANetworkAddressIPv6,
-                    i_stResponse->ArrayOfClusterMembers.__ptr[i].KMANetworkAddressIPv6,
-                    iKMANetworkAddressIPv6Size );
-            io_stFilteredCluster->__ptr[i].KMANetworkAddressIPv6[iKMANetworkAddressIPv6Size-1] = '\0';
-        }
-
-        io_stFilteredCluster->__ptr[i].KMAID = i_stResponse->ArrayOfClusterMembers.__ptr[i].KMAID;
-        io_stFilteredCluster->__ptr[i].Enabled = i_stResponse->ArrayOfClusterMembers.__ptr[i].Enabled;
-        io_stFilteredCluster->__ptr[i].KMS_Discovery__Locked = i_stResponse->ArrayOfClusterMembers.__ptr[i].KMS_Discovery__Locked;
-        
-        // set load to zero, KMA with version <= Build600 don't initialize
-        // the load field from the service network
-        if ( ( io_stFilteredCluster->__ptr[i].KMAVersion &&
-             strcmp( io_stFilteredCluster->__ptr[i].KMAVersion, "Build600" ) <= 0 ) ||
-             io_stFilteredCluster->__ptr[i].KMAVersion == NULL )
-        {
-            io_stFilteredCluster->__ptr[i].Load = 0;
-        }
-        else
-        {
-            io_stFilteredCluster->__ptr[i].Load = i_stResponse->ArrayOfClusterMembers.__ptr[i].Load;
-        }
-
-        io_stFilteredCluster->__ptr[i].Responding = i_stResponse->ArrayOfClusterMembers.__ptr[i].Responding;
-
-        if (!bSuccess)
-        {
-            FreeFilteredCluster( io_stFilteredCluster, i );
-            Log(AUDIT_CLIENT_FILTER_CLUSTER_FAILED,
-                    NULL,
-                    NULL,
-                    "cluster member copy failed");
-            return false;
-        }
-    }
-
-    // is filtering necessary?
-    if (io_stFilteredCluster->__size <= KMS_MAX_CLUSTER_NUM)
-    {
-        // no filtering required
-        return true;
-    }
-    else
-    {
-        char sMesg[100];
-        K_snprintf(sMesg, sizeof (sMesg), "DiscoverCluster returned %d KMAs, filtering to %d ...", io_stFilteredCluster->__size, KMS_MAX_CLUSTER_NUM);
-        Log(AUDIT_CLIENT_FILTER_CLUSTER,
-                    NULL,
-                    NULL,
-                    sMesg);
-
-    }
-
-    // adjust loads according to availability, site and FIPS compatibility
-    {
-        int i = 0;
-        for (; i < io_stFilteredCluster->__size; i++)
-        {
-            if (io_stFilteredCluster->__ptr[i].Enabled == false
-                || io_stFilteredCluster->__ptr[i].Responding == false
-                || io_stFilteredCluster->__ptr[i].KMS_Discovery__Locked == true)
-            {
-                io_stFilteredCluster->__ptr[i].Load += 0x40;
-            }
-
-            if (strcmp(io_stFilteredCluster->__ptr[i].KMASiteID,
-                i_stResponse->EntitySiteID) != 0)
-            {
-                io_stFilteredCluster->__ptr[i].Load += 0x20;
-
-            }
-
-            if ( i_bFIPS &&
-                    !FIPScompatibleKMA(io_stFilteredCluster->__ptr[i].KMAVersion))
-            {
-                io_stFilteredCluster->__ptr[i].Load += 0x80;
-            }
-        }
-    }
-
-    // sort ascending by load
-
-    // gnome sort: the simplest sort algoritm
-    {
-        int i = 0;
-        while (i < io_stFilteredCluster->__size)
-        {
-            if (i == 0 || io_stFilteredCluster->__ptr[i - 1].Load <= io_stFilteredCluster->__ptr[i].Load)
-            {
-                i++;
-            }
-            else
-            {
-                struct KMS_Discovery::KMS_Discovery_ClusterMember tmp = io_stFilteredCluster->__ptr[i];
-                io_stFilteredCluster->__ptr[i] = io_stFilteredCluster->__ptr[i - 1];
-                io_stFilteredCluster->__ptr[--i] = tmp;
-            }
-        }
-    }
-
-    // now filter the list, freeing memory allocated for copied elements that are not being retained
-    {
-        int i=KMS_MAX_CLUSTER_NUM;
-        for (; i < io_stFilteredCluster->__size; i++)
-        {
-            free(io_stFilteredCluster->__ptr[i].KMAName);
-            free(io_stFilteredCluster->__ptr[i].KMASiteID);
-            free(io_stFilteredCluster->__ptr[i].KMAHostName);
-            free(io_stFilteredCluster->__ptr[i].KMANetworkAddress);
-            free(io_stFilteredCluster->__ptr[i].KMAVersion);
-            free(io_stFilteredCluster->__ptr[i].KMAHostNameIPv6);
-            free(io_stFilteredCluster->__ptr[i].KMANetworkAddressIPv6);
-        }
-    }
-
-    io_stFilteredCluster->__size = KMS_MAX_CLUSTER_NUM;
-    
-    Log(AUDIT_CLIENT_FILTER_CLUSTER,
-                NULL,
-                NULL,
-                "success");
-    
-    return true;
-};
-
-/*---------------------------------------------------------------------------
- * Function: KMSClient_GetClusterInformation
- *
- *--------------------------------------------------------------------------*/
-bool KMSClient_GetClusterInformation(
-        KMSClientProfile *i_pProfile, 
-        utf8char *o_wsEntitySiteID,
-        int i_iEntitySiteIDSize,
-        int *o_pApplianceNum,
-        KMSClusterEntry *o_pClusterEntryArray,
-        int i_iClusterEntryArraySize)
-{
-   FATAL_ASSERT(i_pProfile);
-   FATAL_ASSERT( o_wsEntitySiteID );
-   FATAL_ASSERT( o_pApplianceNum );
-   FATAL_ASSERT( o_pClusterEntryArray );
-   FATAL_ASSERT( i_iEntitySiteIDSize <= KMS_MAX_ENTITY_ID+1 );
-
-   CAutoMutex oAutoMutex( (K_MUTEX_HANDLE)i_pProfile->m_pLock );
-
-   bool bSuccess = true;
-   char sSoapFaultMsg[g_iMAX_SOAP_FAULT_MESSAGE_LENGTH];
-   char sKmaAddress[g_iMAX_PEER_NETWORK_ADDRESS_LENGTH];
-
-   char sURL[KMS_MAX_URL+1];
-
-   // set URL from the initial appliance address
-   utf8cstr sApplianceAddress = i_pProfile->m_wsApplianceAddress;
-
-#if defined(DEBUG) && defined(METAWARE)
-    log_printf("KMSClient_GetClusterInformation : entered");
-#endif
-
-   K_snprintf(sURL,
-           KMS_MAX_URL,
-           "https://%s:%d",
-           sApplianceAddress,
-           i_pProfile->m_iPortForDiscoveryService);
-   strncpy(i_pProfile->m_sURL, sURL, KMS_MAX_URL);
-   i_pProfile->m_sURL[KMS_MAX_URL] = 0;
-           
-   // allocate and initialize a new soap env for the cluster discovery call
-   struct soap *pstSoap = (struct soap*)i_pProfile->m_pvDiscoverySoap;
-
-   if ( !i_pProfile->m_iEnrolled )
-   {
-        bSuccess = false;
-   }
-   
-   if ( bSuccess )
-   {
-	   // allocate discovery soap runtime
-	   if (pstSoap == NULL )
-	   {
-   	   	   pstSoap = soap_new();
-		   i_pProfile->m_pvDiscoverySoap = pstSoap;
-           /* soap_copy results in a segfault in sk_free() within libcrytpo.so
-           pstSoap = soap_copy( (soap*)i_pProfile->m_pvSoap );
-           */
-           if (pstSoap == NULL)
-           {
-               bSuccess = false;
-           }
-           else
-           {
-               pstSoap->connect_timeout = i_pProfile->m_iTransactionTimeout;
-               pstSoap->send_timeout = i_pProfile->m_iTransactionTimeout;
-               pstSoap->recv_timeout = i_pProfile->m_iTransactionTimeout;
-
-               soap_set_imode( pstSoap, (SOAP_XML_STRICT | SOAP_C_UTFSTRING) );      
-               soap_set_omode( pstSoap, (SOAP_XML_STRICT | SOAP_C_UTFSTRING) );      
-
-               soap_set_namespaces( pstSoap, KMS_Discovery_namespaces );
-               bSuccess = K_soap_ssl_client_context( 
-                               i_pProfile,
-                               pstSoap,                   
-                               SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION 
-                                ) == SOAP_OK;
-               if ( !bSuccess )
-               {
-                    Log(AUDIT_CLIENT_GetClusterInformation, 
-                       NULL, 
-                       NULL, 
-                       "K_soap_ssl_client_context failed");
-                    soap_destroy(pstSoap);
-                    soap_end(pstSoap);
-                    soap_done(pstSoap);
-               }
-           }
-	   }
-   }
-
-   // Discovery
-   struct KMS_Discovery::KMS_Discovery__DiscoverClusterResponse stResponse;
-
-#if defined(DEBUG) && defined(METAWARE)
-    log_printf("KMSClient_GetClusterInformation : call KMS_Discovery_DiscoverCluster");
-#endif
-    
-    // SOAP - discover cluster
-   if ( bSuccess )
-   {
-#ifdef DEBUG
-      int iStartTickCount = K_GetTickCount();
-      int iEndTickCount;
-      char sDiscoverTimeMsg[100];
-#endif
-      bSuccess = 
-         KMS_Discovery::soap_call_KMS_Discovery__DiscoverCluster(
-            pstSoap, 
-            sURL,
-            NULL,
-            NULL,
-            stResponse ) == SOAP_OK;
-#ifdef DEBUG
-      iEndTickCount = K_GetTickCount();
-      sprintf(sDiscoverTimeMsg, "DiscoverCluster soapcall elapsed time=%u ms",
-              iEndTickCount-iStartTickCount);
-      Log(AUDIT_CLIENT_GetClusterInformation, 
-           NULL, 
-           sApplianceAddress, 
-           sDiscoverTimeMsg);
-#endif
-
-      if ( !bSuccess )
-      {
-         GetSoapFault(sSoapFaultMsg, (struct soap*)pstSoap);      
-         GetPeerNetworkAddress(sKmaAddress, pstSoap);
-         LogError(i_pProfile,AUDIT_CLIENT_GET_CLUSTER_INFORMATION_SOAP_ERROR,
-                  NULL,
-                  sKmaAddress,
-                  sSoapFaultMsg );
-
-         if ( !ServerError( sSoapFaultMsg, pstSoap->errnum ) )
-         {
-                // do not failover if error is client related
-                soap_destroy( pstSoap );
-                soap_end( pstSoap );
-                soap_free( pstSoap );
-                return false;
-         }
-      }
-
-      // If we did not succeed to Discover from the initial appliance, 
-      // try to discover from other appliances that we know about that are enabled.
-      // Disabled Appliances are not attempted because they may have a stale view
-      // of the cluster. In particular, they themselves are not aware that they
-      // are disabled.
-
-      if ( !bSuccess && i_pProfile->m_iClusterNum > 0 )
-      {
-         // Copy the profile's cluster array so that we don't have to lock the 
-         // profile around a SOAP call
-
-         int j = 0;
-         int iClusterNum = 0;
-         KMSClusterEntry* aCluster =
-            (KMSClusterEntry*)malloc(sizeof(KMSClusterEntry) * KMS_MAX_CLUSTER_NUM);
-
-         bSuccess = ( aCluster != 0 );
-#if defined(DEBUG) && defined(METAWARE)
-        if (!bSuccess) 
-           log_printf("Malloc %x aCluster returned null\n", 
-                      sizeof(KMSClusterEntry) * KMS_MAX_CLUSTER_NUM);
-#endif
-
-         if ( bSuccess )
-         {
-            iClusterNum = i_pProfile->m_iClusterNum;
-            memcpy( aCluster, i_pProfile->m_aCluster, 
-                    sizeof(KMSClusterEntry) * iClusterNum );
-
-            // initialize to false since all KMAs could be disabled
-            bSuccess = false;
-            for ( j = 0; j < iClusterNum; j++ )
-            {
-               if ( aCluster[j].m_iEnabled == FALSE )
-               {
-                  continue;
-               }
-
-               sApplianceAddress = aCluster[j].m_wsApplianceNetworkAddress;
-               K_snprintf(sURL,
-                       KMS_MAX_URL,
-                       "https://%s:%d", 
-                       sApplianceAddress,
-                       i_pProfile->m_iPortForDiscoveryService);
-
-               Log(AUDIT_CLIENT_GetClusterInformation, 
-                   NULL, 
-                   sApplianceAddress, 
-                   "Failing over and trying this appliance");
-
-               // SOAP - discover cluster
-               bSuccess = 
-                  KMS_Discovery::soap_call_KMS_Discovery__DiscoverCluster(
-                     pstSoap, 
-                     sURL,
-                     NULL,
-                     NULL,
-                     stResponse ) == SOAP_OK;
-
-               if ( !bSuccess )
-               {                        
-                  GetSoapFault(sSoapFaultMsg, (struct soap*)pstSoap);
-                  GetPeerNetworkAddress(sKmaAddress, pstSoap);
-                  LogError(i_pProfile,AUDIT_CLIENT_GET_CLUSTER_INFORMATION_SOAP_ERROR,
-                           NULL,
-                           sKmaAddress,
-                           sSoapFaultMsg );
-               }
-               else
-               {
-                  // The discover succeeded
-                  break;
-               }
-            }
-         }
-
-         if ( aCluster != 0 )
-         {
-            free(aCluster);
-         }
-
-         if ( bSuccess )
-         {
-            // Set the Profile's initial appliance to the Appliance
-            // that we just succeeded to Discover from. KMSClient_SelectAppliance()
-            // persists the updated config
-            KMSClient_SelectAppliance( i_pProfile, 
-                                       i_pProfile->m_aCluster[j].m_wsApplianceNetworkAddress );
-         }
-      }
-   }
-
-   if ( bSuccess )
-   {
-      if (((int)strlen(stResponse.EntitySiteID) > i_iEntitySiteIDSize - 1)) 
-      {
-         bSuccess = false;
-         LogError(i_pProfile,AUDIT_CLIENT_GET_CLUSTER_INFORMATION,
-                  NULL,
-                  NULL,
-                  "returned site id size too large" );
-      }
-   }
-
-   // copy returned cluster information into i_pProfile->m_aCluster after
-   // filtering the cluster members to a list with size <= KMS_MAX_CLUSTER_NUM
-   if ( bSuccess )
-   {
-      KMS_Discovery::KMS_Discovery__ArrayOfClusterMembers aFilteredCluster;
-      
-      bSuccess = FilterCluster(&stResponse, i_pProfile->m_eKMSmode == FIPS_MODE, &aFilteredCluster);
-      if (!bSuccess )
-      {
-          LogError(i_pProfile, AUDIT_CLIENT_GET_CLUSTER_INFORMATION,
-                  NULL,
-                  NULL,
-                  "cluster response filtering failed" );
-      }
-
-      if(bSuccess)
-      {
-         int i;
-         bool bPersistClusterConfig = ClusterConfigChanged(i_pProfile,
-                    stResponse.EntitySiteID,
-                    &aFilteredCluster);
-                      
-         strncpy(o_wsEntitySiteID,stResponse.EntitySiteID, i_iEntitySiteIDSize-1 );
-         o_wsEntitySiteID[i_iEntitySiteIDSize-1] = '\0';
-
-         strncpy(i_pProfile->m_wsEntitySiteID, stResponse.EntitySiteID, i_iEntitySiteIDSize-1 );
-         i_pProfile->m_wsEntitySiteID[i_iEntitySiteIDSize-1] = '\0';
-
-         // fill the aCluster array in the i_pProfile
-         i_pProfile->m_iClusterNum = aFilteredCluster.__size;
-         for (i = 0;  i < i_pProfile->m_iClusterNum; i++)
-         {
-            i_pProfile->m_aCluster[i].m_lApplianceID = 
-               (aFilteredCluster.__ptr+i)->KMAID;
-            i_pProfile->m_aCluster[i].m_iEnabled = 
-               (aFilteredCluster.__ptr+i)->Enabled;
-            i_pProfile->m_aCluster[i].m_iResponding = 
-               (aFilteredCluster.__ptr+i)->Responding;
-
-            i_pProfile->m_aCluster[i].m_lLoad = (aFilteredCluster.__ptr+i)->Load;
-            strncpy(i_pProfile->m_aCluster[i].m_wsApplianceAlias, 
-                   (aFilteredCluster.__ptr+i)->KMAName,
-                   KMS_MAX_ENTITY_ID);
-            i_pProfile->m_aCluster[i].m_wsApplianceAlias[KMS_MAX_ENTITY_ID] = '\0';
-            // if the m_wsApplianceAddress is IPv6 then we'll store
-            // KMA IPv6 addresses if they have one
-            if ( strchr( i_pProfile->m_wsApplianceAddress, ':') )
-            {
-                // KMAs prior to 2.1, or 2.1 KMAs at rep schema < 10
-                // will not have IPv6 attributes in the soap response
-                if ( (aFilteredCluster.__ptr+i)->KMANetworkAddressIPv6 &&
-                      ValidIPv6KMAaddress((aFilteredCluster.__ptr+i)->KMANetworkAddressIPv6))
-                {
-                    strcpy(i_pProfile->m_aCluster[i].m_wsApplianceNetworkAddress, "[");
-                    char * pLoc = strchr((aFilteredCluster.__ptr+i)->KMANetworkAddressIPv6,
-                            '/');
-                    if ( pLoc != NULL )
-                    {
-                        // remove prefix from address
-                        *pLoc = '\0';
-                        strcat(i_pProfile->m_aCluster[i].m_wsApplianceNetworkAddress,
-                               (aFilteredCluster.__ptr+i)->KMANetworkAddressIPv6 );
-                    }
-                    else
-                    {
-                        strcat(i_pProfile->m_aCluster[i].m_wsApplianceNetworkAddress,
-                                (aFilteredCluster.__ptr + i)->KMANetworkAddressIPv6);
-                    }
-                    strcat(i_pProfile->m_aCluster[i].m_wsApplianceNetworkAddress, "]");
-                }
-                else
-                {
-                    // use the IPv4 address
-                    strncpy(i_pProfile->m_aCluster[i].m_wsApplianceNetworkAddress, 
-                           (aFilteredCluster.__ptr+i)->KMANetworkAddress,
-                           KMS_MAX_NETWORK_ADDRESS);                    
-                }
-            }
-            else
-            {
-                strncpy(i_pProfile->m_aCluster[i].m_wsApplianceNetworkAddress, 
-                       (aFilteredCluster.__ptr+i)->KMANetworkAddress,
-                       KMS_MAX_NETWORK_ADDRESS);
-            }
-            i_pProfile->m_aCluster[i].m_wsApplianceNetworkAddress[KMS_MAX_NETWORK_ADDRESS] = '\0';
-            strncpy(i_pProfile->m_aCluster[i].m_wsApplianceSiteID, 
-                   (aFilteredCluster.__ptr+i)->KMASiteID,
-                   KMS_MAX_ENTITY_SITE_ID);
-            i_pProfile->m_aCluster[i].m_wsApplianceSiteID[KMS_MAX_ENTITY_SITE_ID] = '\0';
-
-            if ((aFilteredCluster.__ptr + i)->KMAVersion)
-            {
-                strncpy(i_pProfile->m_aCluster[i].m_sKMAVersion,
-                        (aFilteredCluster.__ptr + i)->KMAVersion,
-                        KMS_MAX_VERSION_LENGTH);
-                i_pProfile->m_aCluster[i].m_sKMAVersion[KMS_MAX_VERSION_LENGTH] = '\0';
-            }
-            else
-            {
-                i_pProfile->m_aCluster[i].m_sKMAVersion[0] = '\0';
-            }
-
-            if ((aFilteredCluster.__ptr + i)->KMS_Discovery__Locked)
-            {
-                i_pProfile->m_aCluster[i].m_iKMALocked = TRUE;
-            }
-            else
-            {
-                i_pProfile->m_aCluster[i].m_iKMALocked = FALSE;
-            }
-         }
-
-         // now release malloc'd storage from filtering the cluster response
-         FreeFilteredCluster( &aFilteredCluster, aFilteredCluster.__size );
-
-         // fill the array specified by the caller
-         *o_pApplianceNum = i_pProfile->m_iClusterNum;
-         for (i = 0;  i < i_pProfile->m_iClusterNum; i++)
-         {
-            o_pClusterEntryArray[i].m_lApplianceID = i_pProfile->m_aCluster[i].m_lApplianceID;
-            o_pClusterEntryArray[i].m_iEnabled = i_pProfile->m_aCluster[i].m_iEnabled;
-            o_pClusterEntryArray[i].m_iResponding = i_pProfile->m_aCluster[i].m_iResponding;
-            o_pClusterEntryArray[i].m_lLoad = i_pProfile->m_aCluster[i].m_lLoad;
-            strncpy(o_pClusterEntryArray[i].m_wsApplianceAlias, 
-                   i_pProfile->m_aCluster[i].m_wsApplianceAlias,
-                   KMS_MAX_ENTITY_ID);
-            o_pClusterEntryArray[i].m_wsApplianceAlias[KMS_MAX_ENTITY_ID] = '\0';
-            strncpy(o_pClusterEntryArray[i].m_wsApplianceNetworkAddress, 
-                   i_pProfile->m_aCluster[i].m_wsApplianceNetworkAddress,
-                   KMS_MAX_NETWORK_ADDRESS);
-            o_pClusterEntryArray[i].m_wsApplianceNetworkAddress[KMS_MAX_NETWORK_ADDRESS] = '\0';
-            strncpy(o_pClusterEntryArray[i].m_wsApplianceSiteID, 
-                   i_pProfile->m_aCluster[i].m_wsApplianceSiteID,
-                   KMS_MAX_ENTITY_SITE_ID);
-            o_pClusterEntryArray[i].m_wsApplianceSiteID[KMS_MAX_ENTITY_SITE_ID] = '\0';
-            strncpy(o_pClusterEntryArray[i].m_sKMAVersion, i_pProfile->m_aCluster[i].m_sKMAVersion,
-                    KMS_MAX_VERSION_LENGTH);
-            o_pClusterEntryArray[i].m_sKMAVersion[KMS_MAX_VERSION_LENGTH] = '\0';
-         }
-
-         i_pProfile->m_iLastClusterDiscoveryTime = K_GetTickCount() / 1000;
-         i_pProfile->m_bIsClusterDiscoveryCalled = true;
-
-         if ( bPersistClusterConfig )
-         {
-             bSuccess = StoreCluster(i_pProfile);
-             if (!bSuccess)
-             {
-                 Log(AUDIT_CLIENT_GetClusterInformation, 
-                     NULL, 
-                     NULL, 
-                     "Could not store cluster");
-             }
-         }
-      }
-   }
-
-   // cleanup 
-   if (pstSoap)
-   {
-      soap_destroy(pstSoap);
-      soap_end(pstSoap);
-      if (!bSuccess)
-      {
-          soap_free(pstSoap);
-      }
-      else
-      {
-        // we want to persist discovery soap runtime to avoid ssl handshakes so soap_free() is not called
-      }
-   }
-         
-   // if we're enrolled but cannot get cluster information from an appliance, then we'll try to load
-   // it from the profile
-   if ( !bSuccess && i_pProfile->m_iEnrolled )
-   {
-      int bClusterInformationFound = false;
-
-      bSuccess = LoadClusterInformation( i_pProfile, bClusterInformationFound );
-
-      if ( bSuccess && bClusterInformationFound )
-      {
-         Log(AUDIT_CLIENT_GetClusterInformation, 
-                 NULL, 
-                 NULL, 
-                 "Using persisted cluster information");
-
-         strncpy(o_wsEntitySiteID, i_pProfile->m_wsEntitySiteID, i_iEntitySiteIDSize-1);
-         o_wsEntitySiteID[i_iEntitySiteIDSize-1] = '\0';
-
-         // fill the array specified by the caller
-         *o_pApplianceNum = i_pProfile->m_iClusterNum;
-         for (int i = 0;  i < i_pProfile->m_iClusterNum; i++)
-         {
-            o_pClusterEntryArray[i].m_lApplianceID = i_pProfile->m_aCluster[i].m_lApplianceID;
-            o_pClusterEntryArray[i].m_iEnabled = i_pProfile->m_aCluster[i].m_iEnabled;
-            o_pClusterEntryArray[i].m_iResponding = TRUE; // since cluster info comes from a file, set it to TRUE
-
-            o_pClusterEntryArray[i].m_lLoad = i_pProfile->m_aCluster[i].m_lLoad;
-            strncpy(o_pClusterEntryArray[i].m_wsApplianceAlias, 
-                   i_pProfile->m_aCluster[i].m_wsApplianceAlias,
-                   KMS_MAX_ENTITY_ID);
-            o_pClusterEntryArray[i].m_wsApplianceAlias[KMS_MAX_ENTITY_ID] = '\0';
-            strncpy(o_pClusterEntryArray[i].m_wsApplianceNetworkAddress, 
-                   i_pProfile->m_aCluster[i].m_wsApplianceNetworkAddress,
-                   KMS_MAX_NETWORK_ADDRESS);
-            o_pClusterEntryArray[i].m_wsApplianceNetworkAddress[KMS_MAX_NETWORK_ADDRESS] = '\0';
-            strncpy(o_pClusterEntryArray[i].m_wsApplianceSiteID, 
-                   i_pProfile->m_aCluster[i].m_wsApplianceSiteID,
-                   KMS_MAX_ENTITY_SITE_ID);
-            o_pClusterEntryArray[i].m_wsApplianceSiteID[KMS_MAX_ENTITY_SITE_ID] = '\0';
-            strncpy(o_pClusterEntryArray[i].m_sKMAVersion,
-                    i_pProfile->m_aCluster[i].m_sKMAVersion, 
-                    KMS_MAX_VERSION_LENGTH);
-            o_pClusterEntryArray[i].m_sKMAVersion[KMS_MAX_VERSION_LENGTH] = '\0';
-         }
-
-         i_pProfile->m_iLastClusterDiscoveryTime = K_GetTickCount() / 1000;
-      }
-      else if ( bSuccess && !bClusterInformationFound )
-      {
-         // if we're here, then we need to return an error
-         bSuccess = false;
-      }
-   }
-
-   return bSuccess;
-}
-
-bool KMSClient_NoFIPSCompatibleKMAs(const KMSClientProfile * const i_pProfile)
-{
-    bool bNoFIPScompatibleKMA = true;
-    for (int i=0; i < i_pProfile->m_iClusterNum; i++)
-    {
-        if ( FIPScompatibleKMA(i_pProfile->m_aCluster[i].m_sKMAVersion))
-        {
-            bNoFIPScompatibleKMA = false;
-            break;
-        }
-    }
-    return bNoFIPScompatibleKMA;
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSClient_SelectAppliance
- *
- *--------------------------------------------------------------------------*/
-bool KMSClient_SelectAppliance(KMSClientProfile *i_pProfile,
-                                utf8char *i_wsApplianceAddress)
-{
-    FATAL_ASSERT(i_pProfile);
-    FATAL_ASSERT(i_wsApplianceAddress);
-
-    CAutoMutex oAutoMutex( (K_MUTEX_HANDLE)i_pProfile->m_pLock );
-
-    bool bSuccess = true;
-
-    if(strlen(i_wsApplianceAddress) >= KMS_MAX_NETWORK_ADDRESS)
-    {
-        LogError(i_pProfile,AUDIT_CLIENT_SELECT_APPLIANCE,
-            NULL,
-            NULL,
-            "Appliance Address too large" );
-        bSuccess = false;        
-    }
-
-    if(bSuccess)
-    {
-        strncpy(i_pProfile->m_wsApplianceAddress, 
-            i_wsApplianceAddress,
-            KMS_MAX_NETWORK_ADDRESS);
-        i_pProfile->m_wsApplianceAddress[KMS_MAX_NETWORK_ADDRESS] = 0;
-    }
-
-    bSuccess = StoreConfig( i_pProfile );
-
-    return bSuccess;
-}
-
-bool KMSClient_ProfileLoaded( KMSClientProfile *i_pProfile )
-{
-
-#if defined(DEBUG) && defined(METAWARE)
-   log_printf ("profile: %x", i_pProfile);
-   log_printf ("profile: enrolled %x", i_pProfile->m_iEnrolled);
-   log_printf ("profile: version  %x", i_pProfile->m_iVersion);
-#endif   
-
-    // more extensive tests could be performed but this should suffice
-    if ( i_pProfile && 
-        i_pProfile->m_iEnrolled &&
-		i_pProfile->m_iVersion == KMS_AGENT_VERSION )
-    {
-        return true;
-    }
-    else
-    {
-        return false;
-    }
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSClient_DeleteProfile
- *
- *--------------------------------------------------------------------------*/
-bool KMSClient_DeleteProfile(utf8char *i_wsProfileName)
-{
-    FATAL_ASSERT( i_wsProfileName && (strlen(i_wsProfileName) > 0) );
-    
-    bool bSuccess = true;
-
-    if (ProfileExists(g_wsWorkingDirectory, /* pass in default */
-                      i_wsProfileName))
-    {
-        bSuccess = DeleteStorageProfile(i_wsProfileName);
-    }
-
-    return bSuccess;
-}
-
-/*---------------------------------------------------------------------------
- * Function: KMSClient_UnloadProfile
- *
- *--------------------------------------------------------------------------*/
-bool KMSClient_UnloadProfile(KMSClientProfile *i_pProfile)
-{
-    if(i_pProfile != NULL && i_pProfile->m_pLock != NULL )
-    {
-#ifdef KMSUSERPKCS12
-	/* Delete the private client key file if it's still around */
-	CleanupPrivateKeyFile(i_pProfile);
-#endif
-        if (i_pProfile->m_pAgentLoadBalancer != NULL)
-        {
-            delete reinterpret_cast
-                <CAgentLoadBalancer *> (i_pProfile->m_pAgentLoadBalancer);
-        }
-        if (i_pProfile->m_pDataUnitCache != NULL)
-        {
-            delete reinterpret_cast<CDataUnitCache *> (i_pProfile->m_pDataUnitCache);
-        }
-        K_DestroyMutex((K_MUTEX_HANDLE)i_pProfile->m_pLock);
-        i_pProfile->m_pLock = 0;
-
-        if ( i_pProfile->m_pvSoap )
-        {
-            soap_destroy( (struct soap*)i_pProfile->m_pvSoap );
-            soap_end( (struct soap*)i_pProfile->m_pvSoap );
-            soap_done( (struct soap*)i_pProfile->m_pvSoap );
-
-            free( (struct soap*)i_pProfile->m_pvSoap );
-            i_pProfile->m_pvSoap = 0;
-        }
-        
-        if ( i_pProfile->m_pvDiscoverySoap)
-        {
-            soap_destroy( (struct soap*)i_pProfile->m_pvDiscoverySoap );
-            soap_end( (struct soap*)i_pProfile->m_pvDiscoverySoap );
-            soap_done( (struct soap*)i_pProfile->m_pvDiscoverySoap );
-
-            free( (struct soap*)i_pProfile->m_pvDiscoverySoap );
-            i_pProfile->m_pvDiscoverySoap = 0;           
-        }
-    }
-
-    i_pProfile->m_iEnrolled = FALSE;
-
-    return true; /* always return true, maybe there are cases which return false in the future */
-}
-
-bool FIPScompatibleKMA(
-        const char * const i_sKMAVersion) {
-    return (strcmp(i_sKMAVersion,
-            FIPS_COMPATIBLE_KMA_VERSION) >= 0);
-}
-
-#ifdef KMSUSERPKCS12
-extern "C"
-KMS_AGENT_STATUS
-KMSAgent_GetProfileStatus(
-	char* i_pProfileName,
-	KMSAGENT_PROFILE_FLAGS *flags)
-{
-	/*
-	 * Determine how "initialized" the KMS token is by checking for
-	 * the profile config file and also the entity key container (pkcs#12).
-	 */
-	if (ProfileExists(g_wsWorkingDirectory, i_pProfileName)) {
-		*flags |= KMSAGENT_PROFILE_EXISTS_FLAG;
-		if (ClientKeyP12Exists(i_pProfileName))
-			*flags |= KMSAGENT_CLIENTKEY_EXISTS_FLAG;
-	}
-	return (KMS_AGENT_STATUS_OK);
-}
-#endif
--- a/usr/src/lib/libkmsagent/common/KMSClientProfile.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,456 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*-------------------------------------------------------------------------*/
-/**
- * \file      KMSClientProfile.h
- *
- * The KMS Client profile management API, including profile setup, CA
- * certificate download, and Certificate retrieval
- *
- */
-/*-------------------------------------------------------------------------*/
-
-#ifndef KMSCLIENT_PROFILE_H
-#define KMSCLIENT_PROFILE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef KMS_LONG_LONG
-#define KMS_LONG_LONG
-
-#ifdef WIN32
-  typedef __int64 Long64;
-#else
-  typedef long long Long64;
-#endif
-
-   
-#endif
-   
-#ifdef KMSUSERPKCS12
-#define	CLIENT_PK12_FILE	"clientkey.p12"
-#endif
-
-/**
- *  \note UTF-8 encoding is used for the underlying SOAP RPC transactions by
- *  this API. In order to support environments lacking wchar.h
- *  traditional C strings are used instead.
- */ 
-typedef char * utf8cstr;
-
-/**
- *  @see commments for utf8cstr.
- */
-typedef char utf8char;
-
-/**
- *  KMS Agent Toolkit Version identifier
- */
-#define KMS_AGENT_VERSION 0x210
-
-/*---------------------------------------------------------------------------
- * Limits and sizes
- *--------------------------------------------------------------------------*/
-/**
- *   The maximum length of an agent name.
- */
-#define KMS_MAX_AGENT_NAME                                                  64
-
-/**
- *  The size of a data unit ID in bytes.
- */
-#define KMS_DATA_UNIT_ID_SIZE                                               16
-
-/**
- *  The maximum lenght of a description for key group or data unit.
- */
-#define KMS_MAX_DESCRIPTION                                                 64
-
-/**
- *  The maximum maximum length of an external unique id.
- */
-#define KMS_MAX_EXTERNAL_UNIQUE_ID_SIZE                                     32
-
-/**
- *  The maximum external tag length.
- */
-#define KMS_MAX_EXTERNAL_TAG                                                64
-
-/**
- *  The size of a key ID in bytes.
- */
-#define KMS_KEY_ID_SIZE                                                     30
-
-/**
- *  The size of an AES Key Wrapping Key ID.
- */
-#define KMS_KWK_KEY_ID_SIZE                                                 8
-
-/**
- *  The maximum size of a key in bytes.
- */
-#define KMS_MAX_KEY_SIZE                                                    32
-
-/**
- *  The maximum size of an wrapped key(RFC3394 AES Key Wrap) in bytes.
- */
-#define KMS_MAX_WRAPPED_KEY_SIZE                                   KMS_MAX_KEY_SIZE+8 
-
-/**
- *  The maximum length of a key group ID.
- */
-#define KMS_MAX_KEY_GROUP_ID_SIZE                                           64
-
-/**
- *  The maximum size of a key group list to be returned.  This should
- *  be sufficient for agents as this is an atypical call.
- */
-#define KMS_MAX_LIST_KEY_GROUPS                                             100
-
-/**
- * The maximum number of keys returned in a key list.
- */
-#define KMS_MAX_PAGE_SIZE                                                   32
-
-/**
- *  The maximum passphrase length.
- */
-#define KMS_MAX_PASSPHRASE                                                  64
-
-/**
- *  The maximum length of agent's name, aka ID.
- */
-#define KMS_MAX_ENTITY_ID                           64
-
-/**
- *  The maximum length of an agent's sited ID.
- */
-#define KMS_MAX_ENTITY_SITE_ID                      64
-
-/**
- *  The maximum length of a URL.
- */
-#define KMS_MAX_URL                                 512
-
-/** 
- *  The maximum length of a filter parameter field name.
- */
-#define KMS_MAX_FIELD_NAME                          64
-
-/**
- *  The maximum length of a query parameter sort field value.
- */
-#define KMS_MAX_FIELD_VALUE                         64
-
-/**
- *  The maximum ID length used in various types of IDs.
- */
-#define KMS_MAX_ID                                  64
-
-/**
- *  The maximum length of a KMA network address, either IPv4 or IPv6.
- *  Also maximum hostname length if/when hostnames are supported
- */
-#define KMS_MAX_NETWORK_ADDRESS                     256
-
-/**
- *  The maximum length of a file name.
- */
-#define KMS_MAX_FILE_NAME                           256
-
-/**
- *  The maximum length of error strings.
- */
-#define KMS_MAX_ERROR_STRING                        1024
-
-/**
- *  the number of nodes in a KMS is variable.  This constant
- * dictates how many of the KMAs in a KMS will be saved to the
- * profile, persisted to storage and used for load balancing and failover.  See
- * <code>KMSAgent_GetClusterInformation</code>
- * Range: 1 .. max int, users should con
- */
-#ifndef KMS_MAX_CLUSTER_NUM
-#define KMS_MAX_CLUSTER_NUM                         20
-#endif
-
-/**
- *  The maximum length for SHA1 hashes used in authentication.
- */
-#define KMS_MAX_HASH_SIZE                           20
-
-/**
- *  The maximum length of a KMS verstion string.
- */
-#define KMS_MAX_VERSION_LENGTH                      100
-
-/**
- *  The maximum length of working directory.
- */
-#define KMS_MAX_PATH_LENGTH                         1024
-
-/**
- *  typedef for Key ID
- */
-typedef unsigned char KEY_ID [KMS_KEY_ID_SIZE];
-
-/**
- *  typedef for an unwrapped Key
- */
-typedef unsigned char KEY [KMS_MAX_KEY_SIZE];
-
-/**
- *  typedef for an AES wrapped key
- */
-typedef unsigned char WRAPPED_KEY [KMS_MAX_WRAPPED_KEY_SIZE];
-
-/**
- *  typedef for KMSClusterEntry struct
- */
-typedef struct KMSClusterEntry KMSClusterEntry;
-
-/** \struct KMSClusterEntry
- *  A struct representing each Key Management Appliance discovered in the KMS cluster 
- */
-struct KMSClusterEntry
-{
-    /**
-     *   The KMA's identifier.
-     */
-    Long64      m_lApplianceID;
-    
-    /**
-     *   The KMA's name.
-     */
-    utf8char    m_wsApplianceAlias[KMS_MAX_ENTITY_ID + 1];
-    
-    /**
-     *  The Sited ID for the KMA.
-     */
-    utf8char    m_wsApplianceSiteID[KMS_MAX_ENTITY_SITE_ID + 1];
-    
-    /**
-     *  A network address for the KMA that corresponds to the agent's network.
-     *  KMAs are multi-homed so only an address useful to the agent is provided.
-     */
-    utf8char    m_wsApplianceNetworkAddress[KMS_MAX_NETWORK_ADDRESS + 1];
-    
-    /**
-     *  Enabled status for the KMA, 1 for enabled, 0 if disabled.
-     */
-    int         m_iEnabled;
-    
-    /**
-     *   Unused at present but may be used for reporting a KMAs load to be used
-     *   as a load balancing heuristic.
-     */
-    Long64      m_lLoad;
-    
-    /**
-     *  A boolean indicating the current response status of a KMA on the network.
-     *  A non-responding KMA may be either down or unreachable due to the network.
-     */
-    int         m_iResponding;
-    
-    /**
-     *  The KMA's version level.
-     */
-    utf8char    m_sKMAVersion[KMS_MAX_VERSION_LENGTH+1];
-    
-    /**
-     *  KMA lock status as provided by KMS Discover Cluster service. Defaults
-     *  to false for KMAs earlier than KMS 2.3 where it was first introduced.
-     */
-    int m_iKMALocked;
-};
-
-
-/**
- * the profile for an agent.  The profile contains sections that are persisted
- * and fields that are volatile.  See KMSAgentStorage.h for interfaces to load/store
- * the persistent sections.
- * <p><b>Note</b> that members of this struct should
- * not be accessed directly by users of this library.
- */
-
-/** \struct KMSClientProfile
- *   the properties comprising the profile, some of which must be persisted. 
- */
-typedef struct KMSClientProfile_s
-{
-    /**
-     *  the version of the KMS Agent Library
-     */ 
-    int m_iVersion;
-
-    /**
-    * Profile Name
-    */
-    utf8char m_wsProfileName[KMS_MAX_ENTITY_ID + 1];
-
-    /**
-     *  Subject Name
-     */
-    utf8char m_wsEntityID[KMS_MAX_ENTITY_ID + 1];
-
-    /**
-     * Appliance Address used for enrollment and discovery
-     */
-    utf8char m_wsApplianceAddress[KMS_MAX_NETWORK_ADDRESS + 1]; 
-
-    /**
-     *  KMS CA service port
-     */
-    int m_iPortForCAService;
-    /**
-     *  KMS Certificate service port
-     */
-    int m_iPortForCertificateService;
-    
-    /**
-     *  KMS Agent service port
-     */
-    int m_iPortForAgentService;
-    
-    /**
-     *  KMS Discovery service port
-     */
-    int m_iPortForDiscoveryService;
-
-    /**
-     *  timeout in seconds before failover to alternate KMS in cluster
-     */
-    int m_iTransactionTimeout; 
-
-    /**
-     *  the number of times failover will be attempted
-     */
-    int m_iFailoverLimit;
-
-    /**
-     *  the number of times the current transaction has failed over
-     */
-    int m_iFailoverAttempts;
-
-    /**
-     *  TRUE when agent has enrolled and stored its certificates.
-     */
-    int m_iEnrolled;
-
-    /**
-     *  The agent's passphrase after "key stretching", i.e. hashing the number of
-     *  times specified by the KMA during enrollment, and converted to hexadecimal.
-     */
-    char m_sHexHashedPassphrase[2*KMS_MAX_HASH_SIZE+1];
-    
-    /**
-     *  gSOAP runtime context.
-     */
-    void *m_pvSoap; 
-
-    /**
-     * gSOAP runtime context for discovery.
-     */
-    void *m_pvDiscoverySoap; 
-
-    /**
-     *  A lock used internally by the agent library.
-     */
-    void *m_pLock;
-
-    /**  
-     *  The minimum interval between automatic cluster discovery requests in seconds.
-     *  A value of zero seconds disables load balancing and periodic cluster
-     *  discovery calls.  
-     */
-    int m_iClusterDiscoveryFrequency;
-    
-    /**
-     *  The time in seconds when the cluster discovery service was last called for the
-     *  current session.
-     */
-    int m_iLastClusterDiscoveryTime;
-
-    /**
-     *  The Site ID assigned to the agent by the KMS administrators.
-     */
-    utf8char m_wsEntitySiteID[KMS_MAX_ENTITY_SITE_ID + 1];
-
-    /** 
-     *  The total number of KMA in the KMS cluster as reported by the last
-     *  cluster discovery.
-     */
-    int m_iClusterNum;
-
-    /**
-     *  An array of the KMAs withhin the cluster.
-     */
-    KMSClusterEntry m_aCluster[KMS_MAX_CLUSTER_NUM];
-
-    /**
-     *  A boolean flag for the first cluster discovery call.
-     */
-    int m_bIsClusterDiscoveryCalled;
-
-    /**
-     *  A handle to the DataUnitCache used for selection of a KMA.
-     */
-    void *m_pDataUnitCache;
-
-    /**
-     *  A handle to the load balancer.
-     */
-    void *m_pAgentLoadBalancer;
-
-    /**
-     *  error string
-     */
-    utf8char m_wsErrorString[KMS_MAX_ERROR_STRING + 1];
-
-    /**
-     *  URL to KMA service within cluster
-     */
-    char m_sURL[KMS_MAX_URL + 1];
-    
-    /** 
-     *  The security mode specified to <code>KMSAgent_LoadProfile</code>
-     */
-    int m_eKMSmode;
-
-#ifdef KMSUSERPKCS12
-    int m_iLastErrorCode;
-#endif
-} KMSClientProfile;
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif 
-
--- a/usr/src/lib/libkmsagent/common/KMSClientProfileImpl.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,344 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/**
- * \file KMSClientProfileImpl.h
- */
-
-#ifndef CLIENT_PROFILE_IMPL_H
-#define CLIENT_PROFILE_IMPL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define AGENT_LOG_FILE              "KMSAgentLog.log"
-    
-/**
- *  Build383 corresponds to 2.0.2 which does not support AES Key Wrap and
- *  enforcment of FIPS mode.
- */
-#define FIPS_COMPATIBLE_KMA_VERSION "Build384"
-
-
-extern bool g_bUseFileLog;
-
-/*---------------------------------------------------------------------------
- * Function: KMSClient_InitializeLibrary
- *
- * Description: This function initializes the KMS Agent or Management API library. 
- *              It should be called before any other functions are invoked.
- *              Internally, it setups SSL library and Logging module.
- *                    
- *
- * Input
- * -----
- * i_wsWorkingDirectory -- Working directory of the program which uses the library
- * i_bIsManager -- TRUE: Initialize Management Library; FALSE: initialize Agent Library.
- * i_bUseFileLog:   True if logs should go to a log file in the working directory.  
- *                  False otherwise.
- *
- * Output
- * ------
- * return value                 TRUE or FALSE
- *
- *--------------------------------------------------------------------------*/
-bool KMSClient_InitializeLibrary(
-                        const utf8cstr i_wsWorkingDirectory,
-                        int i_bUseFileLog );
-
-/*---------------------------------------------------------------------------
- * Function: KMSClient_FinalizeLibrary
- *
- * Description: This function finalizes the KMS Agent(Or Management) API library. 
- *              It should be called when the library is not needed by the program. 
- *              Internally it cleans up SSL library and Logging module.
- * 
- *
- * Input
- * -----
- * i_bIsManager -- TRUE: Finalize Management Library; FALSE: Finalize Agent Library.
- *
- * Output
- * ------
- * return value                 TRUE or FALSE
- *
- *--------------------------------------------------------------------------*/
-bool KMSClient_FinalizeLibrary();
-
-utf8cstr KMSClient_GetLastErrorMessage(KMSClientProfile *i_pProfile);
-
-bool KMSClient_LoadProfile(
-                KMSClientProfile *io_pProfile,
-                utf8cstr  i_wsProfileName,
-                utf8cstr  i_wsEntityID,
-                utf8cstr  i_wsPassphrase,
-                utf8cstr  i_wsApplianceAddress,
-                int       i_iTransactionTimeout,
-                int       i_iFailOverLimit,
-                int       i_iClusterDiscoveryFrequency,
-                int       i_eKMSmode);
-
-/*---------------------------------------------------------------------------
- * Function: KMSClient_GetClusterInformation
- *
- * Description: Get the cluster information by calling cluster discovery
- *              service. 
- *
- * Input
- * -----
- *            i_pProfile -- a pointer to an initialized KMSClientProfile structure
- *            i_iEntitySiteIDSize -- the buffer size of the entity site ID
- *                                           (KMS_MAX_ENTITIY_SITE_ID)
- *            i_iClusterEntryArraySize -- the array size for cluster entries
- *                                             (KMS_MAX_CLUSTER_NUM)
- * Output
- * ------
-  *            o_wsEntitySiteID -- the entity's Site ID
- *            o_pApplianceNum -- the returned number of the appliances in the cluster                         
- *        o_pClusterEntryArray -- the array of cluster entries
- *
- * return value     TRUE/FALSE 
- *                         Use KMSAgent_GetLastErrorMessage() to get the error message
- *
- *
- *--------------------------------------------------------------------------*/
-bool KMSClient_GetClusterInformation(KMSClientProfile *i_pProfile, 
-                                     utf8cstr  o_wsEntitySiteID,
-                                     int i_iEntitySiteIDSize,
-                                     int *o_pApplianceNum,
-                                     KMSClusterEntry *o_pClusterEntryArray,
-                                     int i_iClusterEntryArraySize);
-
-/**
- *  @return true if any KMAs are not FIPS compatible, i.e. perform AES key
- *  wrap.
- */
-bool KMSClient_NoFIPSCompatibleKMAs(const KMSClientProfile * const i_pProfile);
-
-/*---------------------------------------------------------------------------
- * Function: KMSClient_SelectAppliance
- *
- * Description: Select the current appliance. The current appliance is used for
- *              retrieving cluster information.
- *
- * Input
- * -----
- *            i_pProfile -- a pointer to an initialized KMSClientProfile structure
- *            i_wsApplianceAddress -- the IP address of the appliance
- * Output
- * ------
- *          (none)
- * return value     TRUE/FALSE 
- *                         Use KMSAgent_GetLastErrorMessage() to get the error message
- *
- *
- *--------------------------------------------------------------------------*/
-bool KMSClient_SelectAppliance(KMSClientProfile *i_pProfile,
-                               utf8cstr i_wsApplianceAddress);
-
-/**
- *  check if the profile was loaded successfully
- *
- *  @param  i_pProfile  a pointer that may, or may not be to a loaded profile
- *
- *  @return true if the profile was loaded
- */
-bool KMSClient_ProfileLoaded( KMSClientProfile *i_pProfile );
-
-/*---------------------------------------------------------------------------
- * Function: KMSClient_DeleteProfile
- *
- * Description: Delete the profile information from the local disk
- * 
- *
- * Input
- * -----
- *               i_wsProfileName -- the profile name
-
- * Output
- * ------
- * return value     TRUE/FALSE 
- *                         Use KMSAgent_GetLastErrorMessage() to get the error message
- *
- *--------------------------------------------------------------------------*/   
-bool KMSClient_DeleteProfile(utf8cstr i_wsProfileName);
-
-/*---------------------------------------------------------------------------
- * Function: KMSClient_UnloadProfile
- *
- * Description: Destroy the profile information in memory including agent's private
- *              key.
- * 
- *
- * Input
- * -----
- *            i_pProfile -- a pointer to an initialized KMSClientProfile structure
-
- * Output
- * ------
- * return value     TRUE/FALSE 
- *                         Use KMSAgent_GetLastErrorMessage() to get the error message
- *
- *--------------------------------------------------------------------------*/   
-bool KMSClient_UnloadProfile(KMSClientProfile *i_pProfile);
-
-/**
- *   @return true if the soap fault string indicates that the SSL handshake
- *   did not succeed due to an invalid certificate.
- */
-bool SSL_InvalidCertificate(const char * const i_sErrorString );
-
-/**
- *   compares the error string with various soap fault substrings to determine if the
- *   error was a server-side error or not, also checks the supplied errno codes against
- *   various POSIX errno macros that would imply server connection issues
- */
-bool ServerError (const char * i_sErrorString, int i_iErrno );
-
-#ifdef __cplusplus
-}
-
-// helper macro to turn value into a string
-#define LogError(a,b,c,d,e)        LogError_function(a,b,#b,c,d,e)
-
-/**
- *  Log an error after saving the message in the profile.  This supports <code>KMSAgent_GetLastErrorMessage</code>
- *  @param i_pProfile an initialized profile
- *
- *  @param i_iErrno, the error expressed as a number
- *  @param i_sOperation, the operation number as a string
- *  @param i_sEntityID optional, the agent ID
- *  @param i_sNetworkAddress optional, the address of the KMA involved in the error
- *  @param i_sMessage optional, an informative error message
- */
-void LogError_function(KMSClientProfile *i_pProfile,
-              int i_iErrno,
-              const char* i_sOperation,
-              const char* i_sEntityID,
-              const char* i_sNetworkAddress,
-              const char* i_sMessage );
-
-#endif
-
-/**
- *  @return true if the KMA version string corresponds to a FIPS compatible
- *  KMA
- */
-bool FIPScompatibleKMA (
-                        const char * const i_sKMAVersion);
-
-#define AUDIT_CLIENT_LOG_ERROR_BASE 0x300
-
-#define AUDIT_CLIENT_AGENT_CREATE_AUDIT_LOG_SOAP_ERROR	                                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x00)
-#define AUDIT_CLIENT_AGENT_CREATE_DATA_UNIT_RESPONSE_INVALID_DESCRIPTION_LENGTH	        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x01)
-#define AUDIT_CLIENT_AGENT_CREATE_DATA_UNIT_RESPONSE_INVALID_DU_ID_LENGTH	        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x02)
-#define AUDIT_CLIENT_AGENT_CREATE_DATA_UNIT_RESPONSE_INVALID_EXTERNAL_TAG_LENGTH	(AUDIT_CLIENT_LOG_ERROR_BASE + 0x03)
-#define AUDIT_CLIENT_AGENT_CREATE_DATA_UNIT_SOAP_ERROR	                                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x04)
-#define AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_KEYID_RESPONSE	                        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x05)
-#define AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_KEY_GROUP_ID_LENGTH_RESPONSE	        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x06)
-#define AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_KEY_LENGTH_RESPONSE	                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x07)
-#define AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_KEY_STATE_RESPONSE	                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x08)
-#define AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_KEY_TYPE_RESPONSE	                        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x09)
-#define AUDIT_CLIENT_AGENT_CREATE_KEY_KEY_CALLOUT_ERROR	                                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x0a)
-#define AUDIT_CLIENT_AGENT_CREATE_KEY_SOAP_ERROR	                                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x0b)
-#define AUDIT_CLIENT_AGENT_DISASSOCIATE_DATA_UNIT_KEYS_SOAP_ERROR	                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x0c)
-#define AUDIT_CLIENT_AGENT_LIST_KEY_GROUPS_SOAP_ERROR	                                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x0d)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_BY_EXTERNAL_UNIQUE_ID_RESPONSE_INVALID_DESCRIPTION_LENGTH	    (AUDIT_CLIENT_LOG_ERROR_BASE + 0x0e)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_BY_EXTERNAL_UNIQUE_ID_RESPONSE_INVALID_EXTERNAL_TAG_LENGTH    (AUDIT_CLIENT_LOG_ERROR_BASE + 0x0f)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_BY_EXTERNAL_UNIQUE_ID_SOAP_ERROR	        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x10)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEYS_REMAINING_RESPONSE	(AUDIT_CLIENT_LOG_ERROR_BASE + 0x11)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEYS_SIZE_RESPONSE	        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x12)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEY_ARRAY_SIZE_RESPONSE	(AUDIT_CLIENT_LOG_ERROR_BASE + 0x13)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEY_LENGTH_RESPONSE	        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x14)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEY_RESPONSE	                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x15)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEY_STATE_RESPONSE	        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x16)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_KEY_TYPE_RESPONSE	        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x17)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_KEY_CALLOUT_ERROR	                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x18)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_SOAP_ERROR	                        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x19)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_RESPONSE_INVALID_DESCRIPTION_LENGTH	(AUDIT_CLIENT_LOG_ERROR_BASE + 0x1a)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_RESPONSE_INVALID_EXTERNAL_TAG_LENGTH	(AUDIT_CLIENT_LOG_ERROR_BASE + 0x1b)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_SOAP_ERROR	                        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x1c)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_KEYID_RESPONSE	                        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x1d)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_KEY_GROUP_ID_LENGTH_RESPONSE	        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x1e)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_KEY_LENGTH_RESPONSE	                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x1f)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_KEY_STATE_RESPONSE	                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x20)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_KEY_TYPE_RESPONSE	                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x21)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_KEY_CALLOUT_ERROR	                        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x22)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_SOAP_ERROR	                                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x23)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_KEYID_RESPONSE	(AUDIT_CLIENT_LOG_ERROR_BASE + 0x24)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_KEY_GROUP_ID_LENGTH_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x25)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_KEY_LENGTH_RESPONSE	         (AUDIT_CLIENT_LOG_ERROR_BASE + 0x26)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_KEY_STATE_RESPONSE	         (AUDIT_CLIENT_LOG_ERROR_BASE + 0x27)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_KEY_TYPE_RESPONSE	         (AUDIT_CLIENT_LOG_ERROR_BASE + 0x28)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_KEY_CALLOUT_ERROR	        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x29)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_SOAP_ERROR	                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x2a)
-#define AUDIT_CLIENT_COMPUTE_CHALLENGE_RESPONSE_FAILED	                                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x2b)
-#define AUDIT_CLIENT_COMPUTE_FIXED_FAILED	                                        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x2c)
-#define AUDIT_CLIENT_GET_CERTIFICATE_INVALID_CERTIFICATE_FORMAT	                        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x2d)
-#define AUDIT_CLIENT_GET_CERTIFICATE_INVALID_CHALLENGE_RESPONSE	                        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x2e)
-#define AUDIT_CLIENT_GET_CERTIFICATE_INVALID_KEY_FORMAT	                                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x2f)
-#define AUDIT_CLIENT_GET_CERTIFICATE_INVALID_RESPONSE_FORMAT	                        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x30)
-#define AUDIT_CLIENT_GET_CERTIFICATE_SAVE_CA_CERTIFICATE_FAILED	                        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x31)
-#define AUDIT_CLIENT_GET_CERTIFICATE_SOAP_ERROR	                                        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x32)
-#define AUDIT_CLIENT_GET_CLUSTER_INFORMATION	                                        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x33)
-#define AUDIT_CLIENT_GET_CLUSTER_INFORMATION_SOAP_ERROR	                                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x34)
-#define AUDIT_CLIENT_GET_ROOT_CA_CERTIFICATE_INVALID_CA_CERTIFICATE_FORMAT	        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x35)
-#define AUDIT_CLIENT_GET_ROOT_CA_CERTIFICATE_INVALID_RESPONSE_FORMAT	                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x36)
-#define AUDIT_CLIENT_LOAD_CLUSTER_INFORMATION_INVALID_CLUSTER_FILE_FORMAT	        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x37)
-#define AUDIT_CLIENT_LOAD_CLUSTER_INFORMATION_OPEN_CLUSTER_FILE_FAILED	                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x38)
-#define AUDIT_CLIENT_LOAD_PROFILE_EXPORT_CERTIFICATE_AND_KEY_FAILED	                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x39)
-#define AUDIT_CLIENT_LOAD_PROFILE_FAILED	                                        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x3a)
-#define AUDIT_CLIENT_LOAD_PROFILE_SAVE_CA_CERTIFICATE_FAILED	                        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x3b)
-#define AUDIT_CLIENT_LOAD_PROFILE_SOAP_ERROR	                                        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x3c)
-#define AUDIT_CLIENT_SAVE_CLUSTER_INFORMATION_OPEN_CLUSTER_FILE_FAILED	                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x3d)
-#define AUDIT_CLIENT_SAVE_ROOTCA_FAILED	                                                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x3e)
-#define AUDIT_CLIENT_SELECT_APPLIANCE	                                                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x3f)
-#define AUDIT_PROFILE_READ_CONFIG_FILE_INVALID_CONFIGURATION_FILE_FORMAT	        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x40)
-#define AUDIT_PROFILE_READ_CONFIG_FILE_OPEN_CONFIGURATION_FILE_FAILED	                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x41)
-#define AUDIT_PROFILE_WRITE_CONFIG_FILE_OPEN_CONFIGURATION_FILE_FAILED	                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x42)
-#define LoadProfile_AUDIT_CLIENT_GET_ROOT_CA_CERTIFICATE_SOAP_ERROR	                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x43)
-#define AUDIT_CLIENT_AGENT_CREATE_KEY_AESKEYUNWRAP_ERROR                            (AUDIT_CLIENT_LOG_ERROR_BASE + 0x44)
-#define AUDIT_CLIENT_AGENT_REGISTER_KWK_ERROR                                       (AUDIT_CLIENT_LOG_ERROR_BASE + 0x45)
-#define AUDIT_CLIENT_AGENT_REGISTER_KWK_INVALID_KEYID_RESPONSE                      (AUDIT_CLIENT_LOG_ERROR_BASE + 0x46)
-#define AUDIT_CLIENT_AGENT_CREATE_KWK_RNG_ERROR                                     (AUDIT_CLIENT_LOG_ERROR_BASE + 0x47)
-#define AUDIT_CLIENT_GET_KWK_WRAPPING_KEY_SOAP_ERROR                                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x48)
-#define AUDIT_CLIENT_GET_KWK_WRAPPING_KEY_INVALID_KEY_RESPONSE                      (AUDIT_CLIENT_LOG_ERROR_BASE + 0x49)
-#define AUDIT_CLIENT_GET_KWK_WRAPPING_KEY_INVALID_RSA_PUB_KEY                       (AUDIT_CLIENT_LOG_ERROR_BASE + 0x50)
-#define AUDIT_CLIENT_AGENT_CREATE_KWK_PUBLIC_ENCRYPT_ERROR                          (AUDIT_CLIENT_LOG_ERROR_BASE + 0x51)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_AESKEYUNWRAP_ERROR                          (AUDIT_CLIENT_LOG_ERROR_BASE + 0x52)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_AESKEYUNWRAP_ERROR      (AUDIT_CLIENT_LOG_ERROR_BASE + 0x53)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_AESKEYUNWRAP_ERROR               (AUDIT_CLIENT_LOG_ERROR_BASE + 0x54)
-#define AUDIT_CLIENT_AGENT_CREATE_KEY_INVALID_WRAPPED_KEY_LENGTH_RESPONSE	        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x55)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_INVALID_WRAPPED_KEY_LENGTH_RESPONSE	        (AUDIT_CLIENT_LOG_ERROR_BASE + 0x56)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_INVALID_WRAPPED_KEY_LENGTH_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x57)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_INVALID_WRAPPED_KEY_LENGTH_RESPONSE (AUDIT_CLIENT_LOG_ERROR_BASE + 0x58)
-#define AUDIT_CLIENT_AGENT_CREATE_KEY_KWKID_MISMATCH                                (AUDIT_CLIENT_LOG_ERROR_BASE + 0x59)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_KEY_KWKID_MISMATCH                              (AUDIT_CLIENT_LOG_ERROR_BASE + 0x60)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_DATA_UNIT_KEYS_KWKID_MISMATCH                   (AUDIT_CLIENT_LOG_ERROR_BASE + 0x61)
-#define AUDIT_CLIENT_AGENT_RETRIEVE_PROTECT_AND_PROCESS_KEY_KWKID_MISMATCH          (AUDIT_CLIENT_LOG_ERROR_BASE + 0x62)
-#define AUDIT_CLIENT_AGENT_LOAD_PROFILE_NO_FIPS_COMPATIBLE_KMAS_AVAILABLE           (AUDIT_CLIENT_LOG_ERROR_BASE + 0x63)
-
-#endif
--- a/usr/src/lib/libkmsagent/common/SOAP/AgentServiceNamespace.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-#include "KMS_Agent.nsmap"
--- a/usr/src/lib/libkmsagent/common/SOAP/CAServiceNamespace.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-#include "KMS_CA.nsmap"
--- a/usr/src/lib/libkmsagent/common/SOAP/CertificateServiceNamespace.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-#include "KMS_Certificate.nsmap"
--- a/usr/src/lib/libkmsagent/common/SOAP/DiscoveryServiceNamespace.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-#include "KMS_Discovery.nsmap"
--- a/usr/src/lib/libkmsagent/common/SOAP/KMSAgentWebServiceNamespaces.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*-----------------------------------------------------------------------------
- * File: WebServiceNamespaces.h
- *
- -----------------------------------------------------------------------------*/
-
-#ifndef ClientWebServiceNamespaces_H
-#define ClientWebServiceNamespaces_H
-
-extern SOAP_NMAC struct Namespace KMS_CA_namespaces[];
-extern SOAP_NMAC struct Namespace KMS_Certificate_namespaces[];
-extern SOAP_NMAC struct Namespace KMS_Agent_namespaces[];
-extern SOAP_NMAC struct Namespace KMS_Discovery_namespaces[];
-
-#endif //ClientWebServiceNamespaces_H
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_Agent.nsmap	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-
-#include "KMS_AgentH.h"
-SOAP_NMAC struct Namespace KMS_Agent_namespaces[] =
-{
-	{"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope"},
-	{"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding"},
-	{"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance"},
-	{"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema"},
-	{"KMS-Agent", "http://www.sun.com/KMS/KMS-Agent"},
-	{NULL, NULL}
-};
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_AgentC.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8820 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* KMS_AgentC.cpp
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/AgentService/KMS_Agent_SOAP.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#if defined(__BORLANDC__)
-#pragma option push -w-8060
-#pragma option push -w-8004
-#endif
-
-#include "KMS_AgentH.h"
-
-namespace KMS_Agent {
-
-SOAP_SOURCE_STAMP("@(#) KMS_AgentC.cpp ver 2.7.17 2010-06-08 19:16:38 GMT")
-
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serializeheader(struct soap *soap)
-{
-	if (soap->header)
-		soap_serialize_SOAP_ENV__Header(soap, soap->header);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_putheader(struct soap *soap)
-{
-	if (soap->header)
-	{	soap->part = SOAP_IN_HEADER;
-		if (soap_out_SOAP_ENV__Header(soap, "SOAP-ENV:Header", 0, soap->header, NULL))
-			return soap->error;
-		soap->part = SOAP_END_HEADER;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_getheader(struct soap *soap)
-{
-	soap->part = SOAP_IN_HEADER;
-	soap->header = soap_in_SOAP_ENV__Header(soap, "SOAP-ENV:Header", NULL, NULL);
-	soap->part = SOAP_END_HEADER;
-	return soap->header == NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_header(struct soap *soap)
-{
-	if (!soap->header)
-	{	if ((soap->header = soap_new_SOAP_ENV__Header(soap, -1)))
-			soap_default_SOAP_ENV__Header(soap, soap->header);
-	}
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_fault(struct soap *soap)
-{
-	if (!soap->fault)
-	{	soap->fault = soap_new_SOAP_ENV__Fault(soap, -1);
-		if (!soap->fault)
-			return;
-		soap_default_SOAP_ENV__Fault(soap, soap->fault);
-	}
-	if (soap->version == 2 && !soap->fault->SOAP_ENV__Code)
-	{	soap->fault->SOAP_ENV__Code = soap_new_SOAP_ENV__Code(soap, -1);
-		soap_default_SOAP_ENV__Code(soap, soap->fault->SOAP_ENV__Code);
-	}
-	if (soap->version == 2 && !soap->fault->SOAP_ENV__Reason)
-	{	soap->fault->SOAP_ENV__Reason = soap_new_SOAP_ENV__Reason(soap, -1);
-		soap_default_SOAP_ENV__Reason(soap, soap->fault->SOAP_ENV__Reason);
-	}
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serializefault(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->fault)
-		soap_serialize_SOAP_ENV__Fault(soap, soap->fault);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_putfault(struct soap *soap)
-{
-	if (soap->fault)
-		return soap_put_SOAP_ENV__Fault(soap, soap->fault, "SOAP-ENV:Fault", NULL);
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_getfault(struct soap *soap)
-{
-	return (soap->fault = soap_get_SOAP_ENV__Fault(soap, NULL, "SOAP-ENV:Fault", NULL)) == NULL;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultcode(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 2)
-		return (const char**)&soap->fault->SOAP_ENV__Code->SOAP_ENV__Value;
-	return (const char**)&soap->fault->faultcode;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultsubcode(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 2)
-	{	if (!soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode)
-		{	soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode = soap_new_SOAP_ENV__Code(soap, -1);
-			soap_default_SOAP_ENV__Code(soap, soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode);
-		}
-		return (const char**)&soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode->SOAP_ENV__Value;
-	}
-	return (const char**)&soap->fault->faultcode;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultstring(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 2)
-		return (const char**)&soap->fault->SOAP_ENV__Reason->SOAP_ENV__Text;
-	return (const char**)&soap->fault->faultstring;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultdetail(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 1)
-	{	if (!soap->fault->detail)
-		{	soap->fault->detail = (struct SOAP_ENV__Detail*)soap_malloc(soap, sizeof(struct SOAP_ENV__Detail));
-			soap_default_SOAP_ENV__Detail(soap, soap->fault->detail);
-		}
-		return (const char**)&soap->fault->detail->__any;
-	}
-	if (!soap->fault->SOAP_ENV__Detail)
-	{	soap->fault->SOAP_ENV__Detail = soap_new_SOAP_ENV__Detail(soap, -1);
-		soap_default_SOAP_ENV__Detail(soap, soap->fault->SOAP_ENV__Detail);
-	}
-	return (const char**)&soap->fault->SOAP_ENV__Detail->__any;
-}
-
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 int SOAP_FMAC4 soap_getindependent(struct soap *soap)
-{
-	int t;
-	if (soap->version == 1)
-	{	for (;;)
-		{	if (!soap_getelement(soap, &t))
-				if (soap->error || soap_ignore_element(soap))
-					break;
-		}
-	}
-	if (soap->error == SOAP_NO_TAG || soap->error == SOAP_EOF)
-		soap->error = SOAP_OK;
-	return soap->error;
-}
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type)
-{
-	if (soap_peek_element(soap))
-		return NULL;
-	if (!*soap->id || !(*type = soap_lookup_type(soap, soap->id)))
-		*type = soap_lookup_type(soap, soap->href);
-	switch (*type)
-	{
-	case SOAP_TYPE_KMS_Agent_byte:
-		return soap_in_byte(soap, NULL, NULL, "xsd:byte");
-	case SOAP_TYPE_KMS_Agent_int:
-		return soap_in_int(soap, NULL, NULL, "xsd:int");
-	case SOAP_TYPE_KMS_Agent_xsd__int:
-		return soap_in_xsd__int(soap, NULL, NULL, "xsd:int");
-	case SOAP_TYPE_KMS_Agent_long:
-		return soap_in_long(soap, NULL, NULL, "xsd:long");
-	case SOAP_TYPE_KMS_Agent_xsd__long:
-		return soap_in_xsd__long(soap, NULL, NULL, "xsd:long");
-	case SOAP_TYPE_KMS_Agent_LONG64:
-		return soap_in_LONG64(soap, NULL, NULL, "xsd:long");
-	case SOAP_TYPE_KMS_Agent_xsd__float:
-		return soap_in_xsd__float(soap, NULL, NULL, "xsd:float");
-	case SOAP_TYPE_KMS_Agent_float:
-		return soap_in_float(soap, NULL, NULL, "xsd:float");
-	case SOAP_TYPE_KMS_Agent_unsignedByte:
-		return soap_in_unsignedByte(soap, NULL, NULL, "xsd:unsignedByte");
-	case SOAP_TYPE_KMS_Agent_unsignedInt:
-		return soap_in_unsignedInt(soap, NULL, NULL, "xsd:unsignedInt");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogCondition:
-		return soap_in_KMS_Agent__AuditLogCondition(soap, NULL, NULL, "KMS-Agent:AuditLogCondition");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogRetention:
-		return soap_in_KMS_Agent__AuditLogRetention(soap, NULL, NULL, "KMS-Agent:AuditLogRetention");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnitState:
-		return soap_in_KMS_Agent__DataUnitState(soap, NULL, NULL, "KMS-Agent:DataUnitState");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__KeyState:
-		return soap_in_KMS_Agent__KeyState(soap, NULL, NULL, "KMS-Agent:KeyState");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__KeyType:
-		return soap_in_KMS_Agent__KeyType(soap, NULL, NULL, "KMS-Agent:KeyType");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__FilterOperator:
-		return soap_in_KMS_Agent__FilterOperator(soap, NULL, NULL, "KMS-Agent:FilterOperator");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__SortOrder:
-		return soap_in_KMS_Agent__SortOrder(soap, NULL, NULL, "KMS-Agent:SortOrder");
-	case SOAP_TYPE_KMS_Agent_xsd__boolean:
-		return soap_in_xsd__boolean(soap, NULL, NULL, "xsd:boolean");
-	case SOAP_TYPE_KMS_Agent_bool:
-		return soap_in_bool(soap, NULL, NULL, "xsd:boolean");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWK:
-		return soap_in_KMS_Agent__RegisterAgentKWK(soap, NULL, NULL, "KMS-Agent:RegisterAgentKWK");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWKResponse:
-		return soap_in_KMS_Agent__RegisterAgentKWKResponse(soap, NULL, NULL, "KMS-Agent:RegisterAgentKWKResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKey:
-		return soap_in_KMS_Agent__GetAgentKWKPublicKey(soap, NULL, NULL, "KMS-Agent:GetAgentKWKPublicKey");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKeyResponse:
-		return soap_in_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, NULL, NULL, "KMS-Agent:GetAgentKWKPublicKeyResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLog:
-		return soap_in_KMS_Agent__CreateAuditLog(soap, NULL, NULL, "KMS-Agent:CreateAuditLog");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLogResponse:
-		return soap_in_KMS_Agent__CreateAuditLogResponse(soap, NULL, NULL, "KMS-Agent:CreateAuditLogResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2:
-		return soap_in_KMS_Agent__RetrieveProtectAndProcessKey2(soap, NULL, NULL, "KMS-Agent:RetrieveProtectAndProcessKey2");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2Response:
-		return soap_in_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, NULL, NULL, "KMS-Agent:RetrieveProtectAndProcessKey2Response");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey:
-		return soap_in_KMS_Agent__RetrieveProtectAndProcessKey(soap, NULL, NULL, "KMS-Agent:RetrieveProtectAndProcessKey");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKeyResponse:
-		return soap_in_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, NULL, NULL, "KMS-Agent:RetrieveProtectAndProcessKeyResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2:
-		return soap_in_KMS_Agent__RetrieveDataUnitKeys2(soap, NULL, NULL, "KMS-Agent:RetrieveDataUnitKeys2");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2Response:
-		return soap_in_KMS_Agent__RetrieveDataUnitKeys2Response(soap, NULL, NULL, "KMS-Agent:RetrieveDataUnitKeys2Response");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys:
-		return soap_in_KMS_Agent__RetrieveDataUnitKeys(soap, NULL, NULL, "KMS-Agent:RetrieveDataUnitKeys");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeysResponse:
-		return soap_in_KMS_Agent__RetrieveDataUnitKeysResponse(soap, NULL, NULL, "KMS-Agent:RetrieveDataUnitKeysResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2:
-		return soap_in_KMS_Agent__RetrieveKey2(soap, NULL, NULL, "KMS-Agent:RetrieveKey2");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2Response:
-		return soap_in_KMS_Agent__RetrieveKey2Response(soap, NULL, NULL, "KMS-Agent:RetrieveKey2Response");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey:
-		return soap_in_KMS_Agent__RetrieveKey(soap, NULL, NULL, "KMS-Agent:RetrieveKey");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKeyResponse:
-		return soap_in_KMS_Agent__RetrieveKeyResponse(soap, NULL, NULL, "KMS-Agent:RetrieveKeyResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2:
-		return soap_in_KMS_Agent__CreateKey2(soap, NULL, NULL, "KMS-Agent:CreateKey2");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2Response:
-		return soap_in_KMS_Agent__CreateKey2Response(soap, NULL, NULL, "KMS-Agent:CreateKey2Response");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey:
-		return soap_in_KMS_Agent__CreateKey(soap, NULL, NULL, "KMS-Agent:CreateKey");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKeyResponse:
-		return soap_in_KMS_Agent__CreateKeyResponse(soap, NULL, NULL, "KMS-Agent:CreateKeyResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeys:
-		return soap_in_KMS_Agent__DisassociateDataUnitKeys(soap, NULL, NULL, "KMS-Agent:DisassociateDataUnitKeys");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeysResponse:
-		return soap_in_KMS_Agent__DisassociateDataUnitKeysResponse(soap, NULL, NULL, "KMS-Agent:DisassociateDataUnitKeysResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueID:
-		return soap_in_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, NULL, NULL, "KMS-Agent:RetrieveDataUnitByExternalUniqueID");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse:
-		return soap_in_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, NULL, NULL, "KMS-Agent:RetrieveDataUnitByExternalUniqueIDResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnit:
-		return soap_in_KMS_Agent__RetrieveDataUnit(soap, NULL, NULL, "KMS-Agent:RetrieveDataUnit");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitResponse:
-		return soap_in_KMS_Agent__RetrieveDataUnitResponse(soap, NULL, NULL, "KMS-Agent:RetrieveDataUnitResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnit:
-		return soap_in_KMS_Agent__CreateDataUnit(soap, NULL, NULL, "KMS-Agent:CreateDataUnit");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnitResponse:
-		return soap_in_KMS_Agent__CreateDataUnitResponse(soap, NULL, NULL, "KMS-Agent:CreateDataUnitResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroups:
-		return soap_in_KMS_Agent__ListKeyGroups(soap, NULL, NULL, "KMS-Agent:ListKeyGroups");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroupsResponse:
-		return soap_in_KMS_Agent__ListKeyGroupsResponse(soap, NULL, NULL, "KMS-Agent:ListKeyGroupsResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnit:
-		return soap_in_KMS_Agent__DataUnit(soap, NULL, NULL, "KMS-Agent:DataUnit");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeys:
-		return soap_in_KMS_Agent__ArrayOfKeys(soap, NULL, NULL, "KMS-Agent:ArrayOfKeys");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__Key:
-		return soap_in_KMS_Agent__Key(soap, NULL, NULL, "KMS-Agent:Key");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeyGroups:
-		return soap_in_KMS_Agent__ArrayOfKeyGroups(soap, NULL, NULL, "KMS-Agent:ArrayOfKeyGroups");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup:
-		return soap_in_KMS_Agent__KeyGroup(soap, NULL, NULL, "KMS-Agent:KeyGroup");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__QueryParameters:
-		return soap_in_KMS_Agent__QueryParameters(soap, NULL, NULL, "KMS-Agent:QueryParameters");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfFilterParameters:
-		return soap_in_KMS_Agent__ArrayOfFilterParameters(soap, NULL, NULL, "KMS-Agent:ArrayOfFilterParameters");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters:
-		return soap_in_KMS_Agent__FilterParameters(soap, NULL, NULL, "KMS-Agent:FilterParameters");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfHexBinary:
-		return soap_in_KMS_Agent__ArrayOfHexBinary(soap, NULL, NULL, "KMS-Agent:ArrayOfHexBinary");
-	case SOAP_TYPE_KMS_Agent_xsd__hexBinary:
-		return soap_in_xsd__hexBinary(soap, NULL, NULL, "xsd:hexBinary");
-	case SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__Key:
-		return soap_in_PointerToKMS_Agent__Key(soap, NULL, NULL, "KMS-Agent:Key");
-	case SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__KeyGroup:
-		return soap_in_PointerToKMS_Agent__KeyGroup(soap, NULL, NULL, "KMS-Agent:KeyGroup");
-	case SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__FilterParameters:
-		return soap_in_PointerToKMS_Agent__FilterParameters(soap, NULL, NULL, "KMS-Agent:FilterParameters");
-	case SOAP_TYPE_KMS_Agent_PointerToxsd__hexBinary:
-		return soap_in_PointerToxsd__hexBinary(soap, NULL, NULL, "xsd:hexBinary");
-	case SOAP_TYPE_KMS_Agent_PointerTounsignedByte:
-		return soap_in_PointerTounsignedByte(soap, NULL, NULL, "xsd:unsignedByte");
-	case SOAP_TYPE_KMS_Agent_xsd__duration:
-	{	char **s;
-		s = soap_in_xsd__duration(soap, NULL, NULL, "xsd:duration");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_Agent_xsd__dateTime:
-	{	char **s;
-		s = soap_in_xsd__dateTime(soap, NULL, NULL, "xsd:dateTime");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_Agent_xsd__string:
-	{	char **s;
-		s = soap_in_xsd__string(soap, NULL, NULL, "xsd:string");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_Agent__QName:
-	{	char **s;
-		s = soap_in__QName(soap, NULL, NULL, "xsd:QName");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_Agent_string:
-	{	char **s;
-		s = soap_in_string(soap, NULL, NULL, "xsd:string");
-		return s ? *s : NULL;
-	}
-	default:
-	{	const char *t = soap->type;
-		if (!*t)
-			t = soap->tag;
-		if (!soap_match_tag(soap, t, "xsd:byte"))
-		{	*type = SOAP_TYPE_KMS_Agent_byte;
-			return soap_in_byte(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:int"))
-		{	*type = SOAP_TYPE_KMS_Agent_int;
-			return soap_in_int(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:int"))
-		{	*type = SOAP_TYPE_KMS_Agent_xsd__int;
-			return soap_in_xsd__int(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:long"))
-		{	*type = SOAP_TYPE_KMS_Agent_long;
-			return soap_in_long(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:long"))
-		{	*type = SOAP_TYPE_KMS_Agent_xsd__long;
-			return soap_in_xsd__long(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:long"))
-		{	*type = SOAP_TYPE_KMS_Agent_LONG64;
-			return soap_in_LONG64(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:float"))
-		{	*type = SOAP_TYPE_KMS_Agent_xsd__float;
-			return soap_in_xsd__float(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:float"))
-		{	*type = SOAP_TYPE_KMS_Agent_float;
-			return soap_in_float(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:unsignedByte"))
-		{	*type = SOAP_TYPE_KMS_Agent_unsignedByte;
-			return soap_in_unsignedByte(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:unsignedInt"))
-		{	*type = SOAP_TYPE_KMS_Agent_unsignedInt;
-			return soap_in_unsignedInt(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:AuditLogCondition"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogCondition;
-			return soap_in_KMS_Agent__AuditLogCondition(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:AuditLogRetention"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogRetention;
-			return soap_in_KMS_Agent__AuditLogRetention(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:DataUnitState"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnitState;
-			return soap_in_KMS_Agent__DataUnitState(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:KeyState"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__KeyState;
-			return soap_in_KMS_Agent__KeyState(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:KeyType"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__KeyType;
-			return soap_in_KMS_Agent__KeyType(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:FilterOperator"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__FilterOperator;
-			return soap_in_KMS_Agent__FilterOperator(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:SortOrder"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__SortOrder;
-			return soap_in_KMS_Agent__SortOrder(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:boolean"))
-		{	*type = SOAP_TYPE_KMS_Agent_xsd__boolean;
-			return soap_in_xsd__boolean(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:boolean"))
-		{	*type = SOAP_TYPE_KMS_Agent_bool;
-			return soap_in_bool(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RegisterAgentKWK"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWK;
-			return soap_in_KMS_Agent__RegisterAgentKWK(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RegisterAgentKWKResponse"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWKResponse;
-			return soap_in_KMS_Agent__RegisterAgentKWKResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:GetAgentKWKPublicKey"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKey;
-			return soap_in_KMS_Agent__GetAgentKWKPublicKey(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:GetAgentKWKPublicKeyResponse"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKeyResponse;
-			return soap_in_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:CreateAuditLog"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLog;
-			return soap_in_KMS_Agent__CreateAuditLog(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:CreateAuditLogResponse"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLogResponse;
-			return soap_in_KMS_Agent__CreateAuditLogResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RetrieveProtectAndProcessKey2"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2;
-			return soap_in_KMS_Agent__RetrieveProtectAndProcessKey2(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RetrieveProtectAndProcessKey2Response"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2Response;
-			return soap_in_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RetrieveProtectAndProcessKey"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey;
-			return soap_in_KMS_Agent__RetrieveProtectAndProcessKey(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RetrieveProtectAndProcessKeyResponse"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKeyResponse;
-			return soap_in_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RetrieveDataUnitKeys2"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2;
-			return soap_in_KMS_Agent__RetrieveDataUnitKeys2(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RetrieveDataUnitKeys2Response"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2Response;
-			return soap_in_KMS_Agent__RetrieveDataUnitKeys2Response(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RetrieveDataUnitKeys"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys;
-			return soap_in_KMS_Agent__RetrieveDataUnitKeys(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RetrieveDataUnitKeysResponse"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeysResponse;
-			return soap_in_KMS_Agent__RetrieveDataUnitKeysResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RetrieveKey2"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2;
-			return soap_in_KMS_Agent__RetrieveKey2(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RetrieveKey2Response"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2Response;
-			return soap_in_KMS_Agent__RetrieveKey2Response(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RetrieveKey"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey;
-			return soap_in_KMS_Agent__RetrieveKey(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RetrieveKeyResponse"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKeyResponse;
-			return soap_in_KMS_Agent__RetrieveKeyResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:CreateKey2"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2;
-			return soap_in_KMS_Agent__CreateKey2(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:CreateKey2Response"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2Response;
-			return soap_in_KMS_Agent__CreateKey2Response(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:CreateKey"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey;
-			return soap_in_KMS_Agent__CreateKey(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:CreateKeyResponse"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKeyResponse;
-			return soap_in_KMS_Agent__CreateKeyResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:DisassociateDataUnitKeys"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeys;
-			return soap_in_KMS_Agent__DisassociateDataUnitKeys(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:DisassociateDataUnitKeysResponse"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeysResponse;
-			return soap_in_KMS_Agent__DisassociateDataUnitKeysResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RetrieveDataUnitByExternalUniqueID"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueID;
-			return soap_in_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RetrieveDataUnitByExternalUniqueIDResponse"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse;
-			return soap_in_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RetrieveDataUnit"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnit;
-			return soap_in_KMS_Agent__RetrieveDataUnit(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:RetrieveDataUnitResponse"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitResponse;
-			return soap_in_KMS_Agent__RetrieveDataUnitResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:CreateDataUnit"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnit;
-			return soap_in_KMS_Agent__CreateDataUnit(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:CreateDataUnitResponse"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnitResponse;
-			return soap_in_KMS_Agent__CreateDataUnitResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:ListKeyGroups"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroups;
-			return soap_in_KMS_Agent__ListKeyGroups(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:ListKeyGroupsResponse"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroupsResponse;
-			return soap_in_KMS_Agent__ListKeyGroupsResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:DataUnit"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnit;
-			return soap_in_KMS_Agent__DataUnit(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:ArrayOfKeys"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeys;
-			return soap_in_KMS_Agent__ArrayOfKeys(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:Key"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__Key;
-			return soap_in_KMS_Agent__Key(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:ArrayOfKeyGroups"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeyGroups;
-			return soap_in_KMS_Agent__ArrayOfKeyGroups(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:KeyGroup"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup;
-			return soap_in_KMS_Agent__KeyGroup(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:QueryParameters"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__QueryParameters;
-			return soap_in_KMS_Agent__QueryParameters(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:ArrayOfFilterParameters"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfFilterParameters;
-			return soap_in_KMS_Agent__ArrayOfFilterParameters(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:FilterParameters"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters;
-			return soap_in_KMS_Agent__FilterParameters(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Agent:ArrayOfHexBinary"))
-		{	*type = SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfHexBinary;
-			return soap_in_KMS_Agent__ArrayOfHexBinary(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:hexBinary"))
-		{	*type = SOAP_TYPE_KMS_Agent_xsd__hexBinary;
-			return soap_in_xsd__hexBinary(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:duration"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Agent_xsd__duration;
-			s = soap_in_xsd__duration(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:dateTime"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Agent_xsd__dateTime;
-			s = soap_in_xsd__dateTime(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:string"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Agent_xsd__string;
-			s = soap_in_xsd__string(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:QName"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Agent__QName;
-			s = soap_in__QName(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:string"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Agent_string;
-			s = soap_in_string(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		t = soap->tag;
-	}
-	}
-	soap->error = SOAP_TAG_MISMATCH;
-	return NULL;
-}
-#endif
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_ignore_element(struct soap *soap)
-{
-	if (!soap_peek_element(soap))
-	{	int t;
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unexpected element '%s' in input (level=%u, %d)\n", soap->tag, soap->level, soap->body));
-		if (soap->mustUnderstand && !soap->other)
-			return soap->error = SOAP_MUSTUNDERSTAND;
-		if (((soap->mode & SOAP_XML_STRICT) && soap->part != SOAP_IN_HEADER) || !soap_match_tag(soap, soap->tag, "SOAP-ENV:"))
-		{	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "REJECTING element '%s'\n", soap->tag));
-			return soap->error = SOAP_TAG_MISMATCH;
-		}
-		if (!*soap->id || !soap_getelement(soap, &t))
-		{	soap->peeked = 0;
-			if (soap->fignore)
-				soap->error = soap->fignore(soap, soap->tag);
-			else
-				soap->error = SOAP_OK;
-			DBGLOG(TEST, if (!soap->error) SOAP_MESSAGE(fdebug, "IGNORING element '%s'\n", soap->tag));
-			if (!soap->error && soap->body)
-			{	soap->level++;
-				while (!soap_ignore_element(soap))
-					;
-				if (soap->error == SOAP_NO_TAG)
-					soap->error = soap_element_end_in(soap, NULL);
-			}
-		}
-	}
-	return soap->error;
-}
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 int SOAP_FMAC4 soap_putindependent(struct soap *soap)
-{
-	int i;
-	struct soap_plist *pp;
-	if (soap->version == 1 && soap->encodingStyle && !(soap->mode & (SOAP_XML_TREE | SOAP_XML_GRAPH)))
-		for (i = 0; i < SOAP_PTRHASH; i++)
-			for (pp = soap->pht[i]; pp; pp = pp->next)
-				if (pp->mark1 == 2 || pp->mark2 == 2)
-					if (soap_putelement(soap, pp->ptr, "id", pp->id, pp->type))
-						return soap->error;
-	return SOAP_OK;
-}
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap *soap, const void *ptr, const char *tag, int id, int type)
-{
-	switch (type)
-	{
-	case SOAP_TYPE_KMS_Agent_byte:
-		return soap_out_byte(soap, tag, id, (const char *)ptr, "xsd:byte");
-	case SOAP_TYPE_KMS_Agent_int:
-		return soap_out_int(soap, tag, id, (const int *)ptr, "xsd:int");
-	case SOAP_TYPE_KMS_Agent_xsd__int:
-		return soap_out_xsd__int(soap, tag, id, (const long *)ptr, "xsd:int");
-	case SOAP_TYPE_KMS_Agent_long:
-		return soap_out_long(soap, tag, id, (const long *)ptr, "xsd:long");
-	case SOAP_TYPE_KMS_Agent_xsd__long:
-		return soap_out_xsd__long(soap, tag, id, (const LONG64 *)ptr, "xsd:long");
-	case SOAP_TYPE_KMS_Agent_LONG64:
-		return soap_out_LONG64(soap, tag, id, (const LONG64 *)ptr, "xsd:long");
-	case SOAP_TYPE_KMS_Agent_xsd__float:
-		return soap_out_xsd__float(soap, tag, id, (const float *)ptr, "xsd:float");
-	case SOAP_TYPE_KMS_Agent_float:
-		return soap_out_float(soap, tag, id, (const float *)ptr, "xsd:float");
-	case SOAP_TYPE_KMS_Agent_unsignedByte:
-		return soap_out_unsignedByte(soap, tag, id, (const unsigned char *)ptr, "xsd:unsignedByte");
-	case SOAP_TYPE_KMS_Agent_unsignedInt:
-		return soap_out_unsignedInt(soap, tag, id, (const unsigned int *)ptr, "xsd:unsignedInt");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogCondition:
-		return soap_out_KMS_Agent__AuditLogCondition(soap, tag, id, (const enum KMS_Agent__AuditLogCondition *)ptr, "KMS-Agent:AuditLogCondition");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogRetention:
-		return soap_out_KMS_Agent__AuditLogRetention(soap, tag, id, (const enum KMS_Agent__AuditLogRetention *)ptr, "KMS-Agent:AuditLogRetention");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnitState:
-		return soap_out_KMS_Agent__DataUnitState(soap, tag, id, (const enum KMS_Agent__DataUnitState *)ptr, "KMS-Agent:DataUnitState");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__KeyState:
-		return soap_out_KMS_Agent__KeyState(soap, tag, id, (const enum KMS_Agent__KeyState *)ptr, "KMS-Agent:KeyState");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__KeyType:
-		return soap_out_KMS_Agent__KeyType(soap, tag, id, (const enum KMS_Agent__KeyType *)ptr, "KMS-Agent:KeyType");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__FilterOperator:
-		return soap_out_KMS_Agent__FilterOperator(soap, tag, id, (const enum KMS_Agent__FilterOperator *)ptr, "KMS-Agent:FilterOperator");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__SortOrder:
-		return soap_out_KMS_Agent__SortOrder(soap, tag, id, (const enum KMS_Agent__SortOrder *)ptr, "KMS-Agent:SortOrder");
-	case SOAP_TYPE_KMS_Agent_xsd__boolean:
-		return soap_out_xsd__boolean(soap, tag, id, (const bool *)ptr, "xsd:boolean");
-	case SOAP_TYPE_KMS_Agent_bool:
-		return soap_out_bool(soap, tag, id, (const bool *)ptr, "xsd:boolean");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWK:
-		return soap_out_KMS_Agent__RegisterAgentKWK(soap, tag, id, (const struct KMS_Agent__RegisterAgentKWK *)ptr, "KMS-Agent:RegisterAgentKWK");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWKResponse:
-		return soap_out_KMS_Agent__RegisterAgentKWKResponse(soap, tag, id, (const struct KMS_Agent__RegisterAgentKWKResponse *)ptr, "KMS-Agent:RegisterAgentKWKResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKey:
-		return soap_out_KMS_Agent__GetAgentKWKPublicKey(soap, tag, id, (const struct KMS_Agent__GetAgentKWKPublicKey *)ptr, "KMS-Agent:GetAgentKWKPublicKey");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKeyResponse:
-		return soap_out_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, tag, id, (const struct KMS_Agent__GetAgentKWKPublicKeyResponse *)ptr, "KMS-Agent:GetAgentKWKPublicKeyResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLog:
-		return soap_out_KMS_Agent__CreateAuditLog(soap, tag, id, (const struct KMS_Agent__CreateAuditLog *)ptr, "KMS-Agent:CreateAuditLog");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLogResponse:
-		return soap_out_KMS_Agent__CreateAuditLogResponse(soap, tag, id, (const struct KMS_Agent__CreateAuditLogResponse *)ptr, "KMS-Agent:CreateAuditLogResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2:
-		return soap_out_KMS_Agent__RetrieveProtectAndProcessKey2(soap, tag, id, (const struct KMS_Agent__RetrieveProtectAndProcessKey2 *)ptr, "KMS-Agent:RetrieveProtectAndProcessKey2");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2Response:
-		return soap_out_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, tag, id, (const struct KMS_Agent__RetrieveProtectAndProcessKey2Response *)ptr, "KMS-Agent:RetrieveProtectAndProcessKey2Response");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey:
-		return soap_out_KMS_Agent__RetrieveProtectAndProcessKey(soap, tag, id, (const struct KMS_Agent__RetrieveProtectAndProcessKey *)ptr, "KMS-Agent:RetrieveProtectAndProcessKey");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKeyResponse:
-		return soap_out_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, tag, id, (const struct KMS_Agent__RetrieveProtectAndProcessKeyResponse *)ptr, "KMS-Agent:RetrieveProtectAndProcessKeyResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2:
-		return soap_out_KMS_Agent__RetrieveDataUnitKeys2(soap, tag, id, (const struct KMS_Agent__RetrieveDataUnitKeys2 *)ptr, "KMS-Agent:RetrieveDataUnitKeys2");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2Response:
-		return soap_out_KMS_Agent__RetrieveDataUnitKeys2Response(soap, tag, id, (const struct KMS_Agent__RetrieveDataUnitKeys2Response *)ptr, "KMS-Agent:RetrieveDataUnitKeys2Response");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys:
-		return soap_out_KMS_Agent__RetrieveDataUnitKeys(soap, tag, id, (const struct KMS_Agent__RetrieveDataUnitKeys *)ptr, "KMS-Agent:RetrieveDataUnitKeys");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeysResponse:
-		return soap_out_KMS_Agent__RetrieveDataUnitKeysResponse(soap, tag, id, (const struct KMS_Agent__RetrieveDataUnitKeysResponse *)ptr, "KMS-Agent:RetrieveDataUnitKeysResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2:
-		return soap_out_KMS_Agent__RetrieveKey2(soap, tag, id, (const struct KMS_Agent__RetrieveKey2 *)ptr, "KMS-Agent:RetrieveKey2");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2Response:
-		return soap_out_KMS_Agent__RetrieveKey2Response(soap, tag, id, (const struct KMS_Agent__RetrieveKey2Response *)ptr, "KMS-Agent:RetrieveKey2Response");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey:
-		return soap_out_KMS_Agent__RetrieveKey(soap, tag, id, (const struct KMS_Agent__RetrieveKey *)ptr, "KMS-Agent:RetrieveKey");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKeyResponse:
-		return soap_out_KMS_Agent__RetrieveKeyResponse(soap, tag, id, (const struct KMS_Agent__RetrieveKeyResponse *)ptr, "KMS-Agent:RetrieveKeyResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2:
-		return soap_out_KMS_Agent__CreateKey2(soap, tag, id, (const struct KMS_Agent__CreateKey2 *)ptr, "KMS-Agent:CreateKey2");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2Response:
-		return soap_out_KMS_Agent__CreateKey2Response(soap, tag, id, (const struct KMS_Agent__CreateKey2Response *)ptr, "KMS-Agent:CreateKey2Response");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey:
-		return soap_out_KMS_Agent__CreateKey(soap, tag, id, (const struct KMS_Agent__CreateKey *)ptr, "KMS-Agent:CreateKey");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKeyResponse:
-		return soap_out_KMS_Agent__CreateKeyResponse(soap, tag, id, (const struct KMS_Agent__CreateKeyResponse *)ptr, "KMS-Agent:CreateKeyResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeys:
-		return soap_out_KMS_Agent__DisassociateDataUnitKeys(soap, tag, id, (const struct KMS_Agent__DisassociateDataUnitKeys *)ptr, "KMS-Agent:DisassociateDataUnitKeys");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeysResponse:
-		return soap_out_KMS_Agent__DisassociateDataUnitKeysResponse(soap, tag, id, (const struct KMS_Agent__DisassociateDataUnitKeysResponse *)ptr, "KMS-Agent:DisassociateDataUnitKeysResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueID:
-		return soap_out_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, tag, id, (const struct KMS_Agent__RetrieveDataUnitByExternalUniqueID *)ptr, "KMS-Agent:RetrieveDataUnitByExternalUniqueID");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse:
-		return soap_out_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, tag, id, (const struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse *)ptr, "KMS-Agent:RetrieveDataUnitByExternalUniqueIDResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnit:
-		return soap_out_KMS_Agent__RetrieveDataUnit(soap, tag, id, (const struct KMS_Agent__RetrieveDataUnit *)ptr, "KMS-Agent:RetrieveDataUnit");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitResponse:
-		return soap_out_KMS_Agent__RetrieveDataUnitResponse(soap, tag, id, (const struct KMS_Agent__RetrieveDataUnitResponse *)ptr, "KMS-Agent:RetrieveDataUnitResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnit:
-		return soap_out_KMS_Agent__CreateDataUnit(soap, tag, id, (const struct KMS_Agent__CreateDataUnit *)ptr, "KMS-Agent:CreateDataUnit");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnitResponse:
-		return soap_out_KMS_Agent__CreateDataUnitResponse(soap, tag, id, (const struct KMS_Agent__CreateDataUnitResponse *)ptr, "KMS-Agent:CreateDataUnitResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroups:
-		return soap_out_KMS_Agent__ListKeyGroups(soap, tag, id, (const struct KMS_Agent__ListKeyGroups *)ptr, "KMS-Agent:ListKeyGroups");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroupsResponse:
-		return soap_out_KMS_Agent__ListKeyGroupsResponse(soap, tag, id, (const struct KMS_Agent__ListKeyGroupsResponse *)ptr, "KMS-Agent:ListKeyGroupsResponse");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnit:
-		return soap_out_KMS_Agent__DataUnit(soap, tag, id, (const struct KMS_Agent__DataUnit *)ptr, "KMS-Agent:DataUnit");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeys:
-		return soap_out_KMS_Agent__ArrayOfKeys(soap, tag, id, (const struct KMS_Agent__ArrayOfKeys *)ptr, "KMS-Agent:ArrayOfKeys");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__Key:
-		return soap_out_KMS_Agent__Key(soap, tag, id, (const struct KMS_Agent__Key *)ptr, "KMS-Agent:Key");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeyGroups:
-		return soap_out_KMS_Agent__ArrayOfKeyGroups(soap, tag, id, (const struct KMS_Agent__ArrayOfKeyGroups *)ptr, "KMS-Agent:ArrayOfKeyGroups");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup:
-		return soap_out_KMS_Agent__KeyGroup(soap, tag, id, (const struct KMS_Agent__KeyGroup *)ptr, "KMS-Agent:KeyGroup");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__QueryParameters:
-		return soap_out_KMS_Agent__QueryParameters(soap, tag, id, (const struct KMS_Agent__QueryParameters *)ptr, "KMS-Agent:QueryParameters");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfFilterParameters:
-		return soap_out_KMS_Agent__ArrayOfFilterParameters(soap, tag, id, (const struct KMS_Agent__ArrayOfFilterParameters *)ptr, "KMS-Agent:ArrayOfFilterParameters");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters:
-		return soap_out_KMS_Agent__FilterParameters(soap, tag, id, (const struct KMS_Agent__FilterParameters *)ptr, "KMS-Agent:FilterParameters");
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfHexBinary:
-		return soap_out_KMS_Agent__ArrayOfHexBinary(soap, tag, id, (const struct KMS_Agent__ArrayOfHexBinary *)ptr, "KMS-Agent:ArrayOfHexBinary");
-	case SOAP_TYPE_KMS_Agent_xsd__hexBinary:
-		return soap_out_xsd__hexBinary(soap, tag, id, (const struct xsd__hexBinary *)ptr, "xsd:hexBinary");
-	case SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__Key:
-		return soap_out_PointerToKMS_Agent__Key(soap, tag, id, (struct KMS_Agent__Key *const*)ptr, "KMS-Agent:Key");
-	case SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__KeyGroup:
-		return soap_out_PointerToKMS_Agent__KeyGroup(soap, tag, id, (struct KMS_Agent__KeyGroup *const*)ptr, "KMS-Agent:KeyGroup");
-	case SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__FilterParameters:
-		return soap_out_PointerToKMS_Agent__FilterParameters(soap, tag, id, (struct KMS_Agent__FilterParameters *const*)ptr, "KMS-Agent:FilterParameters");
-	case SOAP_TYPE_KMS_Agent_PointerToxsd__hexBinary:
-		return soap_out_PointerToxsd__hexBinary(soap, tag, id, (struct xsd__hexBinary *const*)ptr, "xsd:hexBinary");
-	case SOAP_TYPE_KMS_Agent_PointerTounsignedByte:
-		return soap_out_PointerTounsignedByte(soap, tag, id, (unsigned char *const*)ptr, "xsd:unsignedByte");
-	case SOAP_TYPE_KMS_Agent_xsd__duration:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:duration");
-	case SOAP_TYPE_KMS_Agent_xsd__dateTime:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:dateTime");
-	case SOAP_TYPE_KMS_Agent_xsd__string:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:string");
-	case SOAP_TYPE_KMS_Agent__QName:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:QName");
-	case SOAP_TYPE_KMS_Agent_string:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:string");
-	}
-	return SOAP_OK;
-}
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap *soap, const void *ptr, int type)
-{
-	(void)soap; (void)ptr; (void)type; /* appease -Wall -Werror */
-	switch (type)
-	{
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWK:
-		soap_serialize_KMS_Agent__RegisterAgentKWK(soap, (const struct KMS_Agent__RegisterAgentKWK *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWKResponse:
-		soap_serialize_KMS_Agent__RegisterAgentKWKResponse(soap, (const struct KMS_Agent__RegisterAgentKWKResponse *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKey:
-		soap_serialize_KMS_Agent__GetAgentKWKPublicKey(soap, (const struct KMS_Agent__GetAgentKWKPublicKey *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKeyResponse:
-		soap_serialize_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, (const struct KMS_Agent__GetAgentKWKPublicKeyResponse *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLog:
-		soap_serialize_KMS_Agent__CreateAuditLog(soap, (const struct KMS_Agent__CreateAuditLog *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLogResponse:
-		soap_serialize_KMS_Agent__CreateAuditLogResponse(soap, (const struct KMS_Agent__CreateAuditLogResponse *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2:
-		soap_serialize_KMS_Agent__RetrieveProtectAndProcessKey2(soap, (const struct KMS_Agent__RetrieveProtectAndProcessKey2 *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2Response:
-		soap_serialize_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, (const struct KMS_Agent__RetrieveProtectAndProcessKey2Response *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey:
-		soap_serialize_KMS_Agent__RetrieveProtectAndProcessKey(soap, (const struct KMS_Agent__RetrieveProtectAndProcessKey *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKeyResponse:
-		soap_serialize_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, (const struct KMS_Agent__RetrieveProtectAndProcessKeyResponse *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2:
-		soap_serialize_KMS_Agent__RetrieveDataUnitKeys2(soap, (const struct KMS_Agent__RetrieveDataUnitKeys2 *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2Response:
-		soap_serialize_KMS_Agent__RetrieveDataUnitKeys2Response(soap, (const struct KMS_Agent__RetrieveDataUnitKeys2Response *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys:
-		soap_serialize_KMS_Agent__RetrieveDataUnitKeys(soap, (const struct KMS_Agent__RetrieveDataUnitKeys *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeysResponse:
-		soap_serialize_KMS_Agent__RetrieveDataUnitKeysResponse(soap, (const struct KMS_Agent__RetrieveDataUnitKeysResponse *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2:
-		soap_serialize_KMS_Agent__RetrieveKey2(soap, (const struct KMS_Agent__RetrieveKey2 *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2Response:
-		soap_serialize_KMS_Agent__RetrieveKey2Response(soap, (const struct KMS_Agent__RetrieveKey2Response *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey:
-		soap_serialize_KMS_Agent__RetrieveKey(soap, (const struct KMS_Agent__RetrieveKey *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKeyResponse:
-		soap_serialize_KMS_Agent__RetrieveKeyResponse(soap, (const struct KMS_Agent__RetrieveKeyResponse *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2:
-		soap_serialize_KMS_Agent__CreateKey2(soap, (const struct KMS_Agent__CreateKey2 *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2Response:
-		soap_serialize_KMS_Agent__CreateKey2Response(soap, (const struct KMS_Agent__CreateKey2Response *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey:
-		soap_serialize_KMS_Agent__CreateKey(soap, (const struct KMS_Agent__CreateKey *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKeyResponse:
-		soap_serialize_KMS_Agent__CreateKeyResponse(soap, (const struct KMS_Agent__CreateKeyResponse *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeys:
-		soap_serialize_KMS_Agent__DisassociateDataUnitKeys(soap, (const struct KMS_Agent__DisassociateDataUnitKeys *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeysResponse:
-		soap_serialize_KMS_Agent__DisassociateDataUnitKeysResponse(soap, (const struct KMS_Agent__DisassociateDataUnitKeysResponse *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueID:
-		soap_serialize_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, (const struct KMS_Agent__RetrieveDataUnitByExternalUniqueID *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse:
-		soap_serialize_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, (const struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnit:
-		soap_serialize_KMS_Agent__RetrieveDataUnit(soap, (const struct KMS_Agent__RetrieveDataUnit *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitResponse:
-		soap_serialize_KMS_Agent__RetrieveDataUnitResponse(soap, (const struct KMS_Agent__RetrieveDataUnitResponse *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnit:
-		soap_serialize_KMS_Agent__CreateDataUnit(soap, (const struct KMS_Agent__CreateDataUnit *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnitResponse:
-		soap_serialize_KMS_Agent__CreateDataUnitResponse(soap, (const struct KMS_Agent__CreateDataUnitResponse *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroups:
-		soap_serialize_KMS_Agent__ListKeyGroups(soap, (const struct KMS_Agent__ListKeyGroups *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroupsResponse:
-		soap_serialize_KMS_Agent__ListKeyGroupsResponse(soap, (const struct KMS_Agent__ListKeyGroupsResponse *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnit:
-		soap_serialize_KMS_Agent__DataUnit(soap, (const struct KMS_Agent__DataUnit *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeys:
-		soap_serialize_KMS_Agent__ArrayOfKeys(soap, (const struct KMS_Agent__ArrayOfKeys *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__Key:
-		soap_serialize_KMS_Agent__Key(soap, (const struct KMS_Agent__Key *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeyGroups:
-		soap_serialize_KMS_Agent__ArrayOfKeyGroups(soap, (const struct KMS_Agent__ArrayOfKeyGroups *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup:
-		soap_serialize_KMS_Agent__KeyGroup(soap, (const struct KMS_Agent__KeyGroup *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__QueryParameters:
-		soap_serialize_KMS_Agent__QueryParameters(soap, (const struct KMS_Agent__QueryParameters *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfFilterParameters:
-		soap_serialize_KMS_Agent__ArrayOfFilterParameters(soap, (const struct KMS_Agent__ArrayOfFilterParameters *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters:
-		soap_serialize_KMS_Agent__FilterParameters(soap, (const struct KMS_Agent__FilterParameters *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfHexBinary:
-		soap_serialize_KMS_Agent__ArrayOfHexBinary(soap, (const struct KMS_Agent__ArrayOfHexBinary *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_xsd__hexBinary:
-		soap_serialize_xsd__hexBinary(soap, (const struct xsd__hexBinary *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__Key:
-		soap_serialize_PointerToKMS_Agent__Key(soap, (struct KMS_Agent__Key *const*)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__KeyGroup:
-		soap_serialize_PointerToKMS_Agent__KeyGroup(soap, (struct KMS_Agent__KeyGroup *const*)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__FilterParameters:
-		soap_serialize_PointerToKMS_Agent__FilterParameters(soap, (struct KMS_Agent__FilterParameters *const*)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_PointerToxsd__hexBinary:
-		soap_serialize_PointerToxsd__hexBinary(soap, (struct xsd__hexBinary *const*)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_PointerTounsignedByte:
-		soap_serialize_PointerTounsignedByte(soap, (unsigned char *const*)ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_xsd__duration:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_xsd__dateTime:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_xsd__string:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent__QName:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_string:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	}
-}
-#endif
-
-SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap *soap, int t, const char *type, const char *arrayType, size_t *n)
-{
-	switch (t)
-	{
-	case SOAP_TYPE_KMS_Agent_xsd__hexBinary:
-		return (void*)soap_instantiate_xsd__hexBinary(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfHexBinary:
-		return (void*)soap_instantiate_KMS_Agent__ArrayOfHexBinary(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters:
-		return (void*)soap_instantiate_KMS_Agent__FilterParameters(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfFilterParameters:
-		return (void*)soap_instantiate_KMS_Agent__ArrayOfFilterParameters(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__QueryParameters:
-		return (void*)soap_instantiate_KMS_Agent__QueryParameters(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup:
-		return (void*)soap_instantiate_KMS_Agent__KeyGroup(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeyGroups:
-		return (void*)soap_instantiate_KMS_Agent__ArrayOfKeyGroups(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__Key:
-		return (void*)soap_instantiate_KMS_Agent__Key(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeys:
-		return (void*)soap_instantiate_KMS_Agent__ArrayOfKeys(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnit:
-		return (void*)soap_instantiate_KMS_Agent__DataUnit(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroupsResponse:
-		return (void*)soap_instantiate_KMS_Agent__ListKeyGroupsResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroups:
-		return (void*)soap_instantiate_KMS_Agent__ListKeyGroups(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnitResponse:
-		return (void*)soap_instantiate_KMS_Agent__CreateDataUnitResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnit:
-		return (void*)soap_instantiate_KMS_Agent__CreateDataUnit(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitResponse:
-		return (void*)soap_instantiate_KMS_Agent__RetrieveDataUnitResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnit:
-		return (void*)soap_instantiate_KMS_Agent__RetrieveDataUnit(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse:
-		return (void*)soap_instantiate_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueID:
-		return (void*)soap_instantiate_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeysResponse:
-		return (void*)soap_instantiate_KMS_Agent__DisassociateDataUnitKeysResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeys:
-		return (void*)soap_instantiate_KMS_Agent__DisassociateDataUnitKeys(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKeyResponse:
-		return (void*)soap_instantiate_KMS_Agent__CreateKeyResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey:
-		return (void*)soap_instantiate_KMS_Agent__CreateKey(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2Response:
-		return (void*)soap_instantiate_KMS_Agent__CreateKey2Response(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2:
-		return (void*)soap_instantiate_KMS_Agent__CreateKey2(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKeyResponse:
-		return (void*)soap_instantiate_KMS_Agent__RetrieveKeyResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey:
-		return (void*)soap_instantiate_KMS_Agent__RetrieveKey(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2Response:
-		return (void*)soap_instantiate_KMS_Agent__RetrieveKey2Response(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2:
-		return (void*)soap_instantiate_KMS_Agent__RetrieveKey2(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeysResponse:
-		return (void*)soap_instantiate_KMS_Agent__RetrieveDataUnitKeysResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys:
-		return (void*)soap_instantiate_KMS_Agent__RetrieveDataUnitKeys(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2Response:
-		return (void*)soap_instantiate_KMS_Agent__RetrieveDataUnitKeys2Response(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2:
-		return (void*)soap_instantiate_KMS_Agent__RetrieveDataUnitKeys2(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKeyResponse:
-		return (void*)soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey:
-		return (void*)soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKey(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2Response:
-		return (void*)soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2:
-		return (void*)soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKey2(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLogResponse:
-		return (void*)soap_instantiate_KMS_Agent__CreateAuditLogResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLog:
-		return (void*)soap_instantiate_KMS_Agent__CreateAuditLog(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKeyResponse:
-		return (void*)soap_instantiate_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKey:
-		return (void*)soap_instantiate_KMS_Agent__GetAgentKWKPublicKey(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWKResponse:
-		return (void*)soap_instantiate_KMS_Agent__RegisterAgentKWKResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWK:
-		return (void*)soap_instantiate_KMS_Agent__RegisterAgentKWK(soap, -1, type, arrayType, n);
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_Agent_SOAP_ENV__Header:
-		return (void*)soap_instantiate_SOAP_ENV__Header(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_Agent_SOAP_ENV__Code:
-		return (void*)soap_instantiate_SOAP_ENV__Code(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_Agent_SOAP_ENV__Detail:
-		return (void*)soap_instantiate_SOAP_ENV__Detail(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_Agent_SOAP_ENV__Reason:
-		return (void*)soap_instantiate_SOAP_ENV__Reason(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_Agent_SOAP_ENV__Fault:
-		return (void*)soap_instantiate_SOAP_ENV__Fault(soap, -1, type, arrayType, n);
-#endif
-	}
-	return NULL;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_fdelete(struct soap_clist *p)
-{	switch (p->type)
-	{
-	case SOAP_TYPE_KMS_Agent_xsd__hexBinary:
-		if (p->size < 0)
-			SOAP_DELETE((struct xsd__hexBinary*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct xsd__hexBinary*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfHexBinary:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__ArrayOfHexBinary*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__ArrayOfHexBinary*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__FilterParameters*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__FilterParameters*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfFilterParameters:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__ArrayOfFilterParameters*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__ArrayOfFilterParameters*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__QueryParameters:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__QueryParameters*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__QueryParameters*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__KeyGroup*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__KeyGroup*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeyGroups:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__ArrayOfKeyGroups*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__ArrayOfKeyGroups*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__Key:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__Key*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__Key*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeys:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__ArrayOfKeys*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__ArrayOfKeys*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnit:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__DataUnit*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__DataUnit*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroupsResponse:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__ListKeyGroupsResponse*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__ListKeyGroupsResponse*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroups:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__ListKeyGroups*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__ListKeyGroups*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnitResponse:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__CreateDataUnitResponse*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__CreateDataUnitResponse*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnit:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__CreateDataUnit*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__CreateDataUnit*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitResponse:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RetrieveDataUnitResponse*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RetrieveDataUnitResponse*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnit:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RetrieveDataUnit*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RetrieveDataUnit*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueID:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RetrieveDataUnitByExternalUniqueID*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RetrieveDataUnitByExternalUniqueID*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeysResponse:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__DisassociateDataUnitKeysResponse*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__DisassociateDataUnitKeysResponse*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeys:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__DisassociateDataUnitKeys*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__DisassociateDataUnitKeys*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKeyResponse:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__CreateKeyResponse*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__CreateKeyResponse*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__CreateKey*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__CreateKey*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2Response:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__CreateKey2Response*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__CreateKey2Response*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__CreateKey2*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__CreateKey2*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKeyResponse:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RetrieveKeyResponse*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RetrieveKeyResponse*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RetrieveKey*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RetrieveKey*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2Response:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RetrieveKey2Response*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RetrieveKey2Response*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RetrieveKey2*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RetrieveKey2*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeysResponse:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RetrieveDataUnitKeysResponse*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RetrieveDataUnitKeysResponse*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RetrieveDataUnitKeys*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RetrieveDataUnitKeys*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2Response:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RetrieveDataUnitKeys2Response*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RetrieveDataUnitKeys2Response*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RetrieveDataUnitKeys2*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RetrieveDataUnitKeys2*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKeyResponse:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RetrieveProtectAndProcessKeyResponse*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RetrieveProtectAndProcessKeyResponse*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RetrieveProtectAndProcessKey*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RetrieveProtectAndProcessKey*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2Response:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RetrieveProtectAndProcessKey2Response*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RetrieveProtectAndProcessKey2Response*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RetrieveProtectAndProcessKey2*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RetrieveProtectAndProcessKey2*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLogResponse:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__CreateAuditLogResponse*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__CreateAuditLogResponse*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLog:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__CreateAuditLog*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__CreateAuditLog*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKeyResponse:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__GetAgentKWKPublicKeyResponse*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__GetAgentKWKPublicKeyResponse*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKey:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__GetAgentKWKPublicKey*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__GetAgentKWKPublicKey*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWKResponse:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RegisterAgentKWKResponse*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RegisterAgentKWKResponse*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWK:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Agent__RegisterAgentKWK*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Agent__RegisterAgentKWK*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_SOAP_ENV__Header:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Header*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Header*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_SOAP_ENV__Code:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Code*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Code*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_SOAP_ENV__Detail:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Detail*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Detail*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_SOAP_ENV__Reason:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Reason*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Reason*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Agent_SOAP_ENV__Fault:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Fault*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Fault*)p->ptr);
-		break;
-	default:	return SOAP_ERR;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 void* SOAP_FMAC4 soap_class_id_enter(struct soap *soap, const char *id, void *p, int t, size_t n, const char *type, const char *arrayType)
-{	return soap_id_enter(soap, id, p, t, n, 0, type, arrayType, soap_instantiate);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_byte(struct soap *soap, char *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_byte
-	*a = SOAP_DEFAULT_byte;
-#else
-	*a = (char)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_byte(struct soap *soap, const char *tag, int id, const char *a, const char *type)
-{
-	return soap_outbyte(soap, tag, id, a, type, SOAP_TYPE_KMS_Agent_byte);
-}
-
-SOAP_FMAC3 char * SOAP_FMAC4 soap_in_byte(struct soap *soap, const char *tag, char *a, const char *type)
-{	char *p;
-	p = soap_inbyte(soap, tag, a, type, SOAP_TYPE_KMS_Agent_byte);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_byte(struct soap *soap, const char *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_byte);
-	if (soap_out_byte(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char * SOAP_FMAC4 soap_get_byte(struct soap *soap, char *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_byte(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_int(struct soap *soap, int *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_int
-	*a = SOAP_DEFAULT_int;
-#else
-	*a = (int)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_int(struct soap *soap, const char *tag, int id, const int *a, const char *type)
-{
-	return soap_outint(soap, tag, id, a, type, SOAP_TYPE_KMS_Agent_int);
-}
-
-SOAP_FMAC3 int * SOAP_FMAC4 soap_in_int(struct soap *soap, const char *tag, int *a, const char *type)
-{	int *p;
-	p = soap_inint(soap, tag, a, type, SOAP_TYPE_KMS_Agent_int);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_int(struct soap *soap, const int *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_int);
-	if (soap_out_int(soap, tag?tag:"int", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 int * SOAP_FMAC4 soap_get_int(struct soap *soap, int *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_int(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__int(struct soap *soap, const char *tag, int id, const long *a, const char *type)
-{
-	return soap_outlong(soap, tag, id, a, type, SOAP_TYPE_KMS_Agent_xsd__int);
-}
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_in_xsd__int(struct soap *soap, const char *tag, long *a, const char *type)
-{	long *p;
-	p = soap_inlong(soap, tag, a, type, SOAP_TYPE_KMS_Agent_xsd__int);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__int(struct soap *soap, const long *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_xsd__int);
-	if (soap_out_xsd__int(soap, tag?tag:"xsd:int", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_get_xsd__int(struct soap *soap, long *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__int(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_long(struct soap *soap, long *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_long
-	*a = SOAP_DEFAULT_long;
-#else
-	*a = (long)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_long(struct soap *soap, const char *tag, int id, const long *a, const char *type)
-{
-	return soap_outlong(soap, tag, id, a, type, SOAP_TYPE_KMS_Agent_long);
-}
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_in_long(struct soap *soap, const char *tag, long *a, const char *type)
-{	long *p;
-	p = soap_inlong(soap, tag, a, type, SOAP_TYPE_KMS_Agent_long);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_long(struct soap *soap, const long *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_long);
-	if (soap_out_long(soap, tag?tag:"long", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_get_long(struct soap *soap, long *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_long(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__long(struct soap *soap, const char *tag, int id, const LONG64 *a, const char *type)
-{
-	return soap_outLONG64(soap, tag, id, a, type, SOAP_TYPE_KMS_Agent_xsd__long);
-}
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_in_xsd__long(struct soap *soap, const char *tag, LONG64 *a, const char *type)
-{	LONG64 *p;
-	p = soap_inLONG64(soap, tag, a, type, SOAP_TYPE_KMS_Agent_xsd__long);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__long(struct soap *soap, const LONG64 *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_xsd__long);
-	if (soap_out_xsd__long(soap, tag?tag:"xsd:long", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_xsd__long(struct soap *soap, LONG64 *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__long(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_LONG64(struct soap *soap, LONG64 *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_LONG64
-	*a = SOAP_DEFAULT_LONG64;
-#else
-	*a = (LONG64)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_LONG64(struct soap *soap, const char *tag, int id, const LONG64 *a, const char *type)
-{
-	return soap_outLONG64(soap, tag, id, a, type, SOAP_TYPE_KMS_Agent_LONG64);
-}
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_in_LONG64(struct soap *soap, const char *tag, LONG64 *a, const char *type)
-{	LONG64 *p;
-	p = soap_inLONG64(soap, tag, a, type, SOAP_TYPE_KMS_Agent_LONG64);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_LONG64(struct soap *soap, const LONG64 *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_LONG64);
-	if (soap_out_LONG64(soap, tag?tag:"long", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_LONG64(struct soap *soap, LONG64 *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_LONG64(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__float(struct soap *soap, const char *tag, int id, const float *a, const char *type)
-{
-	return soap_outfloat(soap, tag, id, a, type, SOAP_TYPE_KMS_Agent_xsd__float);
-}
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_in_xsd__float(struct soap *soap, const char *tag, float *a, const char *type)
-{	float *p;
-	p = soap_infloat(soap, tag, a, type, SOAP_TYPE_KMS_Agent_xsd__float);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__float(struct soap *soap, const float *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_xsd__float);
-	if (soap_out_xsd__float(soap, tag?tag:"xsd:float", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_get_xsd__float(struct soap *soap, float *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__float(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_float(struct soap *soap, float *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_float
-	*a = SOAP_DEFAULT_float;
-#else
-	*a = (float)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_float(struct soap *soap, const char *tag, int id, const float *a, const char *type)
-{
-	return soap_outfloat(soap, tag, id, a, type, SOAP_TYPE_KMS_Agent_float);
-}
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_in_float(struct soap *soap, const char *tag, float *a, const char *type)
-{	float *p;
-	p = soap_infloat(soap, tag, a, type, SOAP_TYPE_KMS_Agent_float);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_float(struct soap *soap, const float *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_float);
-	if (soap_out_float(soap, tag?tag:"float", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_get_float(struct soap *soap, float *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_float(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedByte(struct soap *soap, unsigned char *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_unsignedByte
-	*a = SOAP_DEFAULT_unsignedByte;
-#else
-	*a = (unsigned char)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedByte(struct soap *soap, const char *tag, int id, const unsigned char *a, const char *type)
-{
-	return soap_outunsignedByte(soap, tag, id, a, type, SOAP_TYPE_KMS_Agent_unsignedByte);
-}
-
-SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_in_unsignedByte(struct soap *soap, const char *tag, unsigned char *a, const char *type)
-{	unsigned char *p;
-	p = soap_inunsignedByte(soap, tag, a, type, SOAP_TYPE_KMS_Agent_unsignedByte);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedByte(struct soap *soap, const unsigned char *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_unsignedByte);
-	if (soap_out_unsignedByte(soap, tag?tag:"unsignedByte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_get_unsignedByte(struct soap *soap, unsigned char *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_unsignedByte(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedInt(struct soap *soap, unsigned int *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_unsignedInt
-	*a = SOAP_DEFAULT_unsignedInt;
-#else
-	*a = (unsigned int)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedInt(struct soap *soap, const char *tag, int id, const unsigned int *a, const char *type)
-{
-	return soap_outunsignedInt(soap, tag, id, a, type, SOAP_TYPE_KMS_Agent_unsignedInt);
-}
-
-SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_in_unsignedInt(struct soap *soap, const char *tag, unsigned int *a, const char *type)
-{	unsigned int *p;
-	p = soap_inunsignedInt(soap, tag, a, type, SOAP_TYPE_KMS_Agent_unsignedInt);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedInt(struct soap *soap, const unsigned int *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_unsignedInt);
-	if (soap_out_unsignedInt(soap, tag?tag:"unsignedInt", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_get_unsignedInt(struct soap *soap, unsigned int *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_unsignedInt(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__AuditLogCondition(struct soap *soap, enum KMS_Agent__AuditLogCondition *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_KMS_Agent__AuditLogCondition
-	*a = SOAP_DEFAULT_KMS_Agent__AuditLogCondition;
-#else
-	*a = (enum KMS_Agent__AuditLogCondition)0;
-#endif
-}
-
-static const struct soap_code_map soap_codes_KMS_Agent__AuditLogCondition[] =
-{	{ (long)AUDIT_LOG_SUCCESS_CONDITION, "AUDIT-LOG-SUCCESS-CONDITION" },
-	{ (long)AUDIT_LOG_ERROR_CONDITION, "AUDIT-LOG-ERROR-CONDITION" },
-	{ (long)AUDIT_LOG_WARNING_CONDITION, "AUDIT-LOG-WARNING-CONDITION" },
-	{ 0, NULL }
-};
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_KMS_Agent__AuditLogCondition2s(struct soap *soap, enum KMS_Agent__AuditLogCondition n)
-{	const char *s = soap_code_str(soap_codes_KMS_Agent__AuditLogCondition, (long)n);
-	if (s)
-		return s;
-	return soap_long2s(soap, (long)n);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__AuditLogCondition(struct soap *soap, const char *tag, int id, const enum KMS_Agent__AuditLogCondition *a, const char *type)
-{	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogCondition), type) || soap_send(soap, soap_KMS_Agent__AuditLogCondition2s(soap, *a)))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2KMS_Agent__AuditLogCondition(struct soap *soap, const char *s, enum KMS_Agent__AuditLogCondition *a)
-{
-	const struct soap_code_map *map;
-	if (!s)
-		return soap->error;
-	map = soap_code(soap_codes_KMS_Agent__AuditLogCondition, s);
-	if (map)
-		*a = (enum KMS_Agent__AuditLogCondition)map->code;
-	else
-	{	long n;
-		if (soap_s2long(soap, s, &n) || ((soap->mode & SOAP_XML_STRICT) && (n < 0 || n > 2)))
-			return soap->error = SOAP_TYPE;
-		*a = (enum KMS_Agent__AuditLogCondition)n;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 enum KMS_Agent__AuditLogCondition * SOAP_FMAC4 soap_in_KMS_Agent__AuditLogCondition(struct soap *soap, const char *tag, enum KMS_Agent__AuditLogCondition *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (enum KMS_Agent__AuditLogCondition *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogCondition, sizeof(enum KMS_Agent__AuditLogCondition), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	if (soap->body && !*soap->href)
-	{	if (!a || soap_s2KMS_Agent__AuditLogCondition(soap, soap_value(soap), a) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (enum KMS_Agent__AuditLogCondition *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogCondition, 0, sizeof(enum KMS_Agent__AuditLogCondition), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__AuditLogCondition(struct soap *soap, const enum KMS_Agent__AuditLogCondition *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogCondition);
-	if (soap_out_KMS_Agent__AuditLogCondition(soap, tag?tag:"KMS-Agent:AuditLogCondition", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 enum KMS_Agent__AuditLogCondition * SOAP_FMAC4 soap_get_KMS_Agent__AuditLogCondition(struct soap *soap, enum KMS_Agent__AuditLogCondition *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__AuditLogCondition(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__AuditLogRetention(struct soap *soap, enum KMS_Agent__AuditLogRetention *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_KMS_Agent__AuditLogRetention
-	*a = SOAP_DEFAULT_KMS_Agent__AuditLogRetention;
-#else
-	*a = (enum KMS_Agent__AuditLogRetention)0;
-#endif
-}
-
-static const struct soap_code_map soap_codes_KMS_Agent__AuditLogRetention[] =
-{	{ (long)AUDIT_LOG_LONG_TERM_RETENTION, "AUDIT-LOG-LONG-TERM-RETENTION" },
-	{ (long)AUDIT_LOG_MEDIUM_TERM_RETENTION, "AUDIT-LOG-MEDIUM-TERM-RETENTION" },
-	{ (long)AUDIT_LOG_SHORT_TERM_RETENTION, "AUDIT-LOG-SHORT-TERM-RETENTION" },
-	{ (long)AUDIT_LOG_ZERO_RETENTION, "AUDIT-LOG-ZERO-RETENTION" },
-	{ 0, NULL }
-};
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_KMS_Agent__AuditLogRetention2s(struct soap *soap, enum KMS_Agent__AuditLogRetention n)
-{	const char *s = soap_code_str(soap_codes_KMS_Agent__AuditLogRetention, (long)n);
-	if (s)
-		return s;
-	return soap_long2s(soap, (long)n);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__AuditLogRetention(struct soap *soap, const char *tag, int id, const enum KMS_Agent__AuditLogRetention *a, const char *type)
-{	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogRetention), type) || soap_send(soap, soap_KMS_Agent__AuditLogRetention2s(soap, *a)))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2KMS_Agent__AuditLogRetention(struct soap *soap, const char *s, enum KMS_Agent__AuditLogRetention *a)
-{
-	const struct soap_code_map *map;
-	if (!s)
-		return soap->error;
-	map = soap_code(soap_codes_KMS_Agent__AuditLogRetention, s);
-	if (map)
-		*a = (enum KMS_Agent__AuditLogRetention)map->code;
-	else
-	{	long n;
-		if (soap_s2long(soap, s, &n) || ((soap->mode & SOAP_XML_STRICT) && (n < 0 || n > 3)))
-			return soap->error = SOAP_TYPE;
-		*a = (enum KMS_Agent__AuditLogRetention)n;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 enum KMS_Agent__AuditLogRetention * SOAP_FMAC4 soap_in_KMS_Agent__AuditLogRetention(struct soap *soap, const char *tag, enum KMS_Agent__AuditLogRetention *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (enum KMS_Agent__AuditLogRetention *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogRetention, sizeof(enum KMS_Agent__AuditLogRetention), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	if (soap->body && !*soap->href)
-	{	if (!a || soap_s2KMS_Agent__AuditLogRetention(soap, soap_value(soap), a) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (enum KMS_Agent__AuditLogRetention *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogRetention, 0, sizeof(enum KMS_Agent__AuditLogRetention), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__AuditLogRetention(struct soap *soap, const enum KMS_Agent__AuditLogRetention *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogRetention);
-	if (soap_out_KMS_Agent__AuditLogRetention(soap, tag?tag:"KMS-Agent:AuditLogRetention", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 enum KMS_Agent__AuditLogRetention * SOAP_FMAC4 soap_get_KMS_Agent__AuditLogRetention(struct soap *soap, enum KMS_Agent__AuditLogRetention *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__AuditLogRetention(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__DataUnitState(struct soap *soap, enum KMS_Agent__DataUnitState *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_KMS_Agent__DataUnitState
-	*a = SOAP_DEFAULT_KMS_Agent__DataUnitState;
-#else
-	*a = (enum KMS_Agent__DataUnitState)0;
-#endif
-}
-
-static const struct soap_code_map soap_codes_KMS_Agent__DataUnitState[] =
-{	{ (long)DATA_UNIT_STATE_NO_KEY, "DATA-UNIT-STATE-NO-KEY" },
-	{ (long)DATA_UNIT_STATE_READABLE_NORMAL, "DATA-UNIT-STATE-READABLE-NORMAL" },
-	{ (long)DATA_UNIT_STATE_READABLE_NEEDS_REKEY, "DATA-UNIT-STATE-READABLE-NEEDS-REKEY" },
-	{ (long)DATA_UNIT_STATE_SHREDDED, "DATA-UNIT-STATE-SHREDDED" },
-	{ 0, NULL }
-};
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_KMS_Agent__DataUnitState2s(struct soap *soap, enum KMS_Agent__DataUnitState n)
-{	const char *s = soap_code_str(soap_codes_KMS_Agent__DataUnitState, (long)n);
-	if (s)
-		return s;
-	return soap_long2s(soap, (long)n);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__DataUnitState(struct soap *soap, const char *tag, int id, const enum KMS_Agent__DataUnitState *a, const char *type)
-{	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnitState), type) || soap_send(soap, soap_KMS_Agent__DataUnitState2s(soap, *a)))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2KMS_Agent__DataUnitState(struct soap *soap, const char *s, enum KMS_Agent__DataUnitState *a)
-{
-	const struct soap_code_map *map;
-	if (!s)
-		return soap->error;
-	map = soap_code(soap_codes_KMS_Agent__DataUnitState, s);
-	if (map)
-		*a = (enum KMS_Agent__DataUnitState)map->code;
-	else
-	{	long n;
-		if (soap_s2long(soap, s, &n) || ((soap->mode & SOAP_XML_STRICT) && (n < 0 || n > 3)))
-			return soap->error = SOAP_TYPE;
-		*a = (enum KMS_Agent__DataUnitState)n;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 enum KMS_Agent__DataUnitState * SOAP_FMAC4 soap_in_KMS_Agent__DataUnitState(struct soap *soap, const char *tag, enum KMS_Agent__DataUnitState *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (enum KMS_Agent__DataUnitState *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnitState, sizeof(enum KMS_Agent__DataUnitState), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	if (soap->body && !*soap->href)
-	{	if (!a || soap_s2KMS_Agent__DataUnitState(soap, soap_value(soap), a) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (enum KMS_Agent__DataUnitState *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnitState, 0, sizeof(enum KMS_Agent__DataUnitState), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__DataUnitState(struct soap *soap, const enum KMS_Agent__DataUnitState *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnitState);
-	if (soap_out_KMS_Agent__DataUnitState(soap, tag?tag:"KMS-Agent:DataUnitState", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 enum KMS_Agent__DataUnitState * SOAP_FMAC4 soap_get_KMS_Agent__DataUnitState(struct soap *soap, enum KMS_Agent__DataUnitState *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__DataUnitState(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__KeyState(struct soap *soap, enum KMS_Agent__KeyState *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_KMS_Agent__KeyState
-	*a = SOAP_DEFAULT_KMS_Agent__KeyState;
-#else
-	*a = (enum KMS_Agent__KeyState)0;
-#endif
-}
-
-static const struct soap_code_map soap_codes_KMS_Agent__KeyState[] =
-{	{ (long)KEY_STATE_GENERATED, "KEY-STATE-GENERATED" },
-	{ (long)KEY_STATE_READY, "KEY-STATE-READY" },
-	{ (long)KEY_STATE_PROTECT_AND_PROCESS, "KEY-STATE-PROTECT-AND-PROCESS" },
-	{ (long)KEY_STATE_PROCESS_ONLY, "KEY-STATE-PROCESS-ONLY" },
-	{ (long)KEY_STATE_DEACTIVATED, "KEY-STATE-DEACTIVATED" },
-	{ (long)KEY_STATE_COMPROMISED, "KEY-STATE-COMPROMISED" },
-	{ (long)KEY_STATE_DESTROYED_INCOMPLETE, "KEY-STATE-DESTROYED-INCOMPLETE" },
-	{ (long)KEY_STATE_DESTROYED_COMPLETE, "KEY-STATE-DESTROYED-COMPLETE" },
-	{ (long)KEY_STATE_DESTROYED_COMPROMISED_INCOMPLETE, "KEY-STATE-DESTROYED-COMPROMISED-INCOMPLETE" },
-	{ (long)KEY_STATE_DESTROYED_COMPROMISED_COMPLETE, "KEY-STATE-DESTROYED-COMPROMISED-COMPLETE" },
-	{ 0, NULL }
-};
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_KMS_Agent__KeyState2s(struct soap *soap, enum KMS_Agent__KeyState n)
-{	const char *s = soap_code_str(soap_codes_KMS_Agent__KeyState, (long)n);
-	if (s)
-		return s;
-	return soap_long2s(soap, (long)n);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__KeyState(struct soap *soap, const char *tag, int id, const enum KMS_Agent__KeyState *a, const char *type)
-{	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyState), type) || soap_send(soap, soap_KMS_Agent__KeyState2s(soap, *a)))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2KMS_Agent__KeyState(struct soap *soap, const char *s, enum KMS_Agent__KeyState *a)
-{
-	const struct soap_code_map *map;
-	if (!s)
-		return soap->error;
-	map = soap_code(soap_codes_KMS_Agent__KeyState, s);
-	if (map)
-		*a = (enum KMS_Agent__KeyState)map->code;
-	else
-	{	long n;
-		if (soap_s2long(soap, s, &n) || ((soap->mode & SOAP_XML_STRICT) && (n < 0 || n > 9)))
-			return soap->error = SOAP_TYPE;
-		*a = (enum KMS_Agent__KeyState)n;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 enum KMS_Agent__KeyState * SOAP_FMAC4 soap_in_KMS_Agent__KeyState(struct soap *soap, const char *tag, enum KMS_Agent__KeyState *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (enum KMS_Agent__KeyState *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyState, sizeof(enum KMS_Agent__KeyState), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	if (soap->body && !*soap->href)
-	{	if (!a || soap_s2KMS_Agent__KeyState(soap, soap_value(soap), a) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (enum KMS_Agent__KeyState *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyState, 0, sizeof(enum KMS_Agent__KeyState), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__KeyState(struct soap *soap, const enum KMS_Agent__KeyState *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyState);
-	if (soap_out_KMS_Agent__KeyState(soap, tag?tag:"KMS-Agent:KeyState", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 enum KMS_Agent__KeyState * SOAP_FMAC4 soap_get_KMS_Agent__KeyState(struct soap *soap, enum KMS_Agent__KeyState *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__KeyState(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__KeyType(struct soap *soap, enum KMS_Agent__KeyType *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_KMS_Agent__KeyType
-	*a = SOAP_DEFAULT_KMS_Agent__KeyType;
-#else
-	*a = (enum KMS_Agent__KeyType)0;
-#endif
-}
-
-static const struct soap_code_map soap_codes_KMS_Agent__KeyType[] =
-{	{ (long)KEY_TYPE_AES_256, "KEY-TYPE-AES-256" },
-	{ 0, NULL }
-};
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_KMS_Agent__KeyType2s(struct soap *soap, enum KMS_Agent__KeyType n)
-{	const char *s = soap_code_str(soap_codes_KMS_Agent__KeyType, (long)n);
-	if (s)
-		return s;
-	return soap_long2s(soap, (long)n);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__KeyType(struct soap *soap, const char *tag, int id, const enum KMS_Agent__KeyType *a, const char *type)
-{	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyType), type) || soap_send(soap, soap_KMS_Agent__KeyType2s(soap, *a)))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2KMS_Agent__KeyType(struct soap *soap, const char *s, enum KMS_Agent__KeyType *a)
-{
-	const struct soap_code_map *map;
-	if (!s)
-		return soap->error;
-	map = soap_code(soap_codes_KMS_Agent__KeyType, s);
-	if (map)
-		*a = (enum KMS_Agent__KeyType)map->code;
-	else
-	{	long n;
-		if (soap_s2long(soap, s, &n) || ((soap->mode & SOAP_XML_STRICT) && (n < 0 || n > 0)))
-			return soap->error = SOAP_TYPE;
-		*a = (enum KMS_Agent__KeyType)n;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 enum KMS_Agent__KeyType * SOAP_FMAC4 soap_in_KMS_Agent__KeyType(struct soap *soap, const char *tag, enum KMS_Agent__KeyType *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (enum KMS_Agent__KeyType *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyType, sizeof(enum KMS_Agent__KeyType), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	if (soap->body && !*soap->href)
-	{	if (!a || soap_s2KMS_Agent__KeyType(soap, soap_value(soap), a) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (enum KMS_Agent__KeyType *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyType, 0, sizeof(enum KMS_Agent__KeyType), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__KeyType(struct soap *soap, const enum KMS_Agent__KeyType *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyType);
-	if (soap_out_KMS_Agent__KeyType(soap, tag?tag:"KMS-Agent:KeyType", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 enum KMS_Agent__KeyType * SOAP_FMAC4 soap_get_KMS_Agent__KeyType(struct soap *soap, enum KMS_Agent__KeyType *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__KeyType(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__FilterOperator(struct soap *soap, enum KMS_Agent__FilterOperator *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_KMS_Agent__FilterOperator
-	*a = SOAP_DEFAULT_KMS_Agent__FilterOperator;
-#else
-	*a = (enum KMS_Agent__FilterOperator)0;
-#endif
-}
-
-static const struct soap_code_map soap_codes_KMS_Agent__FilterOperator[] =
-{	{ (long)FILTER_OPERATOR_EQUAL, "FILTER-OPERATOR-EQUAL" },
-	{ (long)FILTER_OPERATOR_NOT_EQUAL, "FILTER-OPERATOR-NOT-EQUAL" },
-	{ (long)FILTER_OPERATOR_GREATER_THAN, "FILTER-OPERATOR-GREATER-THAN" },
-	{ (long)FILTER_OPERATOR_LESS_THAN, "FILTER-OPERATOR-LESS-THAN" },
-	{ (long)FILTER_OPERATOR_GREATER_THAN_OR_EQUAL, "FILTER-OPERATOR-GREATER-THAN-OR-EQUAL" },
-	{ (long)FILTER_OPERATOR_LESS_THAN_OR_EQUAL, "FILTER-OPERATOR-LESS-THAN-OR-EQUAL" },
-	{ (long)FILTER_OPERATOR_STARTS_WITH, "FILTER-OPERATOR-STARTS-WITH" },
-	{ 0, NULL }
-};
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_KMS_Agent__FilterOperator2s(struct soap *soap, enum KMS_Agent__FilterOperator n)
-{	const char *s = soap_code_str(soap_codes_KMS_Agent__FilterOperator, (long)n);
-	if (s)
-		return s;
-	return soap_long2s(soap, (long)n);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__FilterOperator(struct soap *soap, const char *tag, int id, const enum KMS_Agent__FilterOperator *a, const char *type)
-{	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__FilterOperator), type) || soap_send(soap, soap_KMS_Agent__FilterOperator2s(soap, *a)))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2KMS_Agent__FilterOperator(struct soap *soap, const char *s, enum KMS_Agent__FilterOperator *a)
-{
-	const struct soap_code_map *map;
-	if (!s)
-		return soap->error;
-	map = soap_code(soap_codes_KMS_Agent__FilterOperator, s);
-	if (map)
-		*a = (enum KMS_Agent__FilterOperator)map->code;
-	else
-	{	long n;
-		if (soap_s2long(soap, s, &n) || ((soap->mode & SOAP_XML_STRICT) && (n < 0 || n > 6)))
-			return soap->error = SOAP_TYPE;
-		*a = (enum KMS_Agent__FilterOperator)n;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 enum KMS_Agent__FilterOperator * SOAP_FMAC4 soap_in_KMS_Agent__FilterOperator(struct soap *soap, const char *tag, enum KMS_Agent__FilterOperator *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (enum KMS_Agent__FilterOperator *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__FilterOperator, sizeof(enum KMS_Agent__FilterOperator), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	if (soap->body && !*soap->href)
-	{	if (!a || soap_s2KMS_Agent__FilterOperator(soap, soap_value(soap), a) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (enum KMS_Agent__FilterOperator *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__FilterOperator, 0, sizeof(enum KMS_Agent__FilterOperator), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__FilterOperator(struct soap *soap, const enum KMS_Agent__FilterOperator *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__FilterOperator);
-	if (soap_out_KMS_Agent__FilterOperator(soap, tag?tag:"KMS-Agent:FilterOperator", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 enum KMS_Agent__FilterOperator * SOAP_FMAC4 soap_get_KMS_Agent__FilterOperator(struct soap *soap, enum KMS_Agent__FilterOperator *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__FilterOperator(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__SortOrder(struct soap *soap, enum KMS_Agent__SortOrder *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_KMS_Agent__SortOrder
-	*a = SOAP_DEFAULT_KMS_Agent__SortOrder;
-#else
-	*a = (enum KMS_Agent__SortOrder)0;
-#endif
-}
-
-static const struct soap_code_map soap_codes_KMS_Agent__SortOrder[] =
-{	{ (long)SORT_ORDER_ASCENDING, "SORT-ORDER-ASCENDING" },
-	{ (long)SORT_ORDER_DESCENDING, "SORT-ORDER-DESCENDING" },
-	{ 0, NULL }
-};
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_KMS_Agent__SortOrder2s(struct soap *soap, enum KMS_Agent__SortOrder n)
-{	const char *s = soap_code_str(soap_codes_KMS_Agent__SortOrder, (long)n);
-	if (s)
-		return s;
-	return soap_long2s(soap, (long)n);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__SortOrder(struct soap *soap, const char *tag, int id, const enum KMS_Agent__SortOrder *a, const char *type)
-{	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__SortOrder), type) || soap_send(soap, soap_KMS_Agent__SortOrder2s(soap, *a)))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2KMS_Agent__SortOrder(struct soap *soap, const char *s, enum KMS_Agent__SortOrder *a)
-{
-	const struct soap_code_map *map;
-	if (!s)
-		return soap->error;
-	map = soap_code(soap_codes_KMS_Agent__SortOrder, s);
-	if (map)
-		*a = (enum KMS_Agent__SortOrder)map->code;
-	else
-	{	long n;
-		if (soap_s2long(soap, s, &n) || ((soap->mode & SOAP_XML_STRICT) && (n < 0 || n > 1)))
-			return soap->error = SOAP_TYPE;
-		*a = (enum KMS_Agent__SortOrder)n;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 enum KMS_Agent__SortOrder * SOAP_FMAC4 soap_in_KMS_Agent__SortOrder(struct soap *soap, const char *tag, enum KMS_Agent__SortOrder *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (enum KMS_Agent__SortOrder *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__SortOrder, sizeof(enum KMS_Agent__SortOrder), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	if (soap->body && !*soap->href)
-	{	if (!a || soap_s2KMS_Agent__SortOrder(soap, soap_value(soap), a) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (enum KMS_Agent__SortOrder *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__SortOrder, 0, sizeof(enum KMS_Agent__SortOrder), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__SortOrder(struct soap *soap, const enum KMS_Agent__SortOrder *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__SortOrder);
-	if (soap_out_KMS_Agent__SortOrder(soap, tag?tag:"KMS-Agent:SortOrder", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 enum KMS_Agent__SortOrder * SOAP_FMAC4 soap_get_KMS_Agent__SortOrder(struct soap *soap, enum KMS_Agent__SortOrder *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__SortOrder(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_xsd__boolean2s(struct soap *soap, bool n)
-{	return soap_bool2s(soap, n);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__boolean(struct soap *soap, const char *tag, int id, const bool *a, const char *type)
-{	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_xsd__boolean), type) || soap_send(soap, soap_xsd__boolean2s(soap, *a)))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2xsd__boolean(struct soap *soap, const char *s, bool *a)
-{
-	return soap_s2bool(soap, s, a);
-}
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_xsd__boolean(struct soap *soap, const char *tag, bool *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, NULL))
-		return NULL;
-	if (*soap->type && soap_match_tag(soap, soap->type, type) && soap_match_tag(soap, soap->type, ":boolean"))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (bool *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_xsd__boolean, sizeof(bool), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	if (soap->body && !*soap->href)
-	{	if (!a || soap_s2xsd__boolean(soap, soap_value(soap), a) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (bool *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_xsd__boolean, 0, sizeof(bool), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__boolean(struct soap *soap, const bool *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_xsd__boolean);
-	if (soap_out_xsd__boolean(soap, tag?tag:"xsd:boolean", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_xsd__boolean(struct soap *soap, bool *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__boolean(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_bool(struct soap *soap, bool *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_bool
-	*a = SOAP_DEFAULT_bool;
-#else
-	*a = (bool)0;
-#endif
-}
-
-static const struct soap_code_map soap_codes_bool[] =
-{	{ (long)false, "false" },
-	{ (long)true, "true" },
-	{ 0, NULL }
-};
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_bool2s(struct soap *soap, bool n)
-{
-	(void)soap; /* appease -Wall -Werror */
-return soap_code_str(soap_codes_bool, n!=0);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_bool(struct soap *soap, const char *tag, int id, const bool *a, const char *type)
-{	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_bool), type) || soap_send(soap, soap_bool2s(soap, *a)))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2bool(struct soap *soap, const char *s, bool *a)
-{
-	const struct soap_code_map *map;
-	if (!s)
-		return soap->error;
-	map = soap_code(soap_codes_bool, s);
-	if (map)
-		*a = (bool)(map->code != 0);
-	else
-	{	long n;
-		if (soap_s2long(soap, s, &n) || n < 0 || n > 1)
-			return soap->error = SOAP_TYPE;
-		*a = (bool)(n != 0);
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_bool(struct soap *soap, const char *tag, bool *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, NULL))
-		return NULL;
-	if (*soap->type && soap_match_tag(soap, soap->type, type) && soap_match_tag(soap, soap->type, ":boolean"))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (bool *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_bool, sizeof(bool), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	if (soap->body && !*soap->href)
-	{	if (!a || soap_s2bool(soap, soap_value(soap), a) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (bool *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_bool, 0, sizeof(bool), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_bool(struct soap *soap, const bool *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_bool);
-	if (soap_out_bool(soap, tag?tag:"boolean", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_bool(struct soap *soap, bool *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_bool(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default__QName(soap, &a->faultcode);
-	soap_default_string(soap, &a->faultstring);
-	soap_default_string(soap, &a->faultactor);
-	a->detail = NULL;
-	a->SOAP_ENV__Code = NULL;
-	a->SOAP_ENV__Reason = NULL;
-	soap_default_string(soap, &a->SOAP_ENV__Node);
-	soap_default_string(soap, &a->SOAP_ENV__Role);
-	a->SOAP_ENV__Detail = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Fault(struct soap *soap, const struct SOAP_ENV__Fault *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize__QName(soap, &a->faultcode);
-	soap_serialize_string(soap, &a->faultstring);
-	soap_serialize_string(soap, &a->faultactor);
-	soap_serialize_PointerToSOAP_ENV__Detail(soap, &a->detail);
-	soap_serialize_PointerToSOAP_ENV__Code(soap, &a->SOAP_ENV__Code);
-	soap_serialize_PointerToSOAP_ENV__Reason(soap, &a->SOAP_ENV__Reason);
-	soap_serialize_string(soap, &a->SOAP_ENV__Node);
-	soap_serialize_string(soap, &a->SOAP_ENV__Role);
-	soap_serialize_PointerToSOAP_ENV__Detail(soap, &a->SOAP_ENV__Detail);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Fault(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Fault *a, const char *type)
-{
-	const char *soap_tmp_faultcode = soap_QName2s(soap, a->faultcode);
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_SOAP_ENV__Fault), type))
-		return soap->error;
-	if (soap_out__QName(soap, "faultcode", -1, (char*const*)&soap_tmp_faultcode, ""))
-		return soap->error;
-	if (soap_out_string(soap, "faultstring", -1, &a->faultstring, "xsd:string"))
-		return soap->error;
-	if (soap_out_string(soap, "faultactor", -1, &a->faultactor, "xsd:string"))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Detail(soap, "detail", -1, &a->detail, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Code", -1, &a->SOAP_ENV__Code, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Reason(soap, "SOAP-ENV:Reason", -1, &a->SOAP_ENV__Reason, ""))
-		return soap->error;
-	if (soap_out_string(soap, "SOAP-ENV:Node", -1, &a->SOAP_ENV__Node, ""))
-		return soap->error;
-	if (soap_out_string(soap, "SOAP-ENV:Role", -1, &a->SOAP_ENV__Role, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Detail(soap, "SOAP-ENV:Detail", -1, &a->SOAP_ENV__Detail, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_in_SOAP_ENV__Fault(struct soap *soap, const char *tag, struct SOAP_ENV__Fault *a, const char *type)
-{
-	size_t soap_flag_faultcode = 1;
-	size_t soap_flag_faultstring = 1;
-	size_t soap_flag_faultactor = 1;
-	size_t soap_flag_detail = 1;
-	size_t soap_flag_SOAP_ENV__Code = 1;
-	size_t soap_flag_SOAP_ENV__Reason = 1;
-	size_t soap_flag_SOAP_ENV__Node = 1;
-	size_t soap_flag_SOAP_ENV__Role = 1;
-	size_t soap_flag_SOAP_ENV__Detail = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Fault *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_SOAP_ENV__Fault, sizeof(struct SOAP_ENV__Fault), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Fault(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_faultcode && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in__QName(soap, "faultcode", &a->faultcode, ""))
-				{	soap_flag_faultcode--;
-					continue;
-				}
-			if (soap_flag_faultstring && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "faultstring", &a->faultstring, "xsd:string"))
-				{	soap_flag_faultstring--;
-					continue;
-				}
-			if (soap_flag_faultactor && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "faultactor", &a->faultactor, "xsd:string"))
-				{	soap_flag_faultactor--;
-					continue;
-				}
-			if (soap_flag_detail && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Detail(soap, "detail", &a->detail, ""))
-				{	soap_flag_detail--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Code && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Code", &a->SOAP_ENV__Code, ""))
-				{	soap_flag_SOAP_ENV__Code--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Reason && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Reason(soap, "SOAP-ENV:Reason", &a->SOAP_ENV__Reason, ""))
-				{	soap_flag_SOAP_ENV__Reason--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Node && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "SOAP-ENV:Node", &a->SOAP_ENV__Node, "xsd:string"))
-				{	soap_flag_SOAP_ENV__Node--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Role && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "SOAP-ENV:Role", &a->SOAP_ENV__Role, "xsd:string"))
-				{	soap_flag_SOAP_ENV__Role--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Detail && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Detail(soap, "SOAP-ENV:Detail", &a->SOAP_ENV__Detail, ""))
-				{	soap_flag_SOAP_ENV__Detail--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Fault *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_SOAP_ENV__Fault, 0, sizeof(struct SOAP_ENV__Fault), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Fault(struct soap *soap, const struct SOAP_ENV__Fault *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_SOAP_ENV__Fault);
-	if (soap_out_SOAP_ENV__Fault(soap, tag?tag:"SOAP-ENV:Fault", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_get_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Fault(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Fault * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Fault(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Fault(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_SOAP_ENV__Fault, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Fault);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Fault);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Fault[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Fault);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Fault*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Fault(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Fault %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Fault*)p = *(struct SOAP_ENV__Fault*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_string(soap, &a->SOAP_ENV__Text);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Reason(struct soap *soap, const struct SOAP_ENV__Reason *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_string(soap, &a->SOAP_ENV__Text);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Reason(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Reason *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_SOAP_ENV__Reason), type))
-		return soap->error;
-	if (soap->lang)
-		soap_set_attr(soap, "xml:lang", soap->lang, 1);
-	if (soap_out_string(soap, "SOAP-ENV:Text", -1, &a->SOAP_ENV__Text, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_in_SOAP_ENV__Reason(struct soap *soap, const char *tag, struct SOAP_ENV__Reason *a, const char *type)
-{
-	size_t soap_flag_SOAP_ENV__Text = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Reason *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_SOAP_ENV__Reason, sizeof(struct SOAP_ENV__Reason), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Reason(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_SOAP_ENV__Text && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "SOAP-ENV:Text", &a->SOAP_ENV__Text, "xsd:string"))
-				{	soap_flag_SOAP_ENV__Text--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Reason *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_SOAP_ENV__Reason, 0, sizeof(struct SOAP_ENV__Reason), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Reason(struct soap *soap, const struct SOAP_ENV__Reason *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_SOAP_ENV__Reason);
-	if (soap_out_SOAP_ENV__Reason(soap, tag?tag:"SOAP-ENV:Reason", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_get_SOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Reason(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Reason * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Reason(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Reason(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_SOAP_ENV__Reason, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Reason);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Reason);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Reason[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Reason);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Reason*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Reason(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Reason %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Reason*)p = *(struct SOAP_ENV__Reason*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	a->__type = 0;
-	a->fault = NULL;
-	a->__any = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Detail(struct soap *soap, const struct SOAP_ENV__Detail *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_markelement(soap, a->fault, a->__type);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Detail(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Detail *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_SOAP_ENV__Detail), type))
-		return soap->error;
-	if (soap_putelement(soap, a->fault, "fault", -1, a->__type))
-		return soap->error;
-	soap_outliteral(soap, "-any", &a->__any, NULL);
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_in_SOAP_ENV__Detail(struct soap *soap, const char *tag, struct SOAP_ENV__Detail *a, const char *type)
-{
-	size_t soap_flag_fault = 1;
-	size_t soap_flag___any = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Detail *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_SOAP_ENV__Detail, sizeof(struct SOAP_ENV__Detail), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Detail(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_fault && soap->error == SOAP_TAG_MISMATCH)
-				if ((a->fault = soap_getelement(soap, &a->__type)))
-				{	soap_flag_fault = 0;
-					continue;
-				}
-			if (soap_flag___any && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_inliteral(soap, "-any", &a->__any))
-				{	soap_flag___any--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Detail *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_SOAP_ENV__Detail, 0, sizeof(struct SOAP_ENV__Detail), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Detail(struct soap *soap, const struct SOAP_ENV__Detail *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_SOAP_ENV__Detail);
-	if (soap_out_SOAP_ENV__Detail(soap, tag?tag:"SOAP-ENV:Detail", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_get_SOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Detail(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Detail * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Detail(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Detail(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_SOAP_ENV__Detail, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Detail);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Detail);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Detail[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Detail);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Detail*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Detail(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Detail %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Detail*)p = *(struct SOAP_ENV__Detail*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default__QName(soap, &a->SOAP_ENV__Value);
-	a->SOAP_ENV__Subcode = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Code(struct soap *soap, const struct SOAP_ENV__Code *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize__QName(soap, &a->SOAP_ENV__Value);
-	soap_serialize_PointerToSOAP_ENV__Code(soap, &a->SOAP_ENV__Subcode);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Code(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Code *a, const char *type)
-{
-	const char *soap_tmp_SOAP_ENV__Value = soap_QName2s(soap, a->SOAP_ENV__Value);
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_SOAP_ENV__Code), type))
-		return soap->error;
-	if (soap_out__QName(soap, "SOAP-ENV:Value", -1, (char*const*)&soap_tmp_SOAP_ENV__Value, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Subcode", -1, &a->SOAP_ENV__Subcode, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_in_SOAP_ENV__Code(struct soap *soap, const char *tag, struct SOAP_ENV__Code *a, const char *type)
-{
-	size_t soap_flag_SOAP_ENV__Value = 1;
-	size_t soap_flag_SOAP_ENV__Subcode = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Code *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_SOAP_ENV__Code, sizeof(struct SOAP_ENV__Code), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Code(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_SOAP_ENV__Value && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in__QName(soap, "SOAP-ENV:Value", &a->SOAP_ENV__Value, ""))
-				{	soap_flag_SOAP_ENV__Value--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Subcode && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Subcode", &a->SOAP_ENV__Subcode, ""))
-				{	soap_flag_SOAP_ENV__Subcode--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Code *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_SOAP_ENV__Code, 0, sizeof(struct SOAP_ENV__Code), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Code(struct soap *soap, const struct SOAP_ENV__Code *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_SOAP_ENV__Code);
-	if (soap_out_SOAP_ENV__Code(soap, tag?tag:"SOAP-ENV:Code", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_get_SOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Code(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Code * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Code(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Code(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_SOAP_ENV__Code, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Code);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Code);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Code[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Code);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Code*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Code(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Code %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Code*)p = *(struct SOAP_ENV__Code*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Header(struct soap *soap, struct SOAP_ENV__Header *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Header(struct soap *soap, const struct SOAP_ENV__Header *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Header(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Header *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_SOAP_ENV__Header), type))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_in_SOAP_ENV__Header(struct soap *soap, const char *tag, struct SOAP_ENV__Header *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Header *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_SOAP_ENV__Header, sizeof(struct SOAP_ENV__Header), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Header(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Header *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_SOAP_ENV__Header, 0, sizeof(struct SOAP_ENV__Header), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Header(struct soap *soap, const struct SOAP_ENV__Header *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_SOAP_ENV__Header);
-	if (soap_out_SOAP_ENV__Header(soap, tag?tag:"SOAP-ENV:Header", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_get_SOAP_ENV__Header(struct soap *soap, struct SOAP_ENV__Header *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Header(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Header * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Header(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Header(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_SOAP_ENV__Header, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Header);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Header);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Header[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Header);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Header*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Header(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Header %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Header*)p = *(struct SOAP_ENV__Header*)q;
-}
-
-#endif
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RegisterAgentKWK(struct soap *soap, struct KMS_Agent__RegisterAgentKWK *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__hexBinary(soap, &a->AgentKWK);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RegisterAgentKWK(struct soap *soap, const struct KMS_Agent__RegisterAgentKWK *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_embedded(soap, &a->AgentKWK, SOAP_TYPE_KMS_Agent_xsd__hexBinary);
-	soap_serialize_xsd__hexBinary(soap, &a->AgentKWK);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RegisterAgentKWK(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RegisterAgentKWK *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWK), type))
-		return soap->error;
-	if (soap_out_xsd__hexBinary(soap, "AgentKWK", -1, &a->AgentKWK, "xsd:hexBinary"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RegisterAgentKWK * SOAP_FMAC4 soap_in_KMS_Agent__RegisterAgentKWK(struct soap *soap, const char *tag, struct KMS_Agent__RegisterAgentKWK *a, const char *type)
-{
-	size_t soap_flag_AgentKWK = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RegisterAgentKWK *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWK, sizeof(struct KMS_Agent__RegisterAgentKWK), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RegisterAgentKWK(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_AgentKWK && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__hexBinary(soap, "AgentKWK", &a->AgentKWK, "xsd:hexBinary"))
-				{	soap_flag_AgentKWK--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RegisterAgentKWK *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWK, 0, sizeof(struct KMS_Agent__RegisterAgentKWK), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_AgentKWK > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RegisterAgentKWK(struct soap *soap, const struct KMS_Agent__RegisterAgentKWK *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWK);
-	if (soap_out_KMS_Agent__RegisterAgentKWK(soap, tag?tag:"KMS-Agent:RegisterAgentKWK", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RegisterAgentKWK * SOAP_FMAC4 soap_get_KMS_Agent__RegisterAgentKWK(struct soap *soap, struct KMS_Agent__RegisterAgentKWK *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RegisterAgentKWK(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RegisterAgentKWK * SOAP_FMAC2 soap_instantiate_KMS_Agent__RegisterAgentKWK(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RegisterAgentKWK(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWK, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RegisterAgentKWK);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RegisterAgentKWK);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RegisterAgentKWK[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RegisterAgentKWK);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RegisterAgentKWK*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RegisterAgentKWK(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RegisterAgentKWK %p -> %p\n", q, p));
-	*(struct KMS_Agent__RegisterAgentKWK*)p = *(struct KMS_Agent__RegisterAgentKWK*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RegisterAgentKWKResponse(struct soap *soap, struct KMS_Agent__RegisterAgentKWKResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__string(soap, &a->AgentKWKID);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RegisterAgentKWKResponse(struct soap *soap, const struct KMS_Agent__RegisterAgentKWKResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->AgentKWKID);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RegisterAgentKWKResponse(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RegisterAgentKWKResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWKResponse), type))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "AgentKWKID", -1, &a->AgentKWKID, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RegisterAgentKWKResponse * SOAP_FMAC4 soap_in_KMS_Agent__RegisterAgentKWKResponse(struct soap *soap, const char *tag, struct KMS_Agent__RegisterAgentKWKResponse *a, const char *type)
-{
-	size_t soap_flag_AgentKWKID = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RegisterAgentKWKResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWKResponse, sizeof(struct KMS_Agent__RegisterAgentKWKResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RegisterAgentKWKResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_AgentKWKID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "AgentKWKID", &a->AgentKWKID, "xsd:string"))
-				{	soap_flag_AgentKWKID--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RegisterAgentKWKResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWKResponse, 0, sizeof(struct KMS_Agent__RegisterAgentKWKResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RegisterAgentKWKResponse(struct soap *soap, const struct KMS_Agent__RegisterAgentKWKResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWKResponse);
-	if (soap_out_KMS_Agent__RegisterAgentKWKResponse(soap, tag?tag:"KMS-Agent:RegisterAgentKWKResponse", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RegisterAgentKWKResponse * SOAP_FMAC4 soap_get_KMS_Agent__RegisterAgentKWKResponse(struct soap *soap, struct KMS_Agent__RegisterAgentKWKResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RegisterAgentKWKResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RegisterAgentKWKResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__RegisterAgentKWKResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RegisterAgentKWKResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWKResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RegisterAgentKWKResponse);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RegisterAgentKWKResponse);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RegisterAgentKWKResponse[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RegisterAgentKWKResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RegisterAgentKWKResponse*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RegisterAgentKWKResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RegisterAgentKWKResponse %p -> %p\n", q, p));
-	*(struct KMS_Agent__RegisterAgentKWKResponse*)p = *(struct KMS_Agent__RegisterAgentKWKResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__GetAgentKWKPublicKey(struct soap *soap, struct KMS_Agent__GetAgentKWKPublicKey *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__GetAgentKWKPublicKey(struct soap *soap, const struct KMS_Agent__GetAgentKWKPublicKey *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__GetAgentKWKPublicKey(struct soap *soap, const char *tag, int id, const struct KMS_Agent__GetAgentKWKPublicKey *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKey), type))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__GetAgentKWKPublicKey * SOAP_FMAC4 soap_in_KMS_Agent__GetAgentKWKPublicKey(struct soap *soap, const char *tag, struct KMS_Agent__GetAgentKWKPublicKey *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__GetAgentKWKPublicKey *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKey, sizeof(struct KMS_Agent__GetAgentKWKPublicKey), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__GetAgentKWKPublicKey(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__GetAgentKWKPublicKey *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKey, 0, sizeof(struct KMS_Agent__GetAgentKWKPublicKey), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__GetAgentKWKPublicKey(struct soap *soap, const struct KMS_Agent__GetAgentKWKPublicKey *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKey);
-	if (soap_out_KMS_Agent__GetAgentKWKPublicKey(soap, tag?tag:"KMS-Agent:GetAgentKWKPublicKey", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__GetAgentKWKPublicKey * SOAP_FMAC4 soap_get_KMS_Agent__GetAgentKWKPublicKey(struct soap *soap, struct KMS_Agent__GetAgentKWKPublicKey *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__GetAgentKWKPublicKey(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__GetAgentKWKPublicKey * SOAP_FMAC2 soap_instantiate_KMS_Agent__GetAgentKWKPublicKey(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__GetAgentKWKPublicKey(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKey, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__GetAgentKWKPublicKey);
-		if (size)
-			*size = sizeof(struct KMS_Agent__GetAgentKWKPublicKey);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__GetAgentKWKPublicKey[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__GetAgentKWKPublicKey);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__GetAgentKWKPublicKey*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__GetAgentKWKPublicKey(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__GetAgentKWKPublicKey %p -> %p\n", q, p));
-	*(struct KMS_Agent__GetAgentKWKPublicKey*)p = *(struct KMS_Agent__GetAgentKWKPublicKey*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__GetAgentKWKPublicKeyResponse(struct soap *soap, struct KMS_Agent__GetAgentKWKPublicKeyResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__hexBinary(soap, &a->KWKPublicKey);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__GetAgentKWKPublicKeyResponse(struct soap *soap, const struct KMS_Agent__GetAgentKWKPublicKeyResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_embedded(soap, &a->KWKPublicKey, SOAP_TYPE_KMS_Agent_xsd__hexBinary);
-	soap_serialize_xsd__hexBinary(soap, &a->KWKPublicKey);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__GetAgentKWKPublicKeyResponse(struct soap *soap, const char *tag, int id, const struct KMS_Agent__GetAgentKWKPublicKeyResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKeyResponse), type))
-		return soap->error;
-	if (soap_out_xsd__hexBinary(soap, "KWKPublicKey", -1, &a->KWKPublicKey, "xsd:hexBinary"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__GetAgentKWKPublicKeyResponse * SOAP_FMAC4 soap_in_KMS_Agent__GetAgentKWKPublicKeyResponse(struct soap *soap, const char *tag, struct KMS_Agent__GetAgentKWKPublicKeyResponse *a, const char *type)
-{
-	size_t soap_flag_KWKPublicKey = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__GetAgentKWKPublicKeyResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKeyResponse, sizeof(struct KMS_Agent__GetAgentKWKPublicKeyResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_KWKPublicKey && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__hexBinary(soap, "KWKPublicKey", &a->KWKPublicKey, "xsd:hexBinary"))
-				{	soap_flag_KWKPublicKey--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__GetAgentKWKPublicKeyResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKeyResponse, 0, sizeof(struct KMS_Agent__GetAgentKWKPublicKeyResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_KWKPublicKey > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__GetAgentKWKPublicKeyResponse(struct soap *soap, const struct KMS_Agent__GetAgentKWKPublicKeyResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKeyResponse);
-	if (soap_out_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, tag?tag:"KMS-Agent:GetAgentKWKPublicKeyResponse", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__GetAgentKWKPublicKeyResponse * SOAP_FMAC4 soap_get_KMS_Agent__GetAgentKWKPublicKeyResponse(struct soap *soap, struct KMS_Agent__GetAgentKWKPublicKeyResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__GetAgentKWKPublicKeyResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__GetAgentKWKPublicKeyResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__GetAgentKWKPublicKeyResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKeyResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__GetAgentKWKPublicKeyResponse);
-		if (size)
-			*size = sizeof(struct KMS_Agent__GetAgentKWKPublicKeyResponse);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__GetAgentKWKPublicKeyResponse[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__GetAgentKWKPublicKeyResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__GetAgentKWKPublicKeyResponse*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__GetAgentKWKPublicKeyResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__GetAgentKWKPublicKeyResponse %p -> %p\n", q, p));
-	*(struct KMS_Agent__GetAgentKWKPublicKeyResponse*)p = *(struct KMS_Agent__GetAgentKWKPublicKeyResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__CreateAuditLog(struct soap *soap, struct KMS_Agent__CreateAuditLog *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__AuditLogRetention(soap, &a->Retention);
-	soap_default_KMS_Agent__AuditLogCondition(soap, &a->Condition);
-	soap_default_xsd__boolean(soap, &a->IssueAlert);
-	soap_default_xsd__string(soap, &a->Message);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__CreateAuditLog(struct soap *soap, const struct KMS_Agent__CreateAuditLog *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->Message);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__CreateAuditLog(struct soap *soap, const char *tag, int id, const struct KMS_Agent__CreateAuditLog *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLog), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__AuditLogRetention(soap, "Retention", -1, &a->Retention, "KMS-Agent:AuditLogRetention"))
-		return soap->error;
-	if (soap_out_KMS_Agent__AuditLogCondition(soap, "Condition", -1, &a->Condition, "KMS-Agent:AuditLogCondition"))
-		return soap->error;
-	if (soap_out_xsd__boolean(soap, "IssueAlert", -1, &a->IssueAlert, "xsd:boolean"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "Message", -1, &a->Message, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__CreateAuditLog * SOAP_FMAC4 soap_in_KMS_Agent__CreateAuditLog(struct soap *soap, const char *tag, struct KMS_Agent__CreateAuditLog *a, const char *type)
-{
-	size_t soap_flag_Retention = 1;
-	size_t soap_flag_Condition = 1;
-	size_t soap_flag_IssueAlert = 1;
-	size_t soap_flag_Message = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__CreateAuditLog *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLog, sizeof(struct KMS_Agent__CreateAuditLog), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__CreateAuditLog(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_Retention && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__AuditLogRetention(soap, "Retention", &a->Retention, "KMS-Agent:AuditLogRetention"))
-				{	soap_flag_Retention--;
-					continue;
-				}
-			if (soap_flag_Condition && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__AuditLogCondition(soap, "Condition", &a->Condition, "KMS-Agent:AuditLogCondition"))
-				{	soap_flag_Condition--;
-					continue;
-				}
-			if (soap_flag_IssueAlert && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__boolean(soap, "IssueAlert", &a->IssueAlert, "xsd:boolean"))
-				{	soap_flag_IssueAlert--;
-					continue;
-				}
-			if (soap_flag_Message && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "Message", &a->Message, "xsd:string"))
-				{	soap_flag_Message--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__CreateAuditLog *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLog, 0, sizeof(struct KMS_Agent__CreateAuditLog), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_Retention > 0 || soap_flag_Condition > 0 || soap_flag_IssueAlert > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__CreateAuditLog(struct soap *soap, const struct KMS_Agent__CreateAuditLog *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLog);
-	if (soap_out_KMS_Agent__CreateAuditLog(soap, tag?tag:"KMS-Agent:CreateAuditLog", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__CreateAuditLog * SOAP_FMAC4 soap_get_KMS_Agent__CreateAuditLog(struct soap *soap, struct KMS_Agent__CreateAuditLog *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__CreateAuditLog(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__CreateAuditLog * SOAP_FMAC2 soap_instantiate_KMS_Agent__CreateAuditLog(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__CreateAuditLog(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLog, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__CreateAuditLog);
-		if (size)
-			*size = sizeof(struct KMS_Agent__CreateAuditLog);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__CreateAuditLog[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__CreateAuditLog);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__CreateAuditLog*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__CreateAuditLog(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__CreateAuditLog %p -> %p\n", q, p));
-	*(struct KMS_Agent__CreateAuditLog*)p = *(struct KMS_Agent__CreateAuditLog*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__CreateAuditLogResponse(struct soap *soap, struct KMS_Agent__CreateAuditLogResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	/* transient _ skipped */
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__CreateAuditLogResponse(struct soap *soap, const struct KMS_Agent__CreateAuditLogResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	/* transient _ skipped */
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__CreateAuditLogResponse(struct soap *soap, const char *tag, int id, const struct KMS_Agent__CreateAuditLogResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLogResponse), type))
-		return soap->error;
-	/* transient _ skipped */
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__CreateAuditLogResponse * SOAP_FMAC4 soap_in_KMS_Agent__CreateAuditLogResponse(struct soap *soap, const char *tag, struct KMS_Agent__CreateAuditLogResponse *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__CreateAuditLogResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLogResponse, sizeof(struct KMS_Agent__CreateAuditLogResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__CreateAuditLogResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-		/* transient _ skipped */
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__CreateAuditLogResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLogResponse, 0, sizeof(struct KMS_Agent__CreateAuditLogResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__CreateAuditLogResponse(struct soap *soap, const struct KMS_Agent__CreateAuditLogResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLogResponse);
-	if (soap_out_KMS_Agent__CreateAuditLogResponse(soap, tag?tag:"KMS-Agent:CreateAuditLogResponse", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__CreateAuditLogResponse * SOAP_FMAC4 soap_get_KMS_Agent__CreateAuditLogResponse(struct soap *soap, struct KMS_Agent__CreateAuditLogResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__CreateAuditLogResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__CreateAuditLogResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__CreateAuditLogResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__CreateAuditLogResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLogResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__CreateAuditLogResponse);
-		if (size)
-			*size = sizeof(struct KMS_Agent__CreateAuditLogResponse);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__CreateAuditLogResponse[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__CreateAuditLogResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__CreateAuditLogResponse*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__CreateAuditLogResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__CreateAuditLogResponse %p -> %p\n", q, p));
-	*(struct KMS_Agent__CreateAuditLogResponse*)p = *(struct KMS_Agent__CreateAuditLogResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap *soap, struct KMS_Agent__RetrieveProtectAndProcessKey2 *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__DataUnit(soap, &a->DataUnit);
-	soap_default_xsd__string(soap, &a->KeyGroupID);
-	soap_default_xsd__string(soap, &a->AgentKWKID);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap *soap, const struct KMS_Agent__RetrieveProtectAndProcessKey2 *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_KMS_Agent__DataUnit(soap, &a->DataUnit);
-	soap_serialize_xsd__string(soap, &a->KeyGroupID);
-	soap_serialize_xsd__string(soap, &a->AgentKWKID);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RetrieveProtectAndProcessKey2 *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__DataUnit(soap, "DataUnit", -1, &a->DataUnit, "KMS-Agent:DataUnit"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KeyGroupID", -1, &a->KeyGroupID, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "AgentKWKID", -1, &a->AgentKWKID, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveProtectAndProcessKey2 * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap *soap, const char *tag, struct KMS_Agent__RetrieveProtectAndProcessKey2 *a, const char *type)
-{
-	size_t soap_flag_DataUnit = 1;
-	size_t soap_flag_KeyGroupID = 1;
-	size_t soap_flag_AgentKWKID = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RetrieveProtectAndProcessKey2 *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2, sizeof(struct KMS_Agent__RetrieveProtectAndProcessKey2), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RetrieveProtectAndProcessKey2(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_DataUnit && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__DataUnit(soap, "DataUnit", &a->DataUnit, "KMS-Agent:DataUnit"))
-				{	soap_flag_DataUnit--;
-					continue;
-				}
-			if (soap_flag_KeyGroupID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KeyGroupID", &a->KeyGroupID, "xsd:string"))
-				{	soap_flag_KeyGroupID--;
-					continue;
-				}
-			if (soap_flag_AgentKWKID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "AgentKWKID", &a->AgentKWKID, "xsd:string"))
-				{	soap_flag_AgentKWKID--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RetrieveProtectAndProcessKey2 *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2, 0, sizeof(struct KMS_Agent__RetrieveProtectAndProcessKey2), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_DataUnit > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap *soap, const struct KMS_Agent__RetrieveProtectAndProcessKey2 *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2);
-	if (soap_out_KMS_Agent__RetrieveProtectAndProcessKey2(soap, tag?tag:"KMS-Agent:RetrieveProtectAndProcessKey2", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveProtectAndProcessKey2 * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap *soap, struct KMS_Agent__RetrieveProtectAndProcessKey2 *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RetrieveProtectAndProcessKey2(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveProtectAndProcessKey2 * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKey2(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveProtectAndProcessKey2);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RetrieveProtectAndProcessKey2);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveProtectAndProcessKey2[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RetrieveProtectAndProcessKey2);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RetrieveProtectAndProcessKey2*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RetrieveProtectAndProcessKey2 %p -> %p\n", q, p));
-	*(struct KMS_Agent__RetrieveProtectAndProcessKey2*)p = *(struct KMS_Agent__RetrieveProtectAndProcessKey2*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveProtectAndProcessKey2Response(struct soap *soap, struct KMS_Agent__RetrieveProtectAndProcessKey2Response *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__Key(soap, &a->Key);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveProtectAndProcessKey2Response(struct soap *soap, const struct KMS_Agent__RetrieveProtectAndProcessKey2Response *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_embedded(soap, &a->Key, SOAP_TYPE_KMS_Agent_KMS_Agent__Key);
-	soap_serialize_KMS_Agent__Key(soap, &a->Key);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveProtectAndProcessKey2Response(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RetrieveProtectAndProcessKey2Response *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2Response), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__Key(soap, "Key", -1, &a->Key, "KMS-Agent:Key"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveProtectAndProcessKey2Response * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveProtectAndProcessKey2Response(struct soap *soap, const char *tag, struct KMS_Agent__RetrieveProtectAndProcessKey2Response *a, const char *type)
-{
-	size_t soap_flag_Key = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RetrieveProtectAndProcessKey2Response *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2Response, sizeof(struct KMS_Agent__RetrieveProtectAndProcessKey2Response), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_Key && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__Key(soap, "Key", &a->Key, "KMS-Agent:Key"))
-				{	soap_flag_Key--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RetrieveProtectAndProcessKey2Response *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2Response, 0, sizeof(struct KMS_Agent__RetrieveProtectAndProcessKey2Response), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_Key > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveProtectAndProcessKey2Response(struct soap *soap, const struct KMS_Agent__RetrieveProtectAndProcessKey2Response *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2Response);
-	if (soap_out_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, tag?tag:"KMS-Agent:RetrieveProtectAndProcessKey2Response", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveProtectAndProcessKey2Response * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveProtectAndProcessKey2Response(struct soap *soap, struct KMS_Agent__RetrieveProtectAndProcessKey2Response *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveProtectAndProcessKey2Response * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKey2Response(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKey2Response(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2Response, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveProtectAndProcessKey2Response);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RetrieveProtectAndProcessKey2Response);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveProtectAndProcessKey2Response[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RetrieveProtectAndProcessKey2Response);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RetrieveProtectAndProcessKey2Response*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveProtectAndProcessKey2Response(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RetrieveProtectAndProcessKey2Response %p -> %p\n", q, p));
-	*(struct KMS_Agent__RetrieveProtectAndProcessKey2Response*)p = *(struct KMS_Agent__RetrieveProtectAndProcessKey2Response*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveProtectAndProcessKey(struct soap *soap, struct KMS_Agent__RetrieveProtectAndProcessKey *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__DataUnit(soap, &a->DataUnit);
-	soap_default_xsd__string(soap, &a->KeyGroupID);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveProtectAndProcessKey(struct soap *soap, const struct KMS_Agent__RetrieveProtectAndProcessKey *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_KMS_Agent__DataUnit(soap, &a->DataUnit);
-	soap_serialize_xsd__string(soap, &a->KeyGroupID);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveProtectAndProcessKey(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RetrieveProtectAndProcessKey *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__DataUnit(soap, "DataUnit", -1, &a->DataUnit, "KMS-Agent:DataUnit"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KeyGroupID", -1, &a->KeyGroupID, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveProtectAndProcessKey * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveProtectAndProcessKey(struct soap *soap, const char *tag, struct KMS_Agent__RetrieveProtectAndProcessKey *a, const char *type)
-{
-	size_t soap_flag_DataUnit = 1;
-	size_t soap_flag_KeyGroupID = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RetrieveProtectAndProcessKey *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey, sizeof(struct KMS_Agent__RetrieveProtectAndProcessKey), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RetrieveProtectAndProcessKey(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_DataUnit && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__DataUnit(soap, "DataUnit", &a->DataUnit, "KMS-Agent:DataUnit"))
-				{	soap_flag_DataUnit--;
-					continue;
-				}
-			if (soap_flag_KeyGroupID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KeyGroupID", &a->KeyGroupID, "xsd:string"))
-				{	soap_flag_KeyGroupID--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RetrieveProtectAndProcessKey *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey, 0, sizeof(struct KMS_Agent__RetrieveProtectAndProcessKey), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_DataUnit > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveProtectAndProcessKey(struct soap *soap, const struct KMS_Agent__RetrieveProtectAndProcessKey *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey);
-	if (soap_out_KMS_Agent__RetrieveProtectAndProcessKey(soap, tag?tag:"KMS-Agent:RetrieveProtectAndProcessKey", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveProtectAndProcessKey * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveProtectAndProcessKey(struct soap *soap, struct KMS_Agent__RetrieveProtectAndProcessKey *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RetrieveProtectAndProcessKey(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveProtectAndProcessKey * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKey(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKey(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveProtectAndProcessKey);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RetrieveProtectAndProcessKey);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveProtectAndProcessKey[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RetrieveProtectAndProcessKey);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RetrieveProtectAndProcessKey*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveProtectAndProcessKey(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RetrieveProtectAndProcessKey %p -> %p\n", q, p));
-	*(struct KMS_Agent__RetrieveProtectAndProcessKey*)p = *(struct KMS_Agent__RetrieveProtectAndProcessKey*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveProtectAndProcessKeyResponse(struct soap *soap, struct KMS_Agent__RetrieveProtectAndProcessKeyResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__Key(soap, &a->Key);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveProtectAndProcessKeyResponse(struct soap *soap, const struct KMS_Agent__RetrieveProtectAndProcessKeyResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_embedded(soap, &a->Key, SOAP_TYPE_KMS_Agent_KMS_Agent__Key);
-	soap_serialize_KMS_Agent__Key(soap, &a->Key);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveProtectAndProcessKeyResponse(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RetrieveProtectAndProcessKeyResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKeyResponse), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__Key(soap, "Key", -1, &a->Key, "KMS-Agent:Key"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveProtectAndProcessKeyResponse * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveProtectAndProcessKeyResponse(struct soap *soap, const char *tag, struct KMS_Agent__RetrieveProtectAndProcessKeyResponse *a, const char *type)
-{
-	size_t soap_flag_Key = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RetrieveProtectAndProcessKeyResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKeyResponse, sizeof(struct KMS_Agent__RetrieveProtectAndProcessKeyResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_Key && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__Key(soap, "Key", &a->Key, "KMS-Agent:Key"))
-				{	soap_flag_Key--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RetrieveProtectAndProcessKeyResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKeyResponse, 0, sizeof(struct KMS_Agent__RetrieveProtectAndProcessKeyResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_Key > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveProtectAndProcessKeyResponse(struct soap *soap, const struct KMS_Agent__RetrieveProtectAndProcessKeyResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKeyResponse);
-	if (soap_out_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, tag?tag:"KMS-Agent:RetrieveProtectAndProcessKeyResponse", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveProtectAndProcessKeyResponse * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveProtectAndProcessKeyResponse(struct soap *soap, struct KMS_Agent__RetrieveProtectAndProcessKeyResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveProtectAndProcessKeyResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKeyResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKeyResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKeyResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveProtectAndProcessKeyResponse);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RetrieveProtectAndProcessKeyResponse);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveProtectAndProcessKeyResponse[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RetrieveProtectAndProcessKeyResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RetrieveProtectAndProcessKeyResponse*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveProtectAndProcessKeyResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RetrieveProtectAndProcessKeyResponse %p -> %p\n", q, p));
-	*(struct KMS_Agent__RetrieveProtectAndProcessKeyResponse*)p = *(struct KMS_Agent__RetrieveProtectAndProcessKeyResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveDataUnitKeys2(struct soap *soap, struct KMS_Agent__RetrieveDataUnitKeys2 *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__DataUnit(soap, &a->DataUnit);
-	soap_default_xsd__int(soap, &a->PageSize);
-	soap_default_xsd__int(soap, &a->PageOffset);
-	soap_default_xsd__string(soap, &a->KeyID);
-	soap_default_xsd__string(soap, &a->AgentKWKID);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveDataUnitKeys2(struct soap *soap, const struct KMS_Agent__RetrieveDataUnitKeys2 *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_KMS_Agent__DataUnit(soap, &a->DataUnit);
-	soap_serialize_xsd__string(soap, &a->KeyID);
-	soap_serialize_xsd__string(soap, &a->AgentKWKID);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveDataUnitKeys2(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RetrieveDataUnitKeys2 *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__DataUnit(soap, "DataUnit", -1, &a->DataUnit, "KMS-Agent:DataUnit"))
-		return soap->error;
-	if (soap_out_xsd__int(soap, "PageSize", -1, &a->PageSize, "xsd:int"))
-		return soap->error;
-	if (soap_out_xsd__int(soap, "PageOffset", -1, &a->PageOffset, "xsd:int"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KeyID", -1, &a->KeyID, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "AgentKWKID", -1, &a->AgentKWKID, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitKeys2 * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveDataUnitKeys2(struct soap *soap, const char *tag, struct KMS_Agent__RetrieveDataUnitKeys2 *a, const char *type)
-{
-	size_t soap_flag_DataUnit = 1;
-	size_t soap_flag_PageSize = 1;
-	size_t soap_flag_PageOffset = 1;
-	size_t soap_flag_KeyID = 1;
-	size_t soap_flag_AgentKWKID = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RetrieveDataUnitKeys2 *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2, sizeof(struct KMS_Agent__RetrieveDataUnitKeys2), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RetrieveDataUnitKeys2(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_DataUnit && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__DataUnit(soap, "DataUnit", &a->DataUnit, "KMS-Agent:DataUnit"))
-				{	soap_flag_DataUnit--;
-					continue;
-				}
-			if (soap_flag_PageSize && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__int(soap, "PageSize", &a->PageSize, "xsd:int"))
-				{	soap_flag_PageSize--;
-					continue;
-				}
-			if (soap_flag_PageOffset && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__int(soap, "PageOffset", &a->PageOffset, "xsd:int"))
-				{	soap_flag_PageOffset--;
-					continue;
-				}
-			if (soap_flag_KeyID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KeyID", &a->KeyID, "xsd:string"))
-				{	soap_flag_KeyID--;
-					continue;
-				}
-			if (soap_flag_AgentKWKID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "AgentKWKID", &a->AgentKWKID, "xsd:string"))
-				{	soap_flag_AgentKWKID--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RetrieveDataUnitKeys2 *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2, 0, sizeof(struct KMS_Agent__RetrieveDataUnitKeys2), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_DataUnit > 0 || soap_flag_PageSize > 0 || soap_flag_PageOffset > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveDataUnitKeys2(struct soap *soap, const struct KMS_Agent__RetrieveDataUnitKeys2 *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2);
-	if (soap_out_KMS_Agent__RetrieveDataUnitKeys2(soap, tag?tag:"KMS-Agent:RetrieveDataUnitKeys2", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitKeys2 * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveDataUnitKeys2(struct soap *soap, struct KMS_Agent__RetrieveDataUnitKeys2 *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RetrieveDataUnitKeys2(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveDataUnitKeys2 * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveDataUnitKeys2(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RetrieveDataUnitKeys2(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveDataUnitKeys2);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RetrieveDataUnitKeys2);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveDataUnitKeys2[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RetrieveDataUnitKeys2);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RetrieveDataUnitKeys2*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveDataUnitKeys2(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RetrieveDataUnitKeys2 %p -> %p\n", q, p));
-	*(struct KMS_Agent__RetrieveDataUnitKeys2*)p = *(struct KMS_Agent__RetrieveDataUnitKeys2*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveDataUnitKeys2Response(struct soap *soap, struct KMS_Agent__RetrieveDataUnitKeys2Response *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__long(soap, &a->KeysRemaining);
-	soap_default_KMS_Agent__ArrayOfKeys(soap, &a->Keys);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveDataUnitKeys2Response(struct soap *soap, const struct KMS_Agent__RetrieveDataUnitKeys2Response *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_KMS_Agent__ArrayOfKeys(soap, &a->Keys);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveDataUnitKeys2Response(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RetrieveDataUnitKeys2Response *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2Response), type))
-		return soap->error;
-	if (soap_out_xsd__long(soap, "KeysRemaining", -1, &a->KeysRemaining, "xsd:long"))
-		return soap->error;
-	if (soap_out_KMS_Agent__ArrayOfKeys(soap, "Keys", -1, &a->Keys, "KMS-Agent:ArrayOfKeys"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitKeys2Response * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveDataUnitKeys2Response(struct soap *soap, const char *tag, struct KMS_Agent__RetrieveDataUnitKeys2Response *a, const char *type)
-{
-	size_t soap_flag_KeysRemaining = 1;
-	size_t soap_flag_Keys = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RetrieveDataUnitKeys2Response *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2Response, sizeof(struct KMS_Agent__RetrieveDataUnitKeys2Response), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RetrieveDataUnitKeys2Response(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_KeysRemaining && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__long(soap, "KeysRemaining", &a->KeysRemaining, "xsd:long"))
-				{	soap_flag_KeysRemaining--;
-					continue;
-				}
-			if (soap_flag_Keys && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__ArrayOfKeys(soap, "Keys", &a->Keys, "KMS-Agent:ArrayOfKeys"))
-				{	soap_flag_Keys--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RetrieveDataUnitKeys2Response *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2Response, 0, sizeof(struct KMS_Agent__RetrieveDataUnitKeys2Response), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_KeysRemaining > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveDataUnitKeys2Response(struct soap *soap, const struct KMS_Agent__RetrieveDataUnitKeys2Response *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2Response);
-	if (soap_out_KMS_Agent__RetrieveDataUnitKeys2Response(soap, tag?tag:"KMS-Agent:RetrieveDataUnitKeys2Response", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitKeys2Response * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveDataUnitKeys2Response(struct soap *soap, struct KMS_Agent__RetrieveDataUnitKeys2Response *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RetrieveDataUnitKeys2Response(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveDataUnitKeys2Response * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveDataUnitKeys2Response(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RetrieveDataUnitKeys2Response(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2Response, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveDataUnitKeys2Response);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RetrieveDataUnitKeys2Response);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveDataUnitKeys2Response[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RetrieveDataUnitKeys2Response);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RetrieveDataUnitKeys2Response*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveDataUnitKeys2Response(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RetrieveDataUnitKeys2Response %p -> %p\n", q, p));
-	*(struct KMS_Agent__RetrieveDataUnitKeys2Response*)p = *(struct KMS_Agent__RetrieveDataUnitKeys2Response*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveDataUnitKeys(struct soap *soap, struct KMS_Agent__RetrieveDataUnitKeys *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__DataUnit(soap, &a->DataUnit);
-	soap_default_xsd__int(soap, &a->PageSize);
-	soap_default_xsd__int(soap, &a->PageOffset);
-	soap_default_xsd__string(soap, &a->KeyID);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveDataUnitKeys(struct soap *soap, const struct KMS_Agent__RetrieveDataUnitKeys *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_KMS_Agent__DataUnit(soap, &a->DataUnit);
-	soap_serialize_xsd__string(soap, &a->KeyID);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveDataUnitKeys(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RetrieveDataUnitKeys *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__DataUnit(soap, "DataUnit", -1, &a->DataUnit, "KMS-Agent:DataUnit"))
-		return soap->error;
-	if (soap_out_xsd__int(soap, "PageSize", -1, &a->PageSize, "xsd:int"))
-		return soap->error;
-	if (soap_out_xsd__int(soap, "PageOffset", -1, &a->PageOffset, "xsd:int"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KeyID", -1, &a->KeyID, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitKeys * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveDataUnitKeys(struct soap *soap, const char *tag, struct KMS_Agent__RetrieveDataUnitKeys *a, const char *type)
-{
-	size_t soap_flag_DataUnit = 1;
-	size_t soap_flag_PageSize = 1;
-	size_t soap_flag_PageOffset = 1;
-	size_t soap_flag_KeyID = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RetrieveDataUnitKeys *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys, sizeof(struct KMS_Agent__RetrieveDataUnitKeys), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RetrieveDataUnitKeys(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_DataUnit && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__DataUnit(soap, "DataUnit", &a->DataUnit, "KMS-Agent:DataUnit"))
-				{	soap_flag_DataUnit--;
-					continue;
-				}
-			if (soap_flag_PageSize && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__int(soap, "PageSize", &a->PageSize, "xsd:int"))
-				{	soap_flag_PageSize--;
-					continue;
-				}
-			if (soap_flag_PageOffset && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__int(soap, "PageOffset", &a->PageOffset, "xsd:int"))
-				{	soap_flag_PageOffset--;
-					continue;
-				}
-			if (soap_flag_KeyID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KeyID", &a->KeyID, "xsd:string"))
-				{	soap_flag_KeyID--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RetrieveDataUnitKeys *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys, 0, sizeof(struct KMS_Agent__RetrieveDataUnitKeys), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_DataUnit > 0 || soap_flag_PageSize > 0 || soap_flag_PageOffset > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveDataUnitKeys(struct soap *soap, const struct KMS_Agent__RetrieveDataUnitKeys *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys);
-	if (soap_out_KMS_Agent__RetrieveDataUnitKeys(soap, tag?tag:"KMS-Agent:RetrieveDataUnitKeys", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitKeys * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveDataUnitKeys(struct soap *soap, struct KMS_Agent__RetrieveDataUnitKeys *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RetrieveDataUnitKeys(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveDataUnitKeys * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveDataUnitKeys(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RetrieveDataUnitKeys(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveDataUnitKeys);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RetrieveDataUnitKeys);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveDataUnitKeys[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RetrieveDataUnitKeys);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RetrieveDataUnitKeys*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveDataUnitKeys(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RetrieveDataUnitKeys %p -> %p\n", q, p));
-	*(struct KMS_Agent__RetrieveDataUnitKeys*)p = *(struct KMS_Agent__RetrieveDataUnitKeys*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveDataUnitKeysResponse(struct soap *soap, struct KMS_Agent__RetrieveDataUnitKeysResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__long(soap, &a->KeysRemaining);
-	soap_default_KMS_Agent__ArrayOfKeys(soap, &a->Keys);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveDataUnitKeysResponse(struct soap *soap, const struct KMS_Agent__RetrieveDataUnitKeysResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_KMS_Agent__ArrayOfKeys(soap, &a->Keys);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveDataUnitKeysResponse(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RetrieveDataUnitKeysResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeysResponse), type))
-		return soap->error;
-	if (soap_out_xsd__long(soap, "KeysRemaining", -1, &a->KeysRemaining, "xsd:long"))
-		return soap->error;
-	if (soap_out_KMS_Agent__ArrayOfKeys(soap, "Keys", -1, &a->Keys, "KMS-Agent:ArrayOfKeys"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitKeysResponse * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveDataUnitKeysResponse(struct soap *soap, const char *tag, struct KMS_Agent__RetrieveDataUnitKeysResponse *a, const char *type)
-{
-	size_t soap_flag_KeysRemaining = 1;
-	size_t soap_flag_Keys = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RetrieveDataUnitKeysResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeysResponse, sizeof(struct KMS_Agent__RetrieveDataUnitKeysResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RetrieveDataUnitKeysResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_KeysRemaining && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__long(soap, "KeysRemaining", &a->KeysRemaining, "xsd:long"))
-				{	soap_flag_KeysRemaining--;
-					continue;
-				}
-			if (soap_flag_Keys && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__ArrayOfKeys(soap, "Keys", &a->Keys, "KMS-Agent:ArrayOfKeys"))
-				{	soap_flag_Keys--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RetrieveDataUnitKeysResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeysResponse, 0, sizeof(struct KMS_Agent__RetrieveDataUnitKeysResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_KeysRemaining > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveDataUnitKeysResponse(struct soap *soap, const struct KMS_Agent__RetrieveDataUnitKeysResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeysResponse);
-	if (soap_out_KMS_Agent__RetrieveDataUnitKeysResponse(soap, tag?tag:"KMS-Agent:RetrieveDataUnitKeysResponse", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitKeysResponse * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveDataUnitKeysResponse(struct soap *soap, struct KMS_Agent__RetrieveDataUnitKeysResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RetrieveDataUnitKeysResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveDataUnitKeysResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveDataUnitKeysResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RetrieveDataUnitKeysResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeysResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveDataUnitKeysResponse);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RetrieveDataUnitKeysResponse);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveDataUnitKeysResponse[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RetrieveDataUnitKeysResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RetrieveDataUnitKeysResponse*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveDataUnitKeysResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RetrieveDataUnitKeysResponse %p -> %p\n", q, p));
-	*(struct KMS_Agent__RetrieveDataUnitKeysResponse*)p = *(struct KMS_Agent__RetrieveDataUnitKeysResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveKey2(struct soap *soap, struct KMS_Agent__RetrieveKey2 *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__string(soap, &a->KeyID);
-	soap_default_KMS_Agent__DataUnit(soap, &a->DataUnit);
-	soap_default_xsd__string(soap, &a->KeyGroupID);
-	soap_default_xsd__string(soap, &a->AgentKWKID);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveKey2(struct soap *soap, const struct KMS_Agent__RetrieveKey2 *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->KeyID);
-	soap_serialize_KMS_Agent__DataUnit(soap, &a->DataUnit);
-	soap_serialize_xsd__string(soap, &a->KeyGroupID);
-	soap_serialize_xsd__string(soap, &a->AgentKWKID);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveKey2(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RetrieveKey2 *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2), type))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KeyID", -1, &a->KeyID, "xsd:string"))
-		return soap->error;
-	if (soap_out_KMS_Agent__DataUnit(soap, "DataUnit", -1, &a->DataUnit, "KMS-Agent:DataUnit"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KeyGroupID", -1, &a->KeyGroupID, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "AgentKWKID", -1, &a->AgentKWKID, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveKey2 * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveKey2(struct soap *soap, const char *tag, struct KMS_Agent__RetrieveKey2 *a, const char *type)
-{
-	size_t soap_flag_KeyID = 1;
-	size_t soap_flag_DataUnit = 1;
-	size_t soap_flag_KeyGroupID = 1;
-	size_t soap_flag_AgentKWKID = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RetrieveKey2 *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2, sizeof(struct KMS_Agent__RetrieveKey2), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RetrieveKey2(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_KeyID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KeyID", &a->KeyID, "xsd:string"))
-				{	soap_flag_KeyID--;
-					continue;
-				}
-			if (soap_flag_DataUnit && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__DataUnit(soap, "DataUnit", &a->DataUnit, "KMS-Agent:DataUnit"))
-				{	soap_flag_DataUnit--;
-					continue;
-				}
-			if (soap_flag_KeyGroupID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KeyGroupID", &a->KeyGroupID, "xsd:string"))
-				{	soap_flag_KeyGroupID--;
-					continue;
-				}
-			if (soap_flag_AgentKWKID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "AgentKWKID", &a->AgentKWKID, "xsd:string"))
-				{	soap_flag_AgentKWKID--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RetrieveKey2 *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2, 0, sizeof(struct KMS_Agent__RetrieveKey2), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_DataUnit > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveKey2(struct soap *soap, const struct KMS_Agent__RetrieveKey2 *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2);
-	if (soap_out_KMS_Agent__RetrieveKey2(soap, tag?tag:"KMS-Agent:RetrieveKey2", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveKey2 * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveKey2(struct soap *soap, struct KMS_Agent__RetrieveKey2 *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RetrieveKey2(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveKey2 * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveKey2(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RetrieveKey2(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveKey2);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RetrieveKey2);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveKey2[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RetrieveKey2);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RetrieveKey2*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveKey2(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RetrieveKey2 %p -> %p\n", q, p));
-	*(struct KMS_Agent__RetrieveKey2*)p = *(struct KMS_Agent__RetrieveKey2*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveKey2Response(struct soap *soap, struct KMS_Agent__RetrieveKey2Response *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__Key(soap, &a->Key);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveKey2Response(struct soap *soap, const struct KMS_Agent__RetrieveKey2Response *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_embedded(soap, &a->Key, SOAP_TYPE_KMS_Agent_KMS_Agent__Key);
-	soap_serialize_KMS_Agent__Key(soap, &a->Key);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveKey2Response(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RetrieveKey2Response *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2Response), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__Key(soap, "Key", -1, &a->Key, "KMS-Agent:Key"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveKey2Response * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveKey2Response(struct soap *soap, const char *tag, struct KMS_Agent__RetrieveKey2Response *a, const char *type)
-{
-	size_t soap_flag_Key = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RetrieveKey2Response *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2Response, sizeof(struct KMS_Agent__RetrieveKey2Response), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RetrieveKey2Response(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_Key && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__Key(soap, "Key", &a->Key, "KMS-Agent:Key"))
-				{	soap_flag_Key--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RetrieveKey2Response *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2Response, 0, sizeof(struct KMS_Agent__RetrieveKey2Response), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_Key > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveKey2Response(struct soap *soap, const struct KMS_Agent__RetrieveKey2Response *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2Response);
-	if (soap_out_KMS_Agent__RetrieveKey2Response(soap, tag?tag:"KMS-Agent:RetrieveKey2Response", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveKey2Response * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveKey2Response(struct soap *soap, struct KMS_Agent__RetrieveKey2Response *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RetrieveKey2Response(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveKey2Response * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveKey2Response(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RetrieveKey2Response(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2Response, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveKey2Response);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RetrieveKey2Response);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveKey2Response[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RetrieveKey2Response);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RetrieveKey2Response*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveKey2Response(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RetrieveKey2Response %p -> %p\n", q, p));
-	*(struct KMS_Agent__RetrieveKey2Response*)p = *(struct KMS_Agent__RetrieveKey2Response*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveKey(struct soap *soap, struct KMS_Agent__RetrieveKey *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__string(soap, &a->KeyID);
-	soap_default_KMS_Agent__DataUnit(soap, &a->DataUnit);
-	soap_default_xsd__string(soap, &a->KeyGroupID);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveKey(struct soap *soap, const struct KMS_Agent__RetrieveKey *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->KeyID);
-	soap_serialize_KMS_Agent__DataUnit(soap, &a->DataUnit);
-	soap_serialize_xsd__string(soap, &a->KeyGroupID);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveKey(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RetrieveKey *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey), type))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KeyID", -1, &a->KeyID, "xsd:string"))
-		return soap->error;
-	if (soap_out_KMS_Agent__DataUnit(soap, "DataUnit", -1, &a->DataUnit, "KMS-Agent:DataUnit"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KeyGroupID", -1, &a->KeyGroupID, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveKey * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveKey(struct soap *soap, const char *tag, struct KMS_Agent__RetrieveKey *a, const char *type)
-{
-	size_t soap_flag_KeyID = 1;
-	size_t soap_flag_DataUnit = 1;
-	size_t soap_flag_KeyGroupID = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RetrieveKey *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey, sizeof(struct KMS_Agent__RetrieveKey), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RetrieveKey(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_KeyID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KeyID", &a->KeyID, "xsd:string"))
-				{	soap_flag_KeyID--;
-					continue;
-				}
-			if (soap_flag_DataUnit && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__DataUnit(soap, "DataUnit", &a->DataUnit, "KMS-Agent:DataUnit"))
-				{	soap_flag_DataUnit--;
-					continue;
-				}
-			if (soap_flag_KeyGroupID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KeyGroupID", &a->KeyGroupID, "xsd:string"))
-				{	soap_flag_KeyGroupID--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RetrieveKey *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey, 0, sizeof(struct KMS_Agent__RetrieveKey), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_DataUnit > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveKey(struct soap *soap, const struct KMS_Agent__RetrieveKey *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey);
-	if (soap_out_KMS_Agent__RetrieveKey(soap, tag?tag:"KMS-Agent:RetrieveKey", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveKey * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveKey(struct soap *soap, struct KMS_Agent__RetrieveKey *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RetrieveKey(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveKey * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveKey(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RetrieveKey(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveKey);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RetrieveKey);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveKey[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RetrieveKey);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RetrieveKey*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveKey(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RetrieveKey %p -> %p\n", q, p));
-	*(struct KMS_Agent__RetrieveKey*)p = *(struct KMS_Agent__RetrieveKey*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveKeyResponse(struct soap *soap, struct KMS_Agent__RetrieveKeyResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__Key(soap, &a->Key);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveKeyResponse(struct soap *soap, const struct KMS_Agent__RetrieveKeyResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_embedded(soap, &a->Key, SOAP_TYPE_KMS_Agent_KMS_Agent__Key);
-	soap_serialize_KMS_Agent__Key(soap, &a->Key);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveKeyResponse(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RetrieveKeyResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKeyResponse), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__Key(soap, "Key", -1, &a->Key, "KMS-Agent:Key"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveKeyResponse * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveKeyResponse(struct soap *soap, const char *tag, struct KMS_Agent__RetrieveKeyResponse *a, const char *type)
-{
-	size_t soap_flag_Key = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RetrieveKeyResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKeyResponse, sizeof(struct KMS_Agent__RetrieveKeyResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RetrieveKeyResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_Key && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__Key(soap, "Key", &a->Key, "KMS-Agent:Key"))
-				{	soap_flag_Key--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RetrieveKeyResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKeyResponse, 0, sizeof(struct KMS_Agent__RetrieveKeyResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_Key > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveKeyResponse(struct soap *soap, const struct KMS_Agent__RetrieveKeyResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKeyResponse);
-	if (soap_out_KMS_Agent__RetrieveKeyResponse(soap, tag?tag:"KMS-Agent:RetrieveKeyResponse", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveKeyResponse * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveKeyResponse(struct soap *soap, struct KMS_Agent__RetrieveKeyResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RetrieveKeyResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveKeyResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveKeyResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RetrieveKeyResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKeyResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveKeyResponse);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RetrieveKeyResponse);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveKeyResponse[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RetrieveKeyResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RetrieveKeyResponse*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveKeyResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RetrieveKeyResponse %p -> %p\n", q, p));
-	*(struct KMS_Agent__RetrieveKeyResponse*)p = *(struct KMS_Agent__RetrieveKeyResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__CreateKey2(struct soap *soap, struct KMS_Agent__CreateKey2 *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__DataUnit(soap, &a->DataUnit);
-	soap_default_xsd__string(soap, &a->KeyGroupID);
-	soap_default_xsd__string(soap, &a->AgentKWKID);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__CreateKey2(struct soap *soap, const struct KMS_Agent__CreateKey2 *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_KMS_Agent__DataUnit(soap, &a->DataUnit);
-	soap_serialize_xsd__string(soap, &a->KeyGroupID);
-	soap_serialize_xsd__string(soap, &a->AgentKWKID);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__CreateKey2(struct soap *soap, const char *tag, int id, const struct KMS_Agent__CreateKey2 *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__DataUnit(soap, "DataUnit", -1, &a->DataUnit, "KMS-Agent:DataUnit"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KeyGroupID", -1, &a->KeyGroupID, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "AgentKWKID", -1, &a->AgentKWKID, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__CreateKey2 * SOAP_FMAC4 soap_in_KMS_Agent__CreateKey2(struct soap *soap, const char *tag, struct KMS_Agent__CreateKey2 *a, const char *type)
-{
-	size_t soap_flag_DataUnit = 1;
-	size_t soap_flag_KeyGroupID = 1;
-	size_t soap_flag_AgentKWKID = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__CreateKey2 *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2, sizeof(struct KMS_Agent__CreateKey2), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__CreateKey2(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_DataUnit && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__DataUnit(soap, "DataUnit", &a->DataUnit, "KMS-Agent:DataUnit"))
-				{	soap_flag_DataUnit--;
-					continue;
-				}
-			if (soap_flag_KeyGroupID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KeyGroupID", &a->KeyGroupID, "xsd:string"))
-				{	soap_flag_KeyGroupID--;
-					continue;
-				}
-			if (soap_flag_AgentKWKID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "AgentKWKID", &a->AgentKWKID, "xsd:string"))
-				{	soap_flag_AgentKWKID--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__CreateKey2 *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2, 0, sizeof(struct KMS_Agent__CreateKey2), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_DataUnit > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__CreateKey2(struct soap *soap, const struct KMS_Agent__CreateKey2 *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2);
-	if (soap_out_KMS_Agent__CreateKey2(soap, tag?tag:"KMS-Agent:CreateKey2", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__CreateKey2 * SOAP_FMAC4 soap_get_KMS_Agent__CreateKey2(struct soap *soap, struct KMS_Agent__CreateKey2 *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__CreateKey2(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__CreateKey2 * SOAP_FMAC2 soap_instantiate_KMS_Agent__CreateKey2(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__CreateKey2(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__CreateKey2);
-		if (size)
-			*size = sizeof(struct KMS_Agent__CreateKey2);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__CreateKey2[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__CreateKey2);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__CreateKey2*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__CreateKey2(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__CreateKey2 %p -> %p\n", q, p));
-	*(struct KMS_Agent__CreateKey2*)p = *(struct KMS_Agent__CreateKey2*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__CreateKey2Response(struct soap *soap, struct KMS_Agent__CreateKey2Response *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__Key(soap, &a->Key);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__CreateKey2Response(struct soap *soap, const struct KMS_Agent__CreateKey2Response *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_embedded(soap, &a->Key, SOAP_TYPE_KMS_Agent_KMS_Agent__Key);
-	soap_serialize_KMS_Agent__Key(soap, &a->Key);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__CreateKey2Response(struct soap *soap, const char *tag, int id, const struct KMS_Agent__CreateKey2Response *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2Response), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__Key(soap, "Key", -1, &a->Key, "KMS-Agent:Key"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__CreateKey2Response * SOAP_FMAC4 soap_in_KMS_Agent__CreateKey2Response(struct soap *soap, const char *tag, struct KMS_Agent__CreateKey2Response *a, const char *type)
-{
-	size_t soap_flag_Key = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__CreateKey2Response *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2Response, sizeof(struct KMS_Agent__CreateKey2Response), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__CreateKey2Response(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_Key && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__Key(soap, "Key", &a->Key, "KMS-Agent:Key"))
-				{	soap_flag_Key--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__CreateKey2Response *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2Response, 0, sizeof(struct KMS_Agent__CreateKey2Response), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_Key > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__CreateKey2Response(struct soap *soap, const struct KMS_Agent__CreateKey2Response *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2Response);
-	if (soap_out_KMS_Agent__CreateKey2Response(soap, tag?tag:"KMS-Agent:CreateKey2Response", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__CreateKey2Response * SOAP_FMAC4 soap_get_KMS_Agent__CreateKey2Response(struct soap *soap, struct KMS_Agent__CreateKey2Response *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__CreateKey2Response(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__CreateKey2Response * SOAP_FMAC2 soap_instantiate_KMS_Agent__CreateKey2Response(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__CreateKey2Response(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2Response, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__CreateKey2Response);
-		if (size)
-			*size = sizeof(struct KMS_Agent__CreateKey2Response);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__CreateKey2Response[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__CreateKey2Response);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__CreateKey2Response*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__CreateKey2Response(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__CreateKey2Response %p -> %p\n", q, p));
-	*(struct KMS_Agent__CreateKey2Response*)p = *(struct KMS_Agent__CreateKey2Response*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__CreateKey(struct soap *soap, struct KMS_Agent__CreateKey *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__DataUnit(soap, &a->DataUnit);
-	soap_default_xsd__string(soap, &a->KeyGroupID);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__CreateKey(struct soap *soap, const struct KMS_Agent__CreateKey *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_KMS_Agent__DataUnit(soap, &a->DataUnit);
-	soap_serialize_xsd__string(soap, &a->KeyGroupID);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__CreateKey(struct soap *soap, const char *tag, int id, const struct KMS_Agent__CreateKey *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__DataUnit(soap, "DataUnit", -1, &a->DataUnit, "KMS-Agent:DataUnit"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KeyGroupID", -1, &a->KeyGroupID, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__CreateKey * SOAP_FMAC4 soap_in_KMS_Agent__CreateKey(struct soap *soap, const char *tag, struct KMS_Agent__CreateKey *a, const char *type)
-{
-	size_t soap_flag_DataUnit = 1;
-	size_t soap_flag_KeyGroupID = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__CreateKey *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey, sizeof(struct KMS_Agent__CreateKey), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__CreateKey(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_DataUnit && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__DataUnit(soap, "DataUnit", &a->DataUnit, "KMS-Agent:DataUnit"))
-				{	soap_flag_DataUnit--;
-					continue;
-				}
-			if (soap_flag_KeyGroupID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KeyGroupID", &a->KeyGroupID, "xsd:string"))
-				{	soap_flag_KeyGroupID--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__CreateKey *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey, 0, sizeof(struct KMS_Agent__CreateKey), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_DataUnit > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__CreateKey(struct soap *soap, const struct KMS_Agent__CreateKey *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey);
-	if (soap_out_KMS_Agent__CreateKey(soap, tag?tag:"KMS-Agent:CreateKey", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__CreateKey * SOAP_FMAC4 soap_get_KMS_Agent__CreateKey(struct soap *soap, struct KMS_Agent__CreateKey *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__CreateKey(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__CreateKey * SOAP_FMAC2 soap_instantiate_KMS_Agent__CreateKey(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__CreateKey(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__CreateKey);
-		if (size)
-			*size = sizeof(struct KMS_Agent__CreateKey);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__CreateKey[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__CreateKey);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__CreateKey*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__CreateKey(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__CreateKey %p -> %p\n", q, p));
-	*(struct KMS_Agent__CreateKey*)p = *(struct KMS_Agent__CreateKey*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__CreateKeyResponse(struct soap *soap, struct KMS_Agent__CreateKeyResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__Key(soap, &a->Key);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__CreateKeyResponse(struct soap *soap, const struct KMS_Agent__CreateKeyResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_embedded(soap, &a->Key, SOAP_TYPE_KMS_Agent_KMS_Agent__Key);
-	soap_serialize_KMS_Agent__Key(soap, &a->Key);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__CreateKeyResponse(struct soap *soap, const char *tag, int id, const struct KMS_Agent__CreateKeyResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKeyResponse), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__Key(soap, "Key", -1, &a->Key, "KMS-Agent:Key"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__CreateKeyResponse * SOAP_FMAC4 soap_in_KMS_Agent__CreateKeyResponse(struct soap *soap, const char *tag, struct KMS_Agent__CreateKeyResponse *a, const char *type)
-{
-	size_t soap_flag_Key = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__CreateKeyResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKeyResponse, sizeof(struct KMS_Agent__CreateKeyResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__CreateKeyResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_Key && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__Key(soap, "Key", &a->Key, "KMS-Agent:Key"))
-				{	soap_flag_Key--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__CreateKeyResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKeyResponse, 0, sizeof(struct KMS_Agent__CreateKeyResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_Key > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__CreateKeyResponse(struct soap *soap, const struct KMS_Agent__CreateKeyResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKeyResponse);
-	if (soap_out_KMS_Agent__CreateKeyResponse(soap, tag?tag:"KMS-Agent:CreateKeyResponse", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__CreateKeyResponse * SOAP_FMAC4 soap_get_KMS_Agent__CreateKeyResponse(struct soap *soap, struct KMS_Agent__CreateKeyResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__CreateKeyResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__CreateKeyResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__CreateKeyResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__CreateKeyResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKeyResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__CreateKeyResponse);
-		if (size)
-			*size = sizeof(struct KMS_Agent__CreateKeyResponse);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__CreateKeyResponse[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__CreateKeyResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__CreateKeyResponse*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__CreateKeyResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__CreateKeyResponse %p -> %p\n", q, p));
-	*(struct KMS_Agent__CreateKeyResponse*)p = *(struct KMS_Agent__CreateKeyResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__DisassociateDataUnitKeys(struct soap *soap, struct KMS_Agent__DisassociateDataUnitKeys *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__DataUnit(soap, &a->DataUnit);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__DisassociateDataUnitKeys(struct soap *soap, const struct KMS_Agent__DisassociateDataUnitKeys *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_KMS_Agent__DataUnit(soap, &a->DataUnit);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__DisassociateDataUnitKeys(struct soap *soap, const char *tag, int id, const struct KMS_Agent__DisassociateDataUnitKeys *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeys), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__DataUnit(soap, "DataUnit", -1, &a->DataUnit, "KMS-Agent:DataUnit"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__DisassociateDataUnitKeys * SOAP_FMAC4 soap_in_KMS_Agent__DisassociateDataUnitKeys(struct soap *soap, const char *tag, struct KMS_Agent__DisassociateDataUnitKeys *a, const char *type)
-{
-	size_t soap_flag_DataUnit = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__DisassociateDataUnitKeys *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeys, sizeof(struct KMS_Agent__DisassociateDataUnitKeys), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__DisassociateDataUnitKeys(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_DataUnit && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__DataUnit(soap, "DataUnit", &a->DataUnit, "KMS-Agent:DataUnit"))
-				{	soap_flag_DataUnit--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__DisassociateDataUnitKeys *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeys, 0, sizeof(struct KMS_Agent__DisassociateDataUnitKeys), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_DataUnit > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__DisassociateDataUnitKeys(struct soap *soap, const struct KMS_Agent__DisassociateDataUnitKeys *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeys);
-	if (soap_out_KMS_Agent__DisassociateDataUnitKeys(soap, tag?tag:"KMS-Agent:DisassociateDataUnitKeys", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__DisassociateDataUnitKeys * SOAP_FMAC4 soap_get_KMS_Agent__DisassociateDataUnitKeys(struct soap *soap, struct KMS_Agent__DisassociateDataUnitKeys *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__DisassociateDataUnitKeys(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__DisassociateDataUnitKeys * SOAP_FMAC2 soap_instantiate_KMS_Agent__DisassociateDataUnitKeys(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__DisassociateDataUnitKeys(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeys, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__DisassociateDataUnitKeys);
-		if (size)
-			*size = sizeof(struct KMS_Agent__DisassociateDataUnitKeys);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__DisassociateDataUnitKeys[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__DisassociateDataUnitKeys);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__DisassociateDataUnitKeys*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__DisassociateDataUnitKeys(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__DisassociateDataUnitKeys %p -> %p\n", q, p));
-	*(struct KMS_Agent__DisassociateDataUnitKeys*)p = *(struct KMS_Agent__DisassociateDataUnitKeys*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__DisassociateDataUnitKeysResponse(struct soap *soap, struct KMS_Agent__DisassociateDataUnitKeysResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	/* transient _ skipped */
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__DisassociateDataUnitKeysResponse(struct soap *soap, const struct KMS_Agent__DisassociateDataUnitKeysResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	/* transient _ skipped */
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__DisassociateDataUnitKeysResponse(struct soap *soap, const char *tag, int id, const struct KMS_Agent__DisassociateDataUnitKeysResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeysResponse), type))
-		return soap->error;
-	/* transient _ skipped */
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__DisassociateDataUnitKeysResponse * SOAP_FMAC4 soap_in_KMS_Agent__DisassociateDataUnitKeysResponse(struct soap *soap, const char *tag, struct KMS_Agent__DisassociateDataUnitKeysResponse *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__DisassociateDataUnitKeysResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeysResponse, sizeof(struct KMS_Agent__DisassociateDataUnitKeysResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__DisassociateDataUnitKeysResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-		/* transient _ skipped */
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__DisassociateDataUnitKeysResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeysResponse, 0, sizeof(struct KMS_Agent__DisassociateDataUnitKeysResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__DisassociateDataUnitKeysResponse(struct soap *soap, const struct KMS_Agent__DisassociateDataUnitKeysResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeysResponse);
-	if (soap_out_KMS_Agent__DisassociateDataUnitKeysResponse(soap, tag?tag:"KMS-Agent:DisassociateDataUnitKeysResponse", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__DisassociateDataUnitKeysResponse * SOAP_FMAC4 soap_get_KMS_Agent__DisassociateDataUnitKeysResponse(struct soap *soap, struct KMS_Agent__DisassociateDataUnitKeysResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__DisassociateDataUnitKeysResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__DisassociateDataUnitKeysResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__DisassociateDataUnitKeysResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__DisassociateDataUnitKeysResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeysResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__DisassociateDataUnitKeysResponse);
-		if (size)
-			*size = sizeof(struct KMS_Agent__DisassociateDataUnitKeysResponse);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__DisassociateDataUnitKeysResponse[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__DisassociateDataUnitKeysResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__DisassociateDataUnitKeysResponse*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__DisassociateDataUnitKeysResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__DisassociateDataUnitKeysResponse %p -> %p\n", q, p));
-	*(struct KMS_Agent__DisassociateDataUnitKeysResponse*)p = *(struct KMS_Agent__DisassociateDataUnitKeysResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap *soap, struct KMS_Agent__RetrieveDataUnitByExternalUniqueID *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__string(soap, &a->ExternalUniqueID);
-	soap_default_xsd__string(soap, &a->ExternalTag);
-	soap_default_xsd__string(soap, &a->Description);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap *soap, const struct KMS_Agent__RetrieveDataUnitByExternalUniqueID *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->ExternalUniqueID);
-	soap_serialize_xsd__string(soap, &a->ExternalTag);
-	soap_serialize_xsd__string(soap, &a->Description);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RetrieveDataUnitByExternalUniqueID *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueID), type))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "ExternalUniqueID", -1, &a->ExternalUniqueID, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "ExternalTag", -1, &a->ExternalTag, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "Description", -1, &a->Description, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitByExternalUniqueID * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap *soap, const char *tag, struct KMS_Agent__RetrieveDataUnitByExternalUniqueID *a, const char *type)
-{
-	size_t soap_flag_ExternalUniqueID = 1;
-	size_t soap_flag_ExternalTag = 1;
-	size_t soap_flag_Description = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RetrieveDataUnitByExternalUniqueID *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueID, sizeof(struct KMS_Agent__RetrieveDataUnitByExternalUniqueID), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_ExternalUniqueID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "ExternalUniqueID", &a->ExternalUniqueID, "xsd:string"))
-				{	soap_flag_ExternalUniqueID--;
-					continue;
-				}
-			if (soap_flag_ExternalTag && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "ExternalTag", &a->ExternalTag, "xsd:string"))
-				{	soap_flag_ExternalTag--;
-					continue;
-				}
-			if (soap_flag_Description && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "Description", &a->Description, "xsd:string"))
-				{	soap_flag_Description--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RetrieveDataUnitByExternalUniqueID *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueID, 0, sizeof(struct KMS_Agent__RetrieveDataUnitByExternalUniqueID), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap *soap, const struct KMS_Agent__RetrieveDataUnitByExternalUniqueID *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueID);
-	if (soap_out_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, tag?tag:"KMS-Agent:RetrieveDataUnitByExternalUniqueID", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitByExternalUniqueID * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap *soap, struct KMS_Agent__RetrieveDataUnitByExternalUniqueID *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveDataUnitByExternalUniqueID * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RetrieveDataUnitByExternalUniqueID(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueID, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveDataUnitByExternalUniqueID);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RetrieveDataUnitByExternalUniqueID);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveDataUnitByExternalUniqueID[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RetrieveDataUnitByExternalUniqueID);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RetrieveDataUnitByExternalUniqueID*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RetrieveDataUnitByExternalUniqueID %p -> %p\n", q, p));
-	*(struct KMS_Agent__RetrieveDataUnitByExternalUniqueID*)p = *(struct KMS_Agent__RetrieveDataUnitByExternalUniqueID*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(struct soap *soap, struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__DataUnit(soap, &a->DataUnit);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(struct soap *soap, const struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_KMS_Agent__DataUnit(soap, &a->DataUnit);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__DataUnit(soap, "DataUnit", -1, &a->DataUnit, "KMS-Agent:DataUnit"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(struct soap *soap, const char *tag, struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse *a, const char *type)
-{
-	size_t soap_flag_DataUnit = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse, sizeof(struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_DataUnit && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__DataUnit(soap, "DataUnit", &a->DataUnit, "KMS-Agent:DataUnit"))
-				{	soap_flag_DataUnit--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse, 0, sizeof(struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_DataUnit > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(struct soap *soap, const struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse);
-	if (soap_out_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, tag?tag:"KMS-Agent:RetrieveDataUnitByExternalUniqueIDResponse", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(struct soap *soap, struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse %p -> %p\n", q, p));
-	*(struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse*)p = *(struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveDataUnit(struct soap *soap, struct KMS_Agent__RetrieveDataUnit *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__string(soap, &a->DataUnitID);
-	soap_default_xsd__string(soap, &a->ExternalUniqueID);
-	soap_default_xsd__string(soap, &a->ExternalTag);
-	soap_default_xsd__string(soap, &a->Description);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveDataUnit(struct soap *soap, const struct KMS_Agent__RetrieveDataUnit *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->DataUnitID);
-	soap_serialize_xsd__string(soap, &a->ExternalUniqueID);
-	soap_serialize_xsd__string(soap, &a->ExternalTag);
-	soap_serialize_xsd__string(soap, &a->Description);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveDataUnit(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RetrieveDataUnit *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnit), type))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "DataUnitID", -1, &a->DataUnitID, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "ExternalUniqueID", -1, &a->ExternalUniqueID, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "ExternalTag", -1, &a->ExternalTag, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "Description", -1, &a->Description, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnit * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveDataUnit(struct soap *soap, const char *tag, struct KMS_Agent__RetrieveDataUnit *a, const char *type)
-{
-	size_t soap_flag_DataUnitID = 1;
-	size_t soap_flag_ExternalUniqueID = 1;
-	size_t soap_flag_ExternalTag = 1;
-	size_t soap_flag_Description = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RetrieveDataUnit *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnit, sizeof(struct KMS_Agent__RetrieveDataUnit), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RetrieveDataUnit(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_DataUnitID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "DataUnitID", &a->DataUnitID, "xsd:string"))
-				{	soap_flag_DataUnitID--;
-					continue;
-				}
-			if (soap_flag_ExternalUniqueID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "ExternalUniqueID", &a->ExternalUniqueID, "xsd:string"))
-				{	soap_flag_ExternalUniqueID--;
-					continue;
-				}
-			if (soap_flag_ExternalTag && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "ExternalTag", &a->ExternalTag, "xsd:string"))
-				{	soap_flag_ExternalTag--;
-					continue;
-				}
-			if (soap_flag_Description && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "Description", &a->Description, "xsd:string"))
-				{	soap_flag_Description--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RetrieveDataUnit *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnit, 0, sizeof(struct KMS_Agent__RetrieveDataUnit), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveDataUnit(struct soap *soap, const struct KMS_Agent__RetrieveDataUnit *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnit);
-	if (soap_out_KMS_Agent__RetrieveDataUnit(soap, tag?tag:"KMS-Agent:RetrieveDataUnit", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnit * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveDataUnit(struct soap *soap, struct KMS_Agent__RetrieveDataUnit *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RetrieveDataUnit(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveDataUnit * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveDataUnit(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RetrieveDataUnit(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnit, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveDataUnit);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RetrieveDataUnit);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveDataUnit[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RetrieveDataUnit);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RetrieveDataUnit*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveDataUnit(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RetrieveDataUnit %p -> %p\n", q, p));
-	*(struct KMS_Agent__RetrieveDataUnit*)p = *(struct KMS_Agent__RetrieveDataUnit*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveDataUnitResponse(struct soap *soap, struct KMS_Agent__RetrieveDataUnitResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__DataUnit(soap, &a->DataUnit);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveDataUnitResponse(struct soap *soap, const struct KMS_Agent__RetrieveDataUnitResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_KMS_Agent__DataUnit(soap, &a->DataUnit);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveDataUnitResponse(struct soap *soap, const char *tag, int id, const struct KMS_Agent__RetrieveDataUnitResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitResponse), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__DataUnit(soap, "DataUnit", -1, &a->DataUnit, "KMS-Agent:DataUnit"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitResponse * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveDataUnitResponse(struct soap *soap, const char *tag, struct KMS_Agent__RetrieveDataUnitResponse *a, const char *type)
-{
-	size_t soap_flag_DataUnit = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__RetrieveDataUnitResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitResponse, sizeof(struct KMS_Agent__RetrieveDataUnitResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__RetrieveDataUnitResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_DataUnit && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__DataUnit(soap, "DataUnit", &a->DataUnit, "KMS-Agent:DataUnit"))
-				{	soap_flag_DataUnit--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__RetrieveDataUnitResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitResponse, 0, sizeof(struct KMS_Agent__RetrieveDataUnitResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_DataUnit > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveDataUnitResponse(struct soap *soap, const struct KMS_Agent__RetrieveDataUnitResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitResponse);
-	if (soap_out_KMS_Agent__RetrieveDataUnitResponse(soap, tag?tag:"KMS-Agent:RetrieveDataUnitResponse", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitResponse * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveDataUnitResponse(struct soap *soap, struct KMS_Agent__RetrieveDataUnitResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__RetrieveDataUnitResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveDataUnitResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveDataUnitResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__RetrieveDataUnitResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveDataUnitResponse);
-		if (size)
-			*size = sizeof(struct KMS_Agent__RetrieveDataUnitResponse);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__RetrieveDataUnitResponse[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__RetrieveDataUnitResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__RetrieveDataUnitResponse*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveDataUnitResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__RetrieveDataUnitResponse %p -> %p\n", q, p));
-	*(struct KMS_Agent__RetrieveDataUnitResponse*)p = *(struct KMS_Agent__RetrieveDataUnitResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__CreateDataUnit(struct soap *soap, struct KMS_Agent__CreateDataUnit *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__string(soap, &a->ExternalUniqueID);
-	soap_default_xsd__string(soap, &a->ExternalTag);
-	soap_default_xsd__string(soap, &a->Description);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__CreateDataUnit(struct soap *soap, const struct KMS_Agent__CreateDataUnit *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->ExternalUniqueID);
-	soap_serialize_xsd__string(soap, &a->ExternalTag);
-	soap_serialize_xsd__string(soap, &a->Description);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__CreateDataUnit(struct soap *soap, const char *tag, int id, const struct KMS_Agent__CreateDataUnit *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnit), type))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "ExternalUniqueID", -1, &a->ExternalUniqueID, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "ExternalTag", -1, &a->ExternalTag, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "Description", -1, &a->Description, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__CreateDataUnit * SOAP_FMAC4 soap_in_KMS_Agent__CreateDataUnit(struct soap *soap, const char *tag, struct KMS_Agent__CreateDataUnit *a, const char *type)
-{
-	size_t soap_flag_ExternalUniqueID = 1;
-	size_t soap_flag_ExternalTag = 1;
-	size_t soap_flag_Description = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__CreateDataUnit *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnit, sizeof(struct KMS_Agent__CreateDataUnit), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__CreateDataUnit(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_ExternalUniqueID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "ExternalUniqueID", &a->ExternalUniqueID, "xsd:string"))
-				{	soap_flag_ExternalUniqueID--;
-					continue;
-				}
-			if (soap_flag_ExternalTag && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "ExternalTag", &a->ExternalTag, "xsd:string"))
-				{	soap_flag_ExternalTag--;
-					continue;
-				}
-			if (soap_flag_Description && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "Description", &a->Description, "xsd:string"))
-				{	soap_flag_Description--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__CreateDataUnit *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnit, 0, sizeof(struct KMS_Agent__CreateDataUnit), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__CreateDataUnit(struct soap *soap, const struct KMS_Agent__CreateDataUnit *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnit);
-	if (soap_out_KMS_Agent__CreateDataUnit(soap, tag?tag:"KMS-Agent:CreateDataUnit", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__CreateDataUnit * SOAP_FMAC4 soap_get_KMS_Agent__CreateDataUnit(struct soap *soap, struct KMS_Agent__CreateDataUnit *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__CreateDataUnit(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__CreateDataUnit * SOAP_FMAC2 soap_instantiate_KMS_Agent__CreateDataUnit(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__CreateDataUnit(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnit, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__CreateDataUnit);
-		if (size)
-			*size = sizeof(struct KMS_Agent__CreateDataUnit);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__CreateDataUnit[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__CreateDataUnit);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__CreateDataUnit*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__CreateDataUnit(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__CreateDataUnit %p -> %p\n", q, p));
-	*(struct KMS_Agent__CreateDataUnit*)p = *(struct KMS_Agent__CreateDataUnit*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__CreateDataUnitResponse(struct soap *soap, struct KMS_Agent__CreateDataUnitResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__DataUnit(soap, &a->DataUnit);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__CreateDataUnitResponse(struct soap *soap, const struct KMS_Agent__CreateDataUnitResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_KMS_Agent__DataUnit(soap, &a->DataUnit);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__CreateDataUnitResponse(struct soap *soap, const char *tag, int id, const struct KMS_Agent__CreateDataUnitResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnitResponse), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__DataUnit(soap, "DataUnit", -1, &a->DataUnit, "KMS-Agent:DataUnit"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__CreateDataUnitResponse * SOAP_FMAC4 soap_in_KMS_Agent__CreateDataUnitResponse(struct soap *soap, const char *tag, struct KMS_Agent__CreateDataUnitResponse *a, const char *type)
-{
-	size_t soap_flag_DataUnit = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__CreateDataUnitResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnitResponse, sizeof(struct KMS_Agent__CreateDataUnitResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__CreateDataUnitResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_DataUnit && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__DataUnit(soap, "DataUnit", &a->DataUnit, "KMS-Agent:DataUnit"))
-				{	soap_flag_DataUnit--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__CreateDataUnitResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnitResponse, 0, sizeof(struct KMS_Agent__CreateDataUnitResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_DataUnit > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__CreateDataUnitResponse(struct soap *soap, const struct KMS_Agent__CreateDataUnitResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnitResponse);
-	if (soap_out_KMS_Agent__CreateDataUnitResponse(soap, tag?tag:"KMS-Agent:CreateDataUnitResponse", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__CreateDataUnitResponse * SOAP_FMAC4 soap_get_KMS_Agent__CreateDataUnitResponse(struct soap *soap, struct KMS_Agent__CreateDataUnitResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__CreateDataUnitResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__CreateDataUnitResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__CreateDataUnitResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__CreateDataUnitResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnitResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__CreateDataUnitResponse);
-		if (size)
-			*size = sizeof(struct KMS_Agent__CreateDataUnitResponse);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__CreateDataUnitResponse[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__CreateDataUnitResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__CreateDataUnitResponse*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__CreateDataUnitResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__CreateDataUnitResponse %p -> %p\n", q, p));
-	*(struct KMS_Agent__CreateDataUnitResponse*)p = *(struct KMS_Agent__CreateDataUnitResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__ListKeyGroups(struct soap *soap, struct KMS_Agent__ListKeyGroups *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__QueryParameters(soap, &a->QueryParameters);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__ListKeyGroups(struct soap *soap, const struct KMS_Agent__ListKeyGroups *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_KMS_Agent__QueryParameters(soap, &a->QueryParameters);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__ListKeyGroups(struct soap *soap, const char *tag, int id, const struct KMS_Agent__ListKeyGroups *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroups), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__QueryParameters(soap, "QueryParameters", -1, &a->QueryParameters, "KMS-Agent:QueryParameters"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__ListKeyGroups * SOAP_FMAC4 soap_in_KMS_Agent__ListKeyGroups(struct soap *soap, const char *tag, struct KMS_Agent__ListKeyGroups *a, const char *type)
-{
-	size_t soap_flag_QueryParameters = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__ListKeyGroups *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroups, sizeof(struct KMS_Agent__ListKeyGroups), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__ListKeyGroups(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_QueryParameters && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__QueryParameters(soap, "QueryParameters", &a->QueryParameters, "KMS-Agent:QueryParameters"))
-				{	soap_flag_QueryParameters--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__ListKeyGroups *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroups, 0, sizeof(struct KMS_Agent__ListKeyGroups), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_QueryParameters > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__ListKeyGroups(struct soap *soap, const struct KMS_Agent__ListKeyGroups *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroups);
-	if (soap_out_KMS_Agent__ListKeyGroups(soap, tag?tag:"KMS-Agent:ListKeyGroups", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__ListKeyGroups * SOAP_FMAC4 soap_get_KMS_Agent__ListKeyGroups(struct soap *soap, struct KMS_Agent__ListKeyGroups *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__ListKeyGroups(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__ListKeyGroups * SOAP_FMAC2 soap_instantiate_KMS_Agent__ListKeyGroups(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__ListKeyGroups(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroups, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__ListKeyGroups);
-		if (size)
-			*size = sizeof(struct KMS_Agent__ListKeyGroups);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__ListKeyGroups[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__ListKeyGroups);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__ListKeyGroups*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__ListKeyGroups(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__ListKeyGroups %p -> %p\n", q, p));
-	*(struct KMS_Agent__ListKeyGroups*)p = *(struct KMS_Agent__ListKeyGroups*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__ListKeyGroupsResponse(struct soap *soap, struct KMS_Agent__ListKeyGroupsResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_KMS_Agent__ArrayOfKeyGroups(soap, &a->KeyGroups);
-	soap_default_xsd__boolean(soap, &a->LastPage);
-	soap_default_KMS_Agent__QueryParameters(soap, &a->NextPageQueryParameters);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__ListKeyGroupsResponse(struct soap *soap, const struct KMS_Agent__ListKeyGroupsResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_KMS_Agent__ArrayOfKeyGroups(soap, &a->KeyGroups);
-	soap_serialize_KMS_Agent__QueryParameters(soap, &a->NextPageQueryParameters);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__ListKeyGroupsResponse(struct soap *soap, const char *tag, int id, const struct KMS_Agent__ListKeyGroupsResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroupsResponse), type))
-		return soap->error;
-	if (soap_out_KMS_Agent__ArrayOfKeyGroups(soap, "KeyGroups", -1, &a->KeyGroups, "KMS-Agent:ArrayOfKeyGroups"))
-		return soap->error;
-	if (soap_out_xsd__boolean(soap, "LastPage", -1, &a->LastPage, "xsd:boolean"))
-		return soap->error;
-	if (soap_out_KMS_Agent__QueryParameters(soap, "NextPageQueryParameters", -1, &a->NextPageQueryParameters, "KMS-Agent:QueryParameters"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__ListKeyGroupsResponse * SOAP_FMAC4 soap_in_KMS_Agent__ListKeyGroupsResponse(struct soap *soap, const char *tag, struct KMS_Agent__ListKeyGroupsResponse *a, const char *type)
-{
-	size_t soap_flag_KeyGroups = 1;
-	size_t soap_flag_LastPage = 1;
-	size_t soap_flag_NextPageQueryParameters = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__ListKeyGroupsResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroupsResponse, sizeof(struct KMS_Agent__ListKeyGroupsResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__ListKeyGroupsResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_KeyGroups && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__ArrayOfKeyGroups(soap, "KeyGroups", &a->KeyGroups, "KMS-Agent:ArrayOfKeyGroups"))
-				{	soap_flag_KeyGroups--;
-					continue;
-				}
-			if (soap_flag_LastPage && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__boolean(soap, "LastPage", &a->LastPage, "xsd:boolean"))
-				{	soap_flag_LastPage--;
-					continue;
-				}
-			if (soap_flag_NextPageQueryParameters && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__QueryParameters(soap, "NextPageQueryParameters", &a->NextPageQueryParameters, "KMS-Agent:QueryParameters"))
-				{	soap_flag_NextPageQueryParameters--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__ListKeyGroupsResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroupsResponse, 0, sizeof(struct KMS_Agent__ListKeyGroupsResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_LastPage > 0 || soap_flag_NextPageQueryParameters > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__ListKeyGroupsResponse(struct soap *soap, const struct KMS_Agent__ListKeyGroupsResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroupsResponse);
-	if (soap_out_KMS_Agent__ListKeyGroupsResponse(soap, tag?tag:"KMS-Agent:ListKeyGroupsResponse", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__ListKeyGroupsResponse * SOAP_FMAC4 soap_get_KMS_Agent__ListKeyGroupsResponse(struct soap *soap, struct KMS_Agent__ListKeyGroupsResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__ListKeyGroupsResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__ListKeyGroupsResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__ListKeyGroupsResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__ListKeyGroupsResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroupsResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__ListKeyGroupsResponse);
-		if (size)
-			*size = sizeof(struct KMS_Agent__ListKeyGroupsResponse);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__ListKeyGroupsResponse[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__ListKeyGroupsResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__ListKeyGroupsResponse*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__ListKeyGroupsResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__ListKeyGroupsResponse %p -> %p\n", q, p));
-	*(struct KMS_Agent__ListKeyGroupsResponse*)p = *(struct KMS_Agent__ListKeyGroupsResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__DataUnit(struct soap *soap, struct KMS_Agent__DataUnit *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__string(soap, &a->DataUnitID);
-	soap_default_xsd__string(soap, &a->ExternalUniqueID);
-	soap_default_xsd__string(soap, &a->ExternalTag);
-	soap_default_xsd__string(soap, &a->Description);
-	soap_default_KMS_Agent__DataUnitState(soap, &a->DataUnitState);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__DataUnit(struct soap *soap, const struct KMS_Agent__DataUnit *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->DataUnitID);
-	soap_serialize_xsd__string(soap, &a->ExternalUniqueID);
-	soap_serialize_xsd__string(soap, &a->ExternalTag);
-	soap_serialize_xsd__string(soap, &a->Description);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__DataUnit(struct soap *soap, const char *tag, int id, const struct KMS_Agent__DataUnit *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnit), type))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "DataUnitID", -1, &a->DataUnitID, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "ExternalUniqueID", -1, &a->ExternalUniqueID, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "ExternalTag", -1, &a->ExternalTag, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "Description", -1, &a->Description, "xsd:string"))
-		return soap->error;
-	if (soap_out_KMS_Agent__DataUnitState(soap, "DataUnitState", -1, &a->DataUnitState, "KMS-Agent:DataUnitState"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__DataUnit * SOAP_FMAC4 soap_in_KMS_Agent__DataUnit(struct soap *soap, const char *tag, struct KMS_Agent__DataUnit *a, const char *type)
-{
-	size_t soap_flag_DataUnitID = 1;
-	size_t soap_flag_ExternalUniqueID = 1;
-	size_t soap_flag_ExternalTag = 1;
-	size_t soap_flag_Description = 1;
-	size_t soap_flag_DataUnitState = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__DataUnit *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnit, sizeof(struct KMS_Agent__DataUnit), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__DataUnit(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_DataUnitID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "DataUnitID", &a->DataUnitID, "xsd:string"))
-				{	soap_flag_DataUnitID--;
-					continue;
-				}
-			if (soap_flag_ExternalUniqueID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "ExternalUniqueID", &a->ExternalUniqueID, "xsd:string"))
-				{	soap_flag_ExternalUniqueID--;
-					continue;
-				}
-			if (soap_flag_ExternalTag && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "ExternalTag", &a->ExternalTag, "xsd:string"))
-				{	soap_flag_ExternalTag--;
-					continue;
-				}
-			if (soap_flag_Description && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "Description", &a->Description, "xsd:string"))
-				{	soap_flag_Description--;
-					continue;
-				}
-			if (soap_flag_DataUnitState && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__DataUnitState(soap, "DataUnitState", &a->DataUnitState, "KMS-Agent:DataUnitState"))
-				{	soap_flag_DataUnitState--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__DataUnit *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnit, 0, sizeof(struct KMS_Agent__DataUnit), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_DataUnitState > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__DataUnit(struct soap *soap, const struct KMS_Agent__DataUnit *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnit);
-	if (soap_out_KMS_Agent__DataUnit(soap, tag?tag:"KMS-Agent:DataUnit", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__DataUnit * SOAP_FMAC4 soap_get_KMS_Agent__DataUnit(struct soap *soap, struct KMS_Agent__DataUnit *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__DataUnit(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__DataUnit * SOAP_FMAC2 soap_instantiate_KMS_Agent__DataUnit(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__DataUnit(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnit, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__DataUnit);
-		if (size)
-			*size = sizeof(struct KMS_Agent__DataUnit);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__DataUnit[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__DataUnit);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__DataUnit*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__DataUnit(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__DataUnit %p -> %p\n", q, p));
-	*(struct KMS_Agent__DataUnit*)p = *(struct KMS_Agent__DataUnit*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__ArrayOfKeys(struct soap *soap, struct KMS_Agent__ArrayOfKeys *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-	a->__size = 0;
-	a->__ptr = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__ArrayOfKeys(struct soap *soap, struct KMS_Agent__ArrayOfKeys const*a)
-{
-	int i;
-	if (a->__ptr && !soap_array_reference(soap, a, (struct soap_array*)&a->__ptr, 1, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeys))
-		for (i = 0; i < a->__size; i++)
-		{	soap_embedded(soap, a->__ptr + i, SOAP_TYPE_KMS_Agent_KMS_Agent__Key);
-			soap_serialize_KMS_Agent__Key(soap, a->__ptr + i);
-		}
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__ArrayOfKeys(struct soap *soap, const char *tag, int id, const struct KMS_Agent__ArrayOfKeys *a, const char *type)
-{
-	int i, n = a->__size;
-	id = soap_element_id(soap, tag, id, a, (struct soap_array*)&a->__ptr, 1, type, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeys);
-	if (id < 0)
-		return soap->error;
-	if (soap_element_begin_out(soap, tag, id, type))
-		return soap->error;
-	for (i = 0; i < n; i++)
-	{
-		soap_out_KMS_Agent__Key(soap, "item", -1, &a->__ptr[i], "KMS-Agent:Key");
-	}
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__ArrayOfKeys * SOAP_FMAC4 soap_in_KMS_Agent__ArrayOfKeys(struct soap *soap, const char *tag, struct KMS_Agent__ArrayOfKeys *a, const char *type)
-{	int i, j;
-	struct KMS_Agent__Key *p;
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (*soap->type && soap_match_array(soap, "KMS-Agent:Key") && soap_match_tag(soap, soap->type, type))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (struct KMS_Agent__ArrayOfKeys *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeys, sizeof(struct KMS_Agent__ArrayOfKeys), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__ArrayOfKeys(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		a->__size = soap_getsize(soap->arraySize, soap->arrayOffset, &j);
-		if (a->__size >= 0)
-		{	a->__ptr = (struct KMS_Agent__Key *)soap_malloc(soap, sizeof(struct KMS_Agent__Key) * a->__size);
-			for (i = 0; i < a->__size; i++)
-				soap_default_KMS_Agent__Key(soap, a->__ptr+i);
-			for (i = 0; i < a->__size; i++)
-			{	soap_peek_element(soap);
-				if (soap->position)
-				{	i = soap->positions[0]-j;
-					if (i < 0 || i >= a->__size)
-					{	soap->error = SOAP_IOB;
-						return NULL;
-					}
-				}
-				if (!soap_in_KMS_Agent__Key(soap, NULL, a->__ptr + i, "KMS-Agent:Key"))
-				{	if (soap->error != SOAP_NO_TAG)
-						return NULL;
-					soap->error = SOAP_OK;
-					break;
-				}
-			}
-		}
-		else
-		{	if (soap_new_block(soap) == NULL)
-				return NULL;
-			for (a->__size = 0; ; a->__size++)
-			{	p = (struct KMS_Agent__Key *)soap_push_block(soap, NULL, sizeof(struct KMS_Agent__Key));
-				if (!p)
-					return NULL;
-				soap_default_KMS_Agent__Key(soap, p);
-				if (!soap_in_KMS_Agent__Key(soap, NULL, p, "KMS-Agent:Key"))
-				{	if (soap->error != SOAP_NO_TAG)
-						return NULL;
-					soap->error = SOAP_OK;
-					break;
-				}
-			}
-			soap_pop_block(soap, NULL);
-			a->__ptr = (struct KMS_Agent__Key *)soap_malloc(soap, soap->blist->size);
-			soap_save_block(soap, NULL, (char*)a->__ptr, 1);
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__ArrayOfKeys *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeys, 0, sizeof(struct KMS_Agent__ArrayOfKeys), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__ArrayOfKeys(struct soap *soap, const struct KMS_Agent__ArrayOfKeys *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, (struct soap_array*)&a->__ptr, 1, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeys);
-	if (soap_out_KMS_Agent__ArrayOfKeys(soap, tag?tag:"SOAP-ENC:Array", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__ArrayOfKeys * SOAP_FMAC4 soap_get_KMS_Agent__ArrayOfKeys(struct soap *soap, struct KMS_Agent__ArrayOfKeys *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__ArrayOfKeys(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__ArrayOfKeys * SOAP_FMAC2 soap_instantiate_KMS_Agent__ArrayOfKeys(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__ArrayOfKeys(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeys, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__ArrayOfKeys);
-		if (size)
-			*size = sizeof(struct KMS_Agent__ArrayOfKeys);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__ArrayOfKeys[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__ArrayOfKeys);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__ArrayOfKeys*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__ArrayOfKeys(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__ArrayOfKeys %p -> %p\n", q, p));
-	*(struct KMS_Agent__ArrayOfKeys*)p = *(struct KMS_Agent__ArrayOfKeys*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__Key(struct soap *soap, struct KMS_Agent__Key *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__string(soap, &a->KeyID);
-	soap_default_KMS_Agent__KeyState(soap, &a->KeyState);
-	soap_default_KMS_Agent__KeyType(soap, &a->KeyType);
-	soap_default_xsd__string(soap, &a->KeyGroupID);
-	soap_default_xsd__hexBinary(soap, &a->Key);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__Key(struct soap *soap, const struct KMS_Agent__Key *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->KeyID);
-	soap_serialize_xsd__string(soap, &a->KeyGroupID);
-	soap_embedded(soap, &a->Key, SOAP_TYPE_KMS_Agent_xsd__hexBinary);
-	soap_serialize_xsd__hexBinary(soap, &a->Key);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__Key(struct soap *soap, const char *tag, int id, const struct KMS_Agent__Key *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__Key), type))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KeyID", -1, &a->KeyID, "xsd:string"))
-		return soap->error;
-	if (soap_out_KMS_Agent__KeyState(soap, "KeyState", -1, &a->KeyState, "KMS-Agent:KeyState"))
-		return soap->error;
-	if (soap_out_KMS_Agent__KeyType(soap, "KeyType", -1, &a->KeyType, "KMS-Agent:KeyType"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KeyGroupID", -1, &a->KeyGroupID, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__hexBinary(soap, "Key", -1, &a->Key, "xsd:hexBinary"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__Key * SOAP_FMAC4 soap_in_KMS_Agent__Key(struct soap *soap, const char *tag, struct KMS_Agent__Key *a, const char *type)
-{
-	size_t soap_flag_KeyID = 1;
-	size_t soap_flag_KeyState = 1;
-	size_t soap_flag_KeyType = 1;
-	size_t soap_flag_KeyGroupID = 1;
-	size_t soap_flag_Key = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__Key *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__Key, sizeof(struct KMS_Agent__Key), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__Key(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_KeyID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KeyID", &a->KeyID, "xsd:string"))
-				{	soap_flag_KeyID--;
-					continue;
-				}
-			if (soap_flag_KeyState && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__KeyState(soap, "KeyState", &a->KeyState, "KMS-Agent:KeyState"))
-				{	soap_flag_KeyState--;
-					continue;
-				}
-			if (soap_flag_KeyType && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__KeyType(soap, "KeyType", &a->KeyType, "KMS-Agent:KeyType"))
-				{	soap_flag_KeyType--;
-					continue;
-				}
-			if (soap_flag_KeyGroupID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KeyGroupID", &a->KeyGroupID, "xsd:string"))
-				{	soap_flag_KeyGroupID--;
-					continue;
-				}
-			if (soap_flag_Key && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__hexBinary(soap, "Key", &a->Key, "xsd:hexBinary"))
-				{	soap_flag_Key--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__Key *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__Key, 0, sizeof(struct KMS_Agent__Key), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_KeyState > 0 || soap_flag_KeyType > 0 || soap_flag_Key > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__Key(struct soap *soap, const struct KMS_Agent__Key *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__Key);
-	if (soap_out_KMS_Agent__Key(soap, tag?tag:"KMS-Agent:Key", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__Key * SOAP_FMAC4 soap_get_KMS_Agent__Key(struct soap *soap, struct KMS_Agent__Key *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__Key(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__Key * SOAP_FMAC2 soap_instantiate_KMS_Agent__Key(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__Key(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__Key, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__Key);
-		if (size)
-			*size = sizeof(struct KMS_Agent__Key);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__Key[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__Key);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__Key*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__Key(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__Key %p -> %p\n", q, p));
-	*(struct KMS_Agent__Key*)p = *(struct KMS_Agent__Key*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__ArrayOfKeyGroups(struct soap *soap, struct KMS_Agent__ArrayOfKeyGroups *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-	a->__size = 0;
-	a->__ptr = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__ArrayOfKeyGroups(struct soap *soap, struct KMS_Agent__ArrayOfKeyGroups const*a)
-{
-	int i;
-	if (a->__ptr && !soap_array_reference(soap, a, (struct soap_array*)&a->__ptr, 1, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeyGroups))
-		for (i = 0; i < a->__size; i++)
-		{	soap_embedded(soap, a->__ptr + i, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup);
-			soap_serialize_KMS_Agent__KeyGroup(soap, a->__ptr + i);
-		}
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__ArrayOfKeyGroups(struct soap *soap, const char *tag, int id, const struct KMS_Agent__ArrayOfKeyGroups *a, const char *type)
-{
-	int i, n = a->__size;
-	id = soap_element_id(soap, tag, id, a, (struct soap_array*)&a->__ptr, 1, type, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeyGroups);
-	if (id < 0)
-		return soap->error;
-	if (soap_element_begin_out(soap, tag, id, type))
-		return soap->error;
-	for (i = 0; i < n; i++)
-	{
-		soap_out_KMS_Agent__KeyGroup(soap, "item", -1, &a->__ptr[i], "KMS-Agent:KeyGroup");
-	}
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__ArrayOfKeyGroups * SOAP_FMAC4 soap_in_KMS_Agent__ArrayOfKeyGroups(struct soap *soap, const char *tag, struct KMS_Agent__ArrayOfKeyGroups *a, const char *type)
-{	int i, j;
-	struct KMS_Agent__KeyGroup *p;
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (*soap->type && soap_match_array(soap, "KMS-Agent:KeyGroup") && soap_match_tag(soap, soap->type, type))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (struct KMS_Agent__ArrayOfKeyGroups *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeyGroups, sizeof(struct KMS_Agent__ArrayOfKeyGroups), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__ArrayOfKeyGroups(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		a->__size = soap_getsize(soap->arraySize, soap->arrayOffset, &j);
-		if (a->__size >= 0)
-		{	a->__ptr = (struct KMS_Agent__KeyGroup *)soap_malloc(soap, sizeof(struct KMS_Agent__KeyGroup) * a->__size);
-			for (i = 0; i < a->__size; i++)
-				soap_default_KMS_Agent__KeyGroup(soap, a->__ptr+i);
-			for (i = 0; i < a->__size; i++)
-			{	soap_peek_element(soap);
-				if (soap->position)
-				{	i = soap->positions[0]-j;
-					if (i < 0 || i >= a->__size)
-					{	soap->error = SOAP_IOB;
-						return NULL;
-					}
-				}
-				if (!soap_in_KMS_Agent__KeyGroup(soap, NULL, a->__ptr + i, "KMS-Agent:KeyGroup"))
-				{	if (soap->error != SOAP_NO_TAG)
-						return NULL;
-					soap->error = SOAP_OK;
-					break;
-				}
-			}
-		}
-		else
-		{	if (soap_new_block(soap) == NULL)
-				return NULL;
-			for (a->__size = 0; ; a->__size++)
-			{	p = (struct KMS_Agent__KeyGroup *)soap_push_block(soap, NULL, sizeof(struct KMS_Agent__KeyGroup));
-				if (!p)
-					return NULL;
-				soap_default_KMS_Agent__KeyGroup(soap, p);
-				if (!soap_in_KMS_Agent__KeyGroup(soap, NULL, p, "KMS-Agent:KeyGroup"))
-				{	if (soap->error != SOAP_NO_TAG)
-						return NULL;
-					soap->error = SOAP_OK;
-					break;
-				}
-			}
-			soap_pop_block(soap, NULL);
-			a->__ptr = (struct KMS_Agent__KeyGroup *)soap_malloc(soap, soap->blist->size);
-			soap_save_block(soap, NULL, (char*)a->__ptr, 1);
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__ArrayOfKeyGroups *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeyGroups, 0, sizeof(struct KMS_Agent__ArrayOfKeyGroups), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__ArrayOfKeyGroups(struct soap *soap, const struct KMS_Agent__ArrayOfKeyGroups *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, (struct soap_array*)&a->__ptr, 1, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeyGroups);
-	if (soap_out_KMS_Agent__ArrayOfKeyGroups(soap, tag?tag:"SOAP-ENC:Array", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__ArrayOfKeyGroups * SOAP_FMAC4 soap_get_KMS_Agent__ArrayOfKeyGroups(struct soap *soap, struct KMS_Agent__ArrayOfKeyGroups *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__ArrayOfKeyGroups(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__ArrayOfKeyGroups * SOAP_FMAC2 soap_instantiate_KMS_Agent__ArrayOfKeyGroups(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__ArrayOfKeyGroups(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeyGroups, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__ArrayOfKeyGroups);
-		if (size)
-			*size = sizeof(struct KMS_Agent__ArrayOfKeyGroups);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__ArrayOfKeyGroups[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__ArrayOfKeyGroups);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__ArrayOfKeyGroups*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__ArrayOfKeyGroups(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__ArrayOfKeyGroups %p -> %p\n", q, p));
-	*(struct KMS_Agent__ArrayOfKeyGroups*)p = *(struct KMS_Agent__ArrayOfKeyGroups*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__KeyGroup(struct soap *soap, struct KMS_Agent__KeyGroup *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__string(soap, &a->KeyGroupID);
-	soap_default_xsd__string(soap, &a->Description);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__KeyGroup(struct soap *soap, const struct KMS_Agent__KeyGroup *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->KeyGroupID);
-	soap_serialize_xsd__string(soap, &a->Description);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__KeyGroup(struct soap *soap, const char *tag, int id, const struct KMS_Agent__KeyGroup *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup), type))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KeyGroupID", -1, &a->KeyGroupID, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "Description", -1, &a->Description, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__KeyGroup * SOAP_FMAC4 soap_in_KMS_Agent__KeyGroup(struct soap *soap, const char *tag, struct KMS_Agent__KeyGroup *a, const char *type)
-{
-	size_t soap_flag_KeyGroupID = 1;
-	size_t soap_flag_Description = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__KeyGroup *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup, sizeof(struct KMS_Agent__KeyGroup), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__KeyGroup(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_KeyGroupID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KeyGroupID", &a->KeyGroupID, "xsd:string"))
-				{	soap_flag_KeyGroupID--;
-					continue;
-				}
-			if (soap_flag_Description && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "Description", &a->Description, "xsd:string"))
-				{	soap_flag_Description--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__KeyGroup *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup, 0, sizeof(struct KMS_Agent__KeyGroup), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__KeyGroup(struct soap *soap, const struct KMS_Agent__KeyGroup *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup);
-	if (soap_out_KMS_Agent__KeyGroup(soap, tag?tag:"KMS-Agent:KeyGroup", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__KeyGroup * SOAP_FMAC4 soap_get_KMS_Agent__KeyGroup(struct soap *soap, struct KMS_Agent__KeyGroup *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__KeyGroup(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__KeyGroup * SOAP_FMAC2 soap_instantiate_KMS_Agent__KeyGroup(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__KeyGroup(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__KeyGroup);
-		if (size)
-			*size = sizeof(struct KMS_Agent__KeyGroup);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__KeyGroup[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__KeyGroup);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__KeyGroup*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__KeyGroup(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__KeyGroup %p -> %p\n", q, p));
-	*(struct KMS_Agent__KeyGroup*)p = *(struct KMS_Agent__KeyGroup*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__QueryParameters(struct soap *soap, struct KMS_Agent__QueryParameters *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__int(soap, &a->NextPageSize);
-	soap_default_xsd__string(soap, &a->SortFieldName);
-	soap_default_KMS_Agent__SortOrder(soap, &a->SortOrder);
-	soap_default_KMS_Agent__ArrayOfFilterParameters(soap, &a->FilterParameters);
-	soap_default_xsd__string(soap, &a->PreviousPageLastIDValue);
-	soap_default_xsd__string(soap, &a->PreviousPageLastSortFieldValue);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__QueryParameters(struct soap *soap, const struct KMS_Agent__QueryParameters *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->SortFieldName);
-	soap_serialize_KMS_Agent__ArrayOfFilterParameters(soap, &a->FilterParameters);
-	soap_serialize_xsd__string(soap, &a->PreviousPageLastIDValue);
-	soap_serialize_xsd__string(soap, &a->PreviousPageLastSortFieldValue);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__QueryParameters(struct soap *soap, const char *tag, int id, const struct KMS_Agent__QueryParameters *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__QueryParameters), type))
-		return soap->error;
-	if (soap_out_xsd__int(soap, "NextPageSize", -1, &a->NextPageSize, "xsd:int"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "SortFieldName", -1, &a->SortFieldName, "xsd:string"))
-		return soap->error;
-	if (soap_out_KMS_Agent__SortOrder(soap, "SortOrder", -1, &a->SortOrder, "KMS-Agent:SortOrder"))
-		return soap->error;
-	if (soap_out_KMS_Agent__ArrayOfFilterParameters(soap, "FilterParameters", -1, &a->FilterParameters, "KMS-Agent:ArrayOfFilterParameters"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "PreviousPageLastIDValue", -1, &a->PreviousPageLastIDValue, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "PreviousPageLastSortFieldValue", -1, &a->PreviousPageLastSortFieldValue, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__QueryParameters * SOAP_FMAC4 soap_in_KMS_Agent__QueryParameters(struct soap *soap, const char *tag, struct KMS_Agent__QueryParameters *a, const char *type)
-{
-	size_t soap_flag_NextPageSize = 1;
-	size_t soap_flag_SortFieldName = 1;
-	size_t soap_flag_SortOrder = 1;
-	size_t soap_flag_FilterParameters = 1;
-	size_t soap_flag_PreviousPageLastIDValue = 1;
-	size_t soap_flag_PreviousPageLastSortFieldValue = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__QueryParameters *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__QueryParameters, sizeof(struct KMS_Agent__QueryParameters), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__QueryParameters(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_NextPageSize && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__int(soap, "NextPageSize", &a->NextPageSize, "xsd:int"))
-				{	soap_flag_NextPageSize--;
-					continue;
-				}
-			if (soap_flag_SortFieldName && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "SortFieldName", &a->SortFieldName, "xsd:string"))
-				{	soap_flag_SortFieldName--;
-					continue;
-				}
-			if (soap_flag_SortOrder && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__SortOrder(soap, "SortOrder", &a->SortOrder, "KMS-Agent:SortOrder"))
-				{	soap_flag_SortOrder--;
-					continue;
-				}
-			if (soap_flag_FilterParameters && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__ArrayOfFilterParameters(soap, "FilterParameters", &a->FilterParameters, "KMS-Agent:ArrayOfFilterParameters"))
-				{	soap_flag_FilterParameters--;
-					continue;
-				}
-			if (soap_flag_PreviousPageLastIDValue && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "PreviousPageLastIDValue", &a->PreviousPageLastIDValue, "xsd:string"))
-				{	soap_flag_PreviousPageLastIDValue--;
-					continue;
-				}
-			if (soap_flag_PreviousPageLastSortFieldValue && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "PreviousPageLastSortFieldValue", &a->PreviousPageLastSortFieldValue, "xsd:string"))
-				{	soap_flag_PreviousPageLastSortFieldValue--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__QueryParameters *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__QueryParameters, 0, sizeof(struct KMS_Agent__QueryParameters), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_NextPageSize > 0 || soap_flag_SortOrder > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__QueryParameters(struct soap *soap, const struct KMS_Agent__QueryParameters *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__QueryParameters);
-	if (soap_out_KMS_Agent__QueryParameters(soap, tag?tag:"KMS-Agent:QueryParameters", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__QueryParameters * SOAP_FMAC4 soap_get_KMS_Agent__QueryParameters(struct soap *soap, struct KMS_Agent__QueryParameters *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__QueryParameters(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__QueryParameters * SOAP_FMAC2 soap_instantiate_KMS_Agent__QueryParameters(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__QueryParameters(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__QueryParameters, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__QueryParameters);
-		if (size)
-			*size = sizeof(struct KMS_Agent__QueryParameters);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__QueryParameters[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__QueryParameters);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__QueryParameters*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__QueryParameters(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__QueryParameters %p -> %p\n", q, p));
-	*(struct KMS_Agent__QueryParameters*)p = *(struct KMS_Agent__QueryParameters*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__ArrayOfFilterParameters(struct soap *soap, struct KMS_Agent__ArrayOfFilterParameters *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-	a->__size = 0;
-	a->__ptr = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__ArrayOfFilterParameters(struct soap *soap, struct KMS_Agent__ArrayOfFilterParameters const*a)
-{
-	int i;
-	if (a->__ptr && !soap_array_reference(soap, a, (struct soap_array*)&a->__ptr, 1, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfFilterParameters))
-		for (i = 0; i < a->__size; i++)
-		{	soap_embedded(soap, a->__ptr + i, SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters);
-			soap_serialize_KMS_Agent__FilterParameters(soap, a->__ptr + i);
-		}
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__ArrayOfFilterParameters(struct soap *soap, const char *tag, int id, const struct KMS_Agent__ArrayOfFilterParameters *a, const char *type)
-{
-	int i, n = a->__size;
-	id = soap_element_id(soap, tag, id, a, (struct soap_array*)&a->__ptr, 1, type, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfFilterParameters);
-	if (id < 0)
-		return soap->error;
-	if (soap_element_begin_out(soap, tag, id, type))
-		return soap->error;
-	for (i = 0; i < n; i++)
-	{
-		soap_out_KMS_Agent__FilterParameters(soap, "item", -1, &a->__ptr[i], "KMS-Agent:FilterParameters");
-	}
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__ArrayOfFilterParameters * SOAP_FMAC4 soap_in_KMS_Agent__ArrayOfFilterParameters(struct soap *soap, const char *tag, struct KMS_Agent__ArrayOfFilterParameters *a, const char *type)
-{	int i, j;
-	struct KMS_Agent__FilterParameters *p;
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (*soap->type && soap_match_array(soap, "KMS-Agent:FilterParameters") && soap_match_tag(soap, soap->type, type))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (struct KMS_Agent__ArrayOfFilterParameters *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfFilterParameters, sizeof(struct KMS_Agent__ArrayOfFilterParameters), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__ArrayOfFilterParameters(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		a->__size = soap_getsize(soap->arraySize, soap->arrayOffset, &j);
-		if (a->__size >= 0)
-		{	a->__ptr = (struct KMS_Agent__FilterParameters *)soap_malloc(soap, sizeof(struct KMS_Agent__FilterParameters) * a->__size);
-			for (i = 0; i < a->__size; i++)
-				soap_default_KMS_Agent__FilterParameters(soap, a->__ptr+i);
-			for (i = 0; i < a->__size; i++)
-			{	soap_peek_element(soap);
-				if (soap->position)
-				{	i = soap->positions[0]-j;
-					if (i < 0 || i >= a->__size)
-					{	soap->error = SOAP_IOB;
-						return NULL;
-					}
-				}
-				if (!soap_in_KMS_Agent__FilterParameters(soap, NULL, a->__ptr + i, "KMS-Agent:FilterParameters"))
-				{	if (soap->error != SOAP_NO_TAG)
-						return NULL;
-					soap->error = SOAP_OK;
-					break;
-				}
-			}
-		}
-		else
-		{	if (soap_new_block(soap) == NULL)
-				return NULL;
-			for (a->__size = 0; ; a->__size++)
-			{	p = (struct KMS_Agent__FilterParameters *)soap_push_block(soap, NULL, sizeof(struct KMS_Agent__FilterParameters));
-				if (!p)
-					return NULL;
-				soap_default_KMS_Agent__FilterParameters(soap, p);
-				if (!soap_in_KMS_Agent__FilterParameters(soap, NULL, p, "KMS-Agent:FilterParameters"))
-				{	if (soap->error != SOAP_NO_TAG)
-						return NULL;
-					soap->error = SOAP_OK;
-					break;
-				}
-			}
-			soap_pop_block(soap, NULL);
-			a->__ptr = (struct KMS_Agent__FilterParameters *)soap_malloc(soap, soap->blist->size);
-			soap_save_block(soap, NULL, (char*)a->__ptr, 1);
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__ArrayOfFilterParameters *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfFilterParameters, 0, sizeof(struct KMS_Agent__ArrayOfFilterParameters), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__ArrayOfFilterParameters(struct soap *soap, const struct KMS_Agent__ArrayOfFilterParameters *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, (struct soap_array*)&a->__ptr, 1, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfFilterParameters);
-	if (soap_out_KMS_Agent__ArrayOfFilterParameters(soap, tag?tag:"SOAP-ENC:Array", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__ArrayOfFilterParameters * SOAP_FMAC4 soap_get_KMS_Agent__ArrayOfFilterParameters(struct soap *soap, struct KMS_Agent__ArrayOfFilterParameters *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__ArrayOfFilterParameters(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__ArrayOfFilterParameters * SOAP_FMAC2 soap_instantiate_KMS_Agent__ArrayOfFilterParameters(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__ArrayOfFilterParameters(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfFilterParameters, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__ArrayOfFilterParameters);
-		if (size)
-			*size = sizeof(struct KMS_Agent__ArrayOfFilterParameters);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__ArrayOfFilterParameters[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__ArrayOfFilterParameters);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__ArrayOfFilterParameters*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__ArrayOfFilterParameters(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__ArrayOfFilterParameters %p -> %p\n", q, p));
-	*(struct KMS_Agent__ArrayOfFilterParameters*)p = *(struct KMS_Agent__ArrayOfFilterParameters*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__FilterParameters(struct soap *soap, struct KMS_Agent__FilterParameters *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__string(soap, &a->FieldName);
-	soap_default_KMS_Agent__FilterOperator(soap, &a->FilterOperator);
-	soap_default_xsd__string(soap, &a->FieldValue);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__FilterParameters(struct soap *soap, const struct KMS_Agent__FilterParameters *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->FieldName);
-	soap_serialize_xsd__string(soap, &a->FieldValue);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__FilterParameters(struct soap *soap, const char *tag, int id, const struct KMS_Agent__FilterParameters *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters), type))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "FieldName", -1, &a->FieldName, "xsd:string"))
-		return soap->error;
-	if (soap_out_KMS_Agent__FilterOperator(soap, "FilterOperator", -1, &a->FilterOperator, "KMS-Agent:FilterOperator"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "FieldValue", -1, &a->FieldValue, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__FilterParameters * SOAP_FMAC4 soap_in_KMS_Agent__FilterParameters(struct soap *soap, const char *tag, struct KMS_Agent__FilterParameters *a, const char *type)
-{
-	size_t soap_flag_FieldName = 1;
-	size_t soap_flag_FilterOperator = 1;
-	size_t soap_flag_FieldValue = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Agent__FilterParameters *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters, sizeof(struct KMS_Agent__FilterParameters), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__FilterParameters(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_FieldName && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "FieldName", &a->FieldName, "xsd:string"))
-				{	soap_flag_FieldName--;
-					continue;
-				}
-			if (soap_flag_FilterOperator && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Agent__FilterOperator(soap, "FilterOperator", &a->FilterOperator, "KMS-Agent:FilterOperator"))
-				{	soap_flag_FilterOperator--;
-					continue;
-				}
-			if (soap_flag_FieldValue && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "FieldValue", &a->FieldValue, "xsd:string"))
-				{	soap_flag_FieldValue--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__FilterParameters *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters, 0, sizeof(struct KMS_Agent__FilterParameters), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_FilterOperator > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__FilterParameters(struct soap *soap, const struct KMS_Agent__FilterParameters *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters);
-	if (soap_out_KMS_Agent__FilterParameters(soap, tag?tag:"KMS-Agent:FilterParameters", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__FilterParameters * SOAP_FMAC4 soap_get_KMS_Agent__FilterParameters(struct soap *soap, struct KMS_Agent__FilterParameters *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__FilterParameters(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__FilterParameters * SOAP_FMAC2 soap_instantiate_KMS_Agent__FilterParameters(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__FilterParameters(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__FilterParameters);
-		if (size)
-			*size = sizeof(struct KMS_Agent__FilterParameters);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__FilterParameters[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__FilterParameters);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__FilterParameters*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__FilterParameters(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__FilterParameters %p -> %p\n", q, p));
-	*(struct KMS_Agent__FilterParameters*)p = *(struct KMS_Agent__FilterParameters*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__ArrayOfHexBinary(struct soap *soap, struct KMS_Agent__ArrayOfHexBinary *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-	a->__size = 0;
-	a->__ptr = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__ArrayOfHexBinary(struct soap *soap, struct KMS_Agent__ArrayOfHexBinary const*a)
-{
-	int i;
-	if (a->__ptr && !soap_array_reference(soap, a, (struct soap_array*)&a->__ptr, 1, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfHexBinary))
-		for (i = 0; i < a->__size; i++)
-		{	soap_embedded(soap, a->__ptr + i, SOAP_TYPE_KMS_Agent_xsd__hexBinary);
-			soap_serialize_xsd__hexBinary(soap, a->__ptr + i);
-		}
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__ArrayOfHexBinary(struct soap *soap, const char *tag, int id, const struct KMS_Agent__ArrayOfHexBinary *a, const char *type)
-{
-	int i, n = a->__size;
-	id = soap_element_id(soap, tag, id, a, (struct soap_array*)&a->__ptr, 1, type, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfHexBinary);
-	if (id < 0)
-		return soap->error;
-	if (soap_element_begin_out(soap, tag, id, type))
-		return soap->error;
-	for (i = 0; i < n; i++)
-	{
-		soap_out_xsd__hexBinary(soap, "item", -1, &a->__ptr[i], "xsd:hexBinary");
-	}
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Agent__ArrayOfHexBinary * SOAP_FMAC4 soap_in_KMS_Agent__ArrayOfHexBinary(struct soap *soap, const char *tag, struct KMS_Agent__ArrayOfHexBinary *a, const char *type)
-{	int i, j;
-	struct xsd__hexBinary *p;
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (*soap->type && soap_match_array(soap, "xsd:hexBinary") && soap_match_tag(soap, soap->type, type))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (struct KMS_Agent__ArrayOfHexBinary *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfHexBinary, sizeof(struct KMS_Agent__ArrayOfHexBinary), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Agent__ArrayOfHexBinary(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		a->__size = soap_getsize(soap->arraySize, soap->arrayOffset, &j);
-		if (a->__size >= 0)
-		{	a->__ptr = (struct xsd__hexBinary *)soap_malloc(soap, sizeof(struct xsd__hexBinary) * a->__size);
-			for (i = 0; i < a->__size; i++)
-				soap_default_xsd__hexBinary(soap, a->__ptr+i);
-			for (i = 0; i < a->__size; i++)
-			{	soap_peek_element(soap);
-				if (soap->position)
-				{	i = soap->positions[0]-j;
-					if (i < 0 || i >= a->__size)
-					{	soap->error = SOAP_IOB;
-						return NULL;
-					}
-				}
-				if (!soap_in_xsd__hexBinary(soap, NULL, a->__ptr + i, "xsd:hexBinary"))
-				{	if (soap->error != SOAP_NO_TAG)
-						return NULL;
-					soap->error = SOAP_OK;
-					break;
-				}
-			}
-		}
-		else
-		{	if (soap_new_block(soap) == NULL)
-				return NULL;
-			for (a->__size = 0; ; a->__size++)
-			{	p = (struct xsd__hexBinary *)soap_push_block(soap, NULL, sizeof(struct xsd__hexBinary));
-				if (!p)
-					return NULL;
-				soap_default_xsd__hexBinary(soap, p);
-				if (!soap_in_xsd__hexBinary(soap, NULL, p, "xsd:hexBinary"))
-				{	if (soap->error != SOAP_NO_TAG)
-						return NULL;
-					soap->error = SOAP_OK;
-					break;
-				}
-			}
-			soap_pop_block(soap, NULL);
-			a->__ptr = (struct xsd__hexBinary *)soap_malloc(soap, soap->blist->size);
-			soap_save_block(soap, NULL, (char*)a->__ptr, 1);
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__ArrayOfHexBinary *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfHexBinary, 0, sizeof(struct KMS_Agent__ArrayOfHexBinary), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__ArrayOfHexBinary(struct soap *soap, const struct KMS_Agent__ArrayOfHexBinary *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, (struct soap_array*)&a->__ptr, 1, tag, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfHexBinary);
-	if (soap_out_KMS_Agent__ArrayOfHexBinary(soap, tag?tag:"SOAP-ENC:Array", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__ArrayOfHexBinary * SOAP_FMAC4 soap_get_KMS_Agent__ArrayOfHexBinary(struct soap *soap, struct KMS_Agent__ArrayOfHexBinary *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Agent__ArrayOfHexBinary(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Agent__ArrayOfHexBinary * SOAP_FMAC2 soap_instantiate_KMS_Agent__ArrayOfHexBinary(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Agent__ArrayOfHexBinary(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfHexBinary, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__ArrayOfHexBinary);
-		if (size)
-			*size = sizeof(struct KMS_Agent__ArrayOfHexBinary);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Agent__ArrayOfHexBinary[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Agent__ArrayOfHexBinary);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Agent__ArrayOfHexBinary*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__ArrayOfHexBinary(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Agent__ArrayOfHexBinary %p -> %p\n", q, p));
-	*(struct KMS_Agent__ArrayOfHexBinary*)p = *(struct KMS_Agent__ArrayOfHexBinary*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_xsd__hexBinary(struct soap *soap, struct xsd__hexBinary *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-	a->__size = 0;
-	a->__ptr = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__hexBinary(struct soap *soap, struct xsd__hexBinary const*a)
-{
-	if (a->__ptr)
-		soap_array_reference(soap, a, (struct soap_array*)&a->__ptr, 1, SOAP_TYPE_KMS_Agent_xsd__hexBinary);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__hexBinary(struct soap *soap, const char *tag, int id, const struct xsd__hexBinary *a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, a, (struct soap_array*)&a->__ptr, 1, type, SOAP_TYPE_KMS_Agent_xsd__hexBinary);
-	if (id < 0)
-		return soap->error;
-	if (soap_element_begin_out(soap, tag, id, type))
-		return soap->error;
-	if (soap_puthex(soap, a->__ptr, a->__size))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct xsd__hexBinary * SOAP_FMAC4 soap_in_xsd__hexBinary(struct soap *soap, const char *tag, struct xsd__hexBinary *a, const char *type)
-{
-	(void)type; /* appease -Wall -Werror */
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (*soap->type && soap_match_tag(soap, soap->type, type) && soap_match_tag(soap, soap->type, ":hexBinary"))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (struct xsd__hexBinary *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Agent_xsd__hexBinary, sizeof(struct xsd__hexBinary), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_xsd__hexBinary(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		a->__ptr = soap_gethex(soap, &a->__size);
-		if ((!a->__ptr && soap->error) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct xsd__hexBinary *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Agent_xsd__hexBinary, 0, sizeof(struct xsd__hexBinary), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__hexBinary(struct soap *soap, const struct xsd__hexBinary *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, (struct soap_array*)&a->__ptr, 1, tag, SOAP_TYPE_KMS_Agent_xsd__hexBinary);
-	if (soap_out_xsd__hexBinary(soap, tag?tag:"SOAP-ENC:Array", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct xsd__hexBinary * SOAP_FMAC4 soap_get_xsd__hexBinary(struct soap *soap, struct xsd__hexBinary *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__hexBinary(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct xsd__hexBinary * SOAP_FMAC2 soap_instantiate_xsd__hexBinary(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_xsd__hexBinary(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Agent_xsd__hexBinary, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct xsd__hexBinary);
-		if (size)
-			*size = sizeof(struct xsd__hexBinary);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct xsd__hexBinary[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct xsd__hexBinary);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct xsd__hexBinary*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__hexBinary(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct xsd__hexBinary %p -> %p\n", q, p));
-	*(struct xsd__hexBinary*)p = *(struct xsd__hexBinary*)q;
-}
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_KMS_Agent_SOAP_ENV__Reason))
-		soap_serialize_SOAP_ENV__Reason(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Reason(struct soap *soap, const char *tag, int id, struct SOAP_ENV__Reason *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_Agent_SOAP_ENV__Reason);
-	if (id < 0)
-		return soap->error;
-	return soap_out_SOAP_ENV__Reason(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Reason(struct soap *soap, const char *tag, struct SOAP_ENV__Reason **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct SOAP_ENV__Reason **)soap_malloc(soap, sizeof(struct SOAP_ENV__Reason *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_SOAP_ENV__Reason(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Reason **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Agent_SOAP_ENV__Reason, sizeof(struct SOAP_ENV__Reason), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_PointerToSOAP_ENV__Reason);
-	if (soap_out_PointerToSOAP_ENV__Reason(soap, tag?tag:"SOAP-ENV:Reason", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToSOAP_ENV__Reason(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_KMS_Agent_SOAP_ENV__Detail))
-		soap_serialize_SOAP_ENV__Detail(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Detail(struct soap *soap, const char *tag, int id, struct SOAP_ENV__Detail *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_Agent_SOAP_ENV__Detail);
-	if (id < 0)
-		return soap->error;
-	return soap_out_SOAP_ENV__Detail(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Detail(struct soap *soap, const char *tag, struct SOAP_ENV__Detail **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct SOAP_ENV__Detail **)soap_malloc(soap, sizeof(struct SOAP_ENV__Detail *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_SOAP_ENV__Detail(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Detail **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Agent_SOAP_ENV__Detail, sizeof(struct SOAP_ENV__Detail), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_PointerToSOAP_ENV__Detail);
-	if (soap_out_PointerToSOAP_ENV__Detail(soap, tag?tag:"SOAP-ENV:Detail", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToSOAP_ENV__Detail(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_KMS_Agent_SOAP_ENV__Code))
-		soap_serialize_SOAP_ENV__Code(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Code(struct soap *soap, const char *tag, int id, struct SOAP_ENV__Code *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_Agent_SOAP_ENV__Code);
-	if (id < 0)
-		return soap->error;
-	return soap_out_SOAP_ENV__Code(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Code(struct soap *soap, const char *tag, struct SOAP_ENV__Code **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct SOAP_ENV__Code **)soap_malloc(soap, sizeof(struct SOAP_ENV__Code *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_SOAP_ENV__Code(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Code **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Agent_SOAP_ENV__Code, sizeof(struct SOAP_ENV__Code), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_PointerToSOAP_ENV__Code);
-	if (soap_out_PointerToSOAP_ENV__Code(soap, tag?tag:"SOAP-ENV:Code", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToSOAP_ENV__Code(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#endif
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToKMS_Agent__Key(struct soap *soap, struct KMS_Agent__Key *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_KMS_Agent_KMS_Agent__Key))
-		soap_serialize_KMS_Agent__Key(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToKMS_Agent__Key(struct soap *soap, const char *tag, int id, struct KMS_Agent__Key *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_Agent_KMS_Agent__Key);
-	if (id < 0)
-		return soap->error;
-	return soap_out_KMS_Agent__Key(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct KMS_Agent__Key ** SOAP_FMAC4 soap_in_PointerToKMS_Agent__Key(struct soap *soap, const char *tag, struct KMS_Agent__Key **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct KMS_Agent__Key **)soap_malloc(soap, sizeof(struct KMS_Agent__Key *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_KMS_Agent__Key(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__Key **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Agent_KMS_Agent__Key, sizeof(struct KMS_Agent__Key), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToKMS_Agent__Key(struct soap *soap, struct KMS_Agent__Key *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__Key);
-	if (soap_out_PointerToKMS_Agent__Key(soap, tag?tag:"KMS-Agent:Key", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__Key ** SOAP_FMAC4 soap_get_PointerToKMS_Agent__Key(struct soap *soap, struct KMS_Agent__Key **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToKMS_Agent__Key(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToKMS_Agent__KeyGroup(struct soap *soap, struct KMS_Agent__KeyGroup *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup))
-		soap_serialize_KMS_Agent__KeyGroup(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToKMS_Agent__KeyGroup(struct soap *soap, const char *tag, int id, struct KMS_Agent__KeyGroup *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup);
-	if (id < 0)
-		return soap->error;
-	return soap_out_KMS_Agent__KeyGroup(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct KMS_Agent__KeyGroup ** SOAP_FMAC4 soap_in_PointerToKMS_Agent__KeyGroup(struct soap *soap, const char *tag, struct KMS_Agent__KeyGroup **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct KMS_Agent__KeyGroup **)soap_malloc(soap, sizeof(struct KMS_Agent__KeyGroup *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_KMS_Agent__KeyGroup(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__KeyGroup **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup, sizeof(struct KMS_Agent__KeyGroup), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToKMS_Agent__KeyGroup(struct soap *soap, struct KMS_Agent__KeyGroup *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__KeyGroup);
-	if (soap_out_PointerToKMS_Agent__KeyGroup(soap, tag?tag:"KMS-Agent:KeyGroup", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__KeyGroup ** SOAP_FMAC4 soap_get_PointerToKMS_Agent__KeyGroup(struct soap *soap, struct KMS_Agent__KeyGroup **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToKMS_Agent__KeyGroup(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToKMS_Agent__FilterParameters(struct soap *soap, struct KMS_Agent__FilterParameters *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters))
-		soap_serialize_KMS_Agent__FilterParameters(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToKMS_Agent__FilterParameters(struct soap *soap, const char *tag, int id, struct KMS_Agent__FilterParameters *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters);
-	if (id < 0)
-		return soap->error;
-	return soap_out_KMS_Agent__FilterParameters(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct KMS_Agent__FilterParameters ** SOAP_FMAC4 soap_in_PointerToKMS_Agent__FilterParameters(struct soap *soap, const char *tag, struct KMS_Agent__FilterParameters **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct KMS_Agent__FilterParameters **)soap_malloc(soap, sizeof(struct KMS_Agent__FilterParameters *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_KMS_Agent__FilterParameters(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Agent__FilterParameters **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters, sizeof(struct KMS_Agent__FilterParameters), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToKMS_Agent__FilterParameters(struct soap *soap, struct KMS_Agent__FilterParameters *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__FilterParameters);
-	if (soap_out_PointerToKMS_Agent__FilterParameters(soap, tag?tag:"KMS-Agent:FilterParameters", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Agent__FilterParameters ** SOAP_FMAC4 soap_get_PointerToKMS_Agent__FilterParameters(struct soap *soap, struct KMS_Agent__FilterParameters **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToKMS_Agent__FilterParameters(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToxsd__hexBinary(struct soap *soap, struct xsd__hexBinary *const*a)
-{
-	if (*a)
-		soap_serialize_xsd__hexBinary(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToxsd__hexBinary(struct soap *soap, const char *tag, int id, struct xsd__hexBinary *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, (struct soap_array*)&(*a)->__ptr, 1, type, SOAP_TYPE_KMS_Agent_xsd__hexBinary);
-	if (id < 0)
-		return soap->error;
-	return soap_out_xsd__hexBinary(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct xsd__hexBinary ** SOAP_FMAC4 soap_in_PointerToxsd__hexBinary(struct soap *soap, const char *tag, struct xsd__hexBinary **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct xsd__hexBinary **)soap_malloc(soap, sizeof(struct xsd__hexBinary *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_xsd__hexBinary(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct xsd__hexBinary **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Agent_xsd__hexBinary, sizeof(struct xsd__hexBinary), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToxsd__hexBinary(struct soap *soap, struct xsd__hexBinary *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_PointerToxsd__hexBinary);
-	if (soap_out_PointerToxsd__hexBinary(soap, tag?tag:"SOAP-ENC:Array", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct xsd__hexBinary ** SOAP_FMAC4 soap_get_PointerToxsd__hexBinary(struct soap *soap, struct xsd__hexBinary **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToxsd__hexBinary(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTounsignedByte(struct soap *soap, unsigned char *const*a)
-{
-	soap_reference(soap, *a, SOAP_TYPE_KMS_Agent_unsignedByte);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTounsignedByte(struct soap *soap, const char *tag, int id, unsigned char *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_Agent_unsignedByte);
-	if (id < 0)
-		return soap->error;
-	return soap_out_unsignedByte(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_in_PointerTounsignedByte(struct soap *soap, const char *tag, unsigned char **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (unsigned char **)soap_malloc(soap, sizeof(unsigned char *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_unsignedByte(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (unsigned char **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Agent_unsignedByte, sizeof(unsigned char), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTounsignedByte(struct soap *soap, unsigned char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_PointerTounsignedByte);
-	if (soap_out_PointerTounsignedByte(soap, tag?tag:"unsignedByte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_get_PointerTounsignedByte(struct soap *soap, unsigned char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerTounsignedByte(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__duration(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Agent_xsd__duration);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__duration(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Agent_xsd__duration, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__duration(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_xsd__duration);
-	if (soap_out_xsd__duration(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__duration(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__duration(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__dateTime(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Agent_xsd__dateTime);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__dateTime(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Agent_xsd__dateTime, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__dateTime(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_xsd__dateTime);
-	if (soap_out_xsd__dateTime(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__dateTime(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__dateTime(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__string(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Agent_xsd__string);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__string(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Agent_xsd__string, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__string(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_xsd__string);
-	if (soap_out_xsd__string(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__string(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__string(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out__QName(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Agent__QName);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in__QName(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Agent__QName, 2, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put__QName(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent__QName);
-	if (soap_out__QName(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get__QName(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in__QName(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_string(struct soap *soap, char **a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_string
-	*a = SOAP_DEFAULT_string;
-#else
-	*a = (char *)0;
-#endif
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_string(struct soap *soap, char *const*a)
-{
-	soap_reference(soap, *a, SOAP_TYPE_KMS_Agent_string);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_string(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Agent_string);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_string(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Agent_string, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_string(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Agent_string);
-	if (soap_out_string(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_string(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-} // namespace KMS_Agent
-
-
-#if defined(__BORLANDC__)
-#pragma option pop
-#pragma option pop
-#endif
-
-/* End of KMS_AgentC.cpp */
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_AgentClient.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,847 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* KMS_AgentClient.cpp
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/AgentService/KMS_Agent_SOAP.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#if defined(__BORLANDC__)
-#pragma option push -w-8060
-#pragma option push -w-8004
-#endif
-#include "KMS_AgentH.h"
-
-namespace KMS_Agent {
-
-SOAP_SOURCE_STAMP("@(#) KMS_AgentClient.cpp ver 2.7.17 2010-06-08 19:16:38 GMT")
-
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__ListKeyGroups(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__QueryParameters QueryParameters, struct KMS_Agent__ListKeyGroupsResponse &result)
-{	struct KMS_Agent__ListKeyGroups soap_tmp_KMS_Agent__ListKeyGroups;
-	soap_tmp_KMS_Agent__ListKeyGroups.QueryParameters = QueryParameters;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Agent__ListKeyGroups(soap, &soap_tmp_KMS_Agent__ListKeyGroups);
-	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_KMS_Agent__ListKeyGroups(soap, &soap_tmp_KMS_Agent__ListKeyGroups, "KMS-Agent:ListKeyGroups", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Agent__ListKeyGroups(soap, &soap_tmp_KMS_Agent__ListKeyGroups, "KMS-Agent:ListKeyGroups", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Agent__ListKeyGroupsResponse(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Agent__ListKeyGroupsResponse(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__CreateDataUnit(struct soap *soap, const char *soap_endpoint, const char *soap_action, char *ExternalUniqueID, char *ExternalTag, char *Description, struct KMS_Agent__CreateDataUnitResponse &result)
-{	struct KMS_Agent__CreateDataUnit soap_tmp_KMS_Agent__CreateDataUnit;
-	soap_tmp_KMS_Agent__CreateDataUnit.ExternalUniqueID = ExternalUniqueID;
-	soap_tmp_KMS_Agent__CreateDataUnit.ExternalTag = ExternalTag;
-	soap_tmp_KMS_Agent__CreateDataUnit.Description = Description;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Agent__CreateDataUnit(soap, &soap_tmp_KMS_Agent__CreateDataUnit);
-	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_KMS_Agent__CreateDataUnit(soap, &soap_tmp_KMS_Agent__CreateDataUnit, "KMS-Agent:CreateDataUnit", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Agent__CreateDataUnit(soap, &soap_tmp_KMS_Agent__CreateDataUnit, "KMS-Agent:CreateDataUnit", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Agent__CreateDataUnitResponse(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Agent__CreateDataUnitResponse(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RetrieveDataUnit(struct soap *soap, const char *soap_endpoint, const char *soap_action, char *DataUnitID, char *ExternalUniqueID, char *ExternalTag, char *Description, struct KMS_Agent__RetrieveDataUnitResponse &result)
-{	struct KMS_Agent__RetrieveDataUnit soap_tmp_KMS_Agent__RetrieveDataUnit;
-	soap_tmp_KMS_Agent__RetrieveDataUnit.DataUnitID = DataUnitID;
-	soap_tmp_KMS_Agent__RetrieveDataUnit.ExternalUniqueID = ExternalUniqueID;
-	soap_tmp_KMS_Agent__RetrieveDataUnit.ExternalTag = ExternalTag;
-	soap_tmp_KMS_Agent__RetrieveDataUnit.Description = Description;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Agent__RetrieveDataUnit(soap, &soap_tmp_KMS_Agent__RetrieveDataUnit);
-	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_KMS_Agent__RetrieveDataUnit(soap, &soap_tmp_KMS_Agent__RetrieveDataUnit, "KMS-Agent:RetrieveDataUnit", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Agent__RetrieveDataUnit(soap, &soap_tmp_KMS_Agent__RetrieveDataUnit, "KMS-Agent:RetrieveDataUnit", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Agent__RetrieveDataUnitResponse(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Agent__RetrieveDataUnitResponse(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap *soap, const char *soap_endpoint, const char *soap_action, char *ExternalUniqueID, char *ExternalTag, char *Description, struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse &result)
-{	struct KMS_Agent__RetrieveDataUnitByExternalUniqueID soap_tmp_KMS_Agent__RetrieveDataUnitByExternalUniqueID;
-	soap_tmp_KMS_Agent__RetrieveDataUnitByExternalUniqueID.ExternalUniqueID = ExternalUniqueID;
-	soap_tmp_KMS_Agent__RetrieveDataUnitByExternalUniqueID.ExternalTag = ExternalTag;
-	soap_tmp_KMS_Agent__RetrieveDataUnitByExternalUniqueID.Description = Description;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, &soap_tmp_KMS_Agent__RetrieveDataUnitByExternalUniqueID);
-	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_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, &soap_tmp_KMS_Agent__RetrieveDataUnitByExternalUniqueID, "KMS-Agent:RetrieveDataUnitByExternalUniqueID", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, &soap_tmp_KMS_Agent__RetrieveDataUnitByExternalUniqueID, "KMS-Agent:RetrieveDataUnitByExternalUniqueID", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__DisassociateDataUnitKeys(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__DataUnit DataUnit, struct KMS_Agent__DisassociateDataUnitKeysResponse &result)
-{	struct KMS_Agent__DisassociateDataUnitKeys soap_tmp_KMS_Agent__DisassociateDataUnitKeys;
-	soap_tmp_KMS_Agent__DisassociateDataUnitKeys.DataUnit = DataUnit;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Agent__DisassociateDataUnitKeys(soap, &soap_tmp_KMS_Agent__DisassociateDataUnitKeys);
-	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_KMS_Agent__DisassociateDataUnitKeys(soap, &soap_tmp_KMS_Agent__DisassociateDataUnitKeys, "KMS-Agent:DisassociateDataUnitKeys", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Agent__DisassociateDataUnitKeys(soap, &soap_tmp_KMS_Agent__DisassociateDataUnitKeys, "KMS-Agent:DisassociateDataUnitKeys", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Agent__DisassociateDataUnitKeysResponse(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Agent__DisassociateDataUnitKeysResponse(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__CreateKey(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, struct KMS_Agent__CreateKeyResponse &result)
-{	struct KMS_Agent__CreateKey soap_tmp_KMS_Agent__CreateKey;
-	soap_tmp_KMS_Agent__CreateKey.DataUnit = DataUnit;
-	soap_tmp_KMS_Agent__CreateKey.KeyGroupID = KeyGroupID;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Agent__CreateKey(soap, &soap_tmp_KMS_Agent__CreateKey);
-	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_KMS_Agent__CreateKey(soap, &soap_tmp_KMS_Agent__CreateKey, "KMS-Agent:CreateKey", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Agent__CreateKey(soap, &soap_tmp_KMS_Agent__CreateKey, "KMS-Agent:CreateKey", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Agent__CreateKeyResponse(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Agent__CreateKeyResponse(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__CreateKey2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, char *AgentKWKID, struct KMS_Agent__CreateKey2Response &result)
-{	struct KMS_Agent__CreateKey2 soap_tmp_KMS_Agent__CreateKey2;
-	soap_tmp_KMS_Agent__CreateKey2.DataUnit = DataUnit;
-	soap_tmp_KMS_Agent__CreateKey2.KeyGroupID = KeyGroupID;
-	soap_tmp_KMS_Agent__CreateKey2.AgentKWKID = AgentKWKID;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Agent__CreateKey2(soap, &soap_tmp_KMS_Agent__CreateKey2);
-	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_KMS_Agent__CreateKey2(soap, &soap_tmp_KMS_Agent__CreateKey2, "KMS-Agent:CreateKey2", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Agent__CreateKey2(soap, &soap_tmp_KMS_Agent__CreateKey2, "KMS-Agent:CreateKey2", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Agent__CreateKey2Response(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Agent__CreateKey2Response(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RetrieveKey(struct soap *soap, const char *soap_endpoint, const char *soap_action, char *KeyID, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, struct KMS_Agent__RetrieveKeyResponse &result)
-{	struct KMS_Agent__RetrieveKey soap_tmp_KMS_Agent__RetrieveKey;
-	soap_tmp_KMS_Agent__RetrieveKey.KeyID = KeyID;
-	soap_tmp_KMS_Agent__RetrieveKey.DataUnit = DataUnit;
-	soap_tmp_KMS_Agent__RetrieveKey.KeyGroupID = KeyGroupID;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Agent__RetrieveKey(soap, &soap_tmp_KMS_Agent__RetrieveKey);
-	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_KMS_Agent__RetrieveKey(soap, &soap_tmp_KMS_Agent__RetrieveKey, "KMS-Agent:RetrieveKey", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Agent__RetrieveKey(soap, &soap_tmp_KMS_Agent__RetrieveKey, "KMS-Agent:RetrieveKey", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Agent__RetrieveKeyResponse(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Agent__RetrieveKeyResponse(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RetrieveKey2(struct soap *soap, const char *soap_endpoint, const char *soap_action, char *KeyID, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, char *AgentKWKID, struct KMS_Agent__RetrieveKey2Response &result)
-{	struct KMS_Agent__RetrieveKey2 soap_tmp_KMS_Agent__RetrieveKey2;
-	soap_tmp_KMS_Agent__RetrieveKey2.KeyID = KeyID;
-	soap_tmp_KMS_Agent__RetrieveKey2.DataUnit = DataUnit;
-	soap_tmp_KMS_Agent__RetrieveKey2.KeyGroupID = KeyGroupID;
-	soap_tmp_KMS_Agent__RetrieveKey2.AgentKWKID = AgentKWKID;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Agent__RetrieveKey2(soap, &soap_tmp_KMS_Agent__RetrieveKey2);
-	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_KMS_Agent__RetrieveKey2(soap, &soap_tmp_KMS_Agent__RetrieveKey2, "KMS-Agent:RetrieveKey2", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Agent__RetrieveKey2(soap, &soap_tmp_KMS_Agent__RetrieveKey2, "KMS-Agent:RetrieveKey2", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Agent__RetrieveKey2Response(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Agent__RetrieveKey2Response(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RetrieveDataUnitKeys(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__DataUnit DataUnit, long PageSize, long PageOffset, char *KeyID, struct KMS_Agent__RetrieveDataUnitKeysResponse &result)
-{	struct KMS_Agent__RetrieveDataUnitKeys soap_tmp_KMS_Agent__RetrieveDataUnitKeys;
-	soap_tmp_KMS_Agent__RetrieveDataUnitKeys.DataUnit = DataUnit;
-	soap_tmp_KMS_Agent__RetrieveDataUnitKeys.PageSize = PageSize;
-	soap_tmp_KMS_Agent__RetrieveDataUnitKeys.PageOffset = PageOffset;
-	soap_tmp_KMS_Agent__RetrieveDataUnitKeys.KeyID = KeyID;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Agent__RetrieveDataUnitKeys(soap, &soap_tmp_KMS_Agent__RetrieveDataUnitKeys);
-	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_KMS_Agent__RetrieveDataUnitKeys(soap, &soap_tmp_KMS_Agent__RetrieveDataUnitKeys, "KMS-Agent:RetrieveDataUnitKeys", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Agent__RetrieveDataUnitKeys(soap, &soap_tmp_KMS_Agent__RetrieveDataUnitKeys, "KMS-Agent:RetrieveDataUnitKeys", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Agent__RetrieveDataUnitKeysResponse(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Agent__RetrieveDataUnitKeysResponse(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RetrieveDataUnitKeys2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__DataUnit DataUnit, long PageSize, long PageOffset, char *KeyID, char *AgentKWKID, struct KMS_Agent__RetrieveDataUnitKeys2Response &result)
-{	struct KMS_Agent__RetrieveDataUnitKeys2 soap_tmp_KMS_Agent__RetrieveDataUnitKeys2;
-	soap_tmp_KMS_Agent__RetrieveDataUnitKeys2.DataUnit = DataUnit;
-	soap_tmp_KMS_Agent__RetrieveDataUnitKeys2.PageSize = PageSize;
-	soap_tmp_KMS_Agent__RetrieveDataUnitKeys2.PageOffset = PageOffset;
-	soap_tmp_KMS_Agent__RetrieveDataUnitKeys2.KeyID = KeyID;
-	soap_tmp_KMS_Agent__RetrieveDataUnitKeys2.AgentKWKID = AgentKWKID;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Agent__RetrieveDataUnitKeys2(soap, &soap_tmp_KMS_Agent__RetrieveDataUnitKeys2);
-	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_KMS_Agent__RetrieveDataUnitKeys2(soap, &soap_tmp_KMS_Agent__RetrieveDataUnitKeys2, "KMS-Agent:RetrieveDataUnitKeys2", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Agent__RetrieveDataUnitKeys2(soap, &soap_tmp_KMS_Agent__RetrieveDataUnitKeys2, "KMS-Agent:RetrieveDataUnitKeys2", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Agent__RetrieveDataUnitKeys2Response(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Agent__RetrieveDataUnitKeys2Response(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RetrieveProtectAndProcessKey(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, struct KMS_Agent__RetrieveProtectAndProcessKeyResponse &result)
-{	struct KMS_Agent__RetrieveProtectAndProcessKey soap_tmp_KMS_Agent__RetrieveProtectAndProcessKey;
-	soap_tmp_KMS_Agent__RetrieveProtectAndProcessKey.DataUnit = DataUnit;
-	soap_tmp_KMS_Agent__RetrieveProtectAndProcessKey.KeyGroupID = KeyGroupID;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Agent__RetrieveProtectAndProcessKey(soap, &soap_tmp_KMS_Agent__RetrieveProtectAndProcessKey);
-	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_KMS_Agent__RetrieveProtectAndProcessKey(soap, &soap_tmp_KMS_Agent__RetrieveProtectAndProcessKey, "KMS-Agent:RetrieveProtectAndProcessKey", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Agent__RetrieveProtectAndProcessKey(soap, &soap_tmp_KMS_Agent__RetrieveProtectAndProcessKey, "KMS-Agent:RetrieveProtectAndProcessKey", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, char *AgentKWKID, struct KMS_Agent__RetrieveProtectAndProcessKey2Response &result)
-{	struct KMS_Agent__RetrieveProtectAndProcessKey2 soap_tmp_KMS_Agent__RetrieveProtectAndProcessKey2;
-	soap_tmp_KMS_Agent__RetrieveProtectAndProcessKey2.DataUnit = DataUnit;
-	soap_tmp_KMS_Agent__RetrieveProtectAndProcessKey2.KeyGroupID = KeyGroupID;
-	soap_tmp_KMS_Agent__RetrieveProtectAndProcessKey2.AgentKWKID = AgentKWKID;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Agent__RetrieveProtectAndProcessKey2(soap, &soap_tmp_KMS_Agent__RetrieveProtectAndProcessKey2);
-	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_KMS_Agent__RetrieveProtectAndProcessKey2(soap, &soap_tmp_KMS_Agent__RetrieveProtectAndProcessKey2, "KMS-Agent:RetrieveProtectAndProcessKey2", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Agent__RetrieveProtectAndProcessKey2(soap, &soap_tmp_KMS_Agent__RetrieveProtectAndProcessKey2, "KMS-Agent:RetrieveProtectAndProcessKey2", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__CreateAuditLog(struct soap *soap, const char *soap_endpoint, const char *soap_action, enum KMS_Agent__AuditLogRetention Retention, enum KMS_Agent__AuditLogCondition Condition, bool IssueAlert, char *Message, struct KMS_Agent__CreateAuditLogResponse &result)
-{	struct KMS_Agent__CreateAuditLog soap_tmp_KMS_Agent__CreateAuditLog;
-	soap_tmp_KMS_Agent__CreateAuditLog.Retention = Retention;
-	soap_tmp_KMS_Agent__CreateAuditLog.Condition = Condition;
-	soap_tmp_KMS_Agent__CreateAuditLog.IssueAlert = IssueAlert;
-	soap_tmp_KMS_Agent__CreateAuditLog.Message = Message;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Agent__CreateAuditLog(soap, &soap_tmp_KMS_Agent__CreateAuditLog);
-	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_KMS_Agent__CreateAuditLog(soap, &soap_tmp_KMS_Agent__CreateAuditLog, "KMS-Agent:CreateAuditLog", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Agent__CreateAuditLog(soap, &soap_tmp_KMS_Agent__CreateAuditLog, "KMS-Agent:CreateAuditLog", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Agent__CreateAuditLogResponse(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Agent__CreateAuditLogResponse(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__GetAgentKWKPublicKey(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__GetAgentKWKPublicKeyResponse &result)
-{	struct KMS_Agent__GetAgentKWKPublicKey soap_tmp_KMS_Agent__GetAgentKWKPublicKey;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Agent__GetAgentKWKPublicKey(soap, &soap_tmp_KMS_Agent__GetAgentKWKPublicKey);
-	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_KMS_Agent__GetAgentKWKPublicKey(soap, &soap_tmp_KMS_Agent__GetAgentKWKPublicKey, "KMS-Agent:GetAgentKWKPublicKey", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Agent__GetAgentKWKPublicKey(soap, &soap_tmp_KMS_Agent__GetAgentKWKPublicKey, "KMS-Agent:GetAgentKWKPublicKey", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RegisterAgentKWK(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct xsd__hexBinary AgentKWK, struct KMS_Agent__RegisterAgentKWKResponse &result)
-{	struct KMS_Agent__RegisterAgentKWK soap_tmp_KMS_Agent__RegisterAgentKWK;
-	soap_tmp_KMS_Agent__RegisterAgentKWK.AgentKWK = AgentKWK;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Agent__RegisterAgentKWK(soap, &soap_tmp_KMS_Agent__RegisterAgentKWK);
-	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_KMS_Agent__RegisterAgentKWK(soap, &soap_tmp_KMS_Agent__RegisterAgentKWK, "KMS-Agent:RegisterAgentKWK", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Agent__RegisterAgentKWK(soap, &soap_tmp_KMS_Agent__RegisterAgentKWK, "KMS-Agent:RegisterAgentKWK", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Agent__RegisterAgentKWKResponse(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Agent__RegisterAgentKWKResponse(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-} // namespace KMS_Agent
-
-
-#if defined(__BORLANDC__)
-#pragma option pop
-#pragma option pop
-#endif
-
-/* End of KMS_AgentClient.cpp */
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_AgentH.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1827 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* KMS_AgentH.h
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/AgentService/KMS_Agent_SOAP.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#ifndef KMS_AgentH_H
-#define KMS_AgentH_H
-#include "KMS_AgentStub.h"
-
-namespace KMS_Agent {
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap*, const void*, int);
-SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap*, const void*, const char*, int, int);
-SOAP_FMAC3 void *SOAP_FMAC4 soap_getelement(struct soap*, int*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_putindependent(struct soap*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_getindependent(struct soap*);
-#endif
-SOAP_FMAC3 int SOAP_FMAC4 soap_ignore_element(struct soap*);
-
-SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_fdelete(struct soap_clist*);
-SOAP_FMAC3 void* SOAP_FMAC4 soap_class_id_enter(struct soap*, const char*, void*, int, size_t, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_byte
-#define SOAP_TYPE_KMS_Agent_byte (3)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_byte(struct soap*, char *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_byte(struct soap*, const char*, int, const char *, const char*);
-SOAP_FMAC3 char * SOAP_FMAC4 soap_in_byte(struct soap*, const char*, char *, const char*);
-
-#define soap_write_byte(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_byte(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_byte(struct soap*, const char *, const char*, const char*);
-
-#define soap_read_byte(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_byte(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char * SOAP_FMAC4 soap_get_byte(struct soap*, char *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_int
-#define SOAP_TYPE_KMS_Agent_int (1)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_int(struct soap*, int *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_int(struct soap*, const char*, int, const int *, const char*);
-SOAP_FMAC3 int * SOAP_FMAC4 soap_in_int(struct soap*, const char*, int *, const char*);
-
-#define soap_write_int(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_int(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_int(struct soap*, const int *, const char*, const char*);
-
-#define soap_read_int(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_int(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 int * SOAP_FMAC4 soap_get_int(struct soap*, int *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_xsd__int
-#define SOAP_TYPE_KMS_Agent_xsd__int (11)
-#endif
-
-#define soap_default_xsd__int(soap, a) soap_default_long(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__int(struct soap*, const char*, int, const long *, const char*);
-SOAP_FMAC3 long * SOAP_FMAC4 soap_in_xsd__int(struct soap*, const char*, long *, const char*);
-
-#define soap_write_xsd__int(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_xsd__int(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__int(struct soap*, const long *, const char*, const char*);
-
-#define soap_read_xsd__int(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_xsd__int(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_get_xsd__int(struct soap*, long *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_long
-#define SOAP_TYPE_KMS_Agent_long (10)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_long(struct soap*, long *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_long(struct soap*, const char*, int, const long *, const char*);
-SOAP_FMAC3 long * SOAP_FMAC4 soap_in_long(struct soap*, const char*, long *, const char*);
-
-#define soap_write_long(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_long(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_long(struct soap*, const long *, const char*, const char*);
-
-#define soap_read_long(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_long(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_get_long(struct soap*, long *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_xsd__long
-#define SOAP_TYPE_KMS_Agent_xsd__long (15)
-#endif
-
-#define soap_default_xsd__long(soap, a) soap_default_LONG64(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__long(struct soap*, const char*, int, const LONG64 *, const char*);
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_in_xsd__long(struct soap*, const char*, LONG64 *, const char*);
-
-#define soap_write_xsd__long(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_xsd__long(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__long(struct soap*, const LONG64 *, const char*, const char*);
-
-#define soap_read_xsd__long(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_xsd__long(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_xsd__long(struct soap*, LONG64 *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_LONG64
-#define SOAP_TYPE_KMS_Agent_LONG64 (14)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_LONG64(struct soap*, LONG64 *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_LONG64(struct soap*, const char*, int, const LONG64 *, const char*);
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_in_LONG64(struct soap*, const char*, LONG64 *, const char*);
-
-#define soap_write_LONG64(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_LONG64(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_LONG64(struct soap*, const LONG64 *, const char*, const char*);
-
-#define soap_read_LONG64(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_LONG64(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_LONG64(struct soap*, LONG64 *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_xsd__float
-#define SOAP_TYPE_KMS_Agent_xsd__float (9)
-#endif
-
-#define soap_default_xsd__float(soap, a) soap_default_float(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__float(struct soap*, const char*, int, const float *, const char*);
-SOAP_FMAC3 float * SOAP_FMAC4 soap_in_xsd__float(struct soap*, const char*, float *, const char*);
-
-#define soap_write_xsd__float(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_xsd__float(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__float(struct soap*, const float *, const char*, const char*);
-
-#define soap_read_xsd__float(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_xsd__float(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_get_xsd__float(struct soap*, float *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_float
-#define SOAP_TYPE_KMS_Agent_float (8)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_float(struct soap*, float *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_float(struct soap*, const char*, int, const float *, const char*);
-SOAP_FMAC3 float * SOAP_FMAC4 soap_in_float(struct soap*, const char*, float *, const char*);
-
-#define soap_write_float(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_float(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_float(struct soap*, const float *, const char*, const char*);
-
-#define soap_read_float(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_float(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_get_float(struct soap*, float *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_unsignedByte
-#define SOAP_TYPE_KMS_Agent_unsignedByte (20)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedByte(struct soap*, unsigned char *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedByte(struct soap*, const char*, int, const unsigned char *, const char*);
-SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_in_unsignedByte(struct soap*, const char*, unsigned char *, const char*);
-
-#define soap_write_unsignedByte(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_unsignedByte(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedByte(struct soap*, const unsigned char *, const char*, const char*);
-
-#define soap_read_unsignedByte(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_unsignedByte(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_get_unsignedByte(struct soap*, unsigned char *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_unsignedInt
-#define SOAP_TYPE_KMS_Agent_unsignedInt (19)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedInt(struct soap*, unsigned int *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedInt(struct soap*, const char*, int, const unsigned int *, const char*);
-SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_in_unsignedInt(struct soap*, const char*, unsigned int *, const char*);
-
-#define soap_write_unsignedInt(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_unsignedInt(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedInt(struct soap*, const unsigned int *, const char*, const char*);
-
-#define soap_read_unsignedInt(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_unsignedInt(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_get_unsignedInt(struct soap*, unsigned int *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogCondition
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogCondition (41)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__AuditLogCondition(struct soap*, enum KMS_Agent__AuditLogCondition *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__AuditLogCondition(struct soap*, const char*, int, const enum KMS_Agent__AuditLogCondition *, const char*);
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_KMS_Agent__AuditLogCondition2s(struct soap*, enum KMS_Agent__AuditLogCondition);
-SOAP_FMAC3 enum KMS_Agent__AuditLogCondition * SOAP_FMAC4 soap_in_KMS_Agent__AuditLogCondition(struct soap*, const char*, enum KMS_Agent__AuditLogCondition *, const char*);
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2KMS_Agent__AuditLogCondition(struct soap*, const char*, enum KMS_Agent__AuditLogCondition *);
-
-#define soap_write_KMS_Agent__AuditLogCondition(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_KMS_Agent__AuditLogCondition(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__AuditLogCondition(struct soap*, const enum KMS_Agent__AuditLogCondition *, const char*, const char*);
-
-#define soap_read_KMS_Agent__AuditLogCondition(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__AuditLogCondition(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 enum KMS_Agent__AuditLogCondition * SOAP_FMAC4 soap_get_KMS_Agent__AuditLogCondition(struct soap*, enum KMS_Agent__AuditLogCondition *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogRetention
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogRetention (40)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__AuditLogRetention(struct soap*, enum KMS_Agent__AuditLogRetention *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__AuditLogRetention(struct soap*, const char*, int, const enum KMS_Agent__AuditLogRetention *, const char*);
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_KMS_Agent__AuditLogRetention2s(struct soap*, enum KMS_Agent__AuditLogRetention);
-SOAP_FMAC3 enum KMS_Agent__AuditLogRetention * SOAP_FMAC4 soap_in_KMS_Agent__AuditLogRetention(struct soap*, const char*, enum KMS_Agent__AuditLogRetention *, const char*);
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2KMS_Agent__AuditLogRetention(struct soap*, const char*, enum KMS_Agent__AuditLogRetention *);
-
-#define soap_write_KMS_Agent__AuditLogRetention(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_KMS_Agent__AuditLogRetention(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__AuditLogRetention(struct soap*, const enum KMS_Agent__AuditLogRetention *, const char*, const char*);
-
-#define soap_read_KMS_Agent__AuditLogRetention(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__AuditLogRetention(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 enum KMS_Agent__AuditLogRetention * SOAP_FMAC4 soap_get_KMS_Agent__AuditLogRetention(struct soap*, enum KMS_Agent__AuditLogRetention *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnitState
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnitState (32)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__DataUnitState(struct soap*, enum KMS_Agent__DataUnitState *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__DataUnitState(struct soap*, const char*, int, const enum KMS_Agent__DataUnitState *, const char*);
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_KMS_Agent__DataUnitState2s(struct soap*, enum KMS_Agent__DataUnitState);
-SOAP_FMAC3 enum KMS_Agent__DataUnitState * SOAP_FMAC4 soap_in_KMS_Agent__DataUnitState(struct soap*, const char*, enum KMS_Agent__DataUnitState *, const char*);
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2KMS_Agent__DataUnitState(struct soap*, const char*, enum KMS_Agent__DataUnitState *);
-
-#define soap_write_KMS_Agent__DataUnitState(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_KMS_Agent__DataUnitState(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__DataUnitState(struct soap*, const enum KMS_Agent__DataUnitState *, const char*, const char*);
-
-#define soap_read_KMS_Agent__DataUnitState(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__DataUnitState(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 enum KMS_Agent__DataUnitState * SOAP_FMAC4 soap_get_KMS_Agent__DataUnitState(struct soap*, enum KMS_Agent__DataUnitState *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__KeyState
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__KeyState (31)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__KeyState(struct soap*, enum KMS_Agent__KeyState *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__KeyState(struct soap*, const char*, int, const enum KMS_Agent__KeyState *, const char*);
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_KMS_Agent__KeyState2s(struct soap*, enum KMS_Agent__KeyState);
-SOAP_FMAC3 enum KMS_Agent__KeyState * SOAP_FMAC4 soap_in_KMS_Agent__KeyState(struct soap*, const char*, enum KMS_Agent__KeyState *, const char*);
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2KMS_Agent__KeyState(struct soap*, const char*, enum KMS_Agent__KeyState *);
-
-#define soap_write_KMS_Agent__KeyState(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_KMS_Agent__KeyState(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__KeyState(struct soap*, const enum KMS_Agent__KeyState *, const char*, const char*);
-
-#define soap_read_KMS_Agent__KeyState(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__KeyState(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 enum KMS_Agent__KeyState * SOAP_FMAC4 soap_get_KMS_Agent__KeyState(struct soap*, enum KMS_Agent__KeyState *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__KeyType
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__KeyType (30)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__KeyType(struct soap*, enum KMS_Agent__KeyType *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__KeyType(struct soap*, const char*, int, const enum KMS_Agent__KeyType *, const char*);
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_KMS_Agent__KeyType2s(struct soap*, enum KMS_Agent__KeyType);
-SOAP_FMAC3 enum KMS_Agent__KeyType * SOAP_FMAC4 soap_in_KMS_Agent__KeyType(struct soap*, const char*, enum KMS_Agent__KeyType *, const char*);
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2KMS_Agent__KeyType(struct soap*, const char*, enum KMS_Agent__KeyType *);
-
-#define soap_write_KMS_Agent__KeyType(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_KMS_Agent__KeyType(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__KeyType(struct soap*, const enum KMS_Agent__KeyType *, const char*, const char*);
-
-#define soap_read_KMS_Agent__KeyType(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__KeyType(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 enum KMS_Agent__KeyType * SOAP_FMAC4 soap_get_KMS_Agent__KeyType(struct soap*, enum KMS_Agent__KeyType *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__FilterOperator
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__FilterOperator (25)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__FilterOperator(struct soap*, enum KMS_Agent__FilterOperator *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__FilterOperator(struct soap*, const char*, int, const enum KMS_Agent__FilterOperator *, const char*);
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_KMS_Agent__FilterOperator2s(struct soap*, enum KMS_Agent__FilterOperator);
-SOAP_FMAC3 enum KMS_Agent__FilterOperator * SOAP_FMAC4 soap_in_KMS_Agent__FilterOperator(struct soap*, const char*, enum KMS_Agent__FilterOperator *, const char*);
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2KMS_Agent__FilterOperator(struct soap*, const char*, enum KMS_Agent__FilterOperator *);
-
-#define soap_write_KMS_Agent__FilterOperator(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_KMS_Agent__FilterOperator(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__FilterOperator(struct soap*, const enum KMS_Agent__FilterOperator *, const char*, const char*);
-
-#define soap_read_KMS_Agent__FilterOperator(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__FilterOperator(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 enum KMS_Agent__FilterOperator * SOAP_FMAC4 soap_get_KMS_Agent__FilterOperator(struct soap*, enum KMS_Agent__FilterOperator *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__SortOrder
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__SortOrder (24)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__SortOrder(struct soap*, enum KMS_Agent__SortOrder *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__SortOrder(struct soap*, const char*, int, const enum KMS_Agent__SortOrder *, const char*);
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_KMS_Agent__SortOrder2s(struct soap*, enum KMS_Agent__SortOrder);
-SOAP_FMAC3 enum KMS_Agent__SortOrder * SOAP_FMAC4 soap_in_KMS_Agent__SortOrder(struct soap*, const char*, enum KMS_Agent__SortOrder *, const char*);
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2KMS_Agent__SortOrder(struct soap*, const char*, enum KMS_Agent__SortOrder *);
-
-#define soap_write_KMS_Agent__SortOrder(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_KMS_Agent__SortOrder(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__SortOrder(struct soap*, const enum KMS_Agent__SortOrder *, const char*, const char*);
-
-#define soap_read_KMS_Agent__SortOrder(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__SortOrder(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 enum KMS_Agent__SortOrder * SOAP_FMAC4 soap_get_KMS_Agent__SortOrder(struct soap*, enum KMS_Agent__SortOrder *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_xsd__boolean
-#define SOAP_TYPE_KMS_Agent_xsd__boolean (13)
-#endif
-
-#define soap_default_xsd__boolean(soap, a) soap_default_bool(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__boolean(struct soap*, const char*, int, const bool *, const char*);
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_xsd__boolean2s(struct soap*, bool);
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_xsd__boolean(struct soap*, const char*, bool *, const char*);
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2xsd__boolean(struct soap*, const char*, bool *);
-
-#define soap_write_xsd__boolean(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_xsd__boolean(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__boolean(struct soap*, const bool *, const char*, const char*);
-
-#define soap_read_xsd__boolean(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_xsd__boolean(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_xsd__boolean(struct soap*, bool *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_bool
-#define SOAP_TYPE_KMS_Agent_bool (12)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_bool(struct soap*, bool *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_bool(struct soap*, const char*, int, const bool *, const char*);
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_bool2s(struct soap*, bool);
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_bool(struct soap*, const char*, bool *, const char*);
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2bool(struct soap*, const char*, bool *);
-
-#define soap_write_bool(soap, data) ( soap_begin_send(soap) || KMS_Agent::soap_put_bool(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_bool(struct soap*, const bool *, const char*, const char*);
-
-#define soap_read_bool(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_bool(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_bool(struct soap*, bool *, const char*, const char*);
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Agent_SOAP_ENV__Fault
-#define SOAP_TYPE_KMS_Agent_SOAP_ENV__Fault (113)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Fault(struct soap*, struct SOAP_ENV__Fault *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Fault(struct soap*, const struct SOAP_ENV__Fault *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Fault(struct soap*, const char*, int, const struct SOAP_ENV__Fault *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_in_SOAP_ENV__Fault(struct soap*, const char*, struct SOAP_ENV__Fault *, const char*);
-
-#define soap_write_SOAP_ENV__Fault(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_SOAP_ENV__Fault(soap, data), 0) || KMS_Agent::soap_put_SOAP_ENV__Fault(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Fault(struct soap*, const struct SOAP_ENV__Fault *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Fault(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_SOAP_ENV__Fault(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_get_SOAP_ENV__Fault(struct soap*, struct SOAP_ENV__Fault *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Fault(soap, n) soap_instantiate_SOAP_ENV__Fault(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Fault(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Fault * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Fault(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Fault(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Agent_SOAP_ENV__Reason
-#define SOAP_TYPE_KMS_Agent_SOAP_ENV__Reason (112)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Reason(struct soap*, const struct SOAP_ENV__Reason *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Reason(struct soap*, const char*, int, const struct SOAP_ENV__Reason *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_in_SOAP_ENV__Reason(struct soap*, const char*, struct SOAP_ENV__Reason *, const char*);
-
-#define soap_write_SOAP_ENV__Reason(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_SOAP_ENV__Reason(soap, data), 0) || KMS_Agent::soap_put_SOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Reason(struct soap*, const struct SOAP_ENV__Reason *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Reason(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_SOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_get_SOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Reason(soap, n) soap_instantiate_SOAP_ENV__Reason(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Reason(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Reason * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Reason(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Reason(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Agent_SOAP_ENV__Detail
-#define SOAP_TYPE_KMS_Agent_SOAP_ENV__Detail (111)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Detail(struct soap*, const struct SOAP_ENV__Detail *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Detail(struct soap*, const char*, int, const struct SOAP_ENV__Detail *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_in_SOAP_ENV__Detail(struct soap*, const char*, struct SOAP_ENV__Detail *, const char*);
-
-#define soap_write_SOAP_ENV__Detail(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_SOAP_ENV__Detail(soap, data), 0) || KMS_Agent::soap_put_SOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Detail(struct soap*, const struct SOAP_ENV__Detail *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Detail(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_SOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_get_SOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Detail(soap, n) soap_instantiate_SOAP_ENV__Detail(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Detail(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Detail * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Detail(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Detail(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Agent_SOAP_ENV__Code
-#define SOAP_TYPE_KMS_Agent_SOAP_ENV__Code (109)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Code(struct soap*, const struct SOAP_ENV__Code *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Code(struct soap*, const char*, int, const struct SOAP_ENV__Code *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_in_SOAP_ENV__Code(struct soap*, const char*, struct SOAP_ENV__Code *, const char*);
-
-#define soap_write_SOAP_ENV__Code(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_SOAP_ENV__Code(soap, data), 0) || KMS_Agent::soap_put_SOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Code(struct soap*, const struct SOAP_ENV__Code *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Code(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_SOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_get_SOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Code(soap, n) soap_instantiate_SOAP_ENV__Code(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Code(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Code * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Code(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Code(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Agent_SOAP_ENV__Header
-#define SOAP_TYPE_KMS_Agent_SOAP_ENV__Header (108)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Header(struct soap*, struct SOAP_ENV__Header *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Header(struct soap*, const struct SOAP_ENV__Header *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Header(struct soap*, const char*, int, const struct SOAP_ENV__Header *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_in_SOAP_ENV__Header(struct soap*, const char*, struct SOAP_ENV__Header *, const char*);
-
-#define soap_write_SOAP_ENV__Header(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_SOAP_ENV__Header(soap, data), 0) || KMS_Agent::soap_put_SOAP_ENV__Header(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Header(struct soap*, const struct SOAP_ENV__Header *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Header(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_SOAP_ENV__Header(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_get_SOAP_ENV__Header(struct soap*, struct SOAP_ENV__Header *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Header(soap, n) soap_instantiate_SOAP_ENV__Header(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Header(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Header * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Header(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Header(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWK
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWK (107)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RegisterAgentKWK(struct soap*, struct KMS_Agent__RegisterAgentKWK *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RegisterAgentKWK(struct soap*, const struct KMS_Agent__RegisterAgentKWK *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RegisterAgentKWK(struct soap*, const char*, int, const struct KMS_Agent__RegisterAgentKWK *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RegisterAgentKWK * SOAP_FMAC4 soap_in_KMS_Agent__RegisterAgentKWK(struct soap*, const char*, struct KMS_Agent__RegisterAgentKWK *, const char*);
-
-#define soap_write_KMS_Agent__RegisterAgentKWK(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RegisterAgentKWK(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RegisterAgentKWK(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RegisterAgentKWK(struct soap*, const struct KMS_Agent__RegisterAgentKWK *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RegisterAgentKWK(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RegisterAgentKWK(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RegisterAgentKWK * SOAP_FMAC4 soap_get_KMS_Agent__RegisterAgentKWK(struct soap*, struct KMS_Agent__RegisterAgentKWK *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RegisterAgentKWK(soap, n) soap_instantiate_KMS_Agent__RegisterAgentKWK(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RegisterAgentKWK(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RegisterAgentKWK * SOAP_FMAC2 soap_instantiate_KMS_Agent__RegisterAgentKWK(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RegisterAgentKWK(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWKResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWKResponse (104)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RegisterAgentKWKResponse(struct soap*, struct KMS_Agent__RegisterAgentKWKResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RegisterAgentKWKResponse(struct soap*, const struct KMS_Agent__RegisterAgentKWKResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RegisterAgentKWKResponse(struct soap*, const char*, int, const struct KMS_Agent__RegisterAgentKWKResponse *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RegisterAgentKWKResponse * SOAP_FMAC4 soap_in_KMS_Agent__RegisterAgentKWKResponse(struct soap*, const char*, struct KMS_Agent__RegisterAgentKWKResponse *, const char*);
-
-#define soap_write_KMS_Agent__RegisterAgentKWKResponse(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RegisterAgentKWKResponse(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RegisterAgentKWKResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RegisterAgentKWKResponse(struct soap*, const struct KMS_Agent__RegisterAgentKWKResponse *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RegisterAgentKWKResponse(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RegisterAgentKWKResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RegisterAgentKWKResponse * SOAP_FMAC4 soap_get_KMS_Agent__RegisterAgentKWKResponse(struct soap*, struct KMS_Agent__RegisterAgentKWKResponse *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RegisterAgentKWKResponse(soap, n) soap_instantiate_KMS_Agent__RegisterAgentKWKResponse(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RegisterAgentKWKResponse(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RegisterAgentKWKResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__RegisterAgentKWKResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RegisterAgentKWKResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKey
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKey (103)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__GetAgentKWKPublicKey(struct soap*, struct KMS_Agent__GetAgentKWKPublicKey *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__GetAgentKWKPublicKey(struct soap*, const struct KMS_Agent__GetAgentKWKPublicKey *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__GetAgentKWKPublicKey(struct soap*, const char*, int, const struct KMS_Agent__GetAgentKWKPublicKey *, const char*);
-SOAP_FMAC3 struct KMS_Agent__GetAgentKWKPublicKey * SOAP_FMAC4 soap_in_KMS_Agent__GetAgentKWKPublicKey(struct soap*, const char*, struct KMS_Agent__GetAgentKWKPublicKey *, const char*);
-
-#define soap_write_KMS_Agent__GetAgentKWKPublicKey(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__GetAgentKWKPublicKey(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__GetAgentKWKPublicKey(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__GetAgentKWKPublicKey(struct soap*, const struct KMS_Agent__GetAgentKWKPublicKey *, const char*, const char*);
-
-#define soap_read_KMS_Agent__GetAgentKWKPublicKey(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__GetAgentKWKPublicKey(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__GetAgentKWKPublicKey * SOAP_FMAC4 soap_get_KMS_Agent__GetAgentKWKPublicKey(struct soap*, struct KMS_Agent__GetAgentKWKPublicKey *, const char*, const char*);
-
-#define soap_new_KMS_Agent__GetAgentKWKPublicKey(soap, n) soap_instantiate_KMS_Agent__GetAgentKWKPublicKey(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__GetAgentKWKPublicKey(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__GetAgentKWKPublicKey * SOAP_FMAC2 soap_instantiate_KMS_Agent__GetAgentKWKPublicKey(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__GetAgentKWKPublicKey(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKeyResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKeyResponse (100)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__GetAgentKWKPublicKeyResponse(struct soap*, struct KMS_Agent__GetAgentKWKPublicKeyResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__GetAgentKWKPublicKeyResponse(struct soap*, const struct KMS_Agent__GetAgentKWKPublicKeyResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__GetAgentKWKPublicKeyResponse(struct soap*, const char*, int, const struct KMS_Agent__GetAgentKWKPublicKeyResponse *, const char*);
-SOAP_FMAC3 struct KMS_Agent__GetAgentKWKPublicKeyResponse * SOAP_FMAC4 soap_in_KMS_Agent__GetAgentKWKPublicKeyResponse(struct soap*, const char*, struct KMS_Agent__GetAgentKWKPublicKeyResponse *, const char*);
-
-#define soap_write_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__GetAgentKWKPublicKeyResponse(struct soap*, const struct KMS_Agent__GetAgentKWKPublicKeyResponse *, const char*, const char*);
-
-#define soap_read_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__GetAgentKWKPublicKeyResponse * SOAP_FMAC4 soap_get_KMS_Agent__GetAgentKWKPublicKeyResponse(struct soap*, struct KMS_Agent__GetAgentKWKPublicKeyResponse *, const char*, const char*);
-
-#define soap_new_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, n) soap_instantiate_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__GetAgentKWKPublicKeyResponse(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__GetAgentKWKPublicKeyResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__GetAgentKWKPublicKeyResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__GetAgentKWKPublicKeyResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLog
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLog (99)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__CreateAuditLog(struct soap*, struct KMS_Agent__CreateAuditLog *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__CreateAuditLog(struct soap*, const struct KMS_Agent__CreateAuditLog *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__CreateAuditLog(struct soap*, const char*, int, const struct KMS_Agent__CreateAuditLog *, const char*);
-SOAP_FMAC3 struct KMS_Agent__CreateAuditLog * SOAP_FMAC4 soap_in_KMS_Agent__CreateAuditLog(struct soap*, const char*, struct KMS_Agent__CreateAuditLog *, const char*);
-
-#define soap_write_KMS_Agent__CreateAuditLog(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__CreateAuditLog(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__CreateAuditLog(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__CreateAuditLog(struct soap*, const struct KMS_Agent__CreateAuditLog *, const char*, const char*);
-
-#define soap_read_KMS_Agent__CreateAuditLog(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__CreateAuditLog(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__CreateAuditLog * SOAP_FMAC4 soap_get_KMS_Agent__CreateAuditLog(struct soap*, struct KMS_Agent__CreateAuditLog *, const char*, const char*);
-
-#define soap_new_KMS_Agent__CreateAuditLog(soap, n) soap_instantiate_KMS_Agent__CreateAuditLog(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__CreateAuditLog(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__CreateAuditLog * SOAP_FMAC2 soap_instantiate_KMS_Agent__CreateAuditLog(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__CreateAuditLog(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLogResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLogResponse (96)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__CreateAuditLogResponse(struct soap*, struct KMS_Agent__CreateAuditLogResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__CreateAuditLogResponse(struct soap*, const struct KMS_Agent__CreateAuditLogResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__CreateAuditLogResponse(struct soap*, const char*, int, const struct KMS_Agent__CreateAuditLogResponse *, const char*);
-SOAP_FMAC3 struct KMS_Agent__CreateAuditLogResponse * SOAP_FMAC4 soap_in_KMS_Agent__CreateAuditLogResponse(struct soap*, const char*, struct KMS_Agent__CreateAuditLogResponse *, const char*);
-
-#define soap_write_KMS_Agent__CreateAuditLogResponse(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__CreateAuditLogResponse(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__CreateAuditLogResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__CreateAuditLogResponse(struct soap*, const struct KMS_Agent__CreateAuditLogResponse *, const char*, const char*);
-
-#define soap_read_KMS_Agent__CreateAuditLogResponse(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__CreateAuditLogResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__CreateAuditLogResponse * SOAP_FMAC4 soap_get_KMS_Agent__CreateAuditLogResponse(struct soap*, struct KMS_Agent__CreateAuditLogResponse *, const char*, const char*);
-
-#define soap_new_KMS_Agent__CreateAuditLogResponse(soap, n) soap_instantiate_KMS_Agent__CreateAuditLogResponse(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__CreateAuditLogResponse(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__CreateAuditLogResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__CreateAuditLogResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__CreateAuditLogResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2 (95)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap*, struct KMS_Agent__RetrieveProtectAndProcessKey2 *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap*, const struct KMS_Agent__RetrieveProtectAndProcessKey2 *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap*, const char*, int, const struct KMS_Agent__RetrieveProtectAndProcessKey2 *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RetrieveProtectAndProcessKey2 * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap*, const char*, struct KMS_Agent__RetrieveProtectAndProcessKey2 *, const char*);
-
-#define soap_write_KMS_Agent__RetrieveProtectAndProcessKey2(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RetrieveProtectAndProcessKey2(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RetrieveProtectAndProcessKey2(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap*, const struct KMS_Agent__RetrieveProtectAndProcessKey2 *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RetrieveProtectAndProcessKey2(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RetrieveProtectAndProcessKey2(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveProtectAndProcessKey2 * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap*, struct KMS_Agent__RetrieveProtectAndProcessKey2 *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RetrieveProtectAndProcessKey2(soap, n) soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKey2(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RetrieveProtectAndProcessKey2(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveProtectAndProcessKey2 * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2Response
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2Response (92)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveProtectAndProcessKey2Response(struct soap*, struct KMS_Agent__RetrieveProtectAndProcessKey2Response *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveProtectAndProcessKey2Response(struct soap*, const struct KMS_Agent__RetrieveProtectAndProcessKey2Response *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveProtectAndProcessKey2Response(struct soap*, const char*, int, const struct KMS_Agent__RetrieveProtectAndProcessKey2Response *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RetrieveProtectAndProcessKey2Response * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveProtectAndProcessKey2Response(struct soap*, const char*, struct KMS_Agent__RetrieveProtectAndProcessKey2Response *, const char*);
-
-#define soap_write_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveProtectAndProcessKey2Response(struct soap*, const struct KMS_Agent__RetrieveProtectAndProcessKey2Response *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveProtectAndProcessKey2Response * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveProtectAndProcessKey2Response(struct soap*, struct KMS_Agent__RetrieveProtectAndProcessKey2Response *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, n) soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RetrieveProtectAndProcessKey2Response(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveProtectAndProcessKey2Response * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKey2Response(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveProtectAndProcessKey2Response(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey (91)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveProtectAndProcessKey(struct soap*, struct KMS_Agent__RetrieveProtectAndProcessKey *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveProtectAndProcessKey(struct soap*, const struct KMS_Agent__RetrieveProtectAndProcessKey *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveProtectAndProcessKey(struct soap*, const char*, int, const struct KMS_Agent__RetrieveProtectAndProcessKey *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RetrieveProtectAndProcessKey * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveProtectAndProcessKey(struct soap*, const char*, struct KMS_Agent__RetrieveProtectAndProcessKey *, const char*);
-
-#define soap_write_KMS_Agent__RetrieveProtectAndProcessKey(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RetrieveProtectAndProcessKey(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RetrieveProtectAndProcessKey(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveProtectAndProcessKey(struct soap*, const struct KMS_Agent__RetrieveProtectAndProcessKey *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RetrieveProtectAndProcessKey(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RetrieveProtectAndProcessKey(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveProtectAndProcessKey * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveProtectAndProcessKey(struct soap*, struct KMS_Agent__RetrieveProtectAndProcessKey *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RetrieveProtectAndProcessKey(soap, n) soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKey(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RetrieveProtectAndProcessKey(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveProtectAndProcessKey * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKey(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveProtectAndProcessKey(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKeyResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKeyResponse (88)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveProtectAndProcessKeyResponse(struct soap*, struct KMS_Agent__RetrieveProtectAndProcessKeyResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveProtectAndProcessKeyResponse(struct soap*, const struct KMS_Agent__RetrieveProtectAndProcessKeyResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveProtectAndProcessKeyResponse(struct soap*, const char*, int, const struct KMS_Agent__RetrieveProtectAndProcessKeyResponse *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RetrieveProtectAndProcessKeyResponse * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveProtectAndProcessKeyResponse(struct soap*, const char*, struct KMS_Agent__RetrieveProtectAndProcessKeyResponse *, const char*);
-
-#define soap_write_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveProtectAndProcessKeyResponse(struct soap*, const struct KMS_Agent__RetrieveProtectAndProcessKeyResponse *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveProtectAndProcessKeyResponse * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveProtectAndProcessKeyResponse(struct soap*, struct KMS_Agent__RetrieveProtectAndProcessKeyResponse *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, n) soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RetrieveProtectAndProcessKeyResponse(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveProtectAndProcessKeyResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveProtectAndProcessKeyResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveProtectAndProcessKeyResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2 (87)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveDataUnitKeys2(struct soap*, struct KMS_Agent__RetrieveDataUnitKeys2 *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveDataUnitKeys2(struct soap*, const struct KMS_Agent__RetrieveDataUnitKeys2 *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveDataUnitKeys2(struct soap*, const char*, int, const struct KMS_Agent__RetrieveDataUnitKeys2 *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitKeys2 * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveDataUnitKeys2(struct soap*, const char*, struct KMS_Agent__RetrieveDataUnitKeys2 *, const char*);
-
-#define soap_write_KMS_Agent__RetrieveDataUnitKeys2(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RetrieveDataUnitKeys2(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RetrieveDataUnitKeys2(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveDataUnitKeys2(struct soap*, const struct KMS_Agent__RetrieveDataUnitKeys2 *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RetrieveDataUnitKeys2(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RetrieveDataUnitKeys2(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitKeys2 * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveDataUnitKeys2(struct soap*, struct KMS_Agent__RetrieveDataUnitKeys2 *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RetrieveDataUnitKeys2(soap, n) soap_instantiate_KMS_Agent__RetrieveDataUnitKeys2(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RetrieveDataUnitKeys2(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveDataUnitKeys2 * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveDataUnitKeys2(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveDataUnitKeys2(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2Response
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2Response (84)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveDataUnitKeys2Response(struct soap*, struct KMS_Agent__RetrieveDataUnitKeys2Response *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveDataUnitKeys2Response(struct soap*, const struct KMS_Agent__RetrieveDataUnitKeys2Response *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveDataUnitKeys2Response(struct soap*, const char*, int, const struct KMS_Agent__RetrieveDataUnitKeys2Response *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitKeys2Response * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveDataUnitKeys2Response(struct soap*, const char*, struct KMS_Agent__RetrieveDataUnitKeys2Response *, const char*);
-
-#define soap_write_KMS_Agent__RetrieveDataUnitKeys2Response(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RetrieveDataUnitKeys2Response(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RetrieveDataUnitKeys2Response(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveDataUnitKeys2Response(struct soap*, const struct KMS_Agent__RetrieveDataUnitKeys2Response *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RetrieveDataUnitKeys2Response(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RetrieveDataUnitKeys2Response(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitKeys2Response * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveDataUnitKeys2Response(struct soap*, struct KMS_Agent__RetrieveDataUnitKeys2Response *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RetrieveDataUnitKeys2Response(soap, n) soap_instantiate_KMS_Agent__RetrieveDataUnitKeys2Response(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RetrieveDataUnitKeys2Response(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveDataUnitKeys2Response * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveDataUnitKeys2Response(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveDataUnitKeys2Response(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys (83)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveDataUnitKeys(struct soap*, struct KMS_Agent__RetrieveDataUnitKeys *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveDataUnitKeys(struct soap*, const struct KMS_Agent__RetrieveDataUnitKeys *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveDataUnitKeys(struct soap*, const char*, int, const struct KMS_Agent__RetrieveDataUnitKeys *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitKeys * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveDataUnitKeys(struct soap*, const char*, struct KMS_Agent__RetrieveDataUnitKeys *, const char*);
-
-#define soap_write_KMS_Agent__RetrieveDataUnitKeys(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RetrieveDataUnitKeys(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RetrieveDataUnitKeys(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveDataUnitKeys(struct soap*, const struct KMS_Agent__RetrieveDataUnitKeys *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RetrieveDataUnitKeys(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RetrieveDataUnitKeys(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitKeys * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveDataUnitKeys(struct soap*, struct KMS_Agent__RetrieveDataUnitKeys *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RetrieveDataUnitKeys(soap, n) soap_instantiate_KMS_Agent__RetrieveDataUnitKeys(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RetrieveDataUnitKeys(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveDataUnitKeys * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveDataUnitKeys(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveDataUnitKeys(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeysResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeysResponse (80)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveDataUnitKeysResponse(struct soap*, struct KMS_Agent__RetrieveDataUnitKeysResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveDataUnitKeysResponse(struct soap*, const struct KMS_Agent__RetrieveDataUnitKeysResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveDataUnitKeysResponse(struct soap*, const char*, int, const struct KMS_Agent__RetrieveDataUnitKeysResponse *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitKeysResponse * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveDataUnitKeysResponse(struct soap*, const char*, struct KMS_Agent__RetrieveDataUnitKeysResponse *, const char*);
-
-#define soap_write_KMS_Agent__RetrieveDataUnitKeysResponse(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RetrieveDataUnitKeysResponse(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RetrieveDataUnitKeysResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveDataUnitKeysResponse(struct soap*, const struct KMS_Agent__RetrieveDataUnitKeysResponse *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RetrieveDataUnitKeysResponse(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RetrieveDataUnitKeysResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitKeysResponse * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveDataUnitKeysResponse(struct soap*, struct KMS_Agent__RetrieveDataUnitKeysResponse *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RetrieveDataUnitKeysResponse(soap, n) soap_instantiate_KMS_Agent__RetrieveDataUnitKeysResponse(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RetrieveDataUnitKeysResponse(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveDataUnitKeysResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveDataUnitKeysResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveDataUnitKeysResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2 (79)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveKey2(struct soap*, struct KMS_Agent__RetrieveKey2 *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveKey2(struct soap*, const struct KMS_Agent__RetrieveKey2 *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveKey2(struct soap*, const char*, int, const struct KMS_Agent__RetrieveKey2 *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RetrieveKey2 * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveKey2(struct soap*, const char*, struct KMS_Agent__RetrieveKey2 *, const char*);
-
-#define soap_write_KMS_Agent__RetrieveKey2(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RetrieveKey2(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RetrieveKey2(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveKey2(struct soap*, const struct KMS_Agent__RetrieveKey2 *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RetrieveKey2(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RetrieveKey2(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveKey2 * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveKey2(struct soap*, struct KMS_Agent__RetrieveKey2 *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RetrieveKey2(soap, n) soap_instantiate_KMS_Agent__RetrieveKey2(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RetrieveKey2(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveKey2 * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveKey2(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveKey2(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2Response
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2Response (76)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveKey2Response(struct soap*, struct KMS_Agent__RetrieveKey2Response *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveKey2Response(struct soap*, const struct KMS_Agent__RetrieveKey2Response *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveKey2Response(struct soap*, const char*, int, const struct KMS_Agent__RetrieveKey2Response *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RetrieveKey2Response * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveKey2Response(struct soap*, const char*, struct KMS_Agent__RetrieveKey2Response *, const char*);
-
-#define soap_write_KMS_Agent__RetrieveKey2Response(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RetrieveKey2Response(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RetrieveKey2Response(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveKey2Response(struct soap*, const struct KMS_Agent__RetrieveKey2Response *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RetrieveKey2Response(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RetrieveKey2Response(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveKey2Response * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveKey2Response(struct soap*, struct KMS_Agent__RetrieveKey2Response *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RetrieveKey2Response(soap, n) soap_instantiate_KMS_Agent__RetrieveKey2Response(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RetrieveKey2Response(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveKey2Response * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveKey2Response(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveKey2Response(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey (75)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveKey(struct soap*, struct KMS_Agent__RetrieveKey *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveKey(struct soap*, const struct KMS_Agent__RetrieveKey *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveKey(struct soap*, const char*, int, const struct KMS_Agent__RetrieveKey *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RetrieveKey * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveKey(struct soap*, const char*, struct KMS_Agent__RetrieveKey *, const char*);
-
-#define soap_write_KMS_Agent__RetrieveKey(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RetrieveKey(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RetrieveKey(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveKey(struct soap*, const struct KMS_Agent__RetrieveKey *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RetrieveKey(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RetrieveKey(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveKey * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveKey(struct soap*, struct KMS_Agent__RetrieveKey *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RetrieveKey(soap, n) soap_instantiate_KMS_Agent__RetrieveKey(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RetrieveKey(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveKey * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveKey(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveKey(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKeyResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKeyResponse (72)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveKeyResponse(struct soap*, struct KMS_Agent__RetrieveKeyResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveKeyResponse(struct soap*, const struct KMS_Agent__RetrieveKeyResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveKeyResponse(struct soap*, const char*, int, const struct KMS_Agent__RetrieveKeyResponse *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RetrieveKeyResponse * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveKeyResponse(struct soap*, const char*, struct KMS_Agent__RetrieveKeyResponse *, const char*);
-
-#define soap_write_KMS_Agent__RetrieveKeyResponse(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RetrieveKeyResponse(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RetrieveKeyResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveKeyResponse(struct soap*, const struct KMS_Agent__RetrieveKeyResponse *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RetrieveKeyResponse(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RetrieveKeyResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveKeyResponse * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveKeyResponse(struct soap*, struct KMS_Agent__RetrieveKeyResponse *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RetrieveKeyResponse(soap, n) soap_instantiate_KMS_Agent__RetrieveKeyResponse(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RetrieveKeyResponse(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveKeyResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveKeyResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveKeyResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2 (71)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__CreateKey2(struct soap*, struct KMS_Agent__CreateKey2 *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__CreateKey2(struct soap*, const struct KMS_Agent__CreateKey2 *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__CreateKey2(struct soap*, const char*, int, const struct KMS_Agent__CreateKey2 *, const char*);
-SOAP_FMAC3 struct KMS_Agent__CreateKey2 * SOAP_FMAC4 soap_in_KMS_Agent__CreateKey2(struct soap*, const char*, struct KMS_Agent__CreateKey2 *, const char*);
-
-#define soap_write_KMS_Agent__CreateKey2(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__CreateKey2(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__CreateKey2(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__CreateKey2(struct soap*, const struct KMS_Agent__CreateKey2 *, const char*, const char*);
-
-#define soap_read_KMS_Agent__CreateKey2(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__CreateKey2(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__CreateKey2 * SOAP_FMAC4 soap_get_KMS_Agent__CreateKey2(struct soap*, struct KMS_Agent__CreateKey2 *, const char*, const char*);
-
-#define soap_new_KMS_Agent__CreateKey2(soap, n) soap_instantiate_KMS_Agent__CreateKey2(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__CreateKey2(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__CreateKey2 * SOAP_FMAC2 soap_instantiate_KMS_Agent__CreateKey2(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__CreateKey2(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2Response
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2Response (68)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__CreateKey2Response(struct soap*, struct KMS_Agent__CreateKey2Response *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__CreateKey2Response(struct soap*, const struct KMS_Agent__CreateKey2Response *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__CreateKey2Response(struct soap*, const char*, int, const struct KMS_Agent__CreateKey2Response *, const char*);
-SOAP_FMAC3 struct KMS_Agent__CreateKey2Response * SOAP_FMAC4 soap_in_KMS_Agent__CreateKey2Response(struct soap*, const char*, struct KMS_Agent__CreateKey2Response *, const char*);
-
-#define soap_write_KMS_Agent__CreateKey2Response(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__CreateKey2Response(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__CreateKey2Response(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__CreateKey2Response(struct soap*, const struct KMS_Agent__CreateKey2Response *, const char*, const char*);
-
-#define soap_read_KMS_Agent__CreateKey2Response(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__CreateKey2Response(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__CreateKey2Response * SOAP_FMAC4 soap_get_KMS_Agent__CreateKey2Response(struct soap*, struct KMS_Agent__CreateKey2Response *, const char*, const char*);
-
-#define soap_new_KMS_Agent__CreateKey2Response(soap, n) soap_instantiate_KMS_Agent__CreateKey2Response(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__CreateKey2Response(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__CreateKey2Response * SOAP_FMAC2 soap_instantiate_KMS_Agent__CreateKey2Response(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__CreateKey2Response(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey (67)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__CreateKey(struct soap*, struct KMS_Agent__CreateKey *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__CreateKey(struct soap*, const struct KMS_Agent__CreateKey *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__CreateKey(struct soap*, const char*, int, const struct KMS_Agent__CreateKey *, const char*);
-SOAP_FMAC3 struct KMS_Agent__CreateKey * SOAP_FMAC4 soap_in_KMS_Agent__CreateKey(struct soap*, const char*, struct KMS_Agent__CreateKey *, const char*);
-
-#define soap_write_KMS_Agent__CreateKey(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__CreateKey(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__CreateKey(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__CreateKey(struct soap*, const struct KMS_Agent__CreateKey *, const char*, const char*);
-
-#define soap_read_KMS_Agent__CreateKey(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__CreateKey(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__CreateKey * SOAP_FMAC4 soap_get_KMS_Agent__CreateKey(struct soap*, struct KMS_Agent__CreateKey *, const char*, const char*);
-
-#define soap_new_KMS_Agent__CreateKey(soap, n) soap_instantiate_KMS_Agent__CreateKey(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__CreateKey(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__CreateKey * SOAP_FMAC2 soap_instantiate_KMS_Agent__CreateKey(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__CreateKey(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKeyResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKeyResponse (64)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__CreateKeyResponse(struct soap*, struct KMS_Agent__CreateKeyResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__CreateKeyResponse(struct soap*, const struct KMS_Agent__CreateKeyResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__CreateKeyResponse(struct soap*, const char*, int, const struct KMS_Agent__CreateKeyResponse *, const char*);
-SOAP_FMAC3 struct KMS_Agent__CreateKeyResponse * SOAP_FMAC4 soap_in_KMS_Agent__CreateKeyResponse(struct soap*, const char*, struct KMS_Agent__CreateKeyResponse *, const char*);
-
-#define soap_write_KMS_Agent__CreateKeyResponse(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__CreateKeyResponse(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__CreateKeyResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__CreateKeyResponse(struct soap*, const struct KMS_Agent__CreateKeyResponse *, const char*, const char*);
-
-#define soap_read_KMS_Agent__CreateKeyResponse(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__CreateKeyResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__CreateKeyResponse * SOAP_FMAC4 soap_get_KMS_Agent__CreateKeyResponse(struct soap*, struct KMS_Agent__CreateKeyResponse *, const char*, const char*);
-
-#define soap_new_KMS_Agent__CreateKeyResponse(soap, n) soap_instantiate_KMS_Agent__CreateKeyResponse(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__CreateKeyResponse(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__CreateKeyResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__CreateKeyResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__CreateKeyResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeys
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeys (63)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__DisassociateDataUnitKeys(struct soap*, struct KMS_Agent__DisassociateDataUnitKeys *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__DisassociateDataUnitKeys(struct soap*, const struct KMS_Agent__DisassociateDataUnitKeys *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__DisassociateDataUnitKeys(struct soap*, const char*, int, const struct KMS_Agent__DisassociateDataUnitKeys *, const char*);
-SOAP_FMAC3 struct KMS_Agent__DisassociateDataUnitKeys * SOAP_FMAC4 soap_in_KMS_Agent__DisassociateDataUnitKeys(struct soap*, const char*, struct KMS_Agent__DisassociateDataUnitKeys *, const char*);
-
-#define soap_write_KMS_Agent__DisassociateDataUnitKeys(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__DisassociateDataUnitKeys(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__DisassociateDataUnitKeys(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__DisassociateDataUnitKeys(struct soap*, const struct KMS_Agent__DisassociateDataUnitKeys *, const char*, const char*);
-
-#define soap_read_KMS_Agent__DisassociateDataUnitKeys(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__DisassociateDataUnitKeys(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__DisassociateDataUnitKeys * SOAP_FMAC4 soap_get_KMS_Agent__DisassociateDataUnitKeys(struct soap*, struct KMS_Agent__DisassociateDataUnitKeys *, const char*, const char*);
-
-#define soap_new_KMS_Agent__DisassociateDataUnitKeys(soap, n) soap_instantiate_KMS_Agent__DisassociateDataUnitKeys(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__DisassociateDataUnitKeys(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__DisassociateDataUnitKeys * SOAP_FMAC2 soap_instantiate_KMS_Agent__DisassociateDataUnitKeys(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__DisassociateDataUnitKeys(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeysResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeysResponse (58)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__DisassociateDataUnitKeysResponse(struct soap*, struct KMS_Agent__DisassociateDataUnitKeysResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__DisassociateDataUnitKeysResponse(struct soap*, const struct KMS_Agent__DisassociateDataUnitKeysResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__DisassociateDataUnitKeysResponse(struct soap*, const char*, int, const struct KMS_Agent__DisassociateDataUnitKeysResponse *, const char*);
-SOAP_FMAC3 struct KMS_Agent__DisassociateDataUnitKeysResponse * SOAP_FMAC4 soap_in_KMS_Agent__DisassociateDataUnitKeysResponse(struct soap*, const char*, struct KMS_Agent__DisassociateDataUnitKeysResponse *, const char*);
-
-#define soap_write_KMS_Agent__DisassociateDataUnitKeysResponse(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__DisassociateDataUnitKeysResponse(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__DisassociateDataUnitKeysResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__DisassociateDataUnitKeysResponse(struct soap*, const struct KMS_Agent__DisassociateDataUnitKeysResponse *, const char*, const char*);
-
-#define soap_read_KMS_Agent__DisassociateDataUnitKeysResponse(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__DisassociateDataUnitKeysResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__DisassociateDataUnitKeysResponse * SOAP_FMAC4 soap_get_KMS_Agent__DisassociateDataUnitKeysResponse(struct soap*, struct KMS_Agent__DisassociateDataUnitKeysResponse *, const char*, const char*);
-
-#define soap_new_KMS_Agent__DisassociateDataUnitKeysResponse(soap, n) soap_instantiate_KMS_Agent__DisassociateDataUnitKeysResponse(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__DisassociateDataUnitKeysResponse(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__DisassociateDataUnitKeysResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__DisassociateDataUnitKeysResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__DisassociateDataUnitKeysResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueID
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueID (57)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap*, struct KMS_Agent__RetrieveDataUnitByExternalUniqueID *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap*, const struct KMS_Agent__RetrieveDataUnitByExternalUniqueID *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap*, const char*, int, const struct KMS_Agent__RetrieveDataUnitByExternalUniqueID *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitByExternalUniqueID * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap*, const char*, struct KMS_Agent__RetrieveDataUnitByExternalUniqueID *, const char*);
-
-#define soap_write_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap*, const struct KMS_Agent__RetrieveDataUnitByExternalUniqueID *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitByExternalUniqueID * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap*, struct KMS_Agent__RetrieveDataUnitByExternalUniqueID *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, n) soap_instantiate_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RetrieveDataUnitByExternalUniqueID(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveDataUnitByExternalUniqueID * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse (54)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(struct soap*, struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(struct soap*, const struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(struct soap*, const char*, int, const struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(struct soap*, const char*, struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse *, const char*);
-
-#define soap_write_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(struct soap*, const struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(struct soap*, struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, n) soap_instantiate_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnit
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnit (53)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveDataUnit(struct soap*, struct KMS_Agent__RetrieveDataUnit *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveDataUnit(struct soap*, const struct KMS_Agent__RetrieveDataUnit *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveDataUnit(struct soap*, const char*, int, const struct KMS_Agent__RetrieveDataUnit *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnit * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveDataUnit(struct soap*, const char*, struct KMS_Agent__RetrieveDataUnit *, const char*);
-
-#define soap_write_KMS_Agent__RetrieveDataUnit(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RetrieveDataUnit(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RetrieveDataUnit(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveDataUnit(struct soap*, const struct KMS_Agent__RetrieveDataUnit *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RetrieveDataUnit(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RetrieveDataUnit(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnit * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveDataUnit(struct soap*, struct KMS_Agent__RetrieveDataUnit *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RetrieveDataUnit(soap, n) soap_instantiate_KMS_Agent__RetrieveDataUnit(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RetrieveDataUnit(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveDataUnit * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveDataUnit(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveDataUnit(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitResponse (50)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__RetrieveDataUnitResponse(struct soap*, struct KMS_Agent__RetrieveDataUnitResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__RetrieveDataUnitResponse(struct soap*, const struct KMS_Agent__RetrieveDataUnitResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__RetrieveDataUnitResponse(struct soap*, const char*, int, const struct KMS_Agent__RetrieveDataUnitResponse *, const char*);
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitResponse * SOAP_FMAC4 soap_in_KMS_Agent__RetrieveDataUnitResponse(struct soap*, const char*, struct KMS_Agent__RetrieveDataUnitResponse *, const char*);
-
-#define soap_write_KMS_Agent__RetrieveDataUnitResponse(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__RetrieveDataUnitResponse(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__RetrieveDataUnitResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__RetrieveDataUnitResponse(struct soap*, const struct KMS_Agent__RetrieveDataUnitResponse *, const char*, const char*);
-
-#define soap_read_KMS_Agent__RetrieveDataUnitResponse(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__RetrieveDataUnitResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__RetrieveDataUnitResponse * SOAP_FMAC4 soap_get_KMS_Agent__RetrieveDataUnitResponse(struct soap*, struct KMS_Agent__RetrieveDataUnitResponse *, const char*, const char*);
-
-#define soap_new_KMS_Agent__RetrieveDataUnitResponse(soap, n) soap_instantiate_KMS_Agent__RetrieveDataUnitResponse(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__RetrieveDataUnitResponse(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__RetrieveDataUnitResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__RetrieveDataUnitResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__RetrieveDataUnitResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnit
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnit (49)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__CreateDataUnit(struct soap*, struct KMS_Agent__CreateDataUnit *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__CreateDataUnit(struct soap*, const struct KMS_Agent__CreateDataUnit *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__CreateDataUnit(struct soap*, const char*, int, const struct KMS_Agent__CreateDataUnit *, const char*);
-SOAP_FMAC3 struct KMS_Agent__CreateDataUnit * SOAP_FMAC4 soap_in_KMS_Agent__CreateDataUnit(struct soap*, const char*, struct KMS_Agent__CreateDataUnit *, const char*);
-
-#define soap_write_KMS_Agent__CreateDataUnit(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__CreateDataUnit(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__CreateDataUnit(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__CreateDataUnit(struct soap*, const struct KMS_Agent__CreateDataUnit *, const char*, const char*);
-
-#define soap_read_KMS_Agent__CreateDataUnit(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__CreateDataUnit(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__CreateDataUnit * SOAP_FMAC4 soap_get_KMS_Agent__CreateDataUnit(struct soap*, struct KMS_Agent__CreateDataUnit *, const char*, const char*);
-
-#define soap_new_KMS_Agent__CreateDataUnit(soap, n) soap_instantiate_KMS_Agent__CreateDataUnit(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__CreateDataUnit(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__CreateDataUnit * SOAP_FMAC2 soap_instantiate_KMS_Agent__CreateDataUnit(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__CreateDataUnit(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnitResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnitResponse (46)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__CreateDataUnitResponse(struct soap*, struct KMS_Agent__CreateDataUnitResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__CreateDataUnitResponse(struct soap*, const struct KMS_Agent__CreateDataUnitResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__CreateDataUnitResponse(struct soap*, const char*, int, const struct KMS_Agent__CreateDataUnitResponse *, const char*);
-SOAP_FMAC3 struct KMS_Agent__CreateDataUnitResponse * SOAP_FMAC4 soap_in_KMS_Agent__CreateDataUnitResponse(struct soap*, const char*, struct KMS_Agent__CreateDataUnitResponse *, const char*);
-
-#define soap_write_KMS_Agent__CreateDataUnitResponse(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__CreateDataUnitResponse(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__CreateDataUnitResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__CreateDataUnitResponse(struct soap*, const struct KMS_Agent__CreateDataUnitResponse *, const char*, const char*);
-
-#define soap_read_KMS_Agent__CreateDataUnitResponse(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__CreateDataUnitResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__CreateDataUnitResponse * SOAP_FMAC4 soap_get_KMS_Agent__CreateDataUnitResponse(struct soap*, struct KMS_Agent__CreateDataUnitResponse *, const char*, const char*);
-
-#define soap_new_KMS_Agent__CreateDataUnitResponse(soap, n) soap_instantiate_KMS_Agent__CreateDataUnitResponse(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__CreateDataUnitResponse(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__CreateDataUnitResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__CreateDataUnitResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__CreateDataUnitResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroups
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroups (45)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__ListKeyGroups(struct soap*, struct KMS_Agent__ListKeyGroups *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__ListKeyGroups(struct soap*, const struct KMS_Agent__ListKeyGroups *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__ListKeyGroups(struct soap*, const char*, int, const struct KMS_Agent__ListKeyGroups *, const char*);
-SOAP_FMAC3 struct KMS_Agent__ListKeyGroups * SOAP_FMAC4 soap_in_KMS_Agent__ListKeyGroups(struct soap*, const char*, struct KMS_Agent__ListKeyGroups *, const char*);
-
-#define soap_write_KMS_Agent__ListKeyGroups(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__ListKeyGroups(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__ListKeyGroups(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__ListKeyGroups(struct soap*, const struct KMS_Agent__ListKeyGroups *, const char*, const char*);
-
-#define soap_read_KMS_Agent__ListKeyGroups(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__ListKeyGroups(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__ListKeyGroups * SOAP_FMAC4 soap_get_KMS_Agent__ListKeyGroups(struct soap*, struct KMS_Agent__ListKeyGroups *, const char*, const char*);
-
-#define soap_new_KMS_Agent__ListKeyGroups(soap, n) soap_instantiate_KMS_Agent__ListKeyGroups(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__ListKeyGroups(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__ListKeyGroups * SOAP_FMAC2 soap_instantiate_KMS_Agent__ListKeyGroups(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__ListKeyGroups(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroupsResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroupsResponse (42)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__ListKeyGroupsResponse(struct soap*, struct KMS_Agent__ListKeyGroupsResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__ListKeyGroupsResponse(struct soap*, const struct KMS_Agent__ListKeyGroupsResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__ListKeyGroupsResponse(struct soap*, const char*, int, const struct KMS_Agent__ListKeyGroupsResponse *, const char*);
-SOAP_FMAC3 struct KMS_Agent__ListKeyGroupsResponse * SOAP_FMAC4 soap_in_KMS_Agent__ListKeyGroupsResponse(struct soap*, const char*, struct KMS_Agent__ListKeyGroupsResponse *, const char*);
-
-#define soap_write_KMS_Agent__ListKeyGroupsResponse(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__ListKeyGroupsResponse(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__ListKeyGroupsResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__ListKeyGroupsResponse(struct soap*, const struct KMS_Agent__ListKeyGroupsResponse *, const char*, const char*);
-
-#define soap_read_KMS_Agent__ListKeyGroupsResponse(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__ListKeyGroupsResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__ListKeyGroupsResponse * SOAP_FMAC4 soap_get_KMS_Agent__ListKeyGroupsResponse(struct soap*, struct KMS_Agent__ListKeyGroupsResponse *, const char*, const char*);
-
-#define soap_new_KMS_Agent__ListKeyGroupsResponse(soap, n) soap_instantiate_KMS_Agent__ListKeyGroupsResponse(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__ListKeyGroupsResponse(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__ListKeyGroupsResponse * SOAP_FMAC2 soap_instantiate_KMS_Agent__ListKeyGroupsResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__ListKeyGroupsResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnit
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnit (39)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__DataUnit(struct soap*, struct KMS_Agent__DataUnit *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__DataUnit(struct soap*, const struct KMS_Agent__DataUnit *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__DataUnit(struct soap*, const char*, int, const struct KMS_Agent__DataUnit *, const char*);
-SOAP_FMAC3 struct KMS_Agent__DataUnit * SOAP_FMAC4 soap_in_KMS_Agent__DataUnit(struct soap*, const char*, struct KMS_Agent__DataUnit *, const char*);
-
-#define soap_write_KMS_Agent__DataUnit(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__DataUnit(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__DataUnit(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__DataUnit(struct soap*, const struct KMS_Agent__DataUnit *, const char*, const char*);
-
-#define soap_read_KMS_Agent__DataUnit(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__DataUnit(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__DataUnit * SOAP_FMAC4 soap_get_KMS_Agent__DataUnit(struct soap*, struct KMS_Agent__DataUnit *, const char*, const char*);
-
-#define soap_new_KMS_Agent__DataUnit(soap, n) soap_instantiate_KMS_Agent__DataUnit(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__DataUnit(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__DataUnit * SOAP_FMAC2 soap_instantiate_KMS_Agent__DataUnit(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__DataUnit(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeys
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeys (37)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__ArrayOfKeys(struct soap*, struct KMS_Agent__ArrayOfKeys *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__ArrayOfKeys(struct soap*, struct KMS_Agent__ArrayOfKeys const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__ArrayOfKeys(struct soap*, const char*, int, const struct KMS_Agent__ArrayOfKeys *, const char*);
-SOAP_FMAC3 struct KMS_Agent__ArrayOfKeys * SOAP_FMAC4 soap_in_KMS_Agent__ArrayOfKeys(struct soap*, const char*, struct KMS_Agent__ArrayOfKeys *, const char*);
-
-#define soap_write_KMS_Agent__ArrayOfKeys(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__ArrayOfKeys(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__ArrayOfKeys(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__ArrayOfKeys(struct soap*, const struct KMS_Agent__ArrayOfKeys *, const char*, const char*);
-
-#define soap_read_KMS_Agent__ArrayOfKeys(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__ArrayOfKeys(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__ArrayOfKeys * SOAP_FMAC4 soap_get_KMS_Agent__ArrayOfKeys(struct soap*, struct KMS_Agent__ArrayOfKeys *, const char*, const char*);
-
-#define soap_new_KMS_Agent__ArrayOfKeys(soap, n) soap_instantiate_KMS_Agent__ArrayOfKeys(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__ArrayOfKeys(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__ArrayOfKeys * SOAP_FMAC2 soap_instantiate_KMS_Agent__ArrayOfKeys(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__ArrayOfKeys(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__Key
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__Key (36)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__Key(struct soap*, struct KMS_Agent__Key *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__Key(struct soap*, const struct KMS_Agent__Key *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__Key(struct soap*, const char*, int, const struct KMS_Agent__Key *, const char*);
-SOAP_FMAC3 struct KMS_Agent__Key * SOAP_FMAC4 soap_in_KMS_Agent__Key(struct soap*, const char*, struct KMS_Agent__Key *, const char*);
-
-#define soap_write_KMS_Agent__Key(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__Key(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__Key(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__Key(struct soap*, const struct KMS_Agent__Key *, const char*, const char*);
-
-#define soap_read_KMS_Agent__Key(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__Key(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__Key * SOAP_FMAC4 soap_get_KMS_Agent__Key(struct soap*, struct KMS_Agent__Key *, const char*, const char*);
-
-#define soap_new_KMS_Agent__Key(soap, n) soap_instantiate_KMS_Agent__Key(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__Key(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__Key * SOAP_FMAC2 soap_instantiate_KMS_Agent__Key(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__Key(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeyGroups
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeyGroups (34)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__ArrayOfKeyGroups(struct soap*, struct KMS_Agent__ArrayOfKeyGroups *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__ArrayOfKeyGroups(struct soap*, struct KMS_Agent__ArrayOfKeyGroups const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__ArrayOfKeyGroups(struct soap*, const char*, int, const struct KMS_Agent__ArrayOfKeyGroups *, const char*);
-SOAP_FMAC3 struct KMS_Agent__ArrayOfKeyGroups * SOAP_FMAC4 soap_in_KMS_Agent__ArrayOfKeyGroups(struct soap*, const char*, struct KMS_Agent__ArrayOfKeyGroups *, const char*);
-
-#define soap_write_KMS_Agent__ArrayOfKeyGroups(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__ArrayOfKeyGroups(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__ArrayOfKeyGroups(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__ArrayOfKeyGroups(struct soap*, const struct KMS_Agent__ArrayOfKeyGroups *, const char*, const char*);
-
-#define soap_read_KMS_Agent__ArrayOfKeyGroups(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__ArrayOfKeyGroups(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__ArrayOfKeyGroups * SOAP_FMAC4 soap_get_KMS_Agent__ArrayOfKeyGroups(struct soap*, struct KMS_Agent__ArrayOfKeyGroups *, const char*, const char*);
-
-#define soap_new_KMS_Agent__ArrayOfKeyGroups(soap, n) soap_instantiate_KMS_Agent__ArrayOfKeyGroups(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__ArrayOfKeyGroups(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__ArrayOfKeyGroups * SOAP_FMAC2 soap_instantiate_KMS_Agent__ArrayOfKeyGroups(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__ArrayOfKeyGroups(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup (33)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__KeyGroup(struct soap*, struct KMS_Agent__KeyGroup *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__KeyGroup(struct soap*, const struct KMS_Agent__KeyGroup *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__KeyGroup(struct soap*, const char*, int, const struct KMS_Agent__KeyGroup *, const char*);
-SOAP_FMAC3 struct KMS_Agent__KeyGroup * SOAP_FMAC4 soap_in_KMS_Agent__KeyGroup(struct soap*, const char*, struct KMS_Agent__KeyGroup *, const char*);
-
-#define soap_write_KMS_Agent__KeyGroup(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__KeyGroup(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__KeyGroup(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__KeyGroup(struct soap*, const struct KMS_Agent__KeyGroup *, const char*, const char*);
-
-#define soap_read_KMS_Agent__KeyGroup(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__KeyGroup(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__KeyGroup * SOAP_FMAC4 soap_get_KMS_Agent__KeyGroup(struct soap*, struct KMS_Agent__KeyGroup *, const char*, const char*);
-
-#define soap_new_KMS_Agent__KeyGroup(soap, n) soap_instantiate_KMS_Agent__KeyGroup(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__KeyGroup(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__KeyGroup * SOAP_FMAC2 soap_instantiate_KMS_Agent__KeyGroup(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__KeyGroup(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__QueryParameters
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__QueryParameters (29)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__QueryParameters(struct soap*, struct KMS_Agent__QueryParameters *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__QueryParameters(struct soap*, const struct KMS_Agent__QueryParameters *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__QueryParameters(struct soap*, const char*, int, const struct KMS_Agent__QueryParameters *, const char*);
-SOAP_FMAC3 struct KMS_Agent__QueryParameters * SOAP_FMAC4 soap_in_KMS_Agent__QueryParameters(struct soap*, const char*, struct KMS_Agent__QueryParameters *, const char*);
-
-#define soap_write_KMS_Agent__QueryParameters(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__QueryParameters(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__QueryParameters(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__QueryParameters(struct soap*, const struct KMS_Agent__QueryParameters *, const char*, const char*);
-
-#define soap_read_KMS_Agent__QueryParameters(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__QueryParameters(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__QueryParameters * SOAP_FMAC4 soap_get_KMS_Agent__QueryParameters(struct soap*, struct KMS_Agent__QueryParameters *, const char*, const char*);
-
-#define soap_new_KMS_Agent__QueryParameters(soap, n) soap_instantiate_KMS_Agent__QueryParameters(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__QueryParameters(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__QueryParameters * SOAP_FMAC2 soap_instantiate_KMS_Agent__QueryParameters(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__QueryParameters(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfFilterParameters
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfFilterParameters (27)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__ArrayOfFilterParameters(struct soap*, struct KMS_Agent__ArrayOfFilterParameters *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__ArrayOfFilterParameters(struct soap*, struct KMS_Agent__ArrayOfFilterParameters const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__ArrayOfFilterParameters(struct soap*, const char*, int, const struct KMS_Agent__ArrayOfFilterParameters *, const char*);
-SOAP_FMAC3 struct KMS_Agent__ArrayOfFilterParameters * SOAP_FMAC4 soap_in_KMS_Agent__ArrayOfFilterParameters(struct soap*, const char*, struct KMS_Agent__ArrayOfFilterParameters *, const char*);
-
-#define soap_write_KMS_Agent__ArrayOfFilterParameters(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__ArrayOfFilterParameters(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__ArrayOfFilterParameters(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__ArrayOfFilterParameters(struct soap*, const struct KMS_Agent__ArrayOfFilterParameters *, const char*, const char*);
-
-#define soap_read_KMS_Agent__ArrayOfFilterParameters(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__ArrayOfFilterParameters(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__ArrayOfFilterParameters * SOAP_FMAC4 soap_get_KMS_Agent__ArrayOfFilterParameters(struct soap*, struct KMS_Agent__ArrayOfFilterParameters *, const char*, const char*);
-
-#define soap_new_KMS_Agent__ArrayOfFilterParameters(soap, n) soap_instantiate_KMS_Agent__ArrayOfFilterParameters(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__ArrayOfFilterParameters(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__ArrayOfFilterParameters * SOAP_FMAC2 soap_instantiate_KMS_Agent__ArrayOfFilterParameters(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__ArrayOfFilterParameters(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters (26)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__FilterParameters(struct soap*, struct KMS_Agent__FilterParameters *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__FilterParameters(struct soap*, const struct KMS_Agent__FilterParameters *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__FilterParameters(struct soap*, const char*, int, const struct KMS_Agent__FilterParameters *, const char*);
-SOAP_FMAC3 struct KMS_Agent__FilterParameters * SOAP_FMAC4 soap_in_KMS_Agent__FilterParameters(struct soap*, const char*, struct KMS_Agent__FilterParameters *, const char*);
-
-#define soap_write_KMS_Agent__FilterParameters(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__FilterParameters(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__FilterParameters(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__FilterParameters(struct soap*, const struct KMS_Agent__FilterParameters *, const char*, const char*);
-
-#define soap_read_KMS_Agent__FilterParameters(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__FilterParameters(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__FilterParameters * SOAP_FMAC4 soap_get_KMS_Agent__FilterParameters(struct soap*, struct KMS_Agent__FilterParameters *, const char*, const char*);
-
-#define soap_new_KMS_Agent__FilterParameters(soap, n) soap_instantiate_KMS_Agent__FilterParameters(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__FilterParameters(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__FilterParameters * SOAP_FMAC2 soap_instantiate_KMS_Agent__FilterParameters(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__FilterParameters(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfHexBinary
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfHexBinary (22)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Agent__ArrayOfHexBinary(struct soap*, struct KMS_Agent__ArrayOfHexBinary *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Agent__ArrayOfHexBinary(struct soap*, struct KMS_Agent__ArrayOfHexBinary const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Agent__ArrayOfHexBinary(struct soap*, const char*, int, const struct KMS_Agent__ArrayOfHexBinary *, const char*);
-SOAP_FMAC3 struct KMS_Agent__ArrayOfHexBinary * SOAP_FMAC4 soap_in_KMS_Agent__ArrayOfHexBinary(struct soap*, const char*, struct KMS_Agent__ArrayOfHexBinary *, const char*);
-
-#define soap_write_KMS_Agent__ArrayOfHexBinary(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_KMS_Agent__ArrayOfHexBinary(soap, data), 0) || KMS_Agent::soap_put_KMS_Agent__ArrayOfHexBinary(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Agent__ArrayOfHexBinary(struct soap*, const struct KMS_Agent__ArrayOfHexBinary *, const char*, const char*);
-
-#define soap_read_KMS_Agent__ArrayOfHexBinary(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_KMS_Agent__ArrayOfHexBinary(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__ArrayOfHexBinary * SOAP_FMAC4 soap_get_KMS_Agent__ArrayOfHexBinary(struct soap*, struct KMS_Agent__ArrayOfHexBinary *, const char*, const char*);
-
-#define soap_new_KMS_Agent__ArrayOfHexBinary(soap, n) soap_instantiate_KMS_Agent__ArrayOfHexBinary(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Agent__ArrayOfHexBinary(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Agent__ArrayOfHexBinary * SOAP_FMAC2 soap_instantiate_KMS_Agent__ArrayOfHexBinary(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Agent__ArrayOfHexBinary(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Agent_xsd__hexBinary
-#define SOAP_TYPE_KMS_Agent_xsd__hexBinary (18)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_xsd__hexBinary(struct soap*, struct xsd__hexBinary *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__hexBinary(struct soap*, struct xsd__hexBinary const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__hexBinary(struct soap*, const char*, int, const struct xsd__hexBinary *, const char*);
-SOAP_FMAC3 struct xsd__hexBinary * SOAP_FMAC4 soap_in_xsd__hexBinary(struct soap*, const char*, struct xsd__hexBinary *, const char*);
-
-#define soap_write_xsd__hexBinary(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_xsd__hexBinary(soap, data), 0) || KMS_Agent::soap_put_xsd__hexBinary(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__hexBinary(struct soap*, const struct xsd__hexBinary *, const char*, const char*);
-
-#define soap_read_xsd__hexBinary(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_xsd__hexBinary(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct xsd__hexBinary * SOAP_FMAC4 soap_get_xsd__hexBinary(struct soap*, struct xsd__hexBinary *, const char*, const char*);
-
-#define soap_new_xsd__hexBinary(soap, n) soap_instantiate_xsd__hexBinary(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_xsd__hexBinary(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct xsd__hexBinary * SOAP_FMAC2 soap_instantiate_xsd__hexBinary(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__hexBinary(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Agent_PointerToSOAP_ENV__Reason
-#define SOAP_TYPE_KMS_Agent_PointerToSOAP_ENV__Reason (115)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Reason(struct soap*, const char *, int, struct SOAP_ENV__Reason *const*, const char *);
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Reason(struct soap*, const char*, struct SOAP_ENV__Reason **, const char*);
-
-#define soap_write_PointerToSOAP_ENV__Reason(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_PointerToSOAP_ENV__Reason(soap, data), 0) || KMS_Agent::soap_put_PointerToSOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *const*, const char*, const char*);
-
-#define soap_read_PointerToSOAP_ENV__Reason(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_PointerToSOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason **, const char*, const char*);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Agent_PointerToSOAP_ENV__Detail
-#define SOAP_TYPE_KMS_Agent_PointerToSOAP_ENV__Detail (114)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Detail(struct soap*, const char *, int, struct SOAP_ENV__Detail *const*, const char *);
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Detail(struct soap*, const char*, struct SOAP_ENV__Detail **, const char*);
-
-#define soap_write_PointerToSOAP_ENV__Detail(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_PointerToSOAP_ENV__Detail(soap, data), 0) || KMS_Agent::soap_put_PointerToSOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *const*, const char*, const char*);
-
-#define soap_read_PointerToSOAP_ENV__Detail(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_PointerToSOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail **, const char*, const char*);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Agent_PointerToSOAP_ENV__Code
-#define SOAP_TYPE_KMS_Agent_PointerToSOAP_ENV__Code (110)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Code(struct soap*, const char *, int, struct SOAP_ENV__Code *const*, const char *);
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Code(struct soap*, const char*, struct SOAP_ENV__Code **, const char*);
-
-#define soap_write_PointerToSOAP_ENV__Code(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_PointerToSOAP_ENV__Code(soap, data), 0) || KMS_Agent::soap_put_PointerToSOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *const*, const char*, const char*);
-
-#define soap_read_PointerToSOAP_ENV__Code(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_PointerToSOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code **, const char*, const char*);
-
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__Key
-#define SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__Key (38)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToKMS_Agent__Key(struct soap*, struct KMS_Agent__Key *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToKMS_Agent__Key(struct soap*, const char *, int, struct KMS_Agent__Key *const*, const char *);
-SOAP_FMAC3 struct KMS_Agent__Key ** SOAP_FMAC4 soap_in_PointerToKMS_Agent__Key(struct soap*, const char*, struct KMS_Agent__Key **, const char*);
-
-#define soap_write_PointerToKMS_Agent__Key(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_PointerToKMS_Agent__Key(soap, data), 0) || KMS_Agent::soap_put_PointerToKMS_Agent__Key(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToKMS_Agent__Key(struct soap*, struct KMS_Agent__Key *const*, const char*, const char*);
-
-#define soap_read_PointerToKMS_Agent__Key(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_PointerToKMS_Agent__Key(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__Key ** SOAP_FMAC4 soap_get_PointerToKMS_Agent__Key(struct soap*, struct KMS_Agent__Key **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__KeyGroup
-#define SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__KeyGroup (35)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToKMS_Agent__KeyGroup(struct soap*, struct KMS_Agent__KeyGroup *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToKMS_Agent__KeyGroup(struct soap*, const char *, int, struct KMS_Agent__KeyGroup *const*, const char *);
-SOAP_FMAC3 struct KMS_Agent__KeyGroup ** SOAP_FMAC4 soap_in_PointerToKMS_Agent__KeyGroup(struct soap*, const char*, struct KMS_Agent__KeyGroup **, const char*);
-
-#define soap_write_PointerToKMS_Agent__KeyGroup(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_PointerToKMS_Agent__KeyGroup(soap, data), 0) || KMS_Agent::soap_put_PointerToKMS_Agent__KeyGroup(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToKMS_Agent__KeyGroup(struct soap*, struct KMS_Agent__KeyGroup *const*, const char*, const char*);
-
-#define soap_read_PointerToKMS_Agent__KeyGroup(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_PointerToKMS_Agent__KeyGroup(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__KeyGroup ** SOAP_FMAC4 soap_get_PointerToKMS_Agent__KeyGroup(struct soap*, struct KMS_Agent__KeyGroup **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__FilterParameters
-#define SOAP_TYPE_KMS_Agent_PointerToKMS_Agent__FilterParameters (28)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToKMS_Agent__FilterParameters(struct soap*, struct KMS_Agent__FilterParameters *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToKMS_Agent__FilterParameters(struct soap*, const char *, int, struct KMS_Agent__FilterParameters *const*, const char *);
-SOAP_FMAC3 struct KMS_Agent__FilterParameters ** SOAP_FMAC4 soap_in_PointerToKMS_Agent__FilterParameters(struct soap*, const char*, struct KMS_Agent__FilterParameters **, const char*);
-
-#define soap_write_PointerToKMS_Agent__FilterParameters(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_PointerToKMS_Agent__FilterParameters(soap, data), 0) || KMS_Agent::soap_put_PointerToKMS_Agent__FilterParameters(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToKMS_Agent__FilterParameters(struct soap*, struct KMS_Agent__FilterParameters *const*, const char*, const char*);
-
-#define soap_read_PointerToKMS_Agent__FilterParameters(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_PointerToKMS_Agent__FilterParameters(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Agent__FilterParameters ** SOAP_FMAC4 soap_get_PointerToKMS_Agent__FilterParameters(struct soap*, struct KMS_Agent__FilterParameters **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_PointerToxsd__hexBinary
-#define SOAP_TYPE_KMS_Agent_PointerToxsd__hexBinary (23)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToxsd__hexBinary(struct soap*, struct xsd__hexBinary *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToxsd__hexBinary(struct soap*, const char *, int, struct xsd__hexBinary *const*, const char *);
-SOAP_FMAC3 struct xsd__hexBinary ** SOAP_FMAC4 soap_in_PointerToxsd__hexBinary(struct soap*, const char*, struct xsd__hexBinary **, const char*);
-
-#define soap_write_PointerToxsd__hexBinary(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_PointerToxsd__hexBinary(soap, data), 0) || KMS_Agent::soap_put_PointerToxsd__hexBinary(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToxsd__hexBinary(struct soap*, struct xsd__hexBinary *const*, const char*, const char*);
-
-#define soap_read_PointerToxsd__hexBinary(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_PointerToxsd__hexBinary(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct xsd__hexBinary ** SOAP_FMAC4 soap_get_PointerToxsd__hexBinary(struct soap*, struct xsd__hexBinary **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_PointerTounsignedByte
-#define SOAP_TYPE_KMS_Agent_PointerTounsignedByte (21)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTounsignedByte(struct soap*, unsigned char *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTounsignedByte(struct soap*, const char *, int, unsigned char *const*, const char *);
-SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_in_PointerTounsignedByte(struct soap*, const char*, unsigned char **, const char*);
-
-#define soap_write_PointerTounsignedByte(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_PointerTounsignedByte(soap, data), 0) || KMS_Agent::soap_put_PointerTounsignedByte(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTounsignedByte(struct soap*, unsigned char *const*, const char*, const char*);
-
-#define soap_read_PointerTounsignedByte(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_PointerTounsignedByte(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_get_PointerTounsignedByte(struct soap*, unsigned char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_xsd__duration
-#define SOAP_TYPE_KMS_Agent_xsd__duration (17)
-#endif
-
-#define soap_default_xsd__duration(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize_xsd__duration(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__duration(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__duration(struct soap*, const char*, char **, const char*);
-
-#define soap_write_xsd__duration(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_xsd__duration(soap, data), 0) || KMS_Agent::soap_put_xsd__duration(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__duration(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_xsd__duration(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_xsd__duration(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__duration(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_xsd__dateTime
-#define SOAP_TYPE_KMS_Agent_xsd__dateTime (16)
-#endif
-
-#define soap_default_xsd__dateTime(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize_xsd__dateTime(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__dateTime(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__dateTime(struct soap*, const char*, char **, const char*);
-
-#define soap_write_xsd__dateTime(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_xsd__dateTime(soap, data), 0) || KMS_Agent::soap_put_xsd__dateTime(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__dateTime(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_xsd__dateTime(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_xsd__dateTime(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__dateTime(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_xsd__string
-#define SOAP_TYPE_KMS_Agent_xsd__string (7)
-#endif
-
-#define soap_default_xsd__string(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize_xsd__string(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__string(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__string(struct soap*, const char*, char **, const char*);
-
-#define soap_write_xsd__string(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_xsd__string(soap, data), 0) || KMS_Agent::soap_put_xsd__string(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__string(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_xsd__string(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_xsd__string(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__string(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent__QName
-#define SOAP_TYPE_KMS_Agent__QName (5)
-#endif
-
-#define soap_default__QName(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize__QName(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out__QName(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in__QName(struct soap*, const char*, char **, const char*);
-
-#define soap_write__QName(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize__QName(soap, data), 0) || KMS_Agent::soap_put__QName(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put__QName(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read__QName(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get__QName(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get__QName(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Agent_string
-#define SOAP_TYPE_KMS_Agent_string (4)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_string(struct soap*, char **);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_string(struct soap*, char *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_string(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_string(struct soap*, const char*, char **, const char*);
-
-#define soap_write_string(soap, data) ( soap_begin_send(soap) || (KMS_Agent::soap_serialize_string(soap, data), 0) || KMS_Agent::soap_put_string(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_string(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_string(soap, data) ( soap_begin_recv(soap) || !KMS_Agent::soap_get_string(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap*, char **, const char*, const char*);
-
-} // namespace KMS_Agent
-
-
-#endif
-
-/* End of KMS_AgentH.h */
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_AgentStub.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,834 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* KMS_AgentStub.h
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/AgentService/KMS_Agent_SOAP.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#ifndef KMS_AgentStub_H
-#define KMS_AgentStub_H
-#ifndef WITH_NONAMESPACES
-#define WITH_NONAMESPACES
-#endif
-#ifndef WITH_NOGLOBAL
-#define WITH_NOGLOBAL
-#endif
-#include "stdsoap2.h"
-
-namespace KMS_Agent {
-
-/******************************************************************************\
- *                                                                            *
- * Enumerations                                                               *
- *                                                                            *
-\******************************************************************************/
-
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__SortOrder
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__SortOrder (24)
-/* KMS-Agent:SortOrder */
-enum KMS_Agent__SortOrder {SORT_ORDER_ASCENDING = 0, SORT_ORDER_DESCENDING = 1};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__FilterOperator
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__FilterOperator (25)
-/* KMS-Agent:FilterOperator */
-enum KMS_Agent__FilterOperator {FILTER_OPERATOR_EQUAL = 0, FILTER_OPERATOR_NOT_EQUAL = 1, FILTER_OPERATOR_GREATER_THAN = 2, FILTER_OPERATOR_LESS_THAN = 3, FILTER_OPERATOR_GREATER_THAN_OR_EQUAL = 4, FILTER_OPERATOR_LESS_THAN_OR_EQUAL = 5, FILTER_OPERATOR_STARTS_WITH = 6};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__KeyType
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__KeyType (30)
-/* KMS-Agent:KeyType */
-enum KMS_Agent__KeyType {KEY_TYPE_AES_256 = 0};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__KeyState
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__KeyState (31)
-/* KMS-Agent:KeyState */
-enum KMS_Agent__KeyState {KEY_STATE_GENERATED = 0, KEY_STATE_READY = 1, KEY_STATE_PROTECT_AND_PROCESS = 2, KEY_STATE_PROCESS_ONLY = 3, KEY_STATE_DEACTIVATED = 4, KEY_STATE_COMPROMISED = 5, KEY_STATE_DESTROYED_INCOMPLETE = 6, KEY_STATE_DESTROYED_COMPLETE = 7, KEY_STATE_DESTROYED_COMPROMISED_INCOMPLETE = 8, KEY_STATE_DESTROYED_COMPROMISED_COMPLETE = 9};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnitState
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnitState (32)
-/* KMS-Agent:DataUnitState */
-enum KMS_Agent__DataUnitState {DATA_UNIT_STATE_NO_KEY = 0, DATA_UNIT_STATE_READABLE_NORMAL = 1, DATA_UNIT_STATE_READABLE_NEEDS_REKEY = 2, DATA_UNIT_STATE_SHREDDED = 3};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogRetention
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogRetention (40)
-/* KMS-Agent:AuditLogRetention */
-enum KMS_Agent__AuditLogRetention {AUDIT_LOG_LONG_TERM_RETENTION = 0, AUDIT_LOG_MEDIUM_TERM_RETENTION = 1, AUDIT_LOG_SHORT_TERM_RETENTION = 2, AUDIT_LOG_ZERO_RETENTION = 3};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogCondition
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__AuditLogCondition (41)
-/* KMS-Agent:AuditLogCondition */
-enum KMS_Agent__AuditLogCondition {AUDIT_LOG_SUCCESS_CONDITION = 0, AUDIT_LOG_ERROR_CONDITION = 1, AUDIT_LOG_WARNING_CONDITION = 2};
-#endif
-
-/******************************************************************************\
- *                                                                            *
- * Types with Custom Serializers                                              *
- *                                                                            *
-\******************************************************************************/
-
-
-/******************************************************************************\
- *                                                                            *
- * Classes and Structs                                                        *
- *                                                                            *
-\******************************************************************************/
-
-
-#if 0 /* volatile type: do not declare here, declared elsewhere */
-
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_xsd__hexBinary
-#define SOAP_TYPE_KMS_Agent_xsd__hexBinary (18)
-/* hexBinary schema type: */
-struct xsd__hexBinary
-{
-public:
-	unsigned char *__ptr;
-	int __size;
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfHexBinary
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfHexBinary (22)
-/* Sequence of KMS-Agent:ArrayOfHexBinary schema type: */
-struct KMS_Agent__ArrayOfHexBinary
-{
-public:
-	struct xsd__hexBinary *__ptr;
-	int __size;
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__FilterParameters (26)
-/* KMS-Agent:FilterParameters */
-struct KMS_Agent__FilterParameters
-{
-public:
-	char *FieldName;	/* optional element of type xsd:string */
-	enum KMS_Agent__FilterOperator FilterOperator;	/* required element of type KMS-Agent:FilterOperator */
-	char *FieldValue;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfFilterParameters
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfFilterParameters (27)
-/* Sequence of KMS-Agent:ArrayOfFilterParameters schema type: */
-struct KMS_Agent__ArrayOfFilterParameters
-{
-public:
-	struct KMS_Agent__FilterParameters *__ptr;
-	int __size;
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__QueryParameters
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__QueryParameters (29)
-/* KMS-Agent:QueryParameters */
-struct KMS_Agent__QueryParameters
-{
-public:
-	long NextPageSize;	/* required element of type xsd:int */
-	char *SortFieldName;	/* optional element of type xsd:string */
-	enum KMS_Agent__SortOrder SortOrder;	/* required element of type KMS-Agent:SortOrder */
-	struct KMS_Agent__ArrayOfFilterParameters FilterParameters;	/* optional element of type KMS-Agent:ArrayOfFilterParameters */
-	char *PreviousPageLastIDValue;	/* optional element of type xsd:string */
-	char *PreviousPageLastSortFieldValue;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__KeyGroup (33)
-/* KMS-Agent:KeyGroup */
-struct KMS_Agent__KeyGroup
-{
-public:
-	char *KeyGroupID;	/* optional element of type xsd:string */
-	char *Description;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeyGroups
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeyGroups (34)
-/* Sequence of KMS-Agent:ArrayOfKeyGroups schema type: */
-struct KMS_Agent__ArrayOfKeyGroups
-{
-public:
-	struct KMS_Agent__KeyGroup *__ptr;
-	int __size;
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__Key
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__Key (36)
-/* KMS-Agent:Key */
-struct KMS_Agent__Key
-{
-public:
-	char *KeyID;	/* optional element of type xsd:string */
-	enum KMS_Agent__KeyState KeyState;	/* required element of type KMS-Agent:KeyState */
-	enum KMS_Agent__KeyType KeyType;	/* required element of type KMS-Agent:KeyType */
-	char *KeyGroupID;	/* optional element of type xsd:string */
-	struct xsd__hexBinary Key;	/* required element of type xsd:hexBinary */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeys
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__ArrayOfKeys (37)
-/* Sequence of KMS-Agent:ArrayOfKeys schema type: */
-struct KMS_Agent__ArrayOfKeys
-{
-public:
-	struct KMS_Agent__Key *__ptr;
-	int __size;
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnit
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__DataUnit (39)
-/* KMS-Agent:DataUnit */
-struct KMS_Agent__DataUnit
-{
-public:
-	char *DataUnitID;	/* optional element of type xsd:string */
-	char *ExternalUniqueID;	/* optional element of type xsd:string */
-	char *ExternalTag;	/* optional element of type xsd:string */
-	char *Description;	/* optional element of type xsd:string */
-	enum KMS_Agent__DataUnitState DataUnitState;	/* required element of type KMS-Agent:DataUnitState */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroupsResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroupsResponse (42)
-/* KMS-Agent:ListKeyGroupsResponse */
-struct KMS_Agent__ListKeyGroupsResponse
-{
-public:
-	struct KMS_Agent__ArrayOfKeyGroups KeyGroups;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* optional element of type KMS-Agent:ArrayOfKeyGroups */
-	bool LastPage;	/* required element of type xsd:boolean */
-	struct KMS_Agent__QueryParameters NextPageQueryParameters;	/* required element of type KMS-Agent:QueryParameters */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroups
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__ListKeyGroups (45)
-/* KMS-Agent:ListKeyGroups */
-struct KMS_Agent__ListKeyGroups
-{
-public:
-	struct KMS_Agent__QueryParameters QueryParameters;	/* required element of type KMS-Agent:QueryParameters */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnitResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnitResponse (46)
-/* KMS-Agent:CreateDataUnitResponse */
-struct KMS_Agent__CreateDataUnitResponse
-{
-public:
-	struct KMS_Agent__DataUnit DataUnit;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type KMS-Agent:DataUnit */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnit
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__CreateDataUnit (49)
-/* KMS-Agent:CreateDataUnit */
-struct KMS_Agent__CreateDataUnit
-{
-public:
-	char *ExternalUniqueID;	/* optional element of type xsd:string */
-	char *ExternalTag;	/* optional element of type xsd:string */
-	char *Description;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitResponse (50)
-/* KMS-Agent:RetrieveDataUnitResponse */
-struct KMS_Agent__RetrieveDataUnitResponse
-{
-public:
-	struct KMS_Agent__DataUnit DataUnit;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type KMS-Agent:DataUnit */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnit
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnit (53)
-/* KMS-Agent:RetrieveDataUnit */
-struct KMS_Agent__RetrieveDataUnit
-{
-public:
-	char *DataUnitID;	/* optional element of type xsd:string */
-	char *ExternalUniqueID;	/* optional element of type xsd:string */
-	char *ExternalTag;	/* optional element of type xsd:string */
-	char *Description;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse (54)
-/* KMS-Agent:RetrieveDataUnitByExternalUniqueIDResponse */
-struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse
-{
-public:
-	struct KMS_Agent__DataUnit DataUnit;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type KMS-Agent:DataUnit */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueID
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitByExternalUniqueID (57)
-/* KMS-Agent:RetrieveDataUnitByExternalUniqueID */
-struct KMS_Agent__RetrieveDataUnitByExternalUniqueID
-{
-public:
-	char *ExternalUniqueID;	/* optional element of type xsd:string */
-	char *ExternalTag;	/* optional element of type xsd:string */
-	char *Description;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeysResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeysResponse (58)
-/* KMS-Agent:DisassociateDataUnitKeysResponse */
-struct KMS_Agent__DisassociateDataUnitKeysResponse
-{
-public:
-	void *_;	/* transient */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeys
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__DisassociateDataUnitKeys (63)
-/* KMS-Agent:DisassociateDataUnitKeys */
-struct KMS_Agent__DisassociateDataUnitKeys
-{
-public:
-	struct KMS_Agent__DataUnit DataUnit;	/* required element of type KMS-Agent:DataUnit */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKeyResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKeyResponse (64)
-/* KMS-Agent:CreateKeyResponse */
-struct KMS_Agent__CreateKeyResponse
-{
-public:
-	struct KMS_Agent__Key Key;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type KMS-Agent:Key */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey (67)
-/* KMS-Agent:CreateKey */
-struct KMS_Agent__CreateKey
-{
-public:
-	struct KMS_Agent__DataUnit DataUnit;	/* required element of type KMS-Agent:DataUnit */
-	char *KeyGroupID;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2Response
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2Response (68)
-/* KMS-Agent:CreateKey2Response */
-struct KMS_Agent__CreateKey2Response
-{
-public:
-	struct KMS_Agent__Key Key;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type KMS-Agent:Key */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__CreateKey2 (71)
-/* KMS-Agent:CreateKey2 */
-struct KMS_Agent__CreateKey2
-{
-public:
-	struct KMS_Agent__DataUnit DataUnit;	/* required element of type KMS-Agent:DataUnit */
-	char *KeyGroupID;	/* optional element of type xsd:string */
-	char *AgentKWKID;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKeyResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKeyResponse (72)
-/* KMS-Agent:RetrieveKeyResponse */
-struct KMS_Agent__RetrieveKeyResponse
-{
-public:
-	struct KMS_Agent__Key Key;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type KMS-Agent:Key */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey (75)
-/* KMS-Agent:RetrieveKey */
-struct KMS_Agent__RetrieveKey
-{
-public:
-	char *KeyID;	/* optional element of type xsd:string */
-	struct KMS_Agent__DataUnit DataUnit;	/* required element of type KMS-Agent:DataUnit */
-	char *KeyGroupID;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2Response
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2Response (76)
-/* KMS-Agent:RetrieveKey2Response */
-struct KMS_Agent__RetrieveKey2Response
-{
-public:
-	struct KMS_Agent__Key Key;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type KMS-Agent:Key */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveKey2 (79)
-/* KMS-Agent:RetrieveKey2 */
-struct KMS_Agent__RetrieveKey2
-{
-public:
-	char *KeyID;	/* optional element of type xsd:string */
-	struct KMS_Agent__DataUnit DataUnit;	/* required element of type KMS-Agent:DataUnit */
-	char *KeyGroupID;	/* optional element of type xsd:string */
-	char *AgentKWKID;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeysResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeysResponse (80)
-/* KMS-Agent:RetrieveDataUnitKeysResponse */
-struct KMS_Agent__RetrieveDataUnitKeysResponse
-{
-public:
-	LONG64 KeysRemaining;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type xsd:long */
-	struct KMS_Agent__ArrayOfKeys Keys;	/* optional element of type KMS-Agent:ArrayOfKeys */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys (83)
-/* KMS-Agent:RetrieveDataUnitKeys */
-struct KMS_Agent__RetrieveDataUnitKeys
-{
-public:
-	struct KMS_Agent__DataUnit DataUnit;	/* required element of type KMS-Agent:DataUnit */
-	long PageSize;	/* required element of type xsd:int */
-	long PageOffset;	/* required element of type xsd:int */
-	char *KeyID;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2Response
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2Response (84)
-/* KMS-Agent:RetrieveDataUnitKeys2Response */
-struct KMS_Agent__RetrieveDataUnitKeys2Response
-{
-public:
-	LONG64 KeysRemaining;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type xsd:long */
-	struct KMS_Agent__ArrayOfKeys Keys;	/* optional element of type KMS-Agent:ArrayOfKeys */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveDataUnitKeys2 (87)
-/* KMS-Agent:RetrieveDataUnitKeys2 */
-struct KMS_Agent__RetrieveDataUnitKeys2
-{
-public:
-	struct KMS_Agent__DataUnit DataUnit;	/* required element of type KMS-Agent:DataUnit */
-	long PageSize;	/* required element of type xsd:int */
-	long PageOffset;	/* required element of type xsd:int */
-	char *KeyID;	/* optional element of type xsd:string */
-	char *AgentKWKID;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKeyResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKeyResponse (88)
-/* KMS-Agent:RetrieveProtectAndProcessKeyResponse */
-struct KMS_Agent__RetrieveProtectAndProcessKeyResponse
-{
-public:
-	struct KMS_Agent__Key Key;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type KMS-Agent:Key */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey (91)
-/* KMS-Agent:RetrieveProtectAndProcessKey */
-struct KMS_Agent__RetrieveProtectAndProcessKey
-{
-public:
-	struct KMS_Agent__DataUnit DataUnit;	/* required element of type KMS-Agent:DataUnit */
-	char *KeyGroupID;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2Response
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2Response (92)
-/* KMS-Agent:RetrieveProtectAndProcessKey2Response */
-struct KMS_Agent__RetrieveProtectAndProcessKey2Response
-{
-public:
-	struct KMS_Agent__Key Key;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type KMS-Agent:Key */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RetrieveProtectAndProcessKey2 (95)
-/* KMS-Agent:RetrieveProtectAndProcessKey2 */
-struct KMS_Agent__RetrieveProtectAndProcessKey2
-{
-public:
-	struct KMS_Agent__DataUnit DataUnit;	/* required element of type KMS-Agent:DataUnit */
-	char *KeyGroupID;	/* optional element of type xsd:string */
-	char *AgentKWKID;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLogResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLogResponse (96)
-/* KMS-Agent:CreateAuditLogResponse */
-struct KMS_Agent__CreateAuditLogResponse
-{
-public:
-	void *_;	/* transient */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLog
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__CreateAuditLog (99)
-/* KMS-Agent:CreateAuditLog */
-struct KMS_Agent__CreateAuditLog
-{
-public:
-	enum KMS_Agent__AuditLogRetention Retention;	/* required element of type KMS-Agent:AuditLogRetention */
-	enum KMS_Agent__AuditLogCondition Condition;	/* required element of type KMS-Agent:AuditLogCondition */
-	bool IssueAlert;	/* required element of type xsd:boolean */
-	char *Message;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKeyResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKeyResponse (100)
-/* KMS-Agent:GetAgentKWKPublicKeyResponse */
-struct KMS_Agent__GetAgentKWKPublicKeyResponse
-{
-public:
-	struct xsd__hexBinary KWKPublicKey;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type xsd:hexBinary */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKey
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__GetAgentKWKPublicKey (103)
-/* KMS-Agent:GetAgentKWKPublicKey */
-struct KMS_Agent__GetAgentKWKPublicKey
-{
-#ifdef WITH_NOEMPTYSTRUCT
-private:
-	char dummy;	/* dummy member to enable compilation */
-#endif
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWKResponse
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWKResponse (104)
-/* KMS-Agent:RegisterAgentKWKResponse */
-struct KMS_Agent__RegisterAgentKWKResponse
-{
-public:
-	char *AgentKWKID;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWK
-#define SOAP_TYPE_KMS_Agent_KMS_Agent__RegisterAgentKWK (107)
-/* KMS-Agent:RegisterAgentKWK */
-struct KMS_Agent__RegisterAgentKWK
-{
-public:
-	struct xsd__hexBinary AgentKWK;	/* required element of type xsd:hexBinary */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_SOAP_ENV__Header
-#define SOAP_TYPE_KMS_Agent_SOAP_ENV__Header (108)
-/* SOAP Header: */
-struct SOAP_ENV__Header
-{
-#ifdef WITH_NOEMPTYSTRUCT
-private:
-	char dummy;	/* dummy member to enable compilation */
-#endif
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_SOAP_ENV__Code
-#define SOAP_TYPE_KMS_Agent_SOAP_ENV__Code (109)
-/* SOAP Fault Code: */
-struct SOAP_ENV__Code
-{
-public:
-	char *SOAP_ENV__Value;	/* optional element of type xsd:QName */
-	struct SOAP_ENV__Code *SOAP_ENV__Subcode;	/* optional element of type SOAP-ENV:Code */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_SOAP_ENV__Detail
-#define SOAP_TYPE_KMS_Agent_SOAP_ENV__Detail (111)
-/* SOAP-ENV:Detail */
-struct SOAP_ENV__Detail
-{
-public:
-	int __type;	/* any type of element <fault> (defined below) */
-	void *fault;	/* transient */
-	char *__any;
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_SOAP_ENV__Reason
-#define SOAP_TYPE_KMS_Agent_SOAP_ENV__Reason (112)
-/* SOAP-ENV:Reason */
-struct SOAP_ENV__Reason
-{
-public:
-	char *SOAP_ENV__Text;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_SOAP_ENV__Fault
-#define SOAP_TYPE_KMS_Agent_SOAP_ENV__Fault (113)
-/* SOAP Fault: */
-struct SOAP_ENV__Fault
-{
-public:
-	char *faultcode;	/* optional element of type xsd:QName */
-	char *faultstring;	/* optional element of type xsd:string */
-	char *faultactor;	/* optional element of type xsd:string */
-	struct SOAP_ENV__Detail *detail;	/* optional element of type SOAP-ENV:Detail */
-	struct SOAP_ENV__Code *SOAP_ENV__Code;	/* optional element of type SOAP-ENV:Code */
-	struct SOAP_ENV__Reason *SOAP_ENV__Reason;	/* optional element of type SOAP-ENV:Reason */
-	char *SOAP_ENV__Node;	/* optional element of type xsd:string */
-	char *SOAP_ENV__Role;	/* optional element of type xsd:string */
-	struct SOAP_ENV__Detail *SOAP_ENV__Detail;	/* optional element of type SOAP-ENV:Detail */
-};
-#endif
-
-/******************************************************************************\
- *                                                                            *
- * Typedefs                                                                   *
- *                                                                            *
-\******************************************************************************/
-
-#ifndef SOAP_TYPE_KMS_Agent__QName
-#define SOAP_TYPE_KMS_Agent__QName (5)
-typedef char *_QName;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent__XML
-#define SOAP_TYPE_KMS_Agent__XML (6)
-typedef char *_XML;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_xsd__string
-#define SOAP_TYPE_KMS_Agent_xsd__string (7)
-typedef char *xsd__string;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_xsd__float
-#define SOAP_TYPE_KMS_Agent_xsd__float (9)
-typedef float xsd__float;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_xsd__int
-#define SOAP_TYPE_KMS_Agent_xsd__int (11)
-typedef long xsd__int;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_xsd__boolean
-#define SOAP_TYPE_KMS_Agent_xsd__boolean (13)
-typedef bool xsd__boolean;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_xsd__long
-#define SOAP_TYPE_KMS_Agent_xsd__long (15)
-typedef LONG64 xsd__long;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_xsd__dateTime
-#define SOAP_TYPE_KMS_Agent_xsd__dateTime (16)
-typedef char *xsd__dateTime;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Agent_xsd__duration
-#define SOAP_TYPE_KMS_Agent_xsd__duration (17)
-typedef char *xsd__duration;
-#endif
-
-
-/******************************************************************************\
- *                                                                            *
- * Externals                                                                  *
- *                                                                            *
-\******************************************************************************/
-
-
-/******************************************************************************\
- *                                                                            *
- * Server-Side Operations                                                     *
- *                                                                            *
-\******************************************************************************/
-
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent__ListKeyGroups(struct soap*, struct KMS_Agent__QueryParameters QueryParameters, struct KMS_Agent__ListKeyGroupsResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent__CreateDataUnit(struct soap*, char *ExternalUniqueID, char *ExternalTag, char *Description, struct KMS_Agent__CreateDataUnitResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent__RetrieveDataUnit(struct soap*, char *DataUnitID, char *ExternalUniqueID, char *ExternalTag, char *Description, struct KMS_Agent__RetrieveDataUnitResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap*, char *ExternalUniqueID, char *ExternalTag, char *Description, struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent__DisassociateDataUnitKeys(struct soap*, struct KMS_Agent__DataUnit DataUnit, struct KMS_Agent__DisassociateDataUnitKeysResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent__CreateKey(struct soap*, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, struct KMS_Agent__CreateKeyResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent__CreateKey2(struct soap*, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, char *AgentKWKID, struct KMS_Agent__CreateKey2Response &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent__RetrieveKey(struct soap*, char *KeyID, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, struct KMS_Agent__RetrieveKeyResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent__RetrieveKey2(struct soap*, char *KeyID, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, char *AgentKWKID, struct KMS_Agent__RetrieveKey2Response &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent__RetrieveDataUnitKeys(struct soap*, struct KMS_Agent__DataUnit DataUnit, long PageSize, long PageOffset, char *KeyID, struct KMS_Agent__RetrieveDataUnitKeysResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent__RetrieveDataUnitKeys2(struct soap*, struct KMS_Agent__DataUnit DataUnit, long PageSize, long PageOffset, char *KeyID, char *AgentKWKID, struct KMS_Agent__RetrieveDataUnitKeys2Response &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent__RetrieveProtectAndProcessKey(struct soap*, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, struct KMS_Agent__RetrieveProtectAndProcessKeyResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent__RetrieveProtectAndProcessKey2(struct soap*, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, char *AgentKWKID, struct KMS_Agent__RetrieveProtectAndProcessKey2Response &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent__CreateAuditLog(struct soap*, enum KMS_Agent__AuditLogRetention Retention, enum KMS_Agent__AuditLogCondition Condition, bool IssueAlert, char *Message, struct KMS_Agent__CreateAuditLogResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent__GetAgentKWKPublicKey(struct soap*, struct KMS_Agent__GetAgentKWKPublicKeyResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent__RegisterAgentKWK(struct soap*, struct xsd__hexBinary AgentKWK, struct KMS_Agent__RegisterAgentKWKResponse &result);
-
-/******************************************************************************\
- *                                                                            *
- * Server-Side Skeletons to Invoke Service Operations                         *
- *                                                                            *
-\******************************************************************************/
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent_serve(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Agent_serve_request(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Agent__ListKeyGroups(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Agent__CreateDataUnit(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Agent__RetrieveDataUnit(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Agent__DisassociateDataUnitKeys(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Agent__CreateKey(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Agent__CreateKey2(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Agent__RetrieveKey(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Agent__RetrieveKey2(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Agent__RetrieveDataUnitKeys(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Agent__RetrieveDataUnitKeys2(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Agent__RetrieveProtectAndProcessKey(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Agent__CreateAuditLog(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Agent__GetAgentKWKPublicKey(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Agent__RegisterAgentKWK(struct soap*);
-
-/******************************************************************************\
- *                                                                            *
- * Client-Side Call Stubs                                                     *
- *                                                                            *
-\******************************************************************************/
-
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__ListKeyGroups(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__QueryParameters QueryParameters, struct KMS_Agent__ListKeyGroupsResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__CreateDataUnit(struct soap *soap, const char *soap_endpoint, const char *soap_action, char *ExternalUniqueID, char *ExternalTag, char *Description, struct KMS_Agent__CreateDataUnitResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RetrieveDataUnit(struct soap *soap, const char *soap_endpoint, const char *soap_action, char *DataUnitID, char *ExternalUniqueID, char *ExternalTag, char *Description, struct KMS_Agent__RetrieveDataUnitResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RetrieveDataUnitByExternalUniqueID(struct soap *soap, const char *soap_endpoint, const char *soap_action, char *ExternalUniqueID, char *ExternalTag, char *Description, struct KMS_Agent__RetrieveDataUnitByExternalUniqueIDResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__DisassociateDataUnitKeys(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__DataUnit DataUnit, struct KMS_Agent__DisassociateDataUnitKeysResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__CreateKey(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, struct KMS_Agent__CreateKeyResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__CreateKey2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, char *AgentKWKID, struct KMS_Agent__CreateKey2Response &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RetrieveKey(struct soap *soap, const char *soap_endpoint, const char *soap_action, char *KeyID, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, struct KMS_Agent__RetrieveKeyResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RetrieveKey2(struct soap *soap, const char *soap_endpoint, const char *soap_action, char *KeyID, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, char *AgentKWKID, struct KMS_Agent__RetrieveKey2Response &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RetrieveDataUnitKeys(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__DataUnit DataUnit, long PageSize, long PageOffset, char *KeyID, struct KMS_Agent__RetrieveDataUnitKeysResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RetrieveDataUnitKeys2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__DataUnit DataUnit, long PageSize, long PageOffset, char *KeyID, char *AgentKWKID, struct KMS_Agent__RetrieveDataUnitKeys2Response &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RetrieveProtectAndProcessKey(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, struct KMS_Agent__RetrieveProtectAndProcessKeyResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RetrieveProtectAndProcessKey2(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__DataUnit DataUnit, char *KeyGroupID, char *AgentKWKID, struct KMS_Agent__RetrieveProtectAndProcessKey2Response &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__CreateAuditLog(struct soap *soap, const char *soap_endpoint, const char *soap_action, enum KMS_Agent__AuditLogRetention Retention, enum KMS_Agent__AuditLogCondition Condition, bool IssueAlert, char *Message, struct KMS_Agent__CreateAuditLogResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__GetAgentKWKPublicKey(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct KMS_Agent__GetAgentKWKPublicKeyResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Agent__RegisterAgentKWK(struct soap *soap, const char *soap_endpoint, const char *soap_action, struct xsd__hexBinary AgentKWK, struct KMS_Agent__RegisterAgentKWKResponse &result);
-
-} // namespace KMS_Agent
-
-
-#endif
-
-/* End of KMS_AgentStub.h */
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_CA.nsmap	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-
-#include "KMS_CAH.h"
-SOAP_NMAC struct Namespace KMS_CA_namespaces[] =
-{
-	{"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope"},
-	{"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding"},
-	{"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance"},
-	{"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema"},
-	{"KMS-CA", "http://www.sun.com/KMS/KMS-CA"},
-	{NULL, NULL}
-};
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_CAC.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2648 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* KMS_CAC.cpp
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/CAService/KMS_CA_SOAP.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#if defined(__BORLANDC__)
-#pragma option push -w-8060
-#pragma option push -w-8004
-#endif
-
-#include "KMS_CAH.h"
-
-namespace KMS_CA {
-
-SOAP_SOURCE_STAMP("@(#) KMS_CAC.cpp ver 2.7.17 2010-06-08 19:16:38 GMT")
-
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serializeheader(struct soap *soap)
-{
-	if (soap->header)
-		soap_serialize_SOAP_ENV__Header(soap, soap->header);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_putheader(struct soap *soap)
-{
-	if (soap->header)
-	{	soap->part = SOAP_IN_HEADER;
-		if (soap_out_SOAP_ENV__Header(soap, "SOAP-ENV:Header", 0, soap->header, NULL))
-			return soap->error;
-		soap->part = SOAP_END_HEADER;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_getheader(struct soap *soap)
-{
-	soap->part = SOAP_IN_HEADER;
-	soap->header = soap_in_SOAP_ENV__Header(soap, "SOAP-ENV:Header", NULL, NULL);
-	soap->part = SOAP_END_HEADER;
-	return soap->header == NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_header(struct soap *soap)
-{
-	if (!soap->header)
-	{	if ((soap->header = soap_new_SOAP_ENV__Header(soap, -1)))
-			soap_default_SOAP_ENV__Header(soap, soap->header);
-	}
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_fault(struct soap *soap)
-{
-	if (!soap->fault)
-	{	soap->fault = soap_new_SOAP_ENV__Fault(soap, -1);
-		if (!soap->fault)
-			return;
-		soap_default_SOAP_ENV__Fault(soap, soap->fault);
-	}
-	if (soap->version == 2 && !soap->fault->SOAP_ENV__Code)
-	{	soap->fault->SOAP_ENV__Code = soap_new_SOAP_ENV__Code(soap, -1);
-		soap_default_SOAP_ENV__Code(soap, soap->fault->SOAP_ENV__Code);
-	}
-	if (soap->version == 2 && !soap->fault->SOAP_ENV__Reason)
-	{	soap->fault->SOAP_ENV__Reason = soap_new_SOAP_ENV__Reason(soap, -1);
-		soap_default_SOAP_ENV__Reason(soap, soap->fault->SOAP_ENV__Reason);
-	}
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serializefault(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->fault)
-		soap_serialize_SOAP_ENV__Fault(soap, soap->fault);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_putfault(struct soap *soap)
-{
-	if (soap->fault)
-		return soap_put_SOAP_ENV__Fault(soap, soap->fault, "SOAP-ENV:Fault", NULL);
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_getfault(struct soap *soap)
-{
-	return (soap->fault = soap_get_SOAP_ENV__Fault(soap, NULL, "SOAP-ENV:Fault", NULL)) == NULL;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultcode(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 2)
-		return (const char**)&soap->fault->SOAP_ENV__Code->SOAP_ENV__Value;
-	return (const char**)&soap->fault->faultcode;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultsubcode(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 2)
-	{	if (!soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode)
-		{	soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode = soap_new_SOAP_ENV__Code(soap, -1);
-			soap_default_SOAP_ENV__Code(soap, soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode);
-		}
-		return (const char**)&soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode->SOAP_ENV__Value;
-	}
-	return (const char**)&soap->fault->faultcode;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultstring(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 2)
-		return (const char**)&soap->fault->SOAP_ENV__Reason->SOAP_ENV__Text;
-	return (const char**)&soap->fault->faultstring;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultdetail(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 1)
-	{	if (!soap->fault->detail)
-		{	soap->fault->detail = (struct SOAP_ENV__Detail*)soap_malloc(soap, sizeof(struct SOAP_ENV__Detail));
-			soap_default_SOAP_ENV__Detail(soap, soap->fault->detail);
-		}
-		return (const char**)&soap->fault->detail->__any;
-	}
-	if (!soap->fault->SOAP_ENV__Detail)
-	{	soap->fault->SOAP_ENV__Detail = soap_new_SOAP_ENV__Detail(soap, -1);
-		soap_default_SOAP_ENV__Detail(soap, soap->fault->SOAP_ENV__Detail);
-	}
-	return (const char**)&soap->fault->SOAP_ENV__Detail->__any;
-}
-
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 int SOAP_FMAC4 soap_getindependent(struct soap *soap)
-{
-	int t;
-	if (soap->version == 1)
-	{	for (;;)
-		{	if (!soap_getelement(soap, &t))
-				if (soap->error || soap_ignore_element(soap))
-					break;
-		}
-	}
-	if (soap->error == SOAP_NO_TAG || soap->error == SOAP_EOF)
-		soap->error = SOAP_OK;
-	return soap->error;
-}
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type)
-{
-	if (soap_peek_element(soap))
-		return NULL;
-	if (!*soap->id || !(*type = soap_lookup_type(soap, soap->id)))
-		*type = soap_lookup_type(soap, soap->href);
-	switch (*type)
-	{
-	case SOAP_TYPE_KMS_CA_byte:
-		return soap_in_byte(soap, NULL, NULL, "xsd:byte");
-	case SOAP_TYPE_KMS_CA_int:
-		return soap_in_int(soap, NULL, NULL, "xsd:int");
-	case SOAP_TYPE_KMS_CA_xsd__int:
-		return soap_in_xsd__int(soap, NULL, NULL, "xsd:int");
-	case SOAP_TYPE_KMS_CA_long:
-		return soap_in_long(soap, NULL, NULL, "xsd:long");
-	case SOAP_TYPE_KMS_CA_xsd__long:
-		return soap_in_xsd__long(soap, NULL, NULL, "xsd:long");
-	case SOAP_TYPE_KMS_CA_LONG64:
-		return soap_in_LONG64(soap, NULL, NULL, "xsd:long");
-	case SOAP_TYPE_KMS_CA_xsd__float:
-		return soap_in_xsd__float(soap, NULL, NULL, "xsd:float");
-	case SOAP_TYPE_KMS_CA_float:
-		return soap_in_float(soap, NULL, NULL, "xsd:float");
-	case SOAP_TYPE_KMS_CA_unsignedByte:
-		return soap_in_unsignedByte(soap, NULL, NULL, "xsd:unsignedByte");
-	case SOAP_TYPE_KMS_CA_unsignedInt:
-		return soap_in_unsignedInt(soap, NULL, NULL, "xsd:unsignedInt");
-	case SOAP_TYPE_KMS_CA_xsd__boolean:
-		return soap_in_xsd__boolean(soap, NULL, NULL, "xsd:boolean");
-	case SOAP_TYPE_KMS_CA_bool:
-		return soap_in_bool(soap, NULL, NULL, "xsd:boolean");
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClock:
-		return soap_in_KMS_CA__RetrieveLocalClock(soap, NULL, NULL, "KMS-CA:RetrieveLocalClock");
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClockResponse:
-		return soap_in_KMS_CA__RetrieveLocalClockResponse(soap, NULL, NULL, "KMS-CA:RetrieveLocalClockResponse");
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificate:
-		return soap_in_KMS_CA__RetrieveRootCACertificate(soap, NULL, NULL, "KMS-CA:RetrieveRootCACertificate");
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificateResponse:
-		return soap_in_KMS_CA__RetrieveRootCACertificateResponse(soap, NULL, NULL, "KMS-CA:RetrieveRootCACertificateResponse");
-	case SOAP_TYPE_KMS_CA_xsd__hexBinary:
-		return soap_in_xsd__hexBinary(soap, NULL, NULL, "xsd:hexBinary");
-	case SOAP_TYPE_KMS_CA_PointerTounsignedByte:
-		return soap_in_PointerTounsignedByte(soap, NULL, NULL, "xsd:unsignedByte");
-	case SOAP_TYPE_KMS_CA_xsd__duration:
-	{	char **s;
-		s = soap_in_xsd__duration(soap, NULL, NULL, "xsd:duration");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_CA_xsd__dateTime:
-	{	char **s;
-		s = soap_in_xsd__dateTime(soap, NULL, NULL, "xsd:dateTime");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_CA_xsd__string:
-	{	char **s;
-		s = soap_in_xsd__string(soap, NULL, NULL, "xsd:string");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_CA__QName:
-	{	char **s;
-		s = soap_in__QName(soap, NULL, NULL, "xsd:QName");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_CA_string:
-	{	char **s;
-		s = soap_in_string(soap, NULL, NULL, "xsd:string");
-		return s ? *s : NULL;
-	}
-	default:
-	{	const char *t = soap->type;
-		if (!*t)
-			t = soap->tag;
-		if (!soap_match_tag(soap, t, "xsd:byte"))
-		{	*type = SOAP_TYPE_KMS_CA_byte;
-			return soap_in_byte(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:int"))
-		{	*type = SOAP_TYPE_KMS_CA_int;
-			return soap_in_int(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:int"))
-		{	*type = SOAP_TYPE_KMS_CA_xsd__int;
-			return soap_in_xsd__int(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:long"))
-		{	*type = SOAP_TYPE_KMS_CA_long;
-			return soap_in_long(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:long"))
-		{	*type = SOAP_TYPE_KMS_CA_xsd__long;
-			return soap_in_xsd__long(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:long"))
-		{	*type = SOAP_TYPE_KMS_CA_LONG64;
-			return soap_in_LONG64(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:float"))
-		{	*type = SOAP_TYPE_KMS_CA_xsd__float;
-			return soap_in_xsd__float(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:float"))
-		{	*type = SOAP_TYPE_KMS_CA_float;
-			return soap_in_float(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:unsignedByte"))
-		{	*type = SOAP_TYPE_KMS_CA_unsignedByte;
-			return soap_in_unsignedByte(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:unsignedInt"))
-		{	*type = SOAP_TYPE_KMS_CA_unsignedInt;
-			return soap_in_unsignedInt(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:boolean"))
-		{	*type = SOAP_TYPE_KMS_CA_xsd__boolean;
-			return soap_in_xsd__boolean(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:boolean"))
-		{	*type = SOAP_TYPE_KMS_CA_bool;
-			return soap_in_bool(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-CA:RetrieveLocalClock"))
-		{	*type = SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClock;
-			return soap_in_KMS_CA__RetrieveLocalClock(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-CA:RetrieveLocalClockResponse"))
-		{	*type = SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClockResponse;
-			return soap_in_KMS_CA__RetrieveLocalClockResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-CA:RetrieveRootCACertificate"))
-		{	*type = SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificate;
-			return soap_in_KMS_CA__RetrieveRootCACertificate(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-CA:RetrieveRootCACertificateResponse"))
-		{	*type = SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificateResponse;
-			return soap_in_KMS_CA__RetrieveRootCACertificateResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:hexBinary"))
-		{	*type = SOAP_TYPE_KMS_CA_xsd__hexBinary;
-			return soap_in_xsd__hexBinary(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:duration"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_CA_xsd__duration;
-			s = soap_in_xsd__duration(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:dateTime"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_CA_xsd__dateTime;
-			s = soap_in_xsd__dateTime(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:string"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_CA_xsd__string;
-			s = soap_in_xsd__string(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:QName"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_CA__QName;
-			s = soap_in__QName(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:string"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_CA_string;
-			s = soap_in_string(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		t = soap->tag;
-	}
-	}
-	soap->error = SOAP_TAG_MISMATCH;
-	return NULL;
-}
-#endif
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_ignore_element(struct soap *soap)
-{
-	if (!soap_peek_element(soap))
-	{	int t;
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unexpected element '%s' in input (level=%u, %d)\n", soap->tag, soap->level, soap->body));
-		if (soap->mustUnderstand && !soap->other)
-			return soap->error = SOAP_MUSTUNDERSTAND;
-		if (((soap->mode & SOAP_XML_STRICT) && soap->part != SOAP_IN_HEADER) || !soap_match_tag(soap, soap->tag, "SOAP-ENV:"))
-		{	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "REJECTING element '%s'\n", soap->tag));
-			return soap->error = SOAP_TAG_MISMATCH;
-		}
-		if (!*soap->id || !soap_getelement(soap, &t))
-		{	soap->peeked = 0;
-			if (soap->fignore)
-				soap->error = soap->fignore(soap, soap->tag);
-			else
-				soap->error = SOAP_OK;
-			DBGLOG(TEST, if (!soap->error) SOAP_MESSAGE(fdebug, "IGNORING element '%s'\n", soap->tag));
-			if (!soap->error && soap->body)
-			{	soap->level++;
-				while (!soap_ignore_element(soap))
-					;
-				if (soap->error == SOAP_NO_TAG)
-					soap->error = soap_element_end_in(soap, NULL);
-			}
-		}
-	}
-	return soap->error;
-}
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 int SOAP_FMAC4 soap_putindependent(struct soap *soap)
-{
-	int i;
-	struct soap_plist *pp;
-	if (soap->version == 1 && soap->encodingStyle && !(soap->mode & (SOAP_XML_TREE | SOAP_XML_GRAPH)))
-		for (i = 0; i < SOAP_PTRHASH; i++)
-			for (pp = soap->pht[i]; pp; pp = pp->next)
-				if (pp->mark1 == 2 || pp->mark2 == 2)
-					if (soap_putelement(soap, pp->ptr, "id", pp->id, pp->type))
-						return soap->error;
-	return SOAP_OK;
-}
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap *soap, const void *ptr, const char *tag, int id, int type)
-{
-	switch (type)
-	{
-	case SOAP_TYPE_KMS_CA_byte:
-		return soap_out_byte(soap, tag, id, (const char *)ptr, "xsd:byte");
-	case SOAP_TYPE_KMS_CA_int:
-		return soap_out_int(soap, tag, id, (const int *)ptr, "xsd:int");
-	case SOAP_TYPE_KMS_CA_xsd__int:
-		return soap_out_xsd__int(soap, tag, id, (const long *)ptr, "xsd:int");
-	case SOAP_TYPE_KMS_CA_long:
-		return soap_out_long(soap, tag, id, (const long *)ptr, "xsd:long");
-	case SOAP_TYPE_KMS_CA_xsd__long:
-		return soap_out_xsd__long(soap, tag, id, (const LONG64 *)ptr, "xsd:long");
-	case SOAP_TYPE_KMS_CA_LONG64:
-		return soap_out_LONG64(soap, tag, id, (const LONG64 *)ptr, "xsd:long");
-	case SOAP_TYPE_KMS_CA_xsd__float:
-		return soap_out_xsd__float(soap, tag, id, (const float *)ptr, "xsd:float");
-	case SOAP_TYPE_KMS_CA_float:
-		return soap_out_float(soap, tag, id, (const float *)ptr, "xsd:float");
-	case SOAP_TYPE_KMS_CA_unsignedByte:
-		return soap_out_unsignedByte(soap, tag, id, (const unsigned char *)ptr, "xsd:unsignedByte");
-	case SOAP_TYPE_KMS_CA_unsignedInt:
-		return soap_out_unsignedInt(soap, tag, id, (const unsigned int *)ptr, "xsd:unsignedInt");
-	case SOAP_TYPE_KMS_CA_xsd__boolean:
-		return soap_out_xsd__boolean(soap, tag, id, (const bool *)ptr, "xsd:boolean");
-	case SOAP_TYPE_KMS_CA_bool:
-		return soap_out_bool(soap, tag, id, (const bool *)ptr, "xsd:boolean");
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClock:
-		return soap_out_KMS_CA__RetrieveLocalClock(soap, tag, id, (const struct KMS_CA__RetrieveLocalClock *)ptr, "KMS-CA:RetrieveLocalClock");
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClockResponse:
-		return soap_out_KMS_CA__RetrieveLocalClockResponse(soap, tag, id, (const struct KMS_CA__RetrieveLocalClockResponse *)ptr, "KMS-CA:RetrieveLocalClockResponse");
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificate:
-		return soap_out_KMS_CA__RetrieveRootCACertificate(soap, tag, id, (const struct KMS_CA__RetrieveRootCACertificate *)ptr, "KMS-CA:RetrieveRootCACertificate");
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificateResponse:
-		return soap_out_KMS_CA__RetrieveRootCACertificateResponse(soap, tag, id, (const struct KMS_CA__RetrieveRootCACertificateResponse *)ptr, "KMS-CA:RetrieveRootCACertificateResponse");
-	case SOAP_TYPE_KMS_CA_xsd__hexBinary:
-		return soap_out_xsd__hexBinary(soap, tag, id, (const struct xsd__hexBinary *)ptr, "xsd:hexBinary");
-	case SOAP_TYPE_KMS_CA_PointerTounsignedByte:
-		return soap_out_PointerTounsignedByte(soap, tag, id, (unsigned char *const*)ptr, "xsd:unsignedByte");
-	case SOAP_TYPE_KMS_CA_xsd__duration:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:duration");
-	case SOAP_TYPE_KMS_CA_xsd__dateTime:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:dateTime");
-	case SOAP_TYPE_KMS_CA_xsd__string:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:string");
-	case SOAP_TYPE_KMS_CA__QName:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:QName");
-	case SOAP_TYPE_KMS_CA_string:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:string");
-	}
-	return SOAP_OK;
-}
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap *soap, const void *ptr, int type)
-{
-	(void)soap; (void)ptr; (void)type; /* appease -Wall -Werror */
-	switch (type)
-	{
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClock:
-		soap_serialize_KMS_CA__RetrieveLocalClock(soap, (const struct KMS_CA__RetrieveLocalClock *)ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClockResponse:
-		soap_serialize_KMS_CA__RetrieveLocalClockResponse(soap, (const struct KMS_CA__RetrieveLocalClockResponse *)ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificate:
-		soap_serialize_KMS_CA__RetrieveRootCACertificate(soap, (const struct KMS_CA__RetrieveRootCACertificate *)ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificateResponse:
-		soap_serialize_KMS_CA__RetrieveRootCACertificateResponse(soap, (const struct KMS_CA__RetrieveRootCACertificateResponse *)ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_xsd__hexBinary:
-		soap_serialize_xsd__hexBinary(soap, (const struct xsd__hexBinary *)ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_PointerTounsignedByte:
-		soap_serialize_PointerTounsignedByte(soap, (unsigned char *const*)ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_xsd__duration:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_xsd__dateTime:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_xsd__string:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_CA__QName:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_string:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	}
-}
-#endif
-
-SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap *soap, int t, const char *type, const char *arrayType, size_t *n)
-{
-	switch (t)
-	{
-	case SOAP_TYPE_KMS_CA_xsd__hexBinary:
-		return (void*)soap_instantiate_xsd__hexBinary(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificateResponse:
-		return (void*)soap_instantiate_KMS_CA__RetrieveRootCACertificateResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificate:
-		return (void*)soap_instantiate_KMS_CA__RetrieveRootCACertificate(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClockResponse:
-		return (void*)soap_instantiate_KMS_CA__RetrieveLocalClockResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClock:
-		return (void*)soap_instantiate_KMS_CA__RetrieveLocalClock(soap, -1, type, arrayType, n);
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_CA_SOAP_ENV__Header:
-		return (void*)soap_instantiate_SOAP_ENV__Header(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_CA_SOAP_ENV__Code:
-		return (void*)soap_instantiate_SOAP_ENV__Code(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_CA_SOAP_ENV__Detail:
-		return (void*)soap_instantiate_SOAP_ENV__Detail(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_CA_SOAP_ENV__Reason:
-		return (void*)soap_instantiate_SOAP_ENV__Reason(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_CA_SOAP_ENV__Fault:
-		return (void*)soap_instantiate_SOAP_ENV__Fault(soap, -1, type, arrayType, n);
-#endif
-	}
-	return NULL;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_fdelete(struct soap_clist *p)
-{	switch (p->type)
-	{
-	case SOAP_TYPE_KMS_CA_xsd__hexBinary:
-		if (p->size < 0)
-			SOAP_DELETE((struct xsd__hexBinary*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct xsd__hexBinary*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificateResponse:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_CA__RetrieveRootCACertificateResponse*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_CA__RetrieveRootCACertificateResponse*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificate:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_CA__RetrieveRootCACertificate*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_CA__RetrieveRootCACertificate*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClockResponse:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_CA__RetrieveLocalClockResponse*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_CA__RetrieveLocalClockResponse*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClock:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_CA__RetrieveLocalClock*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_CA__RetrieveLocalClock*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_SOAP_ENV__Header:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Header*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Header*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_SOAP_ENV__Code:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Code*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Code*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_SOAP_ENV__Detail:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Detail*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Detail*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_SOAP_ENV__Reason:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Reason*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Reason*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_CA_SOAP_ENV__Fault:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Fault*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Fault*)p->ptr);
-		break;
-	default:	return SOAP_ERR;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 void* SOAP_FMAC4 soap_class_id_enter(struct soap *soap, const char *id, void *p, int t, size_t n, const char *type, const char *arrayType)
-{	return soap_id_enter(soap, id, p, t, n, 0, type, arrayType, soap_instantiate);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_byte(struct soap *soap, char *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_byte
-	*a = SOAP_DEFAULT_byte;
-#else
-	*a = (char)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_byte(struct soap *soap, const char *tag, int id, const char *a, const char *type)
-{
-	return soap_outbyte(soap, tag, id, a, type, SOAP_TYPE_KMS_CA_byte);
-}
-
-SOAP_FMAC3 char * SOAP_FMAC4 soap_in_byte(struct soap *soap, const char *tag, char *a, const char *type)
-{	char *p;
-	p = soap_inbyte(soap, tag, a, type, SOAP_TYPE_KMS_CA_byte);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_byte(struct soap *soap, const char *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_byte);
-	if (soap_out_byte(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char * SOAP_FMAC4 soap_get_byte(struct soap *soap, char *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_byte(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_int(struct soap *soap, int *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_int
-	*a = SOAP_DEFAULT_int;
-#else
-	*a = (int)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_int(struct soap *soap, const char *tag, int id, const int *a, const char *type)
-{
-	return soap_outint(soap, tag, id, a, type, SOAP_TYPE_KMS_CA_int);
-}
-
-SOAP_FMAC3 int * SOAP_FMAC4 soap_in_int(struct soap *soap, const char *tag, int *a, const char *type)
-{	int *p;
-	p = soap_inint(soap, tag, a, type, SOAP_TYPE_KMS_CA_int);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_int(struct soap *soap, const int *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_int);
-	if (soap_out_int(soap, tag?tag:"int", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 int * SOAP_FMAC4 soap_get_int(struct soap *soap, int *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_int(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__int(struct soap *soap, const char *tag, int id, const long *a, const char *type)
-{
-	return soap_outlong(soap, tag, id, a, type, SOAP_TYPE_KMS_CA_xsd__int);
-}
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_in_xsd__int(struct soap *soap, const char *tag, long *a, const char *type)
-{	long *p;
-	p = soap_inlong(soap, tag, a, type, SOAP_TYPE_KMS_CA_xsd__int);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__int(struct soap *soap, const long *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_xsd__int);
-	if (soap_out_xsd__int(soap, tag?tag:"xsd:int", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_get_xsd__int(struct soap *soap, long *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__int(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_long(struct soap *soap, long *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_long
-	*a = SOAP_DEFAULT_long;
-#else
-	*a = (long)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_long(struct soap *soap, const char *tag, int id, const long *a, const char *type)
-{
-	return soap_outlong(soap, tag, id, a, type, SOAP_TYPE_KMS_CA_long);
-}
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_in_long(struct soap *soap, const char *tag, long *a, const char *type)
-{	long *p;
-	p = soap_inlong(soap, tag, a, type, SOAP_TYPE_KMS_CA_long);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_long(struct soap *soap, const long *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_long);
-	if (soap_out_long(soap, tag?tag:"long", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_get_long(struct soap *soap, long *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_long(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__long(struct soap *soap, const char *tag, int id, const LONG64 *a, const char *type)
-{
-	return soap_outLONG64(soap, tag, id, a, type, SOAP_TYPE_KMS_CA_xsd__long);
-}
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_in_xsd__long(struct soap *soap, const char *tag, LONG64 *a, const char *type)
-{	LONG64 *p;
-	p = soap_inLONG64(soap, tag, a, type, SOAP_TYPE_KMS_CA_xsd__long);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__long(struct soap *soap, const LONG64 *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_xsd__long);
-	if (soap_out_xsd__long(soap, tag?tag:"xsd:long", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_xsd__long(struct soap *soap, LONG64 *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__long(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_LONG64(struct soap *soap, LONG64 *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_LONG64
-	*a = SOAP_DEFAULT_LONG64;
-#else
-	*a = (LONG64)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_LONG64(struct soap *soap, const char *tag, int id, const LONG64 *a, const char *type)
-{
-	return soap_outLONG64(soap, tag, id, a, type, SOAP_TYPE_KMS_CA_LONG64);
-}
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_in_LONG64(struct soap *soap, const char *tag, LONG64 *a, const char *type)
-{	LONG64 *p;
-	p = soap_inLONG64(soap, tag, a, type, SOAP_TYPE_KMS_CA_LONG64);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_LONG64(struct soap *soap, const LONG64 *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_LONG64);
-	if (soap_out_LONG64(soap, tag?tag:"long", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_LONG64(struct soap *soap, LONG64 *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_LONG64(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__float(struct soap *soap, const char *tag, int id, const float *a, const char *type)
-{
-	return soap_outfloat(soap, tag, id, a, type, SOAP_TYPE_KMS_CA_xsd__float);
-}
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_in_xsd__float(struct soap *soap, const char *tag, float *a, const char *type)
-{	float *p;
-	p = soap_infloat(soap, tag, a, type, SOAP_TYPE_KMS_CA_xsd__float);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__float(struct soap *soap, const float *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_xsd__float);
-	if (soap_out_xsd__float(soap, tag?tag:"xsd:float", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_get_xsd__float(struct soap *soap, float *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__float(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_float(struct soap *soap, float *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_float
-	*a = SOAP_DEFAULT_float;
-#else
-	*a = (float)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_float(struct soap *soap, const char *tag, int id, const float *a, const char *type)
-{
-	return soap_outfloat(soap, tag, id, a, type, SOAP_TYPE_KMS_CA_float);
-}
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_in_float(struct soap *soap, const char *tag, float *a, const char *type)
-{	float *p;
-	p = soap_infloat(soap, tag, a, type, SOAP_TYPE_KMS_CA_float);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_float(struct soap *soap, const float *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_float);
-	if (soap_out_float(soap, tag?tag:"float", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_get_float(struct soap *soap, float *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_float(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedByte(struct soap *soap, unsigned char *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_unsignedByte
-	*a = SOAP_DEFAULT_unsignedByte;
-#else
-	*a = (unsigned char)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedByte(struct soap *soap, const char *tag, int id, const unsigned char *a, const char *type)
-{
-	return soap_outunsignedByte(soap, tag, id, a, type, SOAP_TYPE_KMS_CA_unsignedByte);
-}
-
-SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_in_unsignedByte(struct soap *soap, const char *tag, unsigned char *a, const char *type)
-{	unsigned char *p;
-	p = soap_inunsignedByte(soap, tag, a, type, SOAP_TYPE_KMS_CA_unsignedByte);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedByte(struct soap *soap, const unsigned char *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_unsignedByte);
-	if (soap_out_unsignedByte(soap, tag?tag:"unsignedByte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_get_unsignedByte(struct soap *soap, unsigned char *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_unsignedByte(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedInt(struct soap *soap, unsigned int *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_unsignedInt
-	*a = SOAP_DEFAULT_unsignedInt;
-#else
-	*a = (unsigned int)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedInt(struct soap *soap, const char *tag, int id, const unsigned int *a, const char *type)
-{
-	return soap_outunsignedInt(soap, tag, id, a, type, SOAP_TYPE_KMS_CA_unsignedInt);
-}
-
-SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_in_unsignedInt(struct soap *soap, const char *tag, unsigned int *a, const char *type)
-{	unsigned int *p;
-	p = soap_inunsignedInt(soap, tag, a, type, SOAP_TYPE_KMS_CA_unsignedInt);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedInt(struct soap *soap, const unsigned int *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_unsignedInt);
-	if (soap_out_unsignedInt(soap, tag?tag:"unsignedInt", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_get_unsignedInt(struct soap *soap, unsigned int *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_unsignedInt(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_xsd__boolean2s(struct soap *soap, bool n)
-{	return soap_bool2s(soap, n);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__boolean(struct soap *soap, const char *tag, int id, const bool *a, const char *type)
-{	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_CA_xsd__boolean), type) || soap_send(soap, soap_xsd__boolean2s(soap, *a)))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2xsd__boolean(struct soap *soap, const char *s, bool *a)
-{
-	return soap_s2bool(soap, s, a);
-}
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_xsd__boolean(struct soap *soap, const char *tag, bool *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, NULL))
-		return NULL;
-	if (*soap->type && soap_match_tag(soap, soap->type, type) && soap_match_tag(soap, soap->type, ":boolean"))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (bool *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_CA_xsd__boolean, sizeof(bool), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	if (soap->body && !*soap->href)
-	{	if (!a || soap_s2xsd__boolean(soap, soap_value(soap), a) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (bool *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_CA_xsd__boolean, 0, sizeof(bool), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__boolean(struct soap *soap, const bool *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_xsd__boolean);
-	if (soap_out_xsd__boolean(soap, tag?tag:"xsd:boolean", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_xsd__boolean(struct soap *soap, bool *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__boolean(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_bool(struct soap *soap, bool *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_bool
-	*a = SOAP_DEFAULT_bool;
-#else
-	*a = (bool)0;
-#endif
-}
-
-static const struct soap_code_map soap_codes_bool[] =
-{	{ (long)false, "false" },
-	{ (long)true, "true" },
-	{ 0, NULL }
-};
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_bool2s(struct soap *soap, bool n)
-{
-	(void)soap; /* appease -Wall -Werror */
-return soap_code_str(soap_codes_bool, n!=0);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_bool(struct soap *soap, const char *tag, int id, const bool *a, const char *type)
-{	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_CA_bool), type) || soap_send(soap, soap_bool2s(soap, *a)))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2bool(struct soap *soap, const char *s, bool *a)
-{
-	const struct soap_code_map *map;
-	if (!s)
-		return soap->error;
-	map = soap_code(soap_codes_bool, s);
-	if (map)
-		*a = (bool)(map->code != 0);
-	else
-	{	long n;
-		if (soap_s2long(soap, s, &n) || n < 0 || n > 1)
-			return soap->error = SOAP_TYPE;
-		*a = (bool)(n != 0);
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_bool(struct soap *soap, const char *tag, bool *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, NULL))
-		return NULL;
-	if (*soap->type && soap_match_tag(soap, soap->type, type) && soap_match_tag(soap, soap->type, ":boolean"))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (bool *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_CA_bool, sizeof(bool), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	if (soap->body && !*soap->href)
-	{	if (!a || soap_s2bool(soap, soap_value(soap), a) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (bool *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_CA_bool, 0, sizeof(bool), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_bool(struct soap *soap, const bool *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_bool);
-	if (soap_out_bool(soap, tag?tag:"boolean", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_bool(struct soap *soap, bool *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_bool(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default__QName(soap, &a->faultcode);
-	soap_default_string(soap, &a->faultstring);
-	soap_default_string(soap, &a->faultactor);
-	a->detail = NULL;
-	a->SOAP_ENV__Code = NULL;
-	a->SOAP_ENV__Reason = NULL;
-	soap_default_string(soap, &a->SOAP_ENV__Node);
-	soap_default_string(soap, &a->SOAP_ENV__Role);
-	a->SOAP_ENV__Detail = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Fault(struct soap *soap, const struct SOAP_ENV__Fault *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize__QName(soap, &a->faultcode);
-	soap_serialize_string(soap, &a->faultstring);
-	soap_serialize_string(soap, &a->faultactor);
-	soap_serialize_PointerToSOAP_ENV__Detail(soap, &a->detail);
-	soap_serialize_PointerToSOAP_ENV__Code(soap, &a->SOAP_ENV__Code);
-	soap_serialize_PointerToSOAP_ENV__Reason(soap, &a->SOAP_ENV__Reason);
-	soap_serialize_string(soap, &a->SOAP_ENV__Node);
-	soap_serialize_string(soap, &a->SOAP_ENV__Role);
-	soap_serialize_PointerToSOAP_ENV__Detail(soap, &a->SOAP_ENV__Detail);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Fault(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Fault *a, const char *type)
-{
-	const char *soap_tmp_faultcode = soap_QName2s(soap, a->faultcode);
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_CA_SOAP_ENV__Fault), type))
-		return soap->error;
-	if (soap_out__QName(soap, "faultcode", -1, (char*const*)&soap_tmp_faultcode, ""))
-		return soap->error;
-	if (soap_out_string(soap, "faultstring", -1, &a->faultstring, "xsd:string"))
-		return soap->error;
-	if (soap_out_string(soap, "faultactor", -1, &a->faultactor, "xsd:string"))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Detail(soap, "detail", -1, &a->detail, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Code", -1, &a->SOAP_ENV__Code, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Reason(soap, "SOAP-ENV:Reason", -1, &a->SOAP_ENV__Reason, ""))
-		return soap->error;
-	if (soap_out_string(soap, "SOAP-ENV:Node", -1, &a->SOAP_ENV__Node, ""))
-		return soap->error;
-	if (soap_out_string(soap, "SOAP-ENV:Role", -1, &a->SOAP_ENV__Role, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Detail(soap, "SOAP-ENV:Detail", -1, &a->SOAP_ENV__Detail, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_in_SOAP_ENV__Fault(struct soap *soap, const char *tag, struct SOAP_ENV__Fault *a, const char *type)
-{
-	size_t soap_flag_faultcode = 1;
-	size_t soap_flag_faultstring = 1;
-	size_t soap_flag_faultactor = 1;
-	size_t soap_flag_detail = 1;
-	size_t soap_flag_SOAP_ENV__Code = 1;
-	size_t soap_flag_SOAP_ENV__Reason = 1;
-	size_t soap_flag_SOAP_ENV__Node = 1;
-	size_t soap_flag_SOAP_ENV__Role = 1;
-	size_t soap_flag_SOAP_ENV__Detail = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Fault *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_CA_SOAP_ENV__Fault, sizeof(struct SOAP_ENV__Fault), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Fault(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_faultcode && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in__QName(soap, "faultcode", &a->faultcode, ""))
-				{	soap_flag_faultcode--;
-					continue;
-				}
-			if (soap_flag_faultstring && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "faultstring", &a->faultstring, "xsd:string"))
-				{	soap_flag_faultstring--;
-					continue;
-				}
-			if (soap_flag_faultactor && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "faultactor", &a->faultactor, "xsd:string"))
-				{	soap_flag_faultactor--;
-					continue;
-				}
-			if (soap_flag_detail && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Detail(soap, "detail", &a->detail, ""))
-				{	soap_flag_detail--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Code && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Code", &a->SOAP_ENV__Code, ""))
-				{	soap_flag_SOAP_ENV__Code--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Reason && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Reason(soap, "SOAP-ENV:Reason", &a->SOAP_ENV__Reason, ""))
-				{	soap_flag_SOAP_ENV__Reason--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Node && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "SOAP-ENV:Node", &a->SOAP_ENV__Node, "xsd:string"))
-				{	soap_flag_SOAP_ENV__Node--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Role && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "SOAP-ENV:Role", &a->SOAP_ENV__Role, "xsd:string"))
-				{	soap_flag_SOAP_ENV__Role--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Detail && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Detail(soap, "SOAP-ENV:Detail", &a->SOAP_ENV__Detail, ""))
-				{	soap_flag_SOAP_ENV__Detail--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Fault *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_CA_SOAP_ENV__Fault, 0, sizeof(struct SOAP_ENV__Fault), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Fault(struct soap *soap, const struct SOAP_ENV__Fault *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_SOAP_ENV__Fault);
-	if (soap_out_SOAP_ENV__Fault(soap, tag?tag:"SOAP-ENV:Fault", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_get_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Fault(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Fault * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Fault(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Fault(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_CA_SOAP_ENV__Fault, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Fault);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Fault);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Fault[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Fault);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Fault*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Fault(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Fault %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Fault*)p = *(struct SOAP_ENV__Fault*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_string(soap, &a->SOAP_ENV__Text);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Reason(struct soap *soap, const struct SOAP_ENV__Reason *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_string(soap, &a->SOAP_ENV__Text);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Reason(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Reason *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_CA_SOAP_ENV__Reason), type))
-		return soap->error;
-	if (soap->lang)
-		soap_set_attr(soap, "xml:lang", soap->lang, 1);
-	if (soap_out_string(soap, "SOAP-ENV:Text", -1, &a->SOAP_ENV__Text, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_in_SOAP_ENV__Reason(struct soap *soap, const char *tag, struct SOAP_ENV__Reason *a, const char *type)
-{
-	size_t soap_flag_SOAP_ENV__Text = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Reason *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_CA_SOAP_ENV__Reason, sizeof(struct SOAP_ENV__Reason), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Reason(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_SOAP_ENV__Text && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "SOAP-ENV:Text", &a->SOAP_ENV__Text, "xsd:string"))
-				{	soap_flag_SOAP_ENV__Text--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Reason *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_CA_SOAP_ENV__Reason, 0, sizeof(struct SOAP_ENV__Reason), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Reason(struct soap *soap, const struct SOAP_ENV__Reason *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_SOAP_ENV__Reason);
-	if (soap_out_SOAP_ENV__Reason(soap, tag?tag:"SOAP-ENV:Reason", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_get_SOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Reason(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Reason * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Reason(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Reason(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_CA_SOAP_ENV__Reason, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Reason);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Reason);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Reason[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Reason);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Reason*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Reason(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Reason %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Reason*)p = *(struct SOAP_ENV__Reason*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	a->__type = 0;
-	a->fault = NULL;
-	a->__any = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Detail(struct soap *soap, const struct SOAP_ENV__Detail *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_markelement(soap, a->fault, a->__type);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Detail(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Detail *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_CA_SOAP_ENV__Detail), type))
-		return soap->error;
-	if (soap_putelement(soap, a->fault, "fault", -1, a->__type))
-		return soap->error;
-	soap_outliteral(soap, "-any", &a->__any, NULL);
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_in_SOAP_ENV__Detail(struct soap *soap, const char *tag, struct SOAP_ENV__Detail *a, const char *type)
-{
-	size_t soap_flag_fault = 1;
-	size_t soap_flag___any = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Detail *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_CA_SOAP_ENV__Detail, sizeof(struct SOAP_ENV__Detail), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Detail(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_fault && soap->error == SOAP_TAG_MISMATCH)
-				if ((a->fault = soap_getelement(soap, &a->__type)))
-				{	soap_flag_fault = 0;
-					continue;
-				}
-			if (soap_flag___any && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_inliteral(soap, "-any", &a->__any))
-				{	soap_flag___any--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Detail *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_CA_SOAP_ENV__Detail, 0, sizeof(struct SOAP_ENV__Detail), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Detail(struct soap *soap, const struct SOAP_ENV__Detail *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_SOAP_ENV__Detail);
-	if (soap_out_SOAP_ENV__Detail(soap, tag?tag:"SOAP-ENV:Detail", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_get_SOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Detail(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Detail * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Detail(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Detail(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_CA_SOAP_ENV__Detail, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Detail);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Detail);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Detail[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Detail);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Detail*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Detail(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Detail %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Detail*)p = *(struct SOAP_ENV__Detail*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default__QName(soap, &a->SOAP_ENV__Value);
-	a->SOAP_ENV__Subcode = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Code(struct soap *soap, const struct SOAP_ENV__Code *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize__QName(soap, &a->SOAP_ENV__Value);
-	soap_serialize_PointerToSOAP_ENV__Code(soap, &a->SOAP_ENV__Subcode);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Code(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Code *a, const char *type)
-{
-	const char *soap_tmp_SOAP_ENV__Value = soap_QName2s(soap, a->SOAP_ENV__Value);
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_CA_SOAP_ENV__Code), type))
-		return soap->error;
-	if (soap_out__QName(soap, "SOAP-ENV:Value", -1, (char*const*)&soap_tmp_SOAP_ENV__Value, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Subcode", -1, &a->SOAP_ENV__Subcode, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_in_SOAP_ENV__Code(struct soap *soap, const char *tag, struct SOAP_ENV__Code *a, const char *type)
-{
-	size_t soap_flag_SOAP_ENV__Value = 1;
-	size_t soap_flag_SOAP_ENV__Subcode = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Code *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_CA_SOAP_ENV__Code, sizeof(struct SOAP_ENV__Code), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Code(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_SOAP_ENV__Value && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in__QName(soap, "SOAP-ENV:Value", &a->SOAP_ENV__Value, ""))
-				{	soap_flag_SOAP_ENV__Value--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Subcode && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Subcode", &a->SOAP_ENV__Subcode, ""))
-				{	soap_flag_SOAP_ENV__Subcode--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Code *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_CA_SOAP_ENV__Code, 0, sizeof(struct SOAP_ENV__Code), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Code(struct soap *soap, const struct SOAP_ENV__Code *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_SOAP_ENV__Code);
-	if (soap_out_SOAP_ENV__Code(soap, tag?tag:"SOAP-ENV:Code", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_get_SOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Code(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Code * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Code(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Code(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_CA_SOAP_ENV__Code, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Code);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Code);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Code[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Code);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Code*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Code(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Code %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Code*)p = *(struct SOAP_ENV__Code*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Header(struct soap *soap, struct SOAP_ENV__Header *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Header(struct soap *soap, const struct SOAP_ENV__Header *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Header(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Header *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_CA_SOAP_ENV__Header), type))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_in_SOAP_ENV__Header(struct soap *soap, const char *tag, struct SOAP_ENV__Header *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Header *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_CA_SOAP_ENV__Header, sizeof(struct SOAP_ENV__Header), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Header(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Header *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_CA_SOAP_ENV__Header, 0, sizeof(struct SOAP_ENV__Header), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Header(struct soap *soap, const struct SOAP_ENV__Header *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_SOAP_ENV__Header);
-	if (soap_out_SOAP_ENV__Header(soap, tag?tag:"SOAP-ENV:Header", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_get_SOAP_ENV__Header(struct soap *soap, struct SOAP_ENV__Header *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Header(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Header * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Header(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Header(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_CA_SOAP_ENV__Header, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Header);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Header);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Header[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Header);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Header*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Header(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Header %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Header*)p = *(struct SOAP_ENV__Header*)q;
-}
-
-#endif
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_CA__RetrieveLocalClock(struct soap *soap, struct KMS_CA__RetrieveLocalClock *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__string(soap, &a->EntityID);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_CA__RetrieveLocalClock(struct soap *soap, const struct KMS_CA__RetrieveLocalClock *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->EntityID);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_CA__RetrieveLocalClock(struct soap *soap, const char *tag, int id, const struct KMS_CA__RetrieveLocalClock *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClock), type))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "EntityID", -1, &a->EntityID, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_CA__RetrieveLocalClock * SOAP_FMAC4 soap_in_KMS_CA__RetrieveLocalClock(struct soap *soap, const char *tag, struct KMS_CA__RetrieveLocalClock *a, const char *type)
-{
-	size_t soap_flag_EntityID = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_CA__RetrieveLocalClock *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClock, sizeof(struct KMS_CA__RetrieveLocalClock), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_CA__RetrieveLocalClock(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_EntityID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "EntityID", &a->EntityID, "xsd:string"))
-				{	soap_flag_EntityID--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_CA__RetrieveLocalClock *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClock, 0, sizeof(struct KMS_CA__RetrieveLocalClock), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_CA__RetrieveLocalClock(struct soap *soap, const struct KMS_CA__RetrieveLocalClock *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClock);
-	if (soap_out_KMS_CA__RetrieveLocalClock(soap, tag?tag:"KMS-CA:RetrieveLocalClock", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_CA__RetrieveLocalClock * SOAP_FMAC4 soap_get_KMS_CA__RetrieveLocalClock(struct soap *soap, struct KMS_CA__RetrieveLocalClock *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_CA__RetrieveLocalClock(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_CA__RetrieveLocalClock * SOAP_FMAC2 soap_instantiate_KMS_CA__RetrieveLocalClock(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_CA__RetrieveLocalClock(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClock, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_CA__RetrieveLocalClock);
-		if (size)
-			*size = sizeof(struct KMS_CA__RetrieveLocalClock);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_CA__RetrieveLocalClock[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_CA__RetrieveLocalClock);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_CA__RetrieveLocalClock*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_CA__RetrieveLocalClock(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_CA__RetrieveLocalClock %p -> %p\n", q, p));
-	*(struct KMS_CA__RetrieveLocalClock*)p = *(struct KMS_CA__RetrieveLocalClock*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_CA__RetrieveLocalClockResponse(struct soap *soap, struct KMS_CA__RetrieveLocalClockResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__dateTime(soap, &a->CurrentTime);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_CA__RetrieveLocalClockResponse(struct soap *soap, const struct KMS_CA__RetrieveLocalClockResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__dateTime(soap, &a->CurrentTime);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_CA__RetrieveLocalClockResponse(struct soap *soap, const char *tag, int id, const struct KMS_CA__RetrieveLocalClockResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClockResponse), type))
-		return soap->error;
-	if (soap_out_xsd__dateTime(soap, "CurrentTime", -1, &a->CurrentTime, "xsd:dateTime"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_CA__RetrieveLocalClockResponse * SOAP_FMAC4 soap_in_KMS_CA__RetrieveLocalClockResponse(struct soap *soap, const char *tag, struct KMS_CA__RetrieveLocalClockResponse *a, const char *type)
-{
-	size_t soap_flag_CurrentTime = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_CA__RetrieveLocalClockResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClockResponse, sizeof(struct KMS_CA__RetrieveLocalClockResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_CA__RetrieveLocalClockResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_CurrentTime && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__dateTime(soap, "CurrentTime", &a->CurrentTime, "xsd:dateTime"))
-				{	soap_flag_CurrentTime--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_CA__RetrieveLocalClockResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClockResponse, 0, sizeof(struct KMS_CA__RetrieveLocalClockResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_CA__RetrieveLocalClockResponse(struct soap *soap, const struct KMS_CA__RetrieveLocalClockResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClockResponse);
-	if (soap_out_KMS_CA__RetrieveLocalClockResponse(soap, tag?tag:"KMS-CA:RetrieveLocalClockResponse", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_CA__RetrieveLocalClockResponse * SOAP_FMAC4 soap_get_KMS_CA__RetrieveLocalClockResponse(struct soap *soap, struct KMS_CA__RetrieveLocalClockResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_CA__RetrieveLocalClockResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_CA__RetrieveLocalClockResponse * SOAP_FMAC2 soap_instantiate_KMS_CA__RetrieveLocalClockResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_CA__RetrieveLocalClockResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClockResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_CA__RetrieveLocalClockResponse);
-		if (size)
-			*size = sizeof(struct KMS_CA__RetrieveLocalClockResponse);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_CA__RetrieveLocalClockResponse[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_CA__RetrieveLocalClockResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_CA__RetrieveLocalClockResponse*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_CA__RetrieveLocalClockResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_CA__RetrieveLocalClockResponse %p -> %p\n", q, p));
-	*(struct KMS_CA__RetrieveLocalClockResponse*)p = *(struct KMS_CA__RetrieveLocalClockResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_CA__RetrieveRootCACertificate(struct soap *soap, struct KMS_CA__RetrieveRootCACertificate *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__string(soap, &a->EntityID);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_CA__RetrieveRootCACertificate(struct soap *soap, const struct KMS_CA__RetrieveRootCACertificate *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->EntityID);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_CA__RetrieveRootCACertificate(struct soap *soap, const char *tag, int id, const struct KMS_CA__RetrieveRootCACertificate *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificate), type))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "EntityID", -1, &a->EntityID, "xsd:string"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_CA__RetrieveRootCACertificate * SOAP_FMAC4 soap_in_KMS_CA__RetrieveRootCACertificate(struct soap *soap, const char *tag, struct KMS_CA__RetrieveRootCACertificate *a, const char *type)
-{
-	size_t soap_flag_EntityID = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_CA__RetrieveRootCACertificate *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificate, sizeof(struct KMS_CA__RetrieveRootCACertificate), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_CA__RetrieveRootCACertificate(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_EntityID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "EntityID", &a->EntityID, "xsd:string"))
-				{	soap_flag_EntityID--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_CA__RetrieveRootCACertificate *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificate, 0, sizeof(struct KMS_CA__RetrieveRootCACertificate), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_CA__RetrieveRootCACertificate(struct soap *soap, const struct KMS_CA__RetrieveRootCACertificate *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificate);
-	if (soap_out_KMS_CA__RetrieveRootCACertificate(soap, tag?tag:"KMS-CA:RetrieveRootCACertificate", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_CA__RetrieveRootCACertificate * SOAP_FMAC4 soap_get_KMS_CA__RetrieveRootCACertificate(struct soap *soap, struct KMS_CA__RetrieveRootCACertificate *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_CA__RetrieveRootCACertificate(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_CA__RetrieveRootCACertificate * SOAP_FMAC2 soap_instantiate_KMS_CA__RetrieveRootCACertificate(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_CA__RetrieveRootCACertificate(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificate, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_CA__RetrieveRootCACertificate);
-		if (size)
-			*size = sizeof(struct KMS_CA__RetrieveRootCACertificate);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_CA__RetrieveRootCACertificate[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_CA__RetrieveRootCACertificate);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_CA__RetrieveRootCACertificate*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_CA__RetrieveRootCACertificate(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_CA__RetrieveRootCACertificate %p -> %p\n", q, p));
-	*(struct KMS_CA__RetrieveRootCACertificate*)p = *(struct KMS_CA__RetrieveRootCACertificate*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_CA__RetrieveRootCACertificateResponse(struct soap *soap, struct KMS_CA__RetrieveRootCACertificateResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__hexBinary(soap, &a->RootCACertificate);
-	soap_default_xsd__int(soap, &a->AuthenticationHashIterationCount);
-	soap_default_xsd__hexBinary(soap, &a->ClientAuthenticationChallenge);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_CA__RetrieveRootCACertificateResponse(struct soap *soap, const struct KMS_CA__RetrieveRootCACertificateResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__hexBinary(soap, &a->RootCACertificate);
-	soap_serialize_xsd__hexBinary(soap, &a->ClientAuthenticationChallenge);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_CA__RetrieveRootCACertificateResponse(struct soap *soap, const char *tag, int id, const struct KMS_CA__RetrieveRootCACertificateResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificateResponse), type))
-		return soap->error;
-	if (soap_out_xsd__hexBinary(soap, "RootCACertificate", -1, &a->RootCACertificate, "xsd:hexBinary"))
-		return soap->error;
-	if (soap_out_xsd__int(soap, "AuthenticationHashIterationCount", -1, &a->AuthenticationHashIterationCount, "xsd:int"))
-		return soap->error;
-	if (soap_out_xsd__hexBinary(soap, "ClientAuthenticationChallenge", -1, &a->ClientAuthenticationChallenge, "xsd:hexBinary"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_CA__RetrieveRootCACertificateResponse * SOAP_FMAC4 soap_in_KMS_CA__RetrieveRootCACertificateResponse(struct soap *soap, const char *tag, struct KMS_CA__RetrieveRootCACertificateResponse *a, const char *type)
-{
-	size_t soap_flag_RootCACertificate = 1;
-	size_t soap_flag_AuthenticationHashIterationCount = 1;
-	size_t soap_flag_ClientAuthenticationChallenge = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_CA__RetrieveRootCACertificateResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificateResponse, sizeof(struct KMS_CA__RetrieveRootCACertificateResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_CA__RetrieveRootCACertificateResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_RootCACertificate && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__hexBinary(soap, "RootCACertificate", &a->RootCACertificate, "xsd:hexBinary"))
-				{	soap_flag_RootCACertificate--;
-					continue;
-				}
-			if (soap_flag_AuthenticationHashIterationCount && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__int(soap, "AuthenticationHashIterationCount", &a->AuthenticationHashIterationCount, "xsd:int"))
-				{	soap_flag_AuthenticationHashIterationCount--;
-					continue;
-				}
-			if (soap_flag_ClientAuthenticationChallenge && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__hexBinary(soap, "ClientAuthenticationChallenge", &a->ClientAuthenticationChallenge, "xsd:hexBinary"))
-				{	soap_flag_ClientAuthenticationChallenge--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_CA__RetrieveRootCACertificateResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificateResponse, 0, sizeof(struct KMS_CA__RetrieveRootCACertificateResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_RootCACertificate > 0 || soap_flag_AuthenticationHashIterationCount > 0 || soap_flag_ClientAuthenticationChallenge > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_CA__RetrieveRootCACertificateResponse(struct soap *soap, const struct KMS_CA__RetrieveRootCACertificateResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificateResponse);
-	if (soap_out_KMS_CA__RetrieveRootCACertificateResponse(soap, tag?tag:"KMS-CA:RetrieveRootCACertificateResponse", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_CA__RetrieveRootCACertificateResponse * SOAP_FMAC4 soap_get_KMS_CA__RetrieveRootCACertificateResponse(struct soap *soap, struct KMS_CA__RetrieveRootCACertificateResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_CA__RetrieveRootCACertificateResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_CA__RetrieveRootCACertificateResponse * SOAP_FMAC2 soap_instantiate_KMS_CA__RetrieveRootCACertificateResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_CA__RetrieveRootCACertificateResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificateResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_CA__RetrieveRootCACertificateResponse);
-		if (size)
-			*size = sizeof(struct KMS_CA__RetrieveRootCACertificateResponse);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_CA__RetrieveRootCACertificateResponse[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_CA__RetrieveRootCACertificateResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_CA__RetrieveRootCACertificateResponse*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_CA__RetrieveRootCACertificateResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_CA__RetrieveRootCACertificateResponse %p -> %p\n", q, p));
-	*(struct KMS_CA__RetrieveRootCACertificateResponse*)p = *(struct KMS_CA__RetrieveRootCACertificateResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_xsd__hexBinary(struct soap *soap, struct xsd__hexBinary *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-	a->__size = 0;
-	a->__ptr = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__hexBinary(struct soap *soap, struct xsd__hexBinary const*a)
-{
-	if (a->__ptr)
-		soap_array_reference(soap, a, (struct soap_array*)&a->__ptr, 1, SOAP_TYPE_KMS_CA_xsd__hexBinary);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__hexBinary(struct soap *soap, const char *tag, int id, const struct xsd__hexBinary *a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, a, (struct soap_array*)&a->__ptr, 1, type, SOAP_TYPE_KMS_CA_xsd__hexBinary);
-	if (id < 0)
-		return soap->error;
-	if (soap_element_begin_out(soap, tag, id, type))
-		return soap->error;
-	if (soap_puthex(soap, a->__ptr, a->__size))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct xsd__hexBinary * SOAP_FMAC4 soap_in_xsd__hexBinary(struct soap *soap, const char *tag, struct xsd__hexBinary *a, const char *type)
-{
-	(void)type; /* appease -Wall -Werror */
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (*soap->type && soap_match_tag(soap, soap->type, type) && soap_match_tag(soap, soap->type, ":hexBinary"))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (struct xsd__hexBinary *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_CA_xsd__hexBinary, sizeof(struct xsd__hexBinary), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_xsd__hexBinary(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		a->__ptr = soap_gethex(soap, &a->__size);
-		if ((!a->__ptr && soap->error) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct xsd__hexBinary *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_CA_xsd__hexBinary, 0, sizeof(struct xsd__hexBinary), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__hexBinary(struct soap *soap, const struct xsd__hexBinary *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, (struct soap_array*)&a->__ptr, 1, tag, SOAP_TYPE_KMS_CA_xsd__hexBinary);
-	if (soap_out_xsd__hexBinary(soap, tag?tag:"SOAP-ENC:Array", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct xsd__hexBinary * SOAP_FMAC4 soap_get_xsd__hexBinary(struct soap *soap, struct xsd__hexBinary *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__hexBinary(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct xsd__hexBinary * SOAP_FMAC2 soap_instantiate_xsd__hexBinary(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_xsd__hexBinary(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_CA_xsd__hexBinary, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct xsd__hexBinary);
-		if (size)
-			*size = sizeof(struct xsd__hexBinary);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct xsd__hexBinary[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct xsd__hexBinary);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct xsd__hexBinary*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__hexBinary(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct xsd__hexBinary %p -> %p\n", q, p));
-	*(struct xsd__hexBinary*)p = *(struct xsd__hexBinary*)q;
-}
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_KMS_CA_SOAP_ENV__Reason))
-		soap_serialize_SOAP_ENV__Reason(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Reason(struct soap *soap, const char *tag, int id, struct SOAP_ENV__Reason *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_CA_SOAP_ENV__Reason);
-	if (id < 0)
-		return soap->error;
-	return soap_out_SOAP_ENV__Reason(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Reason(struct soap *soap, const char *tag, struct SOAP_ENV__Reason **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct SOAP_ENV__Reason **)soap_malloc(soap, sizeof(struct SOAP_ENV__Reason *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_SOAP_ENV__Reason(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Reason **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_CA_SOAP_ENV__Reason, sizeof(struct SOAP_ENV__Reason), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_PointerToSOAP_ENV__Reason);
-	if (soap_out_PointerToSOAP_ENV__Reason(soap, tag?tag:"SOAP-ENV:Reason", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToSOAP_ENV__Reason(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_KMS_CA_SOAP_ENV__Detail))
-		soap_serialize_SOAP_ENV__Detail(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Detail(struct soap *soap, const char *tag, int id, struct SOAP_ENV__Detail *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_CA_SOAP_ENV__Detail);
-	if (id < 0)
-		return soap->error;
-	return soap_out_SOAP_ENV__Detail(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Detail(struct soap *soap, const char *tag, struct SOAP_ENV__Detail **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct SOAP_ENV__Detail **)soap_malloc(soap, sizeof(struct SOAP_ENV__Detail *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_SOAP_ENV__Detail(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Detail **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_CA_SOAP_ENV__Detail, sizeof(struct SOAP_ENV__Detail), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_PointerToSOAP_ENV__Detail);
-	if (soap_out_PointerToSOAP_ENV__Detail(soap, tag?tag:"SOAP-ENV:Detail", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToSOAP_ENV__Detail(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_KMS_CA_SOAP_ENV__Code))
-		soap_serialize_SOAP_ENV__Code(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Code(struct soap *soap, const char *tag, int id, struct SOAP_ENV__Code *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_CA_SOAP_ENV__Code);
-	if (id < 0)
-		return soap->error;
-	return soap_out_SOAP_ENV__Code(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Code(struct soap *soap, const char *tag, struct SOAP_ENV__Code **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct SOAP_ENV__Code **)soap_malloc(soap, sizeof(struct SOAP_ENV__Code *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_SOAP_ENV__Code(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Code **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_CA_SOAP_ENV__Code, sizeof(struct SOAP_ENV__Code), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_PointerToSOAP_ENV__Code);
-	if (soap_out_PointerToSOAP_ENV__Code(soap, tag?tag:"SOAP-ENV:Code", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToSOAP_ENV__Code(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#endif
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTounsignedByte(struct soap *soap, unsigned char *const*a)
-{
-	soap_reference(soap, *a, SOAP_TYPE_KMS_CA_unsignedByte);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTounsignedByte(struct soap *soap, const char *tag, int id, unsigned char *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_CA_unsignedByte);
-	if (id < 0)
-		return soap->error;
-	return soap_out_unsignedByte(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_in_PointerTounsignedByte(struct soap *soap, const char *tag, unsigned char **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (unsigned char **)soap_malloc(soap, sizeof(unsigned char *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_unsignedByte(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (unsigned char **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_CA_unsignedByte, sizeof(unsigned char), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTounsignedByte(struct soap *soap, unsigned char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_PointerTounsignedByte);
-	if (soap_out_PointerTounsignedByte(soap, tag?tag:"unsignedByte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_get_PointerTounsignedByte(struct soap *soap, unsigned char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerTounsignedByte(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__duration(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_CA_xsd__duration);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__duration(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_CA_xsd__duration, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__duration(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_xsd__duration);
-	if (soap_out_xsd__duration(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__duration(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__duration(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__dateTime(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_CA_xsd__dateTime);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__dateTime(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_CA_xsd__dateTime, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__dateTime(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_xsd__dateTime);
-	if (soap_out_xsd__dateTime(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__dateTime(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__dateTime(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__string(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_CA_xsd__string);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__string(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_CA_xsd__string, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__string(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_xsd__string);
-	if (soap_out_xsd__string(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__string(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__string(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out__QName(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_CA__QName);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in__QName(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_CA__QName, 2, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put__QName(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA__QName);
-	if (soap_out__QName(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get__QName(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in__QName(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_string(struct soap *soap, char **a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_string
-	*a = SOAP_DEFAULT_string;
-#else
-	*a = (char *)0;
-#endif
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_string(struct soap *soap, char *const*a)
-{
-	soap_reference(soap, *a, SOAP_TYPE_KMS_CA_string);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_string(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_CA_string);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_string(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_CA_string, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_string(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_CA_string);
-	if (soap_out_string(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_string(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-} // namespace KMS_CA
-
-
-#if defined(__BORLANDC__)
-#pragma option pop
-#pragma option pop
-#endif
-
-/* End of KMS_CAC.cpp */
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_CAClient.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* KMS_CAClient.cpp
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/CAService/KMS_CA_SOAP.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#if defined(__BORLANDC__)
-#pragma option push -w-8060
-#pragma option push -w-8004
-#endif
-#include "KMS_CAH.h"
-
-namespace KMS_CA {
-
-SOAP_SOURCE_STAMP("@(#) KMS_CAClient.cpp ver 2.7.17 2010-06-08 19:16:38 GMT")
-
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_CA__RetrieveRootCACertificate(struct soap *soap, const char *soap_endpoint, const char *soap_action, char *EntityID, struct KMS_CA__RetrieveRootCACertificateResponse &result)
-{	struct KMS_CA__RetrieveRootCACertificate soap_tmp_KMS_CA__RetrieveRootCACertificate;
-	soap_tmp_KMS_CA__RetrieveRootCACertificate.EntityID = EntityID;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_CA__RetrieveRootCACertificate(soap, &soap_tmp_KMS_CA__RetrieveRootCACertificate);
-	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_KMS_CA__RetrieveRootCACertificate(soap, &soap_tmp_KMS_CA__RetrieveRootCACertificate, "KMS-CA:RetrieveRootCACertificate", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_CA__RetrieveRootCACertificate(soap, &soap_tmp_KMS_CA__RetrieveRootCACertificate, "KMS-CA:RetrieveRootCACertificate", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_CA__RetrieveRootCACertificateResponse(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_CA__RetrieveRootCACertificateResponse(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_CA__RetrieveLocalClock(struct soap *soap, const char *soap_endpoint, const char *soap_action, char *EntityID, struct KMS_CA__RetrieveLocalClockResponse &result)
-{	struct KMS_CA__RetrieveLocalClock soap_tmp_KMS_CA__RetrieveLocalClock;
-	soap_tmp_KMS_CA__RetrieveLocalClock.EntityID = EntityID;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_CA__RetrieveLocalClock(soap, &soap_tmp_KMS_CA__RetrieveLocalClock);
-	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_KMS_CA__RetrieveLocalClock(soap, &soap_tmp_KMS_CA__RetrieveLocalClock, "KMS-CA:RetrieveLocalClock", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_CA__RetrieveLocalClock(soap, &soap_tmp_KMS_CA__RetrieveLocalClock, "KMS-CA:RetrieveLocalClock", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_CA__RetrieveLocalClockResponse(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_CA__RetrieveLocalClockResponse(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-} // namespace KMS_CA
-
-
-#if defined(__BORLANDC__)
-#pragma option pop
-#pragma option pop
-#endif
-
-/* End of KMS_CAClient.cpp */
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_CAH.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,702 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* KMS_CAH.h
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/CAService/KMS_CA_SOAP.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#ifndef KMS_CAH_H
-#define KMS_CAH_H
-#include "KMS_CAStub.h"
-
-namespace KMS_CA {
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap*, const void*, int);
-SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap*, const void*, const char*, int, int);
-SOAP_FMAC3 void *SOAP_FMAC4 soap_getelement(struct soap*, int*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_putindependent(struct soap*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_getindependent(struct soap*);
-#endif
-SOAP_FMAC3 int SOAP_FMAC4 soap_ignore_element(struct soap*);
-
-SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_fdelete(struct soap_clist*);
-SOAP_FMAC3 void* SOAP_FMAC4 soap_class_id_enter(struct soap*, const char*, void*, int, size_t, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA_byte
-#define SOAP_TYPE_KMS_CA_byte (3)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_byte(struct soap*, char *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_byte(struct soap*, const char*, int, const char *, const char*);
-SOAP_FMAC3 char * SOAP_FMAC4 soap_in_byte(struct soap*, const char*, char *, const char*);
-
-#define soap_write_byte(soap, data) ( soap_begin_send(soap) || KMS_CA::soap_put_byte(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_byte(struct soap*, const char *, const char*, const char*);
-
-#define soap_read_byte(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_byte(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char * SOAP_FMAC4 soap_get_byte(struct soap*, char *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA_int
-#define SOAP_TYPE_KMS_CA_int (1)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_int(struct soap*, int *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_int(struct soap*, const char*, int, const int *, const char*);
-SOAP_FMAC3 int * SOAP_FMAC4 soap_in_int(struct soap*, const char*, int *, const char*);
-
-#define soap_write_int(soap, data) ( soap_begin_send(soap) || KMS_CA::soap_put_int(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_int(struct soap*, const int *, const char*, const char*);
-
-#define soap_read_int(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_int(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 int * SOAP_FMAC4 soap_get_int(struct soap*, int *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA_xsd__int
-#define SOAP_TYPE_KMS_CA_xsd__int (11)
-#endif
-
-#define soap_default_xsd__int(soap, a) soap_default_long(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__int(struct soap*, const char*, int, const long *, const char*);
-SOAP_FMAC3 long * SOAP_FMAC4 soap_in_xsd__int(struct soap*, const char*, long *, const char*);
-
-#define soap_write_xsd__int(soap, data) ( soap_begin_send(soap) || KMS_CA::soap_put_xsd__int(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__int(struct soap*, const long *, const char*, const char*);
-
-#define soap_read_xsd__int(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_xsd__int(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_get_xsd__int(struct soap*, long *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA_long
-#define SOAP_TYPE_KMS_CA_long (10)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_long(struct soap*, long *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_long(struct soap*, const char*, int, const long *, const char*);
-SOAP_FMAC3 long * SOAP_FMAC4 soap_in_long(struct soap*, const char*, long *, const char*);
-
-#define soap_write_long(soap, data) ( soap_begin_send(soap) || KMS_CA::soap_put_long(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_long(struct soap*, const long *, const char*, const char*);
-
-#define soap_read_long(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_long(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_get_long(struct soap*, long *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA_xsd__long
-#define SOAP_TYPE_KMS_CA_xsd__long (15)
-#endif
-
-#define soap_default_xsd__long(soap, a) soap_default_LONG64(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__long(struct soap*, const char*, int, const LONG64 *, const char*);
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_in_xsd__long(struct soap*, const char*, LONG64 *, const char*);
-
-#define soap_write_xsd__long(soap, data) ( soap_begin_send(soap) || KMS_CA::soap_put_xsd__long(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__long(struct soap*, const LONG64 *, const char*, const char*);
-
-#define soap_read_xsd__long(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_xsd__long(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_xsd__long(struct soap*, LONG64 *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA_LONG64
-#define SOAP_TYPE_KMS_CA_LONG64 (14)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_LONG64(struct soap*, LONG64 *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_LONG64(struct soap*, const char*, int, const LONG64 *, const char*);
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_in_LONG64(struct soap*, const char*, LONG64 *, const char*);
-
-#define soap_write_LONG64(soap, data) ( soap_begin_send(soap) || KMS_CA::soap_put_LONG64(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_LONG64(struct soap*, const LONG64 *, const char*, const char*);
-
-#define soap_read_LONG64(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_LONG64(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_LONG64(struct soap*, LONG64 *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA_xsd__float
-#define SOAP_TYPE_KMS_CA_xsd__float (9)
-#endif
-
-#define soap_default_xsd__float(soap, a) soap_default_float(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__float(struct soap*, const char*, int, const float *, const char*);
-SOAP_FMAC3 float * SOAP_FMAC4 soap_in_xsd__float(struct soap*, const char*, float *, const char*);
-
-#define soap_write_xsd__float(soap, data) ( soap_begin_send(soap) || KMS_CA::soap_put_xsd__float(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__float(struct soap*, const float *, const char*, const char*);
-
-#define soap_read_xsd__float(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_xsd__float(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_get_xsd__float(struct soap*, float *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA_float
-#define SOAP_TYPE_KMS_CA_float (8)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_float(struct soap*, float *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_float(struct soap*, const char*, int, const float *, const char*);
-SOAP_FMAC3 float * SOAP_FMAC4 soap_in_float(struct soap*, const char*, float *, const char*);
-
-#define soap_write_float(soap, data) ( soap_begin_send(soap) || KMS_CA::soap_put_float(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_float(struct soap*, const float *, const char*, const char*);
-
-#define soap_read_float(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_float(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_get_float(struct soap*, float *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA_unsignedByte
-#define SOAP_TYPE_KMS_CA_unsignedByte (20)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedByte(struct soap*, unsigned char *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedByte(struct soap*, const char*, int, const unsigned char *, const char*);
-SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_in_unsignedByte(struct soap*, const char*, unsigned char *, const char*);
-
-#define soap_write_unsignedByte(soap, data) ( soap_begin_send(soap) || KMS_CA::soap_put_unsignedByte(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedByte(struct soap*, const unsigned char *, const char*, const char*);
-
-#define soap_read_unsignedByte(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_unsignedByte(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_get_unsignedByte(struct soap*, unsigned char *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA_unsignedInt
-#define SOAP_TYPE_KMS_CA_unsignedInt (19)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedInt(struct soap*, unsigned int *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedInt(struct soap*, const char*, int, const unsigned int *, const char*);
-SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_in_unsignedInt(struct soap*, const char*, unsigned int *, const char*);
-
-#define soap_write_unsignedInt(soap, data) ( soap_begin_send(soap) || KMS_CA::soap_put_unsignedInt(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedInt(struct soap*, const unsigned int *, const char*, const char*);
-
-#define soap_read_unsignedInt(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_unsignedInt(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_get_unsignedInt(struct soap*, unsigned int *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA_xsd__boolean
-#define SOAP_TYPE_KMS_CA_xsd__boolean (13)
-#endif
-
-#define soap_default_xsd__boolean(soap, a) soap_default_bool(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__boolean(struct soap*, const char*, int, const bool *, const char*);
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_xsd__boolean2s(struct soap*, bool);
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_xsd__boolean(struct soap*, const char*, bool *, const char*);
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2xsd__boolean(struct soap*, const char*, bool *);
-
-#define soap_write_xsd__boolean(soap, data) ( soap_begin_send(soap) || KMS_CA::soap_put_xsd__boolean(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__boolean(struct soap*, const bool *, const char*, const char*);
-
-#define soap_read_xsd__boolean(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_xsd__boolean(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_xsd__boolean(struct soap*, bool *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA_bool
-#define SOAP_TYPE_KMS_CA_bool (12)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_bool(struct soap*, bool *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_bool(struct soap*, const char*, int, const bool *, const char*);
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_bool2s(struct soap*, bool);
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_bool(struct soap*, const char*, bool *, const char*);
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2bool(struct soap*, const char*, bool *);
-
-#define soap_write_bool(soap, data) ( soap_begin_send(soap) || KMS_CA::soap_put_bool(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_bool(struct soap*, const bool *, const char*, const char*);
-
-#define soap_read_bool(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_bool(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_bool(struct soap*, bool *, const char*, const char*);
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_CA_SOAP_ENV__Fault
-#define SOAP_TYPE_KMS_CA_SOAP_ENV__Fault (37)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Fault(struct soap*, struct SOAP_ENV__Fault *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Fault(struct soap*, const struct SOAP_ENV__Fault *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Fault(struct soap*, const char*, int, const struct SOAP_ENV__Fault *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_in_SOAP_ENV__Fault(struct soap*, const char*, struct SOAP_ENV__Fault *, const char*);
-
-#define soap_write_SOAP_ENV__Fault(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_SOAP_ENV__Fault(soap, data), 0) || KMS_CA::soap_put_SOAP_ENV__Fault(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Fault(struct soap*, const struct SOAP_ENV__Fault *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Fault(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_SOAP_ENV__Fault(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_get_SOAP_ENV__Fault(struct soap*, struct SOAP_ENV__Fault *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Fault(soap, n) soap_instantiate_SOAP_ENV__Fault(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Fault(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Fault * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Fault(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Fault(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_CA_SOAP_ENV__Reason
-#define SOAP_TYPE_KMS_CA_SOAP_ENV__Reason (36)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Reason(struct soap*, const struct SOAP_ENV__Reason *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Reason(struct soap*, const char*, int, const struct SOAP_ENV__Reason *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_in_SOAP_ENV__Reason(struct soap*, const char*, struct SOAP_ENV__Reason *, const char*);
-
-#define soap_write_SOAP_ENV__Reason(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_SOAP_ENV__Reason(soap, data), 0) || KMS_CA::soap_put_SOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Reason(struct soap*, const struct SOAP_ENV__Reason *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Reason(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_SOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_get_SOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Reason(soap, n) soap_instantiate_SOAP_ENV__Reason(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Reason(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Reason * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Reason(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Reason(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_CA_SOAP_ENV__Detail
-#define SOAP_TYPE_KMS_CA_SOAP_ENV__Detail (33)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Detail(struct soap*, const struct SOAP_ENV__Detail *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Detail(struct soap*, const char*, int, const struct SOAP_ENV__Detail *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_in_SOAP_ENV__Detail(struct soap*, const char*, struct SOAP_ENV__Detail *, const char*);
-
-#define soap_write_SOAP_ENV__Detail(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_SOAP_ENV__Detail(soap, data), 0) || KMS_CA::soap_put_SOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Detail(struct soap*, const struct SOAP_ENV__Detail *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Detail(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_SOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_get_SOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Detail(soap, n) soap_instantiate_SOAP_ENV__Detail(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Detail(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Detail * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Detail(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Detail(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_CA_SOAP_ENV__Code
-#define SOAP_TYPE_KMS_CA_SOAP_ENV__Code (31)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Code(struct soap*, const struct SOAP_ENV__Code *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Code(struct soap*, const char*, int, const struct SOAP_ENV__Code *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_in_SOAP_ENV__Code(struct soap*, const char*, struct SOAP_ENV__Code *, const char*);
-
-#define soap_write_SOAP_ENV__Code(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_SOAP_ENV__Code(soap, data), 0) || KMS_CA::soap_put_SOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Code(struct soap*, const struct SOAP_ENV__Code *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Code(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_SOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_get_SOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Code(soap, n) soap_instantiate_SOAP_ENV__Code(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Code(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Code * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Code(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Code(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_CA_SOAP_ENV__Header
-#define SOAP_TYPE_KMS_CA_SOAP_ENV__Header (30)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Header(struct soap*, struct SOAP_ENV__Header *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Header(struct soap*, const struct SOAP_ENV__Header *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Header(struct soap*, const char*, int, const struct SOAP_ENV__Header *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_in_SOAP_ENV__Header(struct soap*, const char*, struct SOAP_ENV__Header *, const char*);
-
-#define soap_write_SOAP_ENV__Header(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_SOAP_ENV__Header(soap, data), 0) || KMS_CA::soap_put_SOAP_ENV__Header(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Header(struct soap*, const struct SOAP_ENV__Header *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Header(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_SOAP_ENV__Header(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_get_SOAP_ENV__Header(struct soap*, struct SOAP_ENV__Header *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Header(soap, n) soap_instantiate_SOAP_ENV__Header(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Header(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Header * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Header(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Header(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClock
-#define SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClock (29)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_CA__RetrieveLocalClock(struct soap*, struct KMS_CA__RetrieveLocalClock *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_CA__RetrieveLocalClock(struct soap*, const struct KMS_CA__RetrieveLocalClock *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_CA__RetrieveLocalClock(struct soap*, const char*, int, const struct KMS_CA__RetrieveLocalClock *, const char*);
-SOAP_FMAC3 struct KMS_CA__RetrieveLocalClock * SOAP_FMAC4 soap_in_KMS_CA__RetrieveLocalClock(struct soap*, const char*, struct KMS_CA__RetrieveLocalClock *, const char*);
-
-#define soap_write_KMS_CA__RetrieveLocalClock(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_KMS_CA__RetrieveLocalClock(soap, data), 0) || KMS_CA::soap_put_KMS_CA__RetrieveLocalClock(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_CA__RetrieveLocalClock(struct soap*, const struct KMS_CA__RetrieveLocalClock *, const char*, const char*);
-
-#define soap_read_KMS_CA__RetrieveLocalClock(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_KMS_CA__RetrieveLocalClock(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_CA__RetrieveLocalClock * SOAP_FMAC4 soap_get_KMS_CA__RetrieveLocalClock(struct soap*, struct KMS_CA__RetrieveLocalClock *, const char*, const char*);
-
-#define soap_new_KMS_CA__RetrieveLocalClock(soap, n) soap_instantiate_KMS_CA__RetrieveLocalClock(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_CA__RetrieveLocalClock(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_CA__RetrieveLocalClock * SOAP_FMAC2 soap_instantiate_KMS_CA__RetrieveLocalClock(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_CA__RetrieveLocalClock(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClockResponse
-#define SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClockResponse (26)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_CA__RetrieveLocalClockResponse(struct soap*, struct KMS_CA__RetrieveLocalClockResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_CA__RetrieveLocalClockResponse(struct soap*, const struct KMS_CA__RetrieveLocalClockResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_CA__RetrieveLocalClockResponse(struct soap*, const char*, int, const struct KMS_CA__RetrieveLocalClockResponse *, const char*);
-SOAP_FMAC3 struct KMS_CA__RetrieveLocalClockResponse * SOAP_FMAC4 soap_in_KMS_CA__RetrieveLocalClockResponse(struct soap*, const char*, struct KMS_CA__RetrieveLocalClockResponse *, const char*);
-
-#define soap_write_KMS_CA__RetrieveLocalClockResponse(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_KMS_CA__RetrieveLocalClockResponse(soap, data), 0) || KMS_CA::soap_put_KMS_CA__RetrieveLocalClockResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_CA__RetrieveLocalClockResponse(struct soap*, const struct KMS_CA__RetrieveLocalClockResponse *, const char*, const char*);
-
-#define soap_read_KMS_CA__RetrieveLocalClockResponse(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_KMS_CA__RetrieveLocalClockResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_CA__RetrieveLocalClockResponse * SOAP_FMAC4 soap_get_KMS_CA__RetrieveLocalClockResponse(struct soap*, struct KMS_CA__RetrieveLocalClockResponse *, const char*, const char*);
-
-#define soap_new_KMS_CA__RetrieveLocalClockResponse(soap, n) soap_instantiate_KMS_CA__RetrieveLocalClockResponse(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_CA__RetrieveLocalClockResponse(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_CA__RetrieveLocalClockResponse * SOAP_FMAC2 soap_instantiate_KMS_CA__RetrieveLocalClockResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_CA__RetrieveLocalClockResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificate
-#define SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificate (25)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_CA__RetrieveRootCACertificate(struct soap*, struct KMS_CA__RetrieveRootCACertificate *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_CA__RetrieveRootCACertificate(struct soap*, const struct KMS_CA__RetrieveRootCACertificate *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_CA__RetrieveRootCACertificate(struct soap*, const char*, int, const struct KMS_CA__RetrieveRootCACertificate *, const char*);
-SOAP_FMAC3 struct KMS_CA__RetrieveRootCACertificate * SOAP_FMAC4 soap_in_KMS_CA__RetrieveRootCACertificate(struct soap*, const char*, struct KMS_CA__RetrieveRootCACertificate *, const char*);
-
-#define soap_write_KMS_CA__RetrieveRootCACertificate(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_KMS_CA__RetrieveRootCACertificate(soap, data), 0) || KMS_CA::soap_put_KMS_CA__RetrieveRootCACertificate(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_CA__RetrieveRootCACertificate(struct soap*, const struct KMS_CA__RetrieveRootCACertificate *, const char*, const char*);
-
-#define soap_read_KMS_CA__RetrieveRootCACertificate(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_KMS_CA__RetrieveRootCACertificate(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_CA__RetrieveRootCACertificate * SOAP_FMAC4 soap_get_KMS_CA__RetrieveRootCACertificate(struct soap*, struct KMS_CA__RetrieveRootCACertificate *, const char*, const char*);
-
-#define soap_new_KMS_CA__RetrieveRootCACertificate(soap, n) soap_instantiate_KMS_CA__RetrieveRootCACertificate(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_CA__RetrieveRootCACertificate(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_CA__RetrieveRootCACertificate * SOAP_FMAC2 soap_instantiate_KMS_CA__RetrieveRootCACertificate(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_CA__RetrieveRootCACertificate(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificateResponse
-#define SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificateResponse (22)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_CA__RetrieveRootCACertificateResponse(struct soap*, struct KMS_CA__RetrieveRootCACertificateResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_CA__RetrieveRootCACertificateResponse(struct soap*, const struct KMS_CA__RetrieveRootCACertificateResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_CA__RetrieveRootCACertificateResponse(struct soap*, const char*, int, const struct KMS_CA__RetrieveRootCACertificateResponse *, const char*);
-SOAP_FMAC3 struct KMS_CA__RetrieveRootCACertificateResponse * SOAP_FMAC4 soap_in_KMS_CA__RetrieveRootCACertificateResponse(struct soap*, const char*, struct KMS_CA__RetrieveRootCACertificateResponse *, const char*);
-
-#define soap_write_KMS_CA__RetrieveRootCACertificateResponse(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_KMS_CA__RetrieveRootCACertificateResponse(soap, data), 0) || KMS_CA::soap_put_KMS_CA__RetrieveRootCACertificateResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_CA__RetrieveRootCACertificateResponse(struct soap*, const struct KMS_CA__RetrieveRootCACertificateResponse *, const char*, const char*);
-
-#define soap_read_KMS_CA__RetrieveRootCACertificateResponse(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_KMS_CA__RetrieveRootCACertificateResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_CA__RetrieveRootCACertificateResponse * SOAP_FMAC4 soap_get_KMS_CA__RetrieveRootCACertificateResponse(struct soap*, struct KMS_CA__RetrieveRootCACertificateResponse *, const char*, const char*);
-
-#define soap_new_KMS_CA__RetrieveRootCACertificateResponse(soap, n) soap_instantiate_KMS_CA__RetrieveRootCACertificateResponse(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_CA__RetrieveRootCACertificateResponse(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_CA__RetrieveRootCACertificateResponse * SOAP_FMAC2 soap_instantiate_KMS_CA__RetrieveRootCACertificateResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_CA__RetrieveRootCACertificateResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_CA_xsd__hexBinary
-#define SOAP_TYPE_KMS_CA_xsd__hexBinary (18)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_xsd__hexBinary(struct soap*, struct xsd__hexBinary *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__hexBinary(struct soap*, struct xsd__hexBinary const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__hexBinary(struct soap*, const char*, int, const struct xsd__hexBinary *, const char*);
-SOAP_FMAC3 struct xsd__hexBinary * SOAP_FMAC4 soap_in_xsd__hexBinary(struct soap*, const char*, struct xsd__hexBinary *, const char*);
-
-#define soap_write_xsd__hexBinary(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_xsd__hexBinary(soap, data), 0) || KMS_CA::soap_put_xsd__hexBinary(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__hexBinary(struct soap*, const struct xsd__hexBinary *, const char*, const char*);
-
-#define soap_read_xsd__hexBinary(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_xsd__hexBinary(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct xsd__hexBinary * SOAP_FMAC4 soap_get_xsd__hexBinary(struct soap*, struct xsd__hexBinary *, const char*, const char*);
-
-#define soap_new_xsd__hexBinary(soap, n) soap_instantiate_xsd__hexBinary(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_xsd__hexBinary(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct xsd__hexBinary * SOAP_FMAC2 soap_instantiate_xsd__hexBinary(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__hexBinary(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_CA_PointerToSOAP_ENV__Reason
-#define SOAP_TYPE_KMS_CA_PointerToSOAP_ENV__Reason (39)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Reason(struct soap*, const char *, int, struct SOAP_ENV__Reason *const*, const char *);
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Reason(struct soap*, const char*, struct SOAP_ENV__Reason **, const char*);
-
-#define soap_write_PointerToSOAP_ENV__Reason(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_PointerToSOAP_ENV__Reason(soap, data), 0) || KMS_CA::soap_put_PointerToSOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *const*, const char*, const char*);
-
-#define soap_read_PointerToSOAP_ENV__Reason(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_PointerToSOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason **, const char*, const char*);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_CA_PointerToSOAP_ENV__Detail
-#define SOAP_TYPE_KMS_CA_PointerToSOAP_ENV__Detail (38)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Detail(struct soap*, const char *, int, struct SOAP_ENV__Detail *const*, const char *);
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Detail(struct soap*, const char*, struct SOAP_ENV__Detail **, const char*);
-
-#define soap_write_PointerToSOAP_ENV__Detail(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_PointerToSOAP_ENV__Detail(soap, data), 0) || KMS_CA::soap_put_PointerToSOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *const*, const char*, const char*);
-
-#define soap_read_PointerToSOAP_ENV__Detail(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_PointerToSOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail **, const char*, const char*);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_CA_PointerToSOAP_ENV__Code
-#define SOAP_TYPE_KMS_CA_PointerToSOAP_ENV__Code (32)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Code(struct soap*, const char *, int, struct SOAP_ENV__Code *const*, const char *);
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Code(struct soap*, const char*, struct SOAP_ENV__Code **, const char*);
-
-#define soap_write_PointerToSOAP_ENV__Code(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_PointerToSOAP_ENV__Code(soap, data), 0) || KMS_CA::soap_put_PointerToSOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *const*, const char*, const char*);
-
-#define soap_read_PointerToSOAP_ENV__Code(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_PointerToSOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code **, const char*, const char*);
-
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_PointerTounsignedByte
-#define SOAP_TYPE_KMS_CA_PointerTounsignedByte (21)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTounsignedByte(struct soap*, unsigned char *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTounsignedByte(struct soap*, const char *, int, unsigned char *const*, const char *);
-SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_in_PointerTounsignedByte(struct soap*, const char*, unsigned char **, const char*);
-
-#define soap_write_PointerTounsignedByte(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_PointerTounsignedByte(soap, data), 0) || KMS_CA::soap_put_PointerTounsignedByte(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTounsignedByte(struct soap*, unsigned char *const*, const char*, const char*);
-
-#define soap_read_PointerTounsignedByte(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_PointerTounsignedByte(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_get_PointerTounsignedByte(struct soap*, unsigned char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA_xsd__duration
-#define SOAP_TYPE_KMS_CA_xsd__duration (17)
-#endif
-
-#define soap_default_xsd__duration(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize_xsd__duration(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__duration(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__duration(struct soap*, const char*, char **, const char*);
-
-#define soap_write_xsd__duration(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_xsd__duration(soap, data), 0) || KMS_CA::soap_put_xsd__duration(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__duration(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_xsd__duration(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_xsd__duration(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__duration(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA_xsd__dateTime
-#define SOAP_TYPE_KMS_CA_xsd__dateTime (16)
-#endif
-
-#define soap_default_xsd__dateTime(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize_xsd__dateTime(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__dateTime(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__dateTime(struct soap*, const char*, char **, const char*);
-
-#define soap_write_xsd__dateTime(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_xsd__dateTime(soap, data), 0) || KMS_CA::soap_put_xsd__dateTime(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__dateTime(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_xsd__dateTime(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_xsd__dateTime(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__dateTime(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA_xsd__string
-#define SOAP_TYPE_KMS_CA_xsd__string (7)
-#endif
-
-#define soap_default_xsd__string(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize_xsd__string(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__string(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__string(struct soap*, const char*, char **, const char*);
-
-#define soap_write_xsd__string(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_xsd__string(soap, data), 0) || KMS_CA::soap_put_xsd__string(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__string(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_xsd__string(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_xsd__string(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__string(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA__QName
-#define SOAP_TYPE_KMS_CA__QName (5)
-#endif
-
-#define soap_default__QName(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize__QName(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out__QName(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in__QName(struct soap*, const char*, char **, const char*);
-
-#define soap_write__QName(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize__QName(soap, data), 0) || KMS_CA::soap_put__QName(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put__QName(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read__QName(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get__QName(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get__QName(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_CA_string
-#define SOAP_TYPE_KMS_CA_string (4)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_string(struct soap*, char **);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_string(struct soap*, char *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_string(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_string(struct soap*, const char*, char **, const char*);
-
-#define soap_write_string(soap, data) ( soap_begin_send(soap) || (KMS_CA::soap_serialize_string(soap, data), 0) || KMS_CA::soap_put_string(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_string(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_string(soap, data) ( soap_begin_recv(soap) || !KMS_CA::soap_get_string(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap*, char **, const char*, const char*);
-
-} // namespace KMS_CA
-
-
-#endif
-
-/* End of KMS_CAH.h */
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_CAStub.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,286 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* KMS_CAStub.h
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/CAService/KMS_CA_SOAP.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#ifndef KMS_CAStub_H
-#define KMS_CAStub_H
-#ifndef WITH_NONAMESPACES
-#define WITH_NONAMESPACES
-#endif
-#ifndef WITH_NOGLOBAL
-#define WITH_NOGLOBAL
-#endif
-#include "stdsoap2.h"
-
-namespace KMS_CA {
-
-/******************************************************************************\
- *                                                                            *
- * Enumerations                                                               *
- *                                                                            *
-\******************************************************************************/
-
-
-/******************************************************************************\
- *                                                                            *
- * Types with Custom Serializers                                              *
- *                                                                            *
-\******************************************************************************/
-
-
-/******************************************************************************\
- *                                                                            *
- * Classes and Structs                                                        *
- *                                                                            *
-\******************************************************************************/
-
-
-#if 0 /* volatile type: do not declare here, declared elsewhere */
-
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_xsd__hexBinary
-#define SOAP_TYPE_KMS_CA_xsd__hexBinary (18)
-/* hexBinary schema type: */
-struct xsd__hexBinary
-{
-public:
-	unsigned char *__ptr;
-	int __size;
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificateResponse
-#define SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificateResponse (22)
-/* KMS-CA:RetrieveRootCACertificateResponse */
-struct KMS_CA__RetrieveRootCACertificateResponse
-{
-public:
-	struct xsd__hexBinary RootCACertificate;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type xsd:hexBinary */
-	long AuthenticationHashIterationCount;	/* required element of type xsd:int */
-	struct xsd__hexBinary ClientAuthenticationChallenge;	/* required element of type xsd:hexBinary */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificate
-#define SOAP_TYPE_KMS_CA_KMS_CA__RetrieveRootCACertificate (25)
-/* KMS-CA:RetrieveRootCACertificate */
-struct KMS_CA__RetrieveRootCACertificate
-{
-public:
-	char *EntityID;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClockResponse
-#define SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClockResponse (26)
-/* KMS-CA:RetrieveLocalClockResponse */
-struct KMS_CA__RetrieveLocalClockResponse
-{
-public:
-	char *CurrentTime;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* optional element of type xsd:dateTime */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClock
-#define SOAP_TYPE_KMS_CA_KMS_CA__RetrieveLocalClock (29)
-/* KMS-CA:RetrieveLocalClock */
-struct KMS_CA__RetrieveLocalClock
-{
-public:
-	char *EntityID;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_SOAP_ENV__Header
-#define SOAP_TYPE_KMS_CA_SOAP_ENV__Header (30)
-/* SOAP Header: */
-struct SOAP_ENV__Header
-{
-#ifdef WITH_NOEMPTYSTRUCT
-private:
-	char dummy;	/* dummy member to enable compilation */
-#endif
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_SOAP_ENV__Code
-#define SOAP_TYPE_KMS_CA_SOAP_ENV__Code (31)
-/* SOAP Fault Code: */
-struct SOAP_ENV__Code
-{
-public:
-	char *SOAP_ENV__Value;	/* optional element of type xsd:QName */
-	struct SOAP_ENV__Code *SOAP_ENV__Subcode;	/* optional element of type SOAP-ENV:Code */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_SOAP_ENV__Detail
-#define SOAP_TYPE_KMS_CA_SOAP_ENV__Detail (33)
-/* SOAP-ENV:Detail */
-struct SOAP_ENV__Detail
-{
-public:
-	int __type;	/* any type of element <fault> (defined below) */
-	void *fault;	/* transient */
-	char *__any;
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_SOAP_ENV__Reason
-#define SOAP_TYPE_KMS_CA_SOAP_ENV__Reason (36)
-/* SOAP-ENV:Reason */
-struct SOAP_ENV__Reason
-{
-public:
-	char *SOAP_ENV__Text;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_SOAP_ENV__Fault
-#define SOAP_TYPE_KMS_CA_SOAP_ENV__Fault (37)
-/* SOAP Fault: */
-struct SOAP_ENV__Fault
-{
-public:
-	char *faultcode;	/* optional element of type xsd:QName */
-	char *faultstring;	/* optional element of type xsd:string */
-	char *faultactor;	/* optional element of type xsd:string */
-	struct SOAP_ENV__Detail *detail;	/* optional element of type SOAP-ENV:Detail */
-	struct SOAP_ENV__Code *SOAP_ENV__Code;	/* optional element of type SOAP-ENV:Code */
-	struct SOAP_ENV__Reason *SOAP_ENV__Reason;	/* optional element of type SOAP-ENV:Reason */
-	char *SOAP_ENV__Node;	/* optional element of type xsd:string */
-	char *SOAP_ENV__Role;	/* optional element of type xsd:string */
-	struct SOAP_ENV__Detail *SOAP_ENV__Detail;	/* optional element of type SOAP-ENV:Detail */
-};
-#endif
-
-/******************************************************************************\
- *                                                                            *
- * Typedefs                                                                   *
- *                                                                            *
-\******************************************************************************/
-
-#ifndef SOAP_TYPE_KMS_CA__QName
-#define SOAP_TYPE_KMS_CA__QName (5)
-typedef char *_QName;
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA__XML
-#define SOAP_TYPE_KMS_CA__XML (6)
-typedef char *_XML;
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_xsd__string
-#define SOAP_TYPE_KMS_CA_xsd__string (7)
-typedef char *xsd__string;
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_xsd__float
-#define SOAP_TYPE_KMS_CA_xsd__float (9)
-typedef float xsd__float;
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_xsd__int
-#define SOAP_TYPE_KMS_CA_xsd__int (11)
-typedef long xsd__int;
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_xsd__boolean
-#define SOAP_TYPE_KMS_CA_xsd__boolean (13)
-typedef bool xsd__boolean;
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_xsd__long
-#define SOAP_TYPE_KMS_CA_xsd__long (15)
-typedef LONG64 xsd__long;
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_xsd__dateTime
-#define SOAP_TYPE_KMS_CA_xsd__dateTime (16)
-typedef char *xsd__dateTime;
-#endif
-
-#ifndef SOAP_TYPE_KMS_CA_xsd__duration
-#define SOAP_TYPE_KMS_CA_xsd__duration (17)
-typedef char *xsd__duration;
-#endif
-
-
-/******************************************************************************\
- *                                                                            *
- * Externals                                                                  *
- *                                                                            *
-\******************************************************************************/
-
-
-/******************************************************************************\
- *                                                                            *
- * Server-Side Operations                                                     *
- *                                                                            *
-\******************************************************************************/
-
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_CA__RetrieveRootCACertificate(struct soap*, char *EntityID, struct KMS_CA__RetrieveRootCACertificateResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_CA__RetrieveLocalClock(struct soap*, char *EntityID, struct KMS_CA__RetrieveLocalClockResponse &result);
-
-/******************************************************************************\
- *                                                                            *
- * Server-Side Skeletons to Invoke Service Operations                         *
- *                                                                            *
-\******************************************************************************/
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_CA_serve(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_CA_serve_request(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_CA__RetrieveRootCACertificate(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_CA__RetrieveLocalClock(struct soap*);
-
-/******************************************************************************\
- *                                                                            *
- * Client-Side Call Stubs                                                     *
- *                                                                            *
-\******************************************************************************/
-
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_CA__RetrieveRootCACertificate(struct soap *soap, const char *soap_endpoint, const char *soap_action, char *EntityID, struct KMS_CA__RetrieveRootCACertificateResponse &result);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_CA__RetrieveLocalClock(struct soap *soap, const char *soap_endpoint, const char *soap_action, char *EntityID, struct KMS_CA__RetrieveLocalClockResponse &result);
-
-} // namespace KMS_CA
-
-
-#endif
-
-/* End of KMS_CAStub.h */
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_Certificate.nsmap	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-
-#include "KMS_CertificateH.h"
-SOAP_NMAC struct Namespace KMS_Certificate_namespaces[] =
-{
-	{"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope"},
-	{"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding"},
-	{"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance"},
-	{"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema"},
-	{"KMS-Certificate", "http://www.sun.com/KMS/KMS-Certificate"},
-	{NULL, NULL}
-};
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_CertificateC.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2425 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* KMS_CertificateC.cpp
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/CertificateService/KMS_Certificate_SOAP.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#if defined(__BORLANDC__)
-#pragma option push -w-8060
-#pragma option push -w-8004
-#endif
-
-#include "KMS_CertificateH.h"
-
-namespace KMS_Certificate {
-
-SOAP_SOURCE_STAMP("@(#) KMS_CertificateC.cpp ver 2.7.17 2010-06-08 19:16:38 GMT")
-
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serializeheader(struct soap *soap)
-{
-	if (soap->header)
-		soap_serialize_SOAP_ENV__Header(soap, soap->header);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_putheader(struct soap *soap)
-{
-	if (soap->header)
-	{	soap->part = SOAP_IN_HEADER;
-		if (soap_out_SOAP_ENV__Header(soap, "SOAP-ENV:Header", 0, soap->header, NULL))
-			return soap->error;
-		soap->part = SOAP_END_HEADER;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_getheader(struct soap *soap)
-{
-	soap->part = SOAP_IN_HEADER;
-	soap->header = soap_in_SOAP_ENV__Header(soap, "SOAP-ENV:Header", NULL, NULL);
-	soap->part = SOAP_END_HEADER;
-	return soap->header == NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_header(struct soap *soap)
-{
-	if (!soap->header)
-	{	if ((soap->header = soap_new_SOAP_ENV__Header(soap, -1)))
-			soap_default_SOAP_ENV__Header(soap, soap->header);
-	}
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_fault(struct soap *soap)
-{
-	if (!soap->fault)
-	{	soap->fault = soap_new_SOAP_ENV__Fault(soap, -1);
-		if (!soap->fault)
-			return;
-		soap_default_SOAP_ENV__Fault(soap, soap->fault);
-	}
-	if (soap->version == 2 && !soap->fault->SOAP_ENV__Code)
-	{	soap->fault->SOAP_ENV__Code = soap_new_SOAP_ENV__Code(soap, -1);
-		soap_default_SOAP_ENV__Code(soap, soap->fault->SOAP_ENV__Code);
-	}
-	if (soap->version == 2 && !soap->fault->SOAP_ENV__Reason)
-	{	soap->fault->SOAP_ENV__Reason = soap_new_SOAP_ENV__Reason(soap, -1);
-		soap_default_SOAP_ENV__Reason(soap, soap->fault->SOAP_ENV__Reason);
-	}
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serializefault(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->fault)
-		soap_serialize_SOAP_ENV__Fault(soap, soap->fault);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_putfault(struct soap *soap)
-{
-	if (soap->fault)
-		return soap_put_SOAP_ENV__Fault(soap, soap->fault, "SOAP-ENV:Fault", NULL);
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_getfault(struct soap *soap)
-{
-	return (soap->fault = soap_get_SOAP_ENV__Fault(soap, NULL, "SOAP-ENV:Fault", NULL)) == NULL;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultcode(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 2)
-		return (const char**)&soap->fault->SOAP_ENV__Code->SOAP_ENV__Value;
-	return (const char**)&soap->fault->faultcode;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultsubcode(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 2)
-	{	if (!soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode)
-		{	soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode = soap_new_SOAP_ENV__Code(soap, -1);
-			soap_default_SOAP_ENV__Code(soap, soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode);
-		}
-		return (const char**)&soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode->SOAP_ENV__Value;
-	}
-	return (const char**)&soap->fault->faultcode;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultstring(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 2)
-		return (const char**)&soap->fault->SOAP_ENV__Reason->SOAP_ENV__Text;
-	return (const char**)&soap->fault->faultstring;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultdetail(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 1)
-	{	if (!soap->fault->detail)
-		{	soap->fault->detail = (struct SOAP_ENV__Detail*)soap_malloc(soap, sizeof(struct SOAP_ENV__Detail));
-			soap_default_SOAP_ENV__Detail(soap, soap->fault->detail);
-		}
-		return (const char**)&soap->fault->detail->__any;
-	}
-	if (!soap->fault->SOAP_ENV__Detail)
-	{	soap->fault->SOAP_ENV__Detail = soap_new_SOAP_ENV__Detail(soap, -1);
-		soap_default_SOAP_ENV__Detail(soap, soap->fault->SOAP_ENV__Detail);
-	}
-	return (const char**)&soap->fault->SOAP_ENV__Detail->__any;
-}
-
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 int SOAP_FMAC4 soap_getindependent(struct soap *soap)
-{
-	int t;
-	if (soap->version == 1)
-	{	for (;;)
-		{	if (!soap_getelement(soap, &t))
-				if (soap->error || soap_ignore_element(soap))
-					break;
-		}
-	}
-	if (soap->error == SOAP_NO_TAG || soap->error == SOAP_EOF)
-		soap->error = SOAP_OK;
-	return soap->error;
-}
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type)
-{
-	if (soap_peek_element(soap))
-		return NULL;
-	if (!*soap->id || !(*type = soap_lookup_type(soap, soap->id)))
-		*type = soap_lookup_type(soap, soap->href);
-	switch (*type)
-	{
-	case SOAP_TYPE_KMS_Certificate_byte:
-		return soap_in_byte(soap, NULL, NULL, "xsd:byte");
-	case SOAP_TYPE_KMS_Certificate_int:
-		return soap_in_int(soap, NULL, NULL, "xsd:int");
-	case SOAP_TYPE_KMS_Certificate_xsd__int:
-		return soap_in_xsd__int(soap, NULL, NULL, "xsd:int");
-	case SOAP_TYPE_KMS_Certificate_long:
-		return soap_in_long(soap, NULL, NULL, "xsd:long");
-	case SOAP_TYPE_KMS_Certificate_xsd__long:
-		return soap_in_xsd__long(soap, NULL, NULL, "xsd:long");
-	case SOAP_TYPE_KMS_Certificate_LONG64:
-		return soap_in_LONG64(soap, NULL, NULL, "xsd:long");
-	case SOAP_TYPE_KMS_Certificate_xsd__float:
-		return soap_in_xsd__float(soap, NULL, NULL, "xsd:float");
-	case SOAP_TYPE_KMS_Certificate_float:
-		return soap_in_float(soap, NULL, NULL, "xsd:float");
-	case SOAP_TYPE_KMS_Certificate_unsignedByte:
-		return soap_in_unsignedByte(soap, NULL, NULL, "xsd:unsignedByte");
-	case SOAP_TYPE_KMS_Certificate_unsignedInt:
-		return soap_in_unsignedInt(soap, NULL, NULL, "xsd:unsignedInt");
-	case SOAP_TYPE_KMS_Certificate_xsd__boolean:
-		return soap_in_xsd__boolean(soap, NULL, NULL, "xsd:boolean");
-	case SOAP_TYPE_KMS_Certificate_bool:
-		return soap_in_bool(soap, NULL, NULL, "xsd:boolean");
-	case SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificate:
-		return soap_in_KMS_Certificate__RetrieveEntityCertificate(soap, NULL, NULL, "KMS-Certificate:RetrieveEntityCertificate");
-	case SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificateResponse:
-		return soap_in_KMS_Certificate__RetrieveEntityCertificateResponse(soap, NULL, NULL, "KMS-Certificate:RetrieveEntityCertificateResponse");
-	case SOAP_TYPE_KMS_Certificate_xsd__hexBinary:
-		return soap_in_xsd__hexBinary(soap, NULL, NULL, "xsd:hexBinary");
-	case SOAP_TYPE_KMS_Certificate_PointerTounsignedByte:
-		return soap_in_PointerTounsignedByte(soap, NULL, NULL, "xsd:unsignedByte");
-	case SOAP_TYPE_KMS_Certificate_xsd__duration:
-	{	char **s;
-		s = soap_in_xsd__duration(soap, NULL, NULL, "xsd:duration");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_Certificate_xsd__dateTime:
-	{	char **s;
-		s = soap_in_xsd__dateTime(soap, NULL, NULL, "xsd:dateTime");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_Certificate_xsd__string:
-	{	char **s;
-		s = soap_in_xsd__string(soap, NULL, NULL, "xsd:string");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_Certificate__QName:
-	{	char **s;
-		s = soap_in__QName(soap, NULL, NULL, "xsd:QName");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_Certificate_string:
-	{	char **s;
-		s = soap_in_string(soap, NULL, NULL, "xsd:string");
-		return s ? *s : NULL;
-	}
-	default:
-	{	const char *t = soap->type;
-		if (!*t)
-			t = soap->tag;
-		if (!soap_match_tag(soap, t, "xsd:byte"))
-		{	*type = SOAP_TYPE_KMS_Certificate_byte;
-			return soap_in_byte(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:int"))
-		{	*type = SOAP_TYPE_KMS_Certificate_int;
-			return soap_in_int(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:int"))
-		{	*type = SOAP_TYPE_KMS_Certificate_xsd__int;
-			return soap_in_xsd__int(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:long"))
-		{	*type = SOAP_TYPE_KMS_Certificate_long;
-			return soap_in_long(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:long"))
-		{	*type = SOAP_TYPE_KMS_Certificate_xsd__long;
-			return soap_in_xsd__long(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:long"))
-		{	*type = SOAP_TYPE_KMS_Certificate_LONG64;
-			return soap_in_LONG64(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:float"))
-		{	*type = SOAP_TYPE_KMS_Certificate_xsd__float;
-			return soap_in_xsd__float(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:float"))
-		{	*type = SOAP_TYPE_KMS_Certificate_float;
-			return soap_in_float(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:unsignedByte"))
-		{	*type = SOAP_TYPE_KMS_Certificate_unsignedByte;
-			return soap_in_unsignedByte(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:unsignedInt"))
-		{	*type = SOAP_TYPE_KMS_Certificate_unsignedInt;
-			return soap_in_unsignedInt(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:boolean"))
-		{	*type = SOAP_TYPE_KMS_Certificate_xsd__boolean;
-			return soap_in_xsd__boolean(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:boolean"))
-		{	*type = SOAP_TYPE_KMS_Certificate_bool;
-			return soap_in_bool(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Certificate:RetrieveEntityCertificate"))
-		{	*type = SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificate;
-			return soap_in_KMS_Certificate__RetrieveEntityCertificate(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Certificate:RetrieveEntityCertificateResponse"))
-		{	*type = SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificateResponse;
-			return soap_in_KMS_Certificate__RetrieveEntityCertificateResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:hexBinary"))
-		{	*type = SOAP_TYPE_KMS_Certificate_xsd__hexBinary;
-			return soap_in_xsd__hexBinary(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:duration"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Certificate_xsd__duration;
-			s = soap_in_xsd__duration(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:dateTime"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Certificate_xsd__dateTime;
-			s = soap_in_xsd__dateTime(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:string"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Certificate_xsd__string;
-			s = soap_in_xsd__string(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:QName"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Certificate__QName;
-			s = soap_in__QName(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:string"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Certificate_string;
-			s = soap_in_string(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		t = soap->tag;
-	}
-	}
-	soap->error = SOAP_TAG_MISMATCH;
-	return NULL;
-}
-#endif
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_ignore_element(struct soap *soap)
-{
-	if (!soap_peek_element(soap))
-	{	int t;
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unexpected element '%s' in input (level=%u, %d)\n", soap->tag, soap->level, soap->body));
-		if (soap->mustUnderstand && !soap->other)
-			return soap->error = SOAP_MUSTUNDERSTAND;
-		if (((soap->mode & SOAP_XML_STRICT) && soap->part != SOAP_IN_HEADER) || !soap_match_tag(soap, soap->tag, "SOAP-ENV:"))
-		{	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "REJECTING element '%s'\n", soap->tag));
-			return soap->error = SOAP_TAG_MISMATCH;
-		}
-		if (!*soap->id || !soap_getelement(soap, &t))
-		{	soap->peeked = 0;
-			if (soap->fignore)
-				soap->error = soap->fignore(soap, soap->tag);
-			else
-				soap->error = SOAP_OK;
-			DBGLOG(TEST, if (!soap->error) SOAP_MESSAGE(fdebug, "IGNORING element '%s'\n", soap->tag));
-			if (!soap->error && soap->body)
-			{	soap->level++;
-				while (!soap_ignore_element(soap))
-					;
-				if (soap->error == SOAP_NO_TAG)
-					soap->error = soap_element_end_in(soap, NULL);
-			}
-		}
-	}
-	return soap->error;
-}
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 int SOAP_FMAC4 soap_putindependent(struct soap *soap)
-{
-	int i;
-	struct soap_plist *pp;
-	if (soap->version == 1 && soap->encodingStyle && !(soap->mode & (SOAP_XML_TREE | SOAP_XML_GRAPH)))
-		for (i = 0; i < SOAP_PTRHASH; i++)
-			for (pp = soap->pht[i]; pp; pp = pp->next)
-				if (pp->mark1 == 2 || pp->mark2 == 2)
-					if (soap_putelement(soap, pp->ptr, "id", pp->id, pp->type))
-						return soap->error;
-	return SOAP_OK;
-}
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap *soap, const void *ptr, const char *tag, int id, int type)
-{
-	switch (type)
-	{
-	case SOAP_TYPE_KMS_Certificate_byte:
-		return soap_out_byte(soap, tag, id, (const char *)ptr, "xsd:byte");
-	case SOAP_TYPE_KMS_Certificate_int:
-		return soap_out_int(soap, tag, id, (const int *)ptr, "xsd:int");
-	case SOAP_TYPE_KMS_Certificate_xsd__int:
-		return soap_out_xsd__int(soap, tag, id, (const long *)ptr, "xsd:int");
-	case SOAP_TYPE_KMS_Certificate_long:
-		return soap_out_long(soap, tag, id, (const long *)ptr, "xsd:long");
-	case SOAP_TYPE_KMS_Certificate_xsd__long:
-		return soap_out_xsd__long(soap, tag, id, (const LONG64 *)ptr, "xsd:long");
-	case SOAP_TYPE_KMS_Certificate_LONG64:
-		return soap_out_LONG64(soap, tag, id, (const LONG64 *)ptr, "xsd:long");
-	case SOAP_TYPE_KMS_Certificate_xsd__float:
-		return soap_out_xsd__float(soap, tag, id, (const float *)ptr, "xsd:float");
-	case SOAP_TYPE_KMS_Certificate_float:
-		return soap_out_float(soap, tag, id, (const float *)ptr, "xsd:float");
-	case SOAP_TYPE_KMS_Certificate_unsignedByte:
-		return soap_out_unsignedByte(soap, tag, id, (const unsigned char *)ptr, "xsd:unsignedByte");
-	case SOAP_TYPE_KMS_Certificate_unsignedInt:
-		return soap_out_unsignedInt(soap, tag, id, (const unsigned int *)ptr, "xsd:unsignedInt");
-	case SOAP_TYPE_KMS_Certificate_xsd__boolean:
-		return soap_out_xsd__boolean(soap, tag, id, (const bool *)ptr, "xsd:boolean");
-	case SOAP_TYPE_KMS_Certificate_bool:
-		return soap_out_bool(soap, tag, id, (const bool *)ptr, "xsd:boolean");
-	case SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificate:
-		return soap_out_KMS_Certificate__RetrieveEntityCertificate(soap, tag, id, (const struct KMS_Certificate__RetrieveEntityCertificate *)ptr, "KMS-Certificate:RetrieveEntityCertificate");
-	case SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificateResponse:
-		return soap_out_KMS_Certificate__RetrieveEntityCertificateResponse(soap, tag, id, (const struct KMS_Certificate__RetrieveEntityCertificateResponse *)ptr, "KMS-Certificate:RetrieveEntityCertificateResponse");
-	case SOAP_TYPE_KMS_Certificate_xsd__hexBinary:
-		return soap_out_xsd__hexBinary(soap, tag, id, (const struct xsd__hexBinary *)ptr, "xsd:hexBinary");
-	case SOAP_TYPE_KMS_Certificate_PointerTounsignedByte:
-		return soap_out_PointerTounsignedByte(soap, tag, id, (unsigned char *const*)ptr, "xsd:unsignedByte");
-	case SOAP_TYPE_KMS_Certificate_xsd__duration:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:duration");
-	case SOAP_TYPE_KMS_Certificate_xsd__dateTime:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:dateTime");
-	case SOAP_TYPE_KMS_Certificate_xsd__string:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:string");
-	case SOAP_TYPE_KMS_Certificate__QName:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:QName");
-	case SOAP_TYPE_KMS_Certificate_string:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:string");
-	}
-	return SOAP_OK;
-}
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap *soap, const void *ptr, int type)
-{
-	(void)soap; (void)ptr; (void)type; /* appease -Wall -Werror */
-	switch (type)
-	{
-	case SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificate:
-		soap_serialize_KMS_Certificate__RetrieveEntityCertificate(soap, (const struct KMS_Certificate__RetrieveEntityCertificate *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificateResponse:
-		soap_serialize_KMS_Certificate__RetrieveEntityCertificateResponse(soap, (const struct KMS_Certificate__RetrieveEntityCertificateResponse *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Certificate_xsd__hexBinary:
-		soap_serialize_xsd__hexBinary(soap, (const struct xsd__hexBinary *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Certificate_PointerTounsignedByte:
-		soap_serialize_PointerTounsignedByte(soap, (unsigned char *const*)ptr);
-		break;
-	case SOAP_TYPE_KMS_Certificate_xsd__duration:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_Certificate_xsd__dateTime:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_Certificate_xsd__string:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_Certificate__QName:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_Certificate_string:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	}
-}
-#endif
-
-SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap *soap, int t, const char *type, const char *arrayType, size_t *n)
-{
-	switch (t)
-	{
-	case SOAP_TYPE_KMS_Certificate_xsd__hexBinary:
-		return (void*)soap_instantiate_xsd__hexBinary(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificateResponse:
-		return (void*)soap_instantiate_KMS_Certificate__RetrieveEntityCertificateResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificate:
-		return (void*)soap_instantiate_KMS_Certificate__RetrieveEntityCertificate(soap, -1, type, arrayType, n);
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_Certificate_SOAP_ENV__Header:
-		return (void*)soap_instantiate_SOAP_ENV__Header(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_Certificate_SOAP_ENV__Code:
-		return (void*)soap_instantiate_SOAP_ENV__Code(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_Certificate_SOAP_ENV__Detail:
-		return (void*)soap_instantiate_SOAP_ENV__Detail(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_Certificate_SOAP_ENV__Reason:
-		return (void*)soap_instantiate_SOAP_ENV__Reason(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_Certificate_SOAP_ENV__Fault:
-		return (void*)soap_instantiate_SOAP_ENV__Fault(soap, -1, type, arrayType, n);
-#endif
-	}
-	return NULL;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_fdelete(struct soap_clist *p)
-{	switch (p->type)
-	{
-	case SOAP_TYPE_KMS_Certificate_xsd__hexBinary:
-		if (p->size < 0)
-			SOAP_DELETE((struct xsd__hexBinary*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct xsd__hexBinary*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificateResponse:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Certificate__RetrieveEntityCertificateResponse*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Certificate__RetrieveEntityCertificateResponse*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificate:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Certificate__RetrieveEntityCertificate*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Certificate__RetrieveEntityCertificate*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Certificate_SOAP_ENV__Header:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Header*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Header*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Certificate_SOAP_ENV__Code:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Code*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Code*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Certificate_SOAP_ENV__Detail:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Detail*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Detail*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Certificate_SOAP_ENV__Reason:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Reason*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Reason*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Certificate_SOAP_ENV__Fault:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Fault*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Fault*)p->ptr);
-		break;
-	default:	return SOAP_ERR;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 void* SOAP_FMAC4 soap_class_id_enter(struct soap *soap, const char *id, void *p, int t, size_t n, const char *type, const char *arrayType)
-{	return soap_id_enter(soap, id, p, t, n, 0, type, arrayType, soap_instantiate);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_byte(struct soap *soap, char *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_byte
-	*a = SOAP_DEFAULT_byte;
-#else
-	*a = (char)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_byte(struct soap *soap, const char *tag, int id, const char *a, const char *type)
-{
-	return soap_outbyte(soap, tag, id, a, type, SOAP_TYPE_KMS_Certificate_byte);
-}
-
-SOAP_FMAC3 char * SOAP_FMAC4 soap_in_byte(struct soap *soap, const char *tag, char *a, const char *type)
-{	char *p;
-	p = soap_inbyte(soap, tag, a, type, SOAP_TYPE_KMS_Certificate_byte);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_byte(struct soap *soap, const char *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_byte);
-	if (soap_out_byte(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char * SOAP_FMAC4 soap_get_byte(struct soap *soap, char *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_byte(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_int(struct soap *soap, int *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_int
-	*a = SOAP_DEFAULT_int;
-#else
-	*a = (int)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_int(struct soap *soap, const char *tag, int id, const int *a, const char *type)
-{
-	return soap_outint(soap, tag, id, a, type, SOAP_TYPE_KMS_Certificate_int);
-}
-
-SOAP_FMAC3 int * SOAP_FMAC4 soap_in_int(struct soap *soap, const char *tag, int *a, const char *type)
-{	int *p;
-	p = soap_inint(soap, tag, a, type, SOAP_TYPE_KMS_Certificate_int);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_int(struct soap *soap, const int *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_int);
-	if (soap_out_int(soap, tag?tag:"int", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 int * SOAP_FMAC4 soap_get_int(struct soap *soap, int *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_int(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__int(struct soap *soap, const char *tag, int id, const long *a, const char *type)
-{
-	return soap_outlong(soap, tag, id, a, type, SOAP_TYPE_KMS_Certificate_xsd__int);
-}
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_in_xsd__int(struct soap *soap, const char *tag, long *a, const char *type)
-{	long *p;
-	p = soap_inlong(soap, tag, a, type, SOAP_TYPE_KMS_Certificate_xsd__int);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__int(struct soap *soap, const long *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_xsd__int);
-	if (soap_out_xsd__int(soap, tag?tag:"xsd:int", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_get_xsd__int(struct soap *soap, long *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__int(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_long(struct soap *soap, long *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_long
-	*a = SOAP_DEFAULT_long;
-#else
-	*a = (long)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_long(struct soap *soap, const char *tag, int id, const long *a, const char *type)
-{
-	return soap_outlong(soap, tag, id, a, type, SOAP_TYPE_KMS_Certificate_long);
-}
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_in_long(struct soap *soap, const char *tag, long *a, const char *type)
-{	long *p;
-	p = soap_inlong(soap, tag, a, type, SOAP_TYPE_KMS_Certificate_long);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_long(struct soap *soap, const long *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_long);
-	if (soap_out_long(soap, tag?tag:"long", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_get_long(struct soap *soap, long *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_long(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__long(struct soap *soap, const char *tag, int id, const LONG64 *a, const char *type)
-{
-	return soap_outLONG64(soap, tag, id, a, type, SOAP_TYPE_KMS_Certificate_xsd__long);
-}
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_in_xsd__long(struct soap *soap, const char *tag, LONG64 *a, const char *type)
-{	LONG64 *p;
-	p = soap_inLONG64(soap, tag, a, type, SOAP_TYPE_KMS_Certificate_xsd__long);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__long(struct soap *soap, const LONG64 *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_xsd__long);
-	if (soap_out_xsd__long(soap, tag?tag:"xsd:long", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_xsd__long(struct soap *soap, LONG64 *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__long(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_LONG64(struct soap *soap, LONG64 *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_LONG64
-	*a = SOAP_DEFAULT_LONG64;
-#else
-	*a = (LONG64)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_LONG64(struct soap *soap, const char *tag, int id, const LONG64 *a, const char *type)
-{
-	return soap_outLONG64(soap, tag, id, a, type, SOAP_TYPE_KMS_Certificate_LONG64);
-}
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_in_LONG64(struct soap *soap, const char *tag, LONG64 *a, const char *type)
-{	LONG64 *p;
-	p = soap_inLONG64(soap, tag, a, type, SOAP_TYPE_KMS_Certificate_LONG64);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_LONG64(struct soap *soap, const LONG64 *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_LONG64);
-	if (soap_out_LONG64(soap, tag?tag:"long", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_LONG64(struct soap *soap, LONG64 *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_LONG64(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__float(struct soap *soap, const char *tag, int id, const float *a, const char *type)
-{
-	return soap_outfloat(soap, tag, id, a, type, SOAP_TYPE_KMS_Certificate_xsd__float);
-}
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_in_xsd__float(struct soap *soap, const char *tag, float *a, const char *type)
-{	float *p;
-	p = soap_infloat(soap, tag, a, type, SOAP_TYPE_KMS_Certificate_xsd__float);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__float(struct soap *soap, const float *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_xsd__float);
-	if (soap_out_xsd__float(soap, tag?tag:"xsd:float", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_get_xsd__float(struct soap *soap, float *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__float(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_float(struct soap *soap, float *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_float
-	*a = SOAP_DEFAULT_float;
-#else
-	*a = (float)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_float(struct soap *soap, const char *tag, int id, const float *a, const char *type)
-{
-	return soap_outfloat(soap, tag, id, a, type, SOAP_TYPE_KMS_Certificate_float);
-}
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_in_float(struct soap *soap, const char *tag, float *a, const char *type)
-{	float *p;
-	p = soap_infloat(soap, tag, a, type, SOAP_TYPE_KMS_Certificate_float);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_float(struct soap *soap, const float *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_float);
-	if (soap_out_float(soap, tag?tag:"float", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_get_float(struct soap *soap, float *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_float(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedByte(struct soap *soap, unsigned char *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_unsignedByte
-	*a = SOAP_DEFAULT_unsignedByte;
-#else
-	*a = (unsigned char)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedByte(struct soap *soap, const char *tag, int id, const unsigned char *a, const char *type)
-{
-	return soap_outunsignedByte(soap, tag, id, a, type, SOAP_TYPE_KMS_Certificate_unsignedByte);
-}
-
-SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_in_unsignedByte(struct soap *soap, const char *tag, unsigned char *a, const char *type)
-{	unsigned char *p;
-	p = soap_inunsignedByte(soap, tag, a, type, SOAP_TYPE_KMS_Certificate_unsignedByte);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedByte(struct soap *soap, const unsigned char *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_unsignedByte);
-	if (soap_out_unsignedByte(soap, tag?tag:"unsignedByte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_get_unsignedByte(struct soap *soap, unsigned char *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_unsignedByte(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedInt(struct soap *soap, unsigned int *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_unsignedInt
-	*a = SOAP_DEFAULT_unsignedInt;
-#else
-	*a = (unsigned int)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedInt(struct soap *soap, const char *tag, int id, const unsigned int *a, const char *type)
-{
-	return soap_outunsignedInt(soap, tag, id, a, type, SOAP_TYPE_KMS_Certificate_unsignedInt);
-}
-
-SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_in_unsignedInt(struct soap *soap, const char *tag, unsigned int *a, const char *type)
-{	unsigned int *p;
-	p = soap_inunsignedInt(soap, tag, a, type, SOAP_TYPE_KMS_Certificate_unsignedInt);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedInt(struct soap *soap, const unsigned int *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_unsignedInt);
-	if (soap_out_unsignedInt(soap, tag?tag:"unsignedInt", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_get_unsignedInt(struct soap *soap, unsigned int *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_unsignedInt(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_xsd__boolean2s(struct soap *soap, bool n)
-{	return soap_bool2s(soap, n);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__boolean(struct soap *soap, const char *tag, int id, const bool *a, const char *type)
-{	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Certificate_xsd__boolean), type) || soap_send(soap, soap_xsd__boolean2s(soap, *a)))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2xsd__boolean(struct soap *soap, const char *s, bool *a)
-{
-	return soap_s2bool(soap, s, a);
-}
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_xsd__boolean(struct soap *soap, const char *tag, bool *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, NULL))
-		return NULL;
-	if (*soap->type && soap_match_tag(soap, soap->type, type) && soap_match_tag(soap, soap->type, ":boolean"))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (bool *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Certificate_xsd__boolean, sizeof(bool), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	if (soap->body && !*soap->href)
-	{	if (!a || soap_s2xsd__boolean(soap, soap_value(soap), a) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (bool *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Certificate_xsd__boolean, 0, sizeof(bool), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__boolean(struct soap *soap, const bool *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_xsd__boolean);
-	if (soap_out_xsd__boolean(soap, tag?tag:"xsd:boolean", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_xsd__boolean(struct soap *soap, bool *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__boolean(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_bool(struct soap *soap, bool *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_bool
-	*a = SOAP_DEFAULT_bool;
-#else
-	*a = (bool)0;
-#endif
-}
-
-static const struct soap_code_map soap_codes_bool[] =
-{	{ (long)false, "false" },
-	{ (long)true, "true" },
-	{ 0, NULL }
-};
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_bool2s(struct soap *soap, bool n)
-{
-	(void)soap; /* appease -Wall -Werror */
-return soap_code_str(soap_codes_bool, n!=0);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_bool(struct soap *soap, const char *tag, int id, const bool *a, const char *type)
-{	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Certificate_bool), type) || soap_send(soap, soap_bool2s(soap, *a)))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2bool(struct soap *soap, const char *s, bool *a)
-{
-	const struct soap_code_map *map;
-	if (!s)
-		return soap->error;
-	map = soap_code(soap_codes_bool, s);
-	if (map)
-		*a = (bool)(map->code != 0);
-	else
-	{	long n;
-		if (soap_s2long(soap, s, &n) || n < 0 || n > 1)
-			return soap->error = SOAP_TYPE;
-		*a = (bool)(n != 0);
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_bool(struct soap *soap, const char *tag, bool *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, NULL))
-		return NULL;
-	if (*soap->type && soap_match_tag(soap, soap->type, type) && soap_match_tag(soap, soap->type, ":boolean"))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (bool *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Certificate_bool, sizeof(bool), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	if (soap->body && !*soap->href)
-	{	if (!a || soap_s2bool(soap, soap_value(soap), a) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (bool *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Certificate_bool, 0, sizeof(bool), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_bool(struct soap *soap, const bool *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_bool);
-	if (soap_out_bool(soap, tag?tag:"boolean", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_bool(struct soap *soap, bool *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_bool(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default__QName(soap, &a->faultcode);
-	soap_default_string(soap, &a->faultstring);
-	soap_default_string(soap, &a->faultactor);
-	a->detail = NULL;
-	a->SOAP_ENV__Code = NULL;
-	a->SOAP_ENV__Reason = NULL;
-	soap_default_string(soap, &a->SOAP_ENV__Node);
-	soap_default_string(soap, &a->SOAP_ENV__Role);
-	a->SOAP_ENV__Detail = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Fault(struct soap *soap, const struct SOAP_ENV__Fault *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize__QName(soap, &a->faultcode);
-	soap_serialize_string(soap, &a->faultstring);
-	soap_serialize_string(soap, &a->faultactor);
-	soap_serialize_PointerToSOAP_ENV__Detail(soap, &a->detail);
-	soap_serialize_PointerToSOAP_ENV__Code(soap, &a->SOAP_ENV__Code);
-	soap_serialize_PointerToSOAP_ENV__Reason(soap, &a->SOAP_ENV__Reason);
-	soap_serialize_string(soap, &a->SOAP_ENV__Node);
-	soap_serialize_string(soap, &a->SOAP_ENV__Role);
-	soap_serialize_PointerToSOAP_ENV__Detail(soap, &a->SOAP_ENV__Detail);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Fault(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Fault *a, const char *type)
-{
-	const char *soap_tmp_faultcode = soap_QName2s(soap, a->faultcode);
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Fault), type))
-		return soap->error;
-	if (soap_out__QName(soap, "faultcode", -1, (char*const*)&soap_tmp_faultcode, ""))
-		return soap->error;
-	if (soap_out_string(soap, "faultstring", -1, &a->faultstring, "xsd:string"))
-		return soap->error;
-	if (soap_out_string(soap, "faultactor", -1, &a->faultactor, "xsd:string"))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Detail(soap, "detail", -1, &a->detail, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Code", -1, &a->SOAP_ENV__Code, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Reason(soap, "SOAP-ENV:Reason", -1, &a->SOAP_ENV__Reason, ""))
-		return soap->error;
-	if (soap_out_string(soap, "SOAP-ENV:Node", -1, &a->SOAP_ENV__Node, ""))
-		return soap->error;
-	if (soap_out_string(soap, "SOAP-ENV:Role", -1, &a->SOAP_ENV__Role, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Detail(soap, "SOAP-ENV:Detail", -1, &a->SOAP_ENV__Detail, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_in_SOAP_ENV__Fault(struct soap *soap, const char *tag, struct SOAP_ENV__Fault *a, const char *type)
-{
-	size_t soap_flag_faultcode = 1;
-	size_t soap_flag_faultstring = 1;
-	size_t soap_flag_faultactor = 1;
-	size_t soap_flag_detail = 1;
-	size_t soap_flag_SOAP_ENV__Code = 1;
-	size_t soap_flag_SOAP_ENV__Reason = 1;
-	size_t soap_flag_SOAP_ENV__Node = 1;
-	size_t soap_flag_SOAP_ENV__Role = 1;
-	size_t soap_flag_SOAP_ENV__Detail = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Fault *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Fault, sizeof(struct SOAP_ENV__Fault), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Fault(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_faultcode && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in__QName(soap, "faultcode", &a->faultcode, ""))
-				{	soap_flag_faultcode--;
-					continue;
-				}
-			if (soap_flag_faultstring && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "faultstring", &a->faultstring, "xsd:string"))
-				{	soap_flag_faultstring--;
-					continue;
-				}
-			if (soap_flag_faultactor && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "faultactor", &a->faultactor, "xsd:string"))
-				{	soap_flag_faultactor--;
-					continue;
-				}
-			if (soap_flag_detail && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Detail(soap, "detail", &a->detail, ""))
-				{	soap_flag_detail--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Code && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Code", &a->SOAP_ENV__Code, ""))
-				{	soap_flag_SOAP_ENV__Code--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Reason && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Reason(soap, "SOAP-ENV:Reason", &a->SOAP_ENV__Reason, ""))
-				{	soap_flag_SOAP_ENV__Reason--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Node && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "SOAP-ENV:Node", &a->SOAP_ENV__Node, "xsd:string"))
-				{	soap_flag_SOAP_ENV__Node--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Role && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "SOAP-ENV:Role", &a->SOAP_ENV__Role, "xsd:string"))
-				{	soap_flag_SOAP_ENV__Role--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Detail && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Detail(soap, "SOAP-ENV:Detail", &a->SOAP_ENV__Detail, ""))
-				{	soap_flag_SOAP_ENV__Detail--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Fault *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Fault, 0, sizeof(struct SOAP_ENV__Fault), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Fault(struct soap *soap, const struct SOAP_ENV__Fault *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Fault);
-	if (soap_out_SOAP_ENV__Fault(soap, tag?tag:"SOAP-ENV:Fault", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_get_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Fault(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Fault * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Fault(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Fault(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Fault, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Fault);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Fault);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Fault[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Fault);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Fault*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Fault(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Fault %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Fault*)p = *(struct SOAP_ENV__Fault*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_string(soap, &a->SOAP_ENV__Text);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Reason(struct soap *soap, const struct SOAP_ENV__Reason *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_string(soap, &a->SOAP_ENV__Text);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Reason(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Reason *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Reason), type))
-		return soap->error;
-	if (soap->lang)
-		soap_set_attr(soap, "xml:lang", soap->lang, 1);
-	if (soap_out_string(soap, "SOAP-ENV:Text", -1, &a->SOAP_ENV__Text, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_in_SOAP_ENV__Reason(struct soap *soap, const char *tag, struct SOAP_ENV__Reason *a, const char *type)
-{
-	size_t soap_flag_SOAP_ENV__Text = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Reason *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Reason, sizeof(struct SOAP_ENV__Reason), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Reason(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_SOAP_ENV__Text && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "SOAP-ENV:Text", &a->SOAP_ENV__Text, "xsd:string"))
-				{	soap_flag_SOAP_ENV__Text--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Reason *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Reason, 0, sizeof(struct SOAP_ENV__Reason), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Reason(struct soap *soap, const struct SOAP_ENV__Reason *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Reason);
-	if (soap_out_SOAP_ENV__Reason(soap, tag?tag:"SOAP-ENV:Reason", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_get_SOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Reason(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Reason * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Reason(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Reason(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Reason, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Reason);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Reason);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Reason[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Reason);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Reason*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Reason(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Reason %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Reason*)p = *(struct SOAP_ENV__Reason*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	a->__type = 0;
-	a->fault = NULL;
-	a->__any = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Detail(struct soap *soap, const struct SOAP_ENV__Detail *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_markelement(soap, a->fault, a->__type);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Detail(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Detail *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Detail), type))
-		return soap->error;
-	if (soap_putelement(soap, a->fault, "fault", -1, a->__type))
-		return soap->error;
-	soap_outliteral(soap, "-any", &a->__any, NULL);
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_in_SOAP_ENV__Detail(struct soap *soap, const char *tag, struct SOAP_ENV__Detail *a, const char *type)
-{
-	size_t soap_flag_fault = 1;
-	size_t soap_flag___any = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Detail *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Detail, sizeof(struct SOAP_ENV__Detail), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Detail(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_fault && soap->error == SOAP_TAG_MISMATCH)
-				if ((a->fault = soap_getelement(soap, &a->__type)))
-				{	soap_flag_fault = 0;
-					continue;
-				}
-			if (soap_flag___any && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_inliteral(soap, "-any", &a->__any))
-				{	soap_flag___any--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Detail *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Detail, 0, sizeof(struct SOAP_ENV__Detail), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Detail(struct soap *soap, const struct SOAP_ENV__Detail *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Detail);
-	if (soap_out_SOAP_ENV__Detail(soap, tag?tag:"SOAP-ENV:Detail", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_get_SOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Detail(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Detail * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Detail(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Detail(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Detail, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Detail);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Detail);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Detail[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Detail);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Detail*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Detail(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Detail %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Detail*)p = *(struct SOAP_ENV__Detail*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default__QName(soap, &a->SOAP_ENV__Value);
-	a->SOAP_ENV__Subcode = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Code(struct soap *soap, const struct SOAP_ENV__Code *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize__QName(soap, &a->SOAP_ENV__Value);
-	soap_serialize_PointerToSOAP_ENV__Code(soap, &a->SOAP_ENV__Subcode);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Code(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Code *a, const char *type)
-{
-	const char *soap_tmp_SOAP_ENV__Value = soap_QName2s(soap, a->SOAP_ENV__Value);
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Code), type))
-		return soap->error;
-	if (soap_out__QName(soap, "SOAP-ENV:Value", -1, (char*const*)&soap_tmp_SOAP_ENV__Value, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Subcode", -1, &a->SOAP_ENV__Subcode, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_in_SOAP_ENV__Code(struct soap *soap, const char *tag, struct SOAP_ENV__Code *a, const char *type)
-{
-	size_t soap_flag_SOAP_ENV__Value = 1;
-	size_t soap_flag_SOAP_ENV__Subcode = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Code *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Code, sizeof(struct SOAP_ENV__Code), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Code(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_SOAP_ENV__Value && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in__QName(soap, "SOAP-ENV:Value", &a->SOAP_ENV__Value, ""))
-				{	soap_flag_SOAP_ENV__Value--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Subcode && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Subcode", &a->SOAP_ENV__Subcode, ""))
-				{	soap_flag_SOAP_ENV__Subcode--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Code *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Code, 0, sizeof(struct SOAP_ENV__Code), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Code(struct soap *soap, const struct SOAP_ENV__Code *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Code);
-	if (soap_out_SOAP_ENV__Code(soap, tag?tag:"SOAP-ENV:Code", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_get_SOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Code(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Code * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Code(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Code(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Code, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Code);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Code);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Code[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Code);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Code*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Code(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Code %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Code*)p = *(struct SOAP_ENV__Code*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Header(struct soap *soap, struct SOAP_ENV__Header *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Header(struct soap *soap, const struct SOAP_ENV__Header *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Header(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Header *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Header), type))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_in_SOAP_ENV__Header(struct soap *soap, const char *tag, struct SOAP_ENV__Header *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Header *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Header, sizeof(struct SOAP_ENV__Header), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Header(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Header *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Header, 0, sizeof(struct SOAP_ENV__Header), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Header(struct soap *soap, const struct SOAP_ENV__Header *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Header);
-	if (soap_out_SOAP_ENV__Header(soap, tag?tag:"SOAP-ENV:Header", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_get_SOAP_ENV__Header(struct soap *soap, struct SOAP_ENV__Header *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Header(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Header * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Header(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Header(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Header, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Header);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Header);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Header[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Header);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Header*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Header(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Header %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Header*)p = *(struct SOAP_ENV__Header*)q;
-}
-
-#endif
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Certificate__RetrieveEntityCertificate(struct soap *soap, struct KMS_Certificate__RetrieveEntityCertificate *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__string(soap, &a->EntityID);
-	soap_default_xsd__hexBinary(soap, &a->ClientAuthenticationResponse);
-	soap_default_xsd__hexBinary(soap, &a->ServerAuthenticationChallenge);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Certificate__RetrieveEntityCertificate(struct soap *soap, const struct KMS_Certificate__RetrieveEntityCertificate *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->EntityID);
-	soap_serialize_xsd__hexBinary(soap, &a->ClientAuthenticationResponse);
-	soap_serialize_xsd__hexBinary(soap, &a->ServerAuthenticationChallenge);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Certificate__RetrieveEntityCertificate(struct soap *soap, const char *tag, int id, const struct KMS_Certificate__RetrieveEntityCertificate *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificate), type))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "EntityID", -1, &a->EntityID, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__hexBinary(soap, "ClientAuthenticationResponse", -1, &a->ClientAuthenticationResponse, "xsd:hexBinary"))
-		return soap->error;
-	if (soap_out_xsd__hexBinary(soap, "ServerAuthenticationChallenge", -1, &a->ServerAuthenticationChallenge, "xsd:hexBinary"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Certificate__RetrieveEntityCertificate * SOAP_FMAC4 soap_in_KMS_Certificate__RetrieveEntityCertificate(struct soap *soap, const char *tag, struct KMS_Certificate__RetrieveEntityCertificate *a, const char *type)
-{
-	size_t soap_flag_EntityID = 1;
-	size_t soap_flag_ClientAuthenticationResponse = 1;
-	size_t soap_flag_ServerAuthenticationChallenge = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Certificate__RetrieveEntityCertificate *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificate, sizeof(struct KMS_Certificate__RetrieveEntityCertificate), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Certificate__RetrieveEntityCertificate(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_EntityID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "EntityID", &a->EntityID, "xsd:string"))
-				{	soap_flag_EntityID--;
-					continue;
-				}
-			if (soap_flag_ClientAuthenticationResponse && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__hexBinary(soap, "ClientAuthenticationResponse", &a->ClientAuthenticationResponse, "xsd:hexBinary"))
-				{	soap_flag_ClientAuthenticationResponse--;
-					continue;
-				}
-			if (soap_flag_ServerAuthenticationChallenge && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__hexBinary(soap, "ServerAuthenticationChallenge", &a->ServerAuthenticationChallenge, "xsd:hexBinary"))
-				{	soap_flag_ServerAuthenticationChallenge--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Certificate__RetrieveEntityCertificate *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificate, 0, sizeof(struct KMS_Certificate__RetrieveEntityCertificate), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_ClientAuthenticationResponse > 0 || soap_flag_ServerAuthenticationChallenge > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Certificate__RetrieveEntityCertificate(struct soap *soap, const struct KMS_Certificate__RetrieveEntityCertificate *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificate);
-	if (soap_out_KMS_Certificate__RetrieveEntityCertificate(soap, tag?tag:"KMS-Certificate:RetrieveEntityCertificate", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Certificate__RetrieveEntityCertificate * SOAP_FMAC4 soap_get_KMS_Certificate__RetrieveEntityCertificate(struct soap *soap, struct KMS_Certificate__RetrieveEntityCertificate *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Certificate__RetrieveEntityCertificate(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Certificate__RetrieveEntityCertificate * SOAP_FMAC2 soap_instantiate_KMS_Certificate__RetrieveEntityCertificate(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Certificate__RetrieveEntityCertificate(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificate, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Certificate__RetrieveEntityCertificate);
-		if (size)
-			*size = sizeof(struct KMS_Certificate__RetrieveEntityCertificate);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Certificate__RetrieveEntityCertificate[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Certificate__RetrieveEntityCertificate);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Certificate__RetrieveEntityCertificate*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Certificate__RetrieveEntityCertificate(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Certificate__RetrieveEntityCertificate %p -> %p\n", q, p));
-	*(struct KMS_Certificate__RetrieveEntityCertificate*)p = *(struct KMS_Certificate__RetrieveEntityCertificate*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Certificate__RetrieveEntityCertificateResponse(struct soap *soap, struct KMS_Certificate__RetrieveEntityCertificateResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__hexBinary(soap, &a->ServerAuthenticationResponse);
-	soap_default_xsd__hexBinary(soap, &a->Certificate);
-	soap_default_xsd__hexBinary(soap, &a->WrappedPrivateKeyMaterial);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Certificate__RetrieveEntityCertificateResponse(struct soap *soap, const struct KMS_Certificate__RetrieveEntityCertificateResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__hexBinary(soap, &a->ServerAuthenticationResponse);
-	soap_serialize_xsd__hexBinary(soap, &a->Certificate);
-	soap_serialize_xsd__hexBinary(soap, &a->WrappedPrivateKeyMaterial);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Certificate__RetrieveEntityCertificateResponse(struct soap *soap, const char *tag, int id, const struct KMS_Certificate__RetrieveEntityCertificateResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificateResponse), type))
-		return soap->error;
-	if (soap_out_xsd__hexBinary(soap, "ServerAuthenticationResponse", -1, &a->ServerAuthenticationResponse, "xsd:hexBinary"))
-		return soap->error;
-	if (soap_out_xsd__hexBinary(soap, "Certificate", -1, &a->Certificate, "xsd:hexBinary"))
-		return soap->error;
-	if (soap_out_xsd__hexBinary(soap, "WrappedPrivateKeyMaterial", -1, &a->WrappedPrivateKeyMaterial, "xsd:hexBinary"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Certificate__RetrieveEntityCertificateResponse * SOAP_FMAC4 soap_in_KMS_Certificate__RetrieveEntityCertificateResponse(struct soap *soap, const char *tag, struct KMS_Certificate__RetrieveEntityCertificateResponse *a, const char *type)
-{
-	size_t soap_flag_ServerAuthenticationResponse = 1;
-	size_t soap_flag_Certificate = 1;
-	size_t soap_flag_WrappedPrivateKeyMaterial = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Certificate__RetrieveEntityCertificateResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificateResponse, sizeof(struct KMS_Certificate__RetrieveEntityCertificateResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Certificate__RetrieveEntityCertificateResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_ServerAuthenticationResponse && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__hexBinary(soap, "ServerAuthenticationResponse", &a->ServerAuthenticationResponse, "xsd:hexBinary"))
-				{	soap_flag_ServerAuthenticationResponse--;
-					continue;
-				}
-			if (soap_flag_Certificate && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__hexBinary(soap, "Certificate", &a->Certificate, "xsd:hexBinary"))
-				{	soap_flag_Certificate--;
-					continue;
-				}
-			if (soap_flag_WrappedPrivateKeyMaterial && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__hexBinary(soap, "WrappedPrivateKeyMaterial", &a->WrappedPrivateKeyMaterial, "xsd:hexBinary"))
-				{	soap_flag_WrappedPrivateKeyMaterial--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Certificate__RetrieveEntityCertificateResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificateResponse, 0, sizeof(struct KMS_Certificate__RetrieveEntityCertificateResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_ServerAuthenticationResponse > 0 || soap_flag_Certificate > 0 || soap_flag_WrappedPrivateKeyMaterial > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Certificate__RetrieveEntityCertificateResponse(struct soap *soap, const struct KMS_Certificate__RetrieveEntityCertificateResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificateResponse);
-	if (soap_out_KMS_Certificate__RetrieveEntityCertificateResponse(soap, tag?tag:"KMS-Certificate:RetrieveEntityCertificateResponse", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Certificate__RetrieveEntityCertificateResponse * SOAP_FMAC4 soap_get_KMS_Certificate__RetrieveEntityCertificateResponse(struct soap *soap, struct KMS_Certificate__RetrieveEntityCertificateResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Certificate__RetrieveEntityCertificateResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Certificate__RetrieveEntityCertificateResponse * SOAP_FMAC2 soap_instantiate_KMS_Certificate__RetrieveEntityCertificateResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Certificate__RetrieveEntityCertificateResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificateResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Certificate__RetrieveEntityCertificateResponse);
-		if (size)
-			*size = sizeof(struct KMS_Certificate__RetrieveEntityCertificateResponse);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Certificate__RetrieveEntityCertificateResponse[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Certificate__RetrieveEntityCertificateResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Certificate__RetrieveEntityCertificateResponse*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Certificate__RetrieveEntityCertificateResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Certificate__RetrieveEntityCertificateResponse %p -> %p\n", q, p));
-	*(struct KMS_Certificate__RetrieveEntityCertificateResponse*)p = *(struct KMS_Certificate__RetrieveEntityCertificateResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_xsd__hexBinary(struct soap *soap, struct xsd__hexBinary *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-	a->__size = 0;
-	a->__ptr = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__hexBinary(struct soap *soap, struct xsd__hexBinary const*a)
-{
-	if (a->__ptr)
-		soap_array_reference(soap, a, (struct soap_array*)&a->__ptr, 1, SOAP_TYPE_KMS_Certificate_xsd__hexBinary);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__hexBinary(struct soap *soap, const char *tag, int id, const struct xsd__hexBinary *a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, a, (struct soap_array*)&a->__ptr, 1, type, SOAP_TYPE_KMS_Certificate_xsd__hexBinary);
-	if (id < 0)
-		return soap->error;
-	if (soap_element_begin_out(soap, tag, id, type))
-		return soap->error;
-	if (soap_puthex(soap, a->__ptr, a->__size))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct xsd__hexBinary * SOAP_FMAC4 soap_in_xsd__hexBinary(struct soap *soap, const char *tag, struct xsd__hexBinary *a, const char *type)
-{
-	(void)type; /* appease -Wall -Werror */
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (*soap->type && soap_match_tag(soap, soap->type, type) && soap_match_tag(soap, soap->type, ":hexBinary"))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (struct xsd__hexBinary *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Certificate_xsd__hexBinary, sizeof(struct xsd__hexBinary), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_xsd__hexBinary(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		a->__ptr = soap_gethex(soap, &a->__size);
-		if ((!a->__ptr && soap->error) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct xsd__hexBinary *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Certificate_xsd__hexBinary, 0, sizeof(struct xsd__hexBinary), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__hexBinary(struct soap *soap, const struct xsd__hexBinary *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, (struct soap_array*)&a->__ptr, 1, tag, SOAP_TYPE_KMS_Certificate_xsd__hexBinary);
-	if (soap_out_xsd__hexBinary(soap, tag?tag:"SOAP-ENC:Array", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct xsd__hexBinary * SOAP_FMAC4 soap_get_xsd__hexBinary(struct soap *soap, struct xsd__hexBinary *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__hexBinary(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct xsd__hexBinary * SOAP_FMAC2 soap_instantiate_xsd__hexBinary(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_xsd__hexBinary(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Certificate_xsd__hexBinary, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct xsd__hexBinary);
-		if (size)
-			*size = sizeof(struct xsd__hexBinary);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct xsd__hexBinary[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct xsd__hexBinary);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct xsd__hexBinary*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__hexBinary(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct xsd__hexBinary %p -> %p\n", q, p));
-	*(struct xsd__hexBinary*)p = *(struct xsd__hexBinary*)q;
-}
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Reason))
-		soap_serialize_SOAP_ENV__Reason(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Reason(struct soap *soap, const char *tag, int id, struct SOAP_ENV__Reason *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Reason);
-	if (id < 0)
-		return soap->error;
-	return soap_out_SOAP_ENV__Reason(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Reason(struct soap *soap, const char *tag, struct SOAP_ENV__Reason **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct SOAP_ENV__Reason **)soap_malloc(soap, sizeof(struct SOAP_ENV__Reason *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_SOAP_ENV__Reason(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Reason **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Reason, sizeof(struct SOAP_ENV__Reason), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_PointerToSOAP_ENV__Reason);
-	if (soap_out_PointerToSOAP_ENV__Reason(soap, tag?tag:"SOAP-ENV:Reason", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToSOAP_ENV__Reason(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Detail))
-		soap_serialize_SOAP_ENV__Detail(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Detail(struct soap *soap, const char *tag, int id, struct SOAP_ENV__Detail *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Detail);
-	if (id < 0)
-		return soap->error;
-	return soap_out_SOAP_ENV__Detail(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Detail(struct soap *soap, const char *tag, struct SOAP_ENV__Detail **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct SOAP_ENV__Detail **)soap_malloc(soap, sizeof(struct SOAP_ENV__Detail *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_SOAP_ENV__Detail(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Detail **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Detail, sizeof(struct SOAP_ENV__Detail), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_PointerToSOAP_ENV__Detail);
-	if (soap_out_PointerToSOAP_ENV__Detail(soap, tag?tag:"SOAP-ENV:Detail", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToSOAP_ENV__Detail(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Code))
-		soap_serialize_SOAP_ENV__Code(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Code(struct soap *soap, const char *tag, int id, struct SOAP_ENV__Code *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Code);
-	if (id < 0)
-		return soap->error;
-	return soap_out_SOAP_ENV__Code(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Code(struct soap *soap, const char *tag, struct SOAP_ENV__Code **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct SOAP_ENV__Code **)soap_malloc(soap, sizeof(struct SOAP_ENV__Code *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_SOAP_ENV__Code(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Code **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Certificate_SOAP_ENV__Code, sizeof(struct SOAP_ENV__Code), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_PointerToSOAP_ENV__Code);
-	if (soap_out_PointerToSOAP_ENV__Code(soap, tag?tag:"SOAP-ENV:Code", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToSOAP_ENV__Code(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#endif
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTounsignedByte(struct soap *soap, unsigned char *const*a)
-{
-	soap_reference(soap, *a, SOAP_TYPE_KMS_Certificate_unsignedByte);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTounsignedByte(struct soap *soap, const char *tag, int id, unsigned char *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_Certificate_unsignedByte);
-	if (id < 0)
-		return soap->error;
-	return soap_out_unsignedByte(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_in_PointerTounsignedByte(struct soap *soap, const char *tag, unsigned char **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (unsigned char **)soap_malloc(soap, sizeof(unsigned char *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_unsignedByte(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (unsigned char **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Certificate_unsignedByte, sizeof(unsigned char), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTounsignedByte(struct soap *soap, unsigned char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_PointerTounsignedByte);
-	if (soap_out_PointerTounsignedByte(soap, tag?tag:"unsignedByte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_get_PointerTounsignedByte(struct soap *soap, unsigned char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerTounsignedByte(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__duration(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Certificate_xsd__duration);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__duration(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Certificate_xsd__duration, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__duration(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_xsd__duration);
-	if (soap_out_xsd__duration(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__duration(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__duration(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__dateTime(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Certificate_xsd__dateTime);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__dateTime(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Certificate_xsd__dateTime, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__dateTime(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_xsd__dateTime);
-	if (soap_out_xsd__dateTime(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__dateTime(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__dateTime(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__string(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Certificate_xsd__string);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__string(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Certificate_xsd__string, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__string(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_xsd__string);
-	if (soap_out_xsd__string(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__string(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__string(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out__QName(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Certificate__QName);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in__QName(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Certificate__QName, 2, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put__QName(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate__QName);
-	if (soap_out__QName(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get__QName(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in__QName(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_string(struct soap *soap, char **a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_string
-	*a = SOAP_DEFAULT_string;
-#else
-	*a = (char *)0;
-#endif
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_string(struct soap *soap, char *const*a)
-{
-	soap_reference(soap, *a, SOAP_TYPE_KMS_Certificate_string);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_string(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Certificate_string);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_string(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Certificate_string, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_string(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Certificate_string);
-	if (soap_out_string(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_string(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-} // namespace KMS_Certificate
-
-
-#if defined(__BORLANDC__)
-#pragma option pop
-#pragma option pop
-#endif
-
-/* End of KMS_CertificateC.cpp */
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_CertificateClient.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* KMS_CertificateClient.cpp
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/CertificateService/KMS_Certificate_SOAP.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#if defined(__BORLANDC__)
-#pragma option push -w-8060
-#pragma option push -w-8004
-#endif
-#include "KMS_CertificateH.h"
-
-namespace KMS_Certificate {
-
-SOAP_SOURCE_STAMP("@(#) KMS_CertificateClient.cpp ver 2.7.17 2010-06-08 19:16:38 GMT")
-
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Certificate__RetrieveEntityCertificate(struct soap *soap, const char *soap_endpoint, const char *soap_action, char *EntityID, struct xsd__hexBinary ClientAuthenticationResponse, struct xsd__hexBinary ServerAuthenticationChallenge, struct KMS_Certificate__RetrieveEntityCertificateResponse &result)
-{	struct KMS_Certificate__RetrieveEntityCertificate soap_tmp_KMS_Certificate__RetrieveEntityCertificate;
-	soap_tmp_KMS_Certificate__RetrieveEntityCertificate.EntityID = EntityID;
-	soap_tmp_KMS_Certificate__RetrieveEntityCertificate.ClientAuthenticationResponse = ClientAuthenticationResponse;
-	soap_tmp_KMS_Certificate__RetrieveEntityCertificate.ServerAuthenticationChallenge = ServerAuthenticationChallenge;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Certificate__RetrieveEntityCertificate(soap, &soap_tmp_KMS_Certificate__RetrieveEntityCertificate);
-	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_KMS_Certificate__RetrieveEntityCertificate(soap, &soap_tmp_KMS_Certificate__RetrieveEntityCertificate, "KMS-Certificate:RetrieveEntityCertificate", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Certificate__RetrieveEntityCertificate(soap, &soap_tmp_KMS_Certificate__RetrieveEntityCertificate, "KMS-Certificate:RetrieveEntityCertificate", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Certificate__RetrieveEntityCertificateResponse(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Certificate__RetrieveEntityCertificateResponse(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-} // namespace KMS_Certificate
-
-
-#if defined(__BORLANDC__)
-#pragma option pop
-#pragma option pop
-#endif
-
-/* End of KMS_CertificateClient.cpp */
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_CertificateH.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,652 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* KMS_CertificateH.h
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/CertificateService/KMS_Certificate_SOAP.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#ifndef KMS_CertificateH_H
-#define KMS_CertificateH_H
-#include "KMS_CertificateStub.h"
-
-namespace KMS_Certificate {
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap*, const void*, int);
-SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap*, const void*, const char*, int, int);
-SOAP_FMAC3 void *SOAP_FMAC4 soap_getelement(struct soap*, int*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_putindependent(struct soap*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_getindependent(struct soap*);
-#endif
-SOAP_FMAC3 int SOAP_FMAC4 soap_ignore_element(struct soap*);
-
-SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_fdelete(struct soap_clist*);
-SOAP_FMAC3 void* SOAP_FMAC4 soap_class_id_enter(struct soap*, const char*, void*, int, size_t, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate_byte
-#define SOAP_TYPE_KMS_Certificate_byte (3)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_byte(struct soap*, char *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_byte(struct soap*, const char*, int, const char *, const char*);
-SOAP_FMAC3 char * SOAP_FMAC4 soap_in_byte(struct soap*, const char*, char *, const char*);
-
-#define soap_write_byte(soap, data) ( soap_begin_send(soap) || KMS_Certificate::soap_put_byte(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_byte(struct soap*, const char *, const char*, const char*);
-
-#define soap_read_byte(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_byte(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char * SOAP_FMAC4 soap_get_byte(struct soap*, char *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate_int
-#define SOAP_TYPE_KMS_Certificate_int (1)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_int(struct soap*, int *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_int(struct soap*, const char*, int, const int *, const char*);
-SOAP_FMAC3 int * SOAP_FMAC4 soap_in_int(struct soap*, const char*, int *, const char*);
-
-#define soap_write_int(soap, data) ( soap_begin_send(soap) || KMS_Certificate::soap_put_int(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_int(struct soap*, const int *, const char*, const char*);
-
-#define soap_read_int(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_int(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 int * SOAP_FMAC4 soap_get_int(struct soap*, int *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate_xsd__int
-#define SOAP_TYPE_KMS_Certificate_xsd__int (11)
-#endif
-
-#define soap_default_xsd__int(soap, a) soap_default_long(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__int(struct soap*, const char*, int, const long *, const char*);
-SOAP_FMAC3 long * SOAP_FMAC4 soap_in_xsd__int(struct soap*, const char*, long *, const char*);
-
-#define soap_write_xsd__int(soap, data) ( soap_begin_send(soap) || KMS_Certificate::soap_put_xsd__int(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__int(struct soap*, const long *, const char*, const char*);
-
-#define soap_read_xsd__int(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_xsd__int(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_get_xsd__int(struct soap*, long *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate_long
-#define SOAP_TYPE_KMS_Certificate_long (10)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_long(struct soap*, long *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_long(struct soap*, const char*, int, const long *, const char*);
-SOAP_FMAC3 long * SOAP_FMAC4 soap_in_long(struct soap*, const char*, long *, const char*);
-
-#define soap_write_long(soap, data) ( soap_begin_send(soap) || KMS_Certificate::soap_put_long(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_long(struct soap*, const long *, const char*, const char*);
-
-#define soap_read_long(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_long(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_get_long(struct soap*, long *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate_xsd__long
-#define SOAP_TYPE_KMS_Certificate_xsd__long (15)
-#endif
-
-#define soap_default_xsd__long(soap, a) soap_default_LONG64(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__long(struct soap*, const char*, int, const LONG64 *, const char*);
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_in_xsd__long(struct soap*, const char*, LONG64 *, const char*);
-
-#define soap_write_xsd__long(soap, data) ( soap_begin_send(soap) || KMS_Certificate::soap_put_xsd__long(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__long(struct soap*, const LONG64 *, const char*, const char*);
-
-#define soap_read_xsd__long(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_xsd__long(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_xsd__long(struct soap*, LONG64 *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate_LONG64
-#define SOAP_TYPE_KMS_Certificate_LONG64 (14)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_LONG64(struct soap*, LONG64 *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_LONG64(struct soap*, const char*, int, const LONG64 *, const char*);
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_in_LONG64(struct soap*, const char*, LONG64 *, const char*);
-
-#define soap_write_LONG64(soap, data) ( soap_begin_send(soap) || KMS_Certificate::soap_put_LONG64(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_LONG64(struct soap*, const LONG64 *, const char*, const char*);
-
-#define soap_read_LONG64(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_LONG64(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_LONG64(struct soap*, LONG64 *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate_xsd__float
-#define SOAP_TYPE_KMS_Certificate_xsd__float (9)
-#endif
-
-#define soap_default_xsd__float(soap, a) soap_default_float(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__float(struct soap*, const char*, int, const float *, const char*);
-SOAP_FMAC3 float * SOAP_FMAC4 soap_in_xsd__float(struct soap*, const char*, float *, const char*);
-
-#define soap_write_xsd__float(soap, data) ( soap_begin_send(soap) || KMS_Certificate::soap_put_xsd__float(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__float(struct soap*, const float *, const char*, const char*);
-
-#define soap_read_xsd__float(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_xsd__float(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_get_xsd__float(struct soap*, float *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate_float
-#define SOAP_TYPE_KMS_Certificate_float (8)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_float(struct soap*, float *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_float(struct soap*, const char*, int, const float *, const char*);
-SOAP_FMAC3 float * SOAP_FMAC4 soap_in_float(struct soap*, const char*, float *, const char*);
-
-#define soap_write_float(soap, data) ( soap_begin_send(soap) || KMS_Certificate::soap_put_float(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_float(struct soap*, const float *, const char*, const char*);
-
-#define soap_read_float(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_float(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_get_float(struct soap*, float *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate_unsignedByte
-#define SOAP_TYPE_KMS_Certificate_unsignedByte (20)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedByte(struct soap*, unsigned char *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedByte(struct soap*, const char*, int, const unsigned char *, const char*);
-SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_in_unsignedByte(struct soap*, const char*, unsigned char *, const char*);
-
-#define soap_write_unsignedByte(soap, data) ( soap_begin_send(soap) || KMS_Certificate::soap_put_unsignedByte(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedByte(struct soap*, const unsigned char *, const char*, const char*);
-
-#define soap_read_unsignedByte(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_unsignedByte(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_get_unsignedByte(struct soap*, unsigned char *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate_unsignedInt
-#define SOAP_TYPE_KMS_Certificate_unsignedInt (19)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedInt(struct soap*, unsigned int *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedInt(struct soap*, const char*, int, const unsigned int *, const char*);
-SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_in_unsignedInt(struct soap*, const char*, unsigned int *, const char*);
-
-#define soap_write_unsignedInt(soap, data) ( soap_begin_send(soap) || KMS_Certificate::soap_put_unsignedInt(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedInt(struct soap*, const unsigned int *, const char*, const char*);
-
-#define soap_read_unsignedInt(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_unsignedInt(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_get_unsignedInt(struct soap*, unsigned int *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate_xsd__boolean
-#define SOAP_TYPE_KMS_Certificate_xsd__boolean (13)
-#endif
-
-#define soap_default_xsd__boolean(soap, a) soap_default_bool(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__boolean(struct soap*, const char*, int, const bool *, const char*);
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_xsd__boolean2s(struct soap*, bool);
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_xsd__boolean(struct soap*, const char*, bool *, const char*);
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2xsd__boolean(struct soap*, const char*, bool *);
-
-#define soap_write_xsd__boolean(soap, data) ( soap_begin_send(soap) || KMS_Certificate::soap_put_xsd__boolean(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__boolean(struct soap*, const bool *, const char*, const char*);
-
-#define soap_read_xsd__boolean(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_xsd__boolean(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_xsd__boolean(struct soap*, bool *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate_bool
-#define SOAP_TYPE_KMS_Certificate_bool (12)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_bool(struct soap*, bool *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_bool(struct soap*, const char*, int, const bool *, const char*);
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_bool2s(struct soap*, bool);
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_bool(struct soap*, const char*, bool *, const char*);
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2bool(struct soap*, const char*, bool *);
-
-#define soap_write_bool(soap, data) ( soap_begin_send(soap) || KMS_Certificate::soap_put_bool(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_bool(struct soap*, const bool *, const char*, const char*);
-
-#define soap_read_bool(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_bool(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_bool(struct soap*, bool *, const char*, const char*);
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Certificate_SOAP_ENV__Fault
-#define SOAP_TYPE_KMS_Certificate_SOAP_ENV__Fault (33)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Fault(struct soap*, struct SOAP_ENV__Fault *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Fault(struct soap*, const struct SOAP_ENV__Fault *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Fault(struct soap*, const char*, int, const struct SOAP_ENV__Fault *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_in_SOAP_ENV__Fault(struct soap*, const char*, struct SOAP_ENV__Fault *, const char*);
-
-#define soap_write_SOAP_ENV__Fault(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize_SOAP_ENV__Fault(soap, data), 0) || KMS_Certificate::soap_put_SOAP_ENV__Fault(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Fault(struct soap*, const struct SOAP_ENV__Fault *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Fault(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_SOAP_ENV__Fault(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_get_SOAP_ENV__Fault(struct soap*, struct SOAP_ENV__Fault *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Fault(soap, n) soap_instantiate_SOAP_ENV__Fault(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Fault(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Fault * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Fault(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Fault(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Certificate_SOAP_ENV__Reason
-#define SOAP_TYPE_KMS_Certificate_SOAP_ENV__Reason (32)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Reason(struct soap*, const struct SOAP_ENV__Reason *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Reason(struct soap*, const char*, int, const struct SOAP_ENV__Reason *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_in_SOAP_ENV__Reason(struct soap*, const char*, struct SOAP_ENV__Reason *, const char*);
-
-#define soap_write_SOAP_ENV__Reason(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize_SOAP_ENV__Reason(soap, data), 0) || KMS_Certificate::soap_put_SOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Reason(struct soap*, const struct SOAP_ENV__Reason *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Reason(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_SOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_get_SOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Reason(soap, n) soap_instantiate_SOAP_ENV__Reason(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Reason(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Reason * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Reason(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Reason(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Certificate_SOAP_ENV__Detail
-#define SOAP_TYPE_KMS_Certificate_SOAP_ENV__Detail (29)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Detail(struct soap*, const struct SOAP_ENV__Detail *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Detail(struct soap*, const char*, int, const struct SOAP_ENV__Detail *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_in_SOAP_ENV__Detail(struct soap*, const char*, struct SOAP_ENV__Detail *, const char*);
-
-#define soap_write_SOAP_ENV__Detail(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize_SOAP_ENV__Detail(soap, data), 0) || KMS_Certificate::soap_put_SOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Detail(struct soap*, const struct SOAP_ENV__Detail *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Detail(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_SOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_get_SOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Detail(soap, n) soap_instantiate_SOAP_ENV__Detail(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Detail(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Detail * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Detail(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Detail(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Certificate_SOAP_ENV__Code
-#define SOAP_TYPE_KMS_Certificate_SOAP_ENV__Code (27)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Code(struct soap*, const struct SOAP_ENV__Code *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Code(struct soap*, const char*, int, const struct SOAP_ENV__Code *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_in_SOAP_ENV__Code(struct soap*, const char*, struct SOAP_ENV__Code *, const char*);
-
-#define soap_write_SOAP_ENV__Code(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize_SOAP_ENV__Code(soap, data), 0) || KMS_Certificate::soap_put_SOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Code(struct soap*, const struct SOAP_ENV__Code *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Code(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_SOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_get_SOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Code(soap, n) soap_instantiate_SOAP_ENV__Code(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Code(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Code * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Code(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Code(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Certificate_SOAP_ENV__Header
-#define SOAP_TYPE_KMS_Certificate_SOAP_ENV__Header (26)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Header(struct soap*, struct SOAP_ENV__Header *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Header(struct soap*, const struct SOAP_ENV__Header *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Header(struct soap*, const char*, int, const struct SOAP_ENV__Header *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_in_SOAP_ENV__Header(struct soap*, const char*, struct SOAP_ENV__Header *, const char*);
-
-#define soap_write_SOAP_ENV__Header(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize_SOAP_ENV__Header(soap, data), 0) || KMS_Certificate::soap_put_SOAP_ENV__Header(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Header(struct soap*, const struct SOAP_ENV__Header *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Header(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_SOAP_ENV__Header(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_get_SOAP_ENV__Header(struct soap*, struct SOAP_ENV__Header *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Header(soap, n) soap_instantiate_SOAP_ENV__Header(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Header(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Header * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Header(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Header(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificate
-#define SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificate (25)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Certificate__RetrieveEntityCertificate(struct soap*, struct KMS_Certificate__RetrieveEntityCertificate *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Certificate__RetrieveEntityCertificate(struct soap*, const struct KMS_Certificate__RetrieveEntityCertificate *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Certificate__RetrieveEntityCertificate(struct soap*, const char*, int, const struct KMS_Certificate__RetrieveEntityCertificate *, const char*);
-SOAP_FMAC3 struct KMS_Certificate__RetrieveEntityCertificate * SOAP_FMAC4 soap_in_KMS_Certificate__RetrieveEntityCertificate(struct soap*, const char*, struct KMS_Certificate__RetrieveEntityCertificate *, const char*);
-
-#define soap_write_KMS_Certificate__RetrieveEntityCertificate(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize_KMS_Certificate__RetrieveEntityCertificate(soap, data), 0) || KMS_Certificate::soap_put_KMS_Certificate__RetrieveEntityCertificate(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Certificate__RetrieveEntityCertificate(struct soap*, const struct KMS_Certificate__RetrieveEntityCertificate *, const char*, const char*);
-
-#define soap_read_KMS_Certificate__RetrieveEntityCertificate(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_KMS_Certificate__RetrieveEntityCertificate(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Certificate__RetrieveEntityCertificate * SOAP_FMAC4 soap_get_KMS_Certificate__RetrieveEntityCertificate(struct soap*, struct KMS_Certificate__RetrieveEntityCertificate *, const char*, const char*);
-
-#define soap_new_KMS_Certificate__RetrieveEntityCertificate(soap, n) soap_instantiate_KMS_Certificate__RetrieveEntityCertificate(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Certificate__RetrieveEntityCertificate(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Certificate__RetrieveEntityCertificate * SOAP_FMAC2 soap_instantiate_KMS_Certificate__RetrieveEntityCertificate(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Certificate__RetrieveEntityCertificate(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificateResponse
-#define SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificateResponse (22)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Certificate__RetrieveEntityCertificateResponse(struct soap*, struct KMS_Certificate__RetrieveEntityCertificateResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Certificate__RetrieveEntityCertificateResponse(struct soap*, const struct KMS_Certificate__RetrieveEntityCertificateResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Certificate__RetrieveEntityCertificateResponse(struct soap*, const char*, int, const struct KMS_Certificate__RetrieveEntityCertificateResponse *, const char*);
-SOAP_FMAC3 struct KMS_Certificate__RetrieveEntityCertificateResponse * SOAP_FMAC4 soap_in_KMS_Certificate__RetrieveEntityCertificateResponse(struct soap*, const char*, struct KMS_Certificate__RetrieveEntityCertificateResponse *, const char*);
-
-#define soap_write_KMS_Certificate__RetrieveEntityCertificateResponse(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize_KMS_Certificate__RetrieveEntityCertificateResponse(soap, data), 0) || KMS_Certificate::soap_put_KMS_Certificate__RetrieveEntityCertificateResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Certificate__RetrieveEntityCertificateResponse(struct soap*, const struct KMS_Certificate__RetrieveEntityCertificateResponse *, const char*, const char*);
-
-#define soap_read_KMS_Certificate__RetrieveEntityCertificateResponse(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_KMS_Certificate__RetrieveEntityCertificateResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Certificate__RetrieveEntityCertificateResponse * SOAP_FMAC4 soap_get_KMS_Certificate__RetrieveEntityCertificateResponse(struct soap*, struct KMS_Certificate__RetrieveEntityCertificateResponse *, const char*, const char*);
-
-#define soap_new_KMS_Certificate__RetrieveEntityCertificateResponse(soap, n) soap_instantiate_KMS_Certificate__RetrieveEntityCertificateResponse(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Certificate__RetrieveEntityCertificateResponse(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Certificate__RetrieveEntityCertificateResponse * SOAP_FMAC2 soap_instantiate_KMS_Certificate__RetrieveEntityCertificateResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Certificate__RetrieveEntityCertificateResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Certificate_xsd__hexBinary
-#define SOAP_TYPE_KMS_Certificate_xsd__hexBinary (18)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_xsd__hexBinary(struct soap*, struct xsd__hexBinary *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__hexBinary(struct soap*, struct xsd__hexBinary const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__hexBinary(struct soap*, const char*, int, const struct xsd__hexBinary *, const char*);
-SOAP_FMAC3 struct xsd__hexBinary * SOAP_FMAC4 soap_in_xsd__hexBinary(struct soap*, const char*, struct xsd__hexBinary *, const char*);
-
-#define soap_write_xsd__hexBinary(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize_xsd__hexBinary(soap, data), 0) || KMS_Certificate::soap_put_xsd__hexBinary(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__hexBinary(struct soap*, const struct xsd__hexBinary *, const char*, const char*);
-
-#define soap_read_xsd__hexBinary(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_xsd__hexBinary(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct xsd__hexBinary * SOAP_FMAC4 soap_get_xsd__hexBinary(struct soap*, struct xsd__hexBinary *, const char*, const char*);
-
-#define soap_new_xsd__hexBinary(soap, n) soap_instantiate_xsd__hexBinary(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_xsd__hexBinary(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct xsd__hexBinary * SOAP_FMAC2 soap_instantiate_xsd__hexBinary(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__hexBinary(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Certificate_PointerToSOAP_ENV__Reason
-#define SOAP_TYPE_KMS_Certificate_PointerToSOAP_ENV__Reason (35)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Reason(struct soap*, const char *, int, struct SOAP_ENV__Reason *const*, const char *);
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Reason(struct soap*, const char*, struct SOAP_ENV__Reason **, const char*);
-
-#define soap_write_PointerToSOAP_ENV__Reason(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize_PointerToSOAP_ENV__Reason(soap, data), 0) || KMS_Certificate::soap_put_PointerToSOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *const*, const char*, const char*);
-
-#define soap_read_PointerToSOAP_ENV__Reason(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_PointerToSOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason **, const char*, const char*);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Certificate_PointerToSOAP_ENV__Detail
-#define SOAP_TYPE_KMS_Certificate_PointerToSOAP_ENV__Detail (34)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Detail(struct soap*, const char *, int, struct SOAP_ENV__Detail *const*, const char *);
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Detail(struct soap*, const char*, struct SOAP_ENV__Detail **, const char*);
-
-#define soap_write_PointerToSOAP_ENV__Detail(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize_PointerToSOAP_ENV__Detail(soap, data), 0) || KMS_Certificate::soap_put_PointerToSOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *const*, const char*, const char*);
-
-#define soap_read_PointerToSOAP_ENV__Detail(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_PointerToSOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail **, const char*, const char*);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Certificate_PointerToSOAP_ENV__Code
-#define SOAP_TYPE_KMS_Certificate_PointerToSOAP_ENV__Code (28)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Code(struct soap*, const char *, int, struct SOAP_ENV__Code *const*, const char *);
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Code(struct soap*, const char*, struct SOAP_ENV__Code **, const char*);
-
-#define soap_write_PointerToSOAP_ENV__Code(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize_PointerToSOAP_ENV__Code(soap, data), 0) || KMS_Certificate::soap_put_PointerToSOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *const*, const char*, const char*);
-
-#define soap_read_PointerToSOAP_ENV__Code(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_PointerToSOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code **, const char*, const char*);
-
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_PointerTounsignedByte
-#define SOAP_TYPE_KMS_Certificate_PointerTounsignedByte (21)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTounsignedByte(struct soap*, unsigned char *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTounsignedByte(struct soap*, const char *, int, unsigned char *const*, const char *);
-SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_in_PointerTounsignedByte(struct soap*, const char*, unsigned char **, const char*);
-
-#define soap_write_PointerTounsignedByte(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize_PointerTounsignedByte(soap, data), 0) || KMS_Certificate::soap_put_PointerTounsignedByte(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTounsignedByte(struct soap*, unsigned char *const*, const char*, const char*);
-
-#define soap_read_PointerTounsignedByte(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_PointerTounsignedByte(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_get_PointerTounsignedByte(struct soap*, unsigned char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate_xsd__duration
-#define SOAP_TYPE_KMS_Certificate_xsd__duration (17)
-#endif
-
-#define soap_default_xsd__duration(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize_xsd__duration(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__duration(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__duration(struct soap*, const char*, char **, const char*);
-
-#define soap_write_xsd__duration(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize_xsd__duration(soap, data), 0) || KMS_Certificate::soap_put_xsd__duration(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__duration(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_xsd__duration(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_xsd__duration(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__duration(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate_xsd__dateTime
-#define SOAP_TYPE_KMS_Certificate_xsd__dateTime (16)
-#endif
-
-#define soap_default_xsd__dateTime(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize_xsd__dateTime(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__dateTime(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__dateTime(struct soap*, const char*, char **, const char*);
-
-#define soap_write_xsd__dateTime(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize_xsd__dateTime(soap, data), 0) || KMS_Certificate::soap_put_xsd__dateTime(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__dateTime(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_xsd__dateTime(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_xsd__dateTime(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__dateTime(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate_xsd__string
-#define SOAP_TYPE_KMS_Certificate_xsd__string (7)
-#endif
-
-#define soap_default_xsd__string(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize_xsd__string(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__string(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__string(struct soap*, const char*, char **, const char*);
-
-#define soap_write_xsd__string(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize_xsd__string(soap, data), 0) || KMS_Certificate::soap_put_xsd__string(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__string(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_xsd__string(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_xsd__string(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__string(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate__QName
-#define SOAP_TYPE_KMS_Certificate__QName (5)
-#endif
-
-#define soap_default__QName(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize__QName(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out__QName(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in__QName(struct soap*, const char*, char **, const char*);
-
-#define soap_write__QName(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize__QName(soap, data), 0) || KMS_Certificate::soap_put__QName(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put__QName(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read__QName(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get__QName(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get__QName(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Certificate_string
-#define SOAP_TYPE_KMS_Certificate_string (4)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_string(struct soap*, char **);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_string(struct soap*, char *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_string(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_string(struct soap*, const char*, char **, const char*);
-
-#define soap_write_string(soap, data) ( soap_begin_send(soap) || (KMS_Certificate::soap_serialize_string(soap, data), 0) || KMS_Certificate::soap_put_string(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_string(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_string(soap, data) ( soap_begin_recv(soap) || !KMS_Certificate::soap_get_string(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap*, char **, const char*, const char*);
-
-} // namespace KMS_Certificate
-
-
-#endif
-
-/* End of KMS_CertificateH.h */
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_CertificateStub.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,262 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* KMS_CertificateStub.h
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/CertificateService/KMS_Certificate_SOAP.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#ifndef KMS_CertificateStub_H
-#define KMS_CertificateStub_H
-#ifndef WITH_NONAMESPACES
-#define WITH_NONAMESPACES
-#endif
-#ifndef WITH_NOGLOBAL
-#define WITH_NOGLOBAL
-#endif
-#include "stdsoap2.h"
-
-namespace KMS_Certificate {
-
-/******************************************************************************\
- *                                                                            *
- * Enumerations                                                               *
- *                                                                            *
-\******************************************************************************/
-
-
-/******************************************************************************\
- *                                                                            *
- * Types with Custom Serializers                                              *
- *                                                                            *
-\******************************************************************************/
-
-
-/******************************************************************************\
- *                                                                            *
- * Classes and Structs                                                        *
- *                                                                            *
-\******************************************************************************/
-
-
-#if 0 /* volatile type: do not declare here, declared elsewhere */
-
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_xsd__hexBinary
-#define SOAP_TYPE_KMS_Certificate_xsd__hexBinary (18)
-/* hexBinary schema type: */
-struct xsd__hexBinary
-{
-public:
-	unsigned char *__ptr;
-	int __size;
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificateResponse
-#define SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificateResponse (22)
-/* KMS-Certificate:RetrieveEntityCertificateResponse */
-struct KMS_Certificate__RetrieveEntityCertificateResponse
-{
-public:
-	struct xsd__hexBinary ServerAuthenticationResponse;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* required element of type xsd:hexBinary */
-	struct xsd__hexBinary Certificate;	/* required element of type xsd:hexBinary */
-	struct xsd__hexBinary WrappedPrivateKeyMaterial;	/* required element of type xsd:hexBinary */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificate
-#define SOAP_TYPE_KMS_Certificate_KMS_Certificate__RetrieveEntityCertificate (25)
-/* KMS-Certificate:RetrieveEntityCertificate */
-struct KMS_Certificate__RetrieveEntityCertificate
-{
-public:
-	char *EntityID;	/* optional element of type xsd:string */
-	struct xsd__hexBinary ClientAuthenticationResponse;	/* required element of type xsd:hexBinary */
-	struct xsd__hexBinary ServerAuthenticationChallenge;	/* required element of type xsd:hexBinary */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_SOAP_ENV__Header
-#define SOAP_TYPE_KMS_Certificate_SOAP_ENV__Header (26)
-/* SOAP Header: */
-struct SOAP_ENV__Header
-{
-#ifdef WITH_NOEMPTYSTRUCT
-private:
-	char dummy;	/* dummy member to enable compilation */
-#endif
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_SOAP_ENV__Code
-#define SOAP_TYPE_KMS_Certificate_SOAP_ENV__Code (27)
-/* SOAP Fault Code: */
-struct SOAP_ENV__Code
-{
-public:
-	char *SOAP_ENV__Value;	/* optional element of type xsd:QName */
-	struct SOAP_ENV__Code *SOAP_ENV__Subcode;	/* optional element of type SOAP-ENV:Code */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_SOAP_ENV__Detail
-#define SOAP_TYPE_KMS_Certificate_SOAP_ENV__Detail (29)
-/* SOAP-ENV:Detail */
-struct SOAP_ENV__Detail
-{
-public:
-	int __type;	/* any type of element <fault> (defined below) */
-	void *fault;	/* transient */
-	char *__any;
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_SOAP_ENV__Reason
-#define SOAP_TYPE_KMS_Certificate_SOAP_ENV__Reason (32)
-/* SOAP-ENV:Reason */
-struct SOAP_ENV__Reason
-{
-public:
-	char *SOAP_ENV__Text;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_SOAP_ENV__Fault
-#define SOAP_TYPE_KMS_Certificate_SOAP_ENV__Fault (33)
-/* SOAP Fault: */
-struct SOAP_ENV__Fault
-{
-public:
-	char *faultcode;	/* optional element of type xsd:QName */
-	char *faultstring;	/* optional element of type xsd:string */
-	char *faultactor;	/* optional element of type xsd:string */
-	struct SOAP_ENV__Detail *detail;	/* optional element of type SOAP-ENV:Detail */
-	struct SOAP_ENV__Code *SOAP_ENV__Code;	/* optional element of type SOAP-ENV:Code */
-	struct SOAP_ENV__Reason *SOAP_ENV__Reason;	/* optional element of type SOAP-ENV:Reason */
-	char *SOAP_ENV__Node;	/* optional element of type xsd:string */
-	char *SOAP_ENV__Role;	/* optional element of type xsd:string */
-	struct SOAP_ENV__Detail *SOAP_ENV__Detail;	/* optional element of type SOAP-ENV:Detail */
-};
-#endif
-
-/******************************************************************************\
- *                                                                            *
- * Typedefs                                                                   *
- *                                                                            *
-\******************************************************************************/
-
-#ifndef SOAP_TYPE_KMS_Certificate__QName
-#define SOAP_TYPE_KMS_Certificate__QName (5)
-typedef char *_QName;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate__XML
-#define SOAP_TYPE_KMS_Certificate__XML (6)
-typedef char *_XML;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_xsd__string
-#define SOAP_TYPE_KMS_Certificate_xsd__string (7)
-typedef char *xsd__string;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_xsd__float
-#define SOAP_TYPE_KMS_Certificate_xsd__float (9)
-typedef float xsd__float;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_xsd__int
-#define SOAP_TYPE_KMS_Certificate_xsd__int (11)
-typedef long xsd__int;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_xsd__boolean
-#define SOAP_TYPE_KMS_Certificate_xsd__boolean (13)
-typedef bool xsd__boolean;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_xsd__long
-#define SOAP_TYPE_KMS_Certificate_xsd__long (15)
-typedef LONG64 xsd__long;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_xsd__dateTime
-#define SOAP_TYPE_KMS_Certificate_xsd__dateTime (16)
-typedef char *xsd__dateTime;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Certificate_xsd__duration
-#define SOAP_TYPE_KMS_Certificate_xsd__duration (17)
-typedef char *xsd__duration;
-#endif
-
-
-/******************************************************************************\
- *                                                                            *
- * Externals                                                                  *
- *                                                                            *
-\******************************************************************************/
-
-
-/******************************************************************************\
- *                                                                            *
- * Server-Side Operations                                                     *
- *                                                                            *
-\******************************************************************************/
-
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Certificate__RetrieveEntityCertificate(struct soap*, char *EntityID, struct xsd__hexBinary ClientAuthenticationResponse, struct xsd__hexBinary ServerAuthenticationChallenge, struct KMS_Certificate__RetrieveEntityCertificateResponse &result);
-
-/******************************************************************************\
- *                                                                            *
- * Server-Side Skeletons to Invoke Service Operations                         *
- *                                                                            *
-\******************************************************************************/
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Certificate_serve(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Certificate_serve_request(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Certificate__RetrieveEntityCertificate(struct soap*);
-
-/******************************************************************************\
- *                                                                            *
- * Client-Side Call Stubs                                                     *
- *                                                                            *
-\******************************************************************************/
-
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Certificate__RetrieveEntityCertificate(struct soap *soap, const char *soap_endpoint, const char *soap_action, char *EntityID, struct xsd__hexBinary ClientAuthenticationResponse, struct xsd__hexBinary ServerAuthenticationChallenge, struct KMS_Certificate__RetrieveEntityCertificateResponse &result);
-
-} // namespace KMS_Certificate
-
-
-#endif
-
-/* End of KMS_CertificateStub.h */
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_Discovery.nsmap	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-
-#include "KMS_DiscoveryH.h"
-SOAP_NMAC struct Namespace KMS_Discovery_namespaces[] =
-{
-	{"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope"},
-	{"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding"},
-	{"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance"},
-	{"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema"},
-	{"KMS-Discovery", "http://www.sun.com/KMS/KMS-Discovery"},
-	{NULL, NULL}
-};
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_DiscoveryC.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2904 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* KMS_DiscoveryC.cpp
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/DiscoveryService/KMS_Discovery_SOAP.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#if defined(__BORLANDC__)
-#pragma option push -w-8060
-#pragma option push -w-8004
-#endif
-
-#include "KMS_DiscoveryH.h"
-
-namespace KMS_Discovery {
-
-SOAP_SOURCE_STAMP("@(#) KMS_DiscoveryC.cpp ver 2.7.17 2010-06-08 19:16:38 GMT")
-
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serializeheader(struct soap *soap)
-{
-	if (soap->header)
-		soap_serialize_SOAP_ENV__Header(soap, soap->header);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_putheader(struct soap *soap)
-{
-	if (soap->header)
-	{	soap->part = SOAP_IN_HEADER;
-		if (soap_out_SOAP_ENV__Header(soap, "SOAP-ENV:Header", 0, soap->header, NULL))
-			return soap->error;
-		soap->part = SOAP_END_HEADER;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_getheader(struct soap *soap)
-{
-	soap->part = SOAP_IN_HEADER;
-	soap->header = soap_in_SOAP_ENV__Header(soap, "SOAP-ENV:Header", NULL, NULL);
-	soap->part = SOAP_END_HEADER;
-	return soap->header == NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_header(struct soap *soap)
-{
-	if (!soap->header)
-	{	if ((soap->header = soap_new_SOAP_ENV__Header(soap, -1)))
-			soap_default_SOAP_ENV__Header(soap, soap->header);
-	}
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_fault(struct soap *soap)
-{
-	if (!soap->fault)
-	{	soap->fault = soap_new_SOAP_ENV__Fault(soap, -1);
-		if (!soap->fault)
-			return;
-		soap_default_SOAP_ENV__Fault(soap, soap->fault);
-	}
-	if (soap->version == 2 && !soap->fault->SOAP_ENV__Code)
-	{	soap->fault->SOAP_ENV__Code = soap_new_SOAP_ENV__Code(soap, -1);
-		soap_default_SOAP_ENV__Code(soap, soap->fault->SOAP_ENV__Code);
-	}
-	if (soap->version == 2 && !soap->fault->SOAP_ENV__Reason)
-	{	soap->fault->SOAP_ENV__Reason = soap_new_SOAP_ENV__Reason(soap, -1);
-		soap_default_SOAP_ENV__Reason(soap, soap->fault->SOAP_ENV__Reason);
-	}
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serializefault(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->fault)
-		soap_serialize_SOAP_ENV__Fault(soap, soap->fault);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_putfault(struct soap *soap)
-{
-	if (soap->fault)
-		return soap_put_SOAP_ENV__Fault(soap, soap->fault, "SOAP-ENV:Fault", NULL);
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_getfault(struct soap *soap)
-{
-	return (soap->fault = soap_get_SOAP_ENV__Fault(soap, NULL, "SOAP-ENV:Fault", NULL)) == NULL;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultcode(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 2)
-		return (const char**)&soap->fault->SOAP_ENV__Code->SOAP_ENV__Value;
-	return (const char**)&soap->fault->faultcode;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultsubcode(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 2)
-	{	if (!soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode)
-		{	soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode = soap_new_SOAP_ENV__Code(soap, -1);
-			soap_default_SOAP_ENV__Code(soap, soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode);
-		}
-		return (const char**)&soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode->SOAP_ENV__Value;
-	}
-	return (const char**)&soap->fault->faultcode;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultstring(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 2)
-		return (const char**)&soap->fault->SOAP_ENV__Reason->SOAP_ENV__Text;
-	return (const char**)&soap->fault->faultstring;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultdetail(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 1)
-	{	if (!soap->fault->detail)
-		{	soap->fault->detail = (struct SOAP_ENV__Detail*)soap_malloc(soap, sizeof(struct SOAP_ENV__Detail));
-			soap_default_SOAP_ENV__Detail(soap, soap->fault->detail);
-		}
-		return (const char**)&soap->fault->detail->__any;
-	}
-	if (!soap->fault->SOAP_ENV__Detail)
-	{	soap->fault->SOAP_ENV__Detail = soap_new_SOAP_ENV__Detail(soap, -1);
-		soap_default_SOAP_ENV__Detail(soap, soap->fault->SOAP_ENV__Detail);
-	}
-	return (const char**)&soap->fault->SOAP_ENV__Detail->__any;
-}
-
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 int SOAP_FMAC4 soap_getindependent(struct soap *soap)
-{
-	int t;
-	if (soap->version == 1)
-	{	for (;;)
-		{	if (!soap_getelement(soap, &t))
-				if (soap->error || soap_ignore_element(soap))
-					break;
-		}
-	}
-	if (soap->error == SOAP_NO_TAG || soap->error == SOAP_EOF)
-		soap->error = SOAP_OK;
-	return soap->error;
-}
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type)
-{
-	if (soap_peek_element(soap))
-		return NULL;
-	if (!*soap->id || !(*type = soap_lookup_type(soap, soap->id)))
-		*type = soap_lookup_type(soap, soap->href);
-	switch (*type)
-	{
-	case SOAP_TYPE_KMS_Discovery_byte:
-		return soap_in_byte(soap, NULL, NULL, "xsd:byte");
-	case SOAP_TYPE_KMS_Discovery_int:
-		return soap_in_int(soap, NULL, NULL, "xsd:int");
-	case SOAP_TYPE_KMS_Discovery_xsd__int:
-		return soap_in_xsd__int(soap, NULL, NULL, "xsd:int");
-	case SOAP_TYPE_KMS_Discovery_long:
-		return soap_in_long(soap, NULL, NULL, "xsd:long");
-	case SOAP_TYPE_KMS_Discovery_xsd__long:
-		return soap_in_xsd__long(soap, NULL, NULL, "xsd:long");
-	case SOAP_TYPE_KMS_Discovery_LONG64:
-		return soap_in_LONG64(soap, NULL, NULL, "xsd:long");
-	case SOAP_TYPE_KMS_Discovery_xsd__float:
-		return soap_in_xsd__float(soap, NULL, NULL, "xsd:float");
-	case SOAP_TYPE_KMS_Discovery_float:
-		return soap_in_float(soap, NULL, NULL, "xsd:float");
-	case SOAP_TYPE_KMS_Discovery_unsignedByte:
-		return soap_in_unsignedByte(soap, NULL, NULL, "xsd:unsignedByte");
-	case SOAP_TYPE_KMS_Discovery_unsignedInt:
-		return soap_in_unsignedInt(soap, NULL, NULL, "xsd:unsignedInt");
-	case SOAP_TYPE_KMS_Discovery_xsd__boolean:
-		return soap_in_xsd__boolean(soap, NULL, NULL, "xsd:boolean");
-	case SOAP_TYPE_KMS_Discovery_bool:
-		return soap_in_bool(soap, NULL, NULL, "xsd:boolean");
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverCluster:
-		return soap_in_KMS_Discovery__DiscoverCluster(soap, NULL, NULL, "KMS-Discovery:DiscoverCluster");
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverClusterResponse:
-		return soap_in_KMS_Discovery__DiscoverClusterResponse(soap, NULL, NULL, "KMS-Discovery:DiscoverClusterResponse");
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery__ArrayOfClusterMembers:
-		return soap_in_KMS_Discovery__ArrayOfClusterMembers(soap, NULL, NULL, "KMS-Discovery:ArrayOfClusterMembers");
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember:
-		return soap_in_KMS_Discovery_ClusterMember(soap, NULL, NULL, "KMS-Discovery-ClusterMember");
-	case SOAP_TYPE_KMS_Discovery_xsd__hexBinary:
-		return soap_in_xsd__hexBinary(soap, NULL, NULL, "xsd:hexBinary");
-	case SOAP_TYPE_KMS_Discovery_PointerToKMS_Discovery_ClusterMember:
-		return soap_in_PointerToKMS_Discovery_ClusterMember(soap, NULL, NULL, "KMS-Discovery-ClusterMember");
-	case SOAP_TYPE_KMS_Discovery_PointerTounsignedByte:
-		return soap_in_PointerTounsignedByte(soap, NULL, NULL, "xsd:unsignedByte");
-	case SOAP_TYPE_KMS_Discovery_xsd__networkAddress:
-	{	char **s;
-		s = soap_in_xsd__networkAddress(soap, NULL, NULL, "xsd:networkAddress");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_Discovery_xsd__kmaVersion:
-	{	char **s;
-		s = soap_in_xsd__kmaVersion(soap, NULL, NULL, "xsd:kmaVersion");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_Discovery_xsd__duration:
-	{	char **s;
-		s = soap_in_xsd__duration(soap, NULL, NULL, "xsd:duration");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_Discovery_xsd__dateTime:
-	{	char **s;
-		s = soap_in_xsd__dateTime(soap, NULL, NULL, "xsd:dateTime");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_Discovery_xsd__string:
-	{	char **s;
-		s = soap_in_xsd__string(soap, NULL, NULL, "xsd:string");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_Discovery__QName:
-	{	char **s;
-		s = soap_in__QName(soap, NULL, NULL, "xsd:QName");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_KMS_Discovery_string:
-	{	char **s;
-		s = soap_in_string(soap, NULL, NULL, "xsd:string");
-		return s ? *s : NULL;
-	}
-	default:
-	{	const char *t = soap->type;
-		if (!*t)
-			t = soap->tag;
-		if (!soap_match_tag(soap, t, "xsd:byte"))
-		{	*type = SOAP_TYPE_KMS_Discovery_byte;
-			return soap_in_byte(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:int"))
-		{	*type = SOAP_TYPE_KMS_Discovery_int;
-			return soap_in_int(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:int"))
-		{	*type = SOAP_TYPE_KMS_Discovery_xsd__int;
-			return soap_in_xsd__int(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:long"))
-		{	*type = SOAP_TYPE_KMS_Discovery_long;
-			return soap_in_long(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:long"))
-		{	*type = SOAP_TYPE_KMS_Discovery_xsd__long;
-			return soap_in_xsd__long(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:long"))
-		{	*type = SOAP_TYPE_KMS_Discovery_LONG64;
-			return soap_in_LONG64(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:float"))
-		{	*type = SOAP_TYPE_KMS_Discovery_xsd__float;
-			return soap_in_xsd__float(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:float"))
-		{	*type = SOAP_TYPE_KMS_Discovery_float;
-			return soap_in_float(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:unsignedByte"))
-		{	*type = SOAP_TYPE_KMS_Discovery_unsignedByte;
-			return soap_in_unsignedByte(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:unsignedInt"))
-		{	*type = SOAP_TYPE_KMS_Discovery_unsignedInt;
-			return soap_in_unsignedInt(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:boolean"))
-		{	*type = SOAP_TYPE_KMS_Discovery_xsd__boolean;
-			return soap_in_xsd__boolean(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:boolean"))
-		{	*type = SOAP_TYPE_KMS_Discovery_bool;
-			return soap_in_bool(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Discovery:DiscoverCluster"))
-		{	*type = SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverCluster;
-			return soap_in_KMS_Discovery__DiscoverCluster(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Discovery:DiscoverClusterResponse"))
-		{	*type = SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverClusterResponse;
-			return soap_in_KMS_Discovery__DiscoverClusterResponse(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Discovery:ArrayOfClusterMembers"))
-		{	*type = SOAP_TYPE_KMS_Discovery_KMS_Discovery__ArrayOfClusterMembers;
-			return soap_in_KMS_Discovery__ArrayOfClusterMembers(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "KMS-Discovery-ClusterMember"))
-		{	*type = SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember;
-			return soap_in_KMS_Discovery_ClusterMember(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:hexBinary"))
-		{	*type = SOAP_TYPE_KMS_Discovery_xsd__hexBinary;
-			return soap_in_xsd__hexBinary(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:networkAddress"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Discovery_xsd__networkAddress;
-			s = soap_in_xsd__networkAddress(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:kmaVersion"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Discovery_xsd__kmaVersion;
-			s = soap_in_xsd__kmaVersion(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:duration"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Discovery_xsd__duration;
-			s = soap_in_xsd__duration(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:dateTime"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Discovery_xsd__dateTime;
-			s = soap_in_xsd__dateTime(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:string"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Discovery_xsd__string;
-			s = soap_in_xsd__string(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:QName"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Discovery__QName;
-			s = soap_in__QName(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:string"))
-		{	char **s;
-			*type = SOAP_TYPE_KMS_Discovery_string;
-			s = soap_in_string(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		t = soap->tag;
-	}
-	}
-	soap->error = SOAP_TAG_MISMATCH;
-	return NULL;
-}
-#endif
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_ignore_element(struct soap *soap)
-{
-	if (!soap_peek_element(soap))
-	{	int t;
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unexpected element '%s' in input (level=%u, %d)\n", soap->tag, soap->level, soap->body));
-		if (soap->mustUnderstand && !soap->other)
-			return soap->error = SOAP_MUSTUNDERSTAND;
-		if (((soap->mode & SOAP_XML_STRICT) && soap->part != SOAP_IN_HEADER) || !soap_match_tag(soap, soap->tag, "SOAP-ENV:"))
-		{	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "REJECTING element '%s'\n", soap->tag));
-			return soap->error = SOAP_TAG_MISMATCH;
-		}
-		if (!*soap->id || !soap_getelement(soap, &t))
-		{	soap->peeked = 0;
-			if (soap->fignore)
-				soap->error = soap->fignore(soap, soap->tag);
-			else
-				soap->error = SOAP_OK;
-			DBGLOG(TEST, if (!soap->error) SOAP_MESSAGE(fdebug, "IGNORING element '%s'\n", soap->tag));
-			if (!soap->error && soap->body)
-			{	soap->level++;
-				while (!soap_ignore_element(soap))
-					;
-				if (soap->error == SOAP_NO_TAG)
-					soap->error = soap_element_end_in(soap, NULL);
-			}
-		}
-	}
-	return soap->error;
-}
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 int SOAP_FMAC4 soap_putindependent(struct soap *soap)
-{
-	int i;
-	struct soap_plist *pp;
-	if (soap->version == 1 && soap->encodingStyle && !(soap->mode & (SOAP_XML_TREE | SOAP_XML_GRAPH)))
-		for (i = 0; i < SOAP_PTRHASH; i++)
-			for (pp = soap->pht[i]; pp; pp = pp->next)
-				if (pp->mark1 == 2 || pp->mark2 == 2)
-					if (soap_putelement(soap, pp->ptr, "id", pp->id, pp->type))
-						return soap->error;
-	return SOAP_OK;
-}
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap *soap, const void *ptr, const char *tag, int id, int type)
-{
-	switch (type)
-	{
-	case SOAP_TYPE_KMS_Discovery_byte:
-		return soap_out_byte(soap, tag, id, (const char *)ptr, "xsd:byte");
-	case SOAP_TYPE_KMS_Discovery_int:
-		return soap_out_int(soap, tag, id, (const int *)ptr, "xsd:int");
-	case SOAP_TYPE_KMS_Discovery_xsd__int:
-		return soap_out_xsd__int(soap, tag, id, (const long *)ptr, "xsd:int");
-	case SOAP_TYPE_KMS_Discovery_long:
-		return soap_out_long(soap, tag, id, (const long *)ptr, "xsd:long");
-	case SOAP_TYPE_KMS_Discovery_xsd__long:
-		return soap_out_xsd__long(soap, tag, id, (const LONG64 *)ptr, "xsd:long");
-	case SOAP_TYPE_KMS_Discovery_LONG64:
-		return soap_out_LONG64(soap, tag, id, (const LONG64 *)ptr, "xsd:long");
-	case SOAP_TYPE_KMS_Discovery_xsd__float:
-		return soap_out_xsd__float(soap, tag, id, (const float *)ptr, "xsd:float");
-	case SOAP_TYPE_KMS_Discovery_float:
-		return soap_out_float(soap, tag, id, (const float *)ptr, "xsd:float");
-	case SOAP_TYPE_KMS_Discovery_unsignedByte:
-		return soap_out_unsignedByte(soap, tag, id, (const unsigned char *)ptr, "xsd:unsignedByte");
-	case SOAP_TYPE_KMS_Discovery_unsignedInt:
-		return soap_out_unsignedInt(soap, tag, id, (const unsigned int *)ptr, "xsd:unsignedInt");
-	case SOAP_TYPE_KMS_Discovery_xsd__boolean:
-		return soap_out_xsd__boolean(soap, tag, id, (const bool *)ptr, "xsd:boolean");
-	case SOAP_TYPE_KMS_Discovery_bool:
-		return soap_out_bool(soap, tag, id, (const bool *)ptr, "xsd:boolean");
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverCluster:
-		return soap_out_KMS_Discovery__DiscoverCluster(soap, tag, id, (const struct KMS_Discovery__DiscoverCluster *)ptr, "KMS-Discovery:DiscoverCluster");
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverClusterResponse:
-		return soap_out_KMS_Discovery__DiscoverClusterResponse(soap, tag, id, (const struct KMS_Discovery__DiscoverClusterResponse *)ptr, "KMS-Discovery:DiscoverClusterResponse");
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery__ArrayOfClusterMembers:
-		return soap_out_KMS_Discovery__ArrayOfClusterMembers(soap, tag, id, (const struct KMS_Discovery__ArrayOfClusterMembers *)ptr, "KMS-Discovery:ArrayOfClusterMembers");
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember:
-		return soap_out_KMS_Discovery_ClusterMember(soap, tag, id, (const struct KMS_Discovery_ClusterMember *)ptr, "KMS-Discovery-ClusterMember");
-	case SOAP_TYPE_KMS_Discovery_xsd__hexBinary:
-		return soap_out_xsd__hexBinary(soap, tag, id, (const struct xsd__hexBinary *)ptr, "xsd:hexBinary");
-	case SOAP_TYPE_KMS_Discovery_PointerToKMS_Discovery_ClusterMember:
-		return soap_out_PointerToKMS_Discovery_ClusterMember(soap, tag, id, (struct KMS_Discovery_ClusterMember *const*)ptr, "KMS-Discovery-ClusterMember");
-	case SOAP_TYPE_KMS_Discovery_PointerTounsignedByte:
-		return soap_out_PointerTounsignedByte(soap, tag, id, (unsigned char *const*)ptr, "xsd:unsignedByte");
-	case SOAP_TYPE_KMS_Discovery_xsd__networkAddress:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:networkAddress");
-	case SOAP_TYPE_KMS_Discovery_xsd__kmaVersion:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:kmaVersion");
-	case SOAP_TYPE_KMS_Discovery_xsd__duration:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:duration");
-	case SOAP_TYPE_KMS_Discovery_xsd__dateTime:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:dateTime");
-	case SOAP_TYPE_KMS_Discovery_xsd__string:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:string");
-	case SOAP_TYPE_KMS_Discovery__QName:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:QName");
-	case SOAP_TYPE_KMS_Discovery_string:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:string");
-	}
-	return SOAP_OK;
-}
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap *soap, const void *ptr, int type)
-{
-	(void)soap; (void)ptr; (void)type; /* appease -Wall -Werror */
-	switch (type)
-	{
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverCluster:
-		soap_serialize_KMS_Discovery__DiscoverCluster(soap, (const struct KMS_Discovery__DiscoverCluster *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverClusterResponse:
-		soap_serialize_KMS_Discovery__DiscoverClusterResponse(soap, (const struct KMS_Discovery__DiscoverClusterResponse *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery__ArrayOfClusterMembers:
-		soap_serialize_KMS_Discovery__ArrayOfClusterMembers(soap, (const struct KMS_Discovery__ArrayOfClusterMembers *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember:
-		soap_serialize_KMS_Discovery_ClusterMember(soap, (const struct KMS_Discovery_ClusterMember *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_xsd__hexBinary:
-		soap_serialize_xsd__hexBinary(soap, (const struct xsd__hexBinary *)ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_PointerToKMS_Discovery_ClusterMember:
-		soap_serialize_PointerToKMS_Discovery_ClusterMember(soap, (struct KMS_Discovery_ClusterMember *const*)ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_PointerTounsignedByte:
-		soap_serialize_PointerTounsignedByte(soap, (unsigned char *const*)ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_xsd__networkAddress:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_xsd__kmaVersion:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_xsd__duration:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_xsd__dateTime:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_xsd__string:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery__QName:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_string:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	}
-}
-#endif
-
-SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap *soap, int t, const char *type, const char *arrayType, size_t *n)
-{
-	switch (t)
-	{
-	case SOAP_TYPE_KMS_Discovery_xsd__hexBinary:
-		return (void*)soap_instantiate_xsd__hexBinary(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember:
-		return (void*)soap_instantiate_KMS_Discovery_ClusterMember(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery__ArrayOfClusterMembers:
-		return (void*)soap_instantiate_KMS_Discovery__ArrayOfClusterMembers(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverClusterResponse:
-		return (void*)soap_instantiate_KMS_Discovery__DiscoverClusterResponse(soap, -1, type, arrayType, n);
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverCluster:
-		return (void*)soap_instantiate_KMS_Discovery__DiscoverCluster(soap, -1, type, arrayType, n);
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_Discovery_SOAP_ENV__Header:
-		return (void*)soap_instantiate_SOAP_ENV__Header(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_Discovery_SOAP_ENV__Code:
-		return (void*)soap_instantiate_SOAP_ENV__Code(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_Discovery_SOAP_ENV__Detail:
-		return (void*)soap_instantiate_SOAP_ENV__Detail(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_Discovery_SOAP_ENV__Reason:
-		return (void*)soap_instantiate_SOAP_ENV__Reason(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_KMS_Discovery_SOAP_ENV__Fault:
-		return (void*)soap_instantiate_SOAP_ENV__Fault(soap, -1, type, arrayType, n);
-#endif
-	}
-	return NULL;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_fdelete(struct soap_clist *p)
-{	switch (p->type)
-	{
-	case SOAP_TYPE_KMS_Discovery_xsd__hexBinary:
-		if (p->size < 0)
-			SOAP_DELETE((struct xsd__hexBinary*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct xsd__hexBinary*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Discovery_ClusterMember*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Discovery_ClusterMember*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery__ArrayOfClusterMembers:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Discovery__ArrayOfClusterMembers*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Discovery__ArrayOfClusterMembers*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverClusterResponse:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Discovery__DiscoverClusterResponse*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Discovery__DiscoverClusterResponse*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverCluster:
-		if (p->size < 0)
-			SOAP_DELETE((struct KMS_Discovery__DiscoverCluster*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct KMS_Discovery__DiscoverCluster*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_SOAP_ENV__Header:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Header*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Header*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_SOAP_ENV__Code:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Code*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Code*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_SOAP_ENV__Detail:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Detail*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Detail*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_SOAP_ENV__Reason:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Reason*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Reason*)p->ptr);
-		break;
-	case SOAP_TYPE_KMS_Discovery_SOAP_ENV__Fault:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Fault*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Fault*)p->ptr);
-		break;
-	default:	return SOAP_ERR;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 void* SOAP_FMAC4 soap_class_id_enter(struct soap *soap, const char *id, void *p, int t, size_t n, const char *type, const char *arrayType)
-{	return soap_id_enter(soap, id, p, t, n, 0, type, arrayType, soap_instantiate);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_byte(struct soap *soap, char *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_byte
-	*a = SOAP_DEFAULT_byte;
-#else
-	*a = (char)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_byte(struct soap *soap, const char *tag, int id, const char *a, const char *type)
-{
-	return soap_outbyte(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery_byte);
-}
-
-SOAP_FMAC3 char * SOAP_FMAC4 soap_in_byte(struct soap *soap, const char *tag, char *a, const char *type)
-{	char *p;
-	p = soap_inbyte(soap, tag, a, type, SOAP_TYPE_KMS_Discovery_byte);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_byte(struct soap *soap, const char *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_byte);
-	if (soap_out_byte(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char * SOAP_FMAC4 soap_get_byte(struct soap *soap, char *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_byte(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_int(struct soap *soap, int *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_int
-	*a = SOAP_DEFAULT_int;
-#else
-	*a = (int)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_int(struct soap *soap, const char *tag, int id, const int *a, const char *type)
-{
-	return soap_outint(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery_int);
-}
-
-SOAP_FMAC3 int * SOAP_FMAC4 soap_in_int(struct soap *soap, const char *tag, int *a, const char *type)
-{	int *p;
-	p = soap_inint(soap, tag, a, type, SOAP_TYPE_KMS_Discovery_int);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_int(struct soap *soap, const int *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_int);
-	if (soap_out_int(soap, tag?tag:"int", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 int * SOAP_FMAC4 soap_get_int(struct soap *soap, int *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_int(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__int(struct soap *soap, const char *tag, int id, const long *a, const char *type)
-{
-	return soap_outlong(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery_xsd__int);
-}
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_in_xsd__int(struct soap *soap, const char *tag, long *a, const char *type)
-{	long *p;
-	p = soap_inlong(soap, tag, a, type, SOAP_TYPE_KMS_Discovery_xsd__int);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__int(struct soap *soap, const long *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_xsd__int);
-	if (soap_out_xsd__int(soap, tag?tag:"xsd:int", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_get_xsd__int(struct soap *soap, long *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__int(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_long(struct soap *soap, long *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_long
-	*a = SOAP_DEFAULT_long;
-#else
-	*a = (long)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_long(struct soap *soap, const char *tag, int id, const long *a, const char *type)
-{
-	return soap_outlong(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery_long);
-}
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_in_long(struct soap *soap, const char *tag, long *a, const char *type)
-{	long *p;
-	p = soap_inlong(soap, tag, a, type, SOAP_TYPE_KMS_Discovery_long);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_long(struct soap *soap, const long *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_long);
-	if (soap_out_long(soap, tag?tag:"long", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_get_long(struct soap *soap, long *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_long(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__long(struct soap *soap, const char *tag, int id, const LONG64 *a, const char *type)
-{
-	return soap_outLONG64(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery_xsd__long);
-}
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_in_xsd__long(struct soap *soap, const char *tag, LONG64 *a, const char *type)
-{	LONG64 *p;
-	p = soap_inLONG64(soap, tag, a, type, SOAP_TYPE_KMS_Discovery_xsd__long);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__long(struct soap *soap, const LONG64 *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_xsd__long);
-	if (soap_out_xsd__long(soap, tag?tag:"xsd:long", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_xsd__long(struct soap *soap, LONG64 *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__long(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_LONG64(struct soap *soap, LONG64 *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_LONG64
-	*a = SOAP_DEFAULT_LONG64;
-#else
-	*a = (LONG64)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_LONG64(struct soap *soap, const char *tag, int id, const LONG64 *a, const char *type)
-{
-	return soap_outLONG64(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery_LONG64);
-}
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_in_LONG64(struct soap *soap, const char *tag, LONG64 *a, const char *type)
-{	LONG64 *p;
-	p = soap_inLONG64(soap, tag, a, type, SOAP_TYPE_KMS_Discovery_LONG64);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_LONG64(struct soap *soap, const LONG64 *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_LONG64);
-	if (soap_out_LONG64(soap, tag?tag:"long", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_LONG64(struct soap *soap, LONG64 *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_LONG64(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__float(struct soap *soap, const char *tag, int id, const float *a, const char *type)
-{
-	return soap_outfloat(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery_xsd__float);
-}
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_in_xsd__float(struct soap *soap, const char *tag, float *a, const char *type)
-{	float *p;
-	p = soap_infloat(soap, tag, a, type, SOAP_TYPE_KMS_Discovery_xsd__float);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__float(struct soap *soap, const float *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_xsd__float);
-	if (soap_out_xsd__float(soap, tag?tag:"xsd:float", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_get_xsd__float(struct soap *soap, float *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__float(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_float(struct soap *soap, float *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_float
-	*a = SOAP_DEFAULT_float;
-#else
-	*a = (float)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_float(struct soap *soap, const char *tag, int id, const float *a, const char *type)
-{
-	return soap_outfloat(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery_float);
-}
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_in_float(struct soap *soap, const char *tag, float *a, const char *type)
-{	float *p;
-	p = soap_infloat(soap, tag, a, type, SOAP_TYPE_KMS_Discovery_float);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_float(struct soap *soap, const float *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_float);
-	if (soap_out_float(soap, tag?tag:"float", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_get_float(struct soap *soap, float *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_float(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedByte(struct soap *soap, unsigned char *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_unsignedByte
-	*a = SOAP_DEFAULT_unsignedByte;
-#else
-	*a = (unsigned char)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedByte(struct soap *soap, const char *tag, int id, const unsigned char *a, const char *type)
-{
-	return soap_outunsignedByte(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery_unsignedByte);
-}
-
-SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_in_unsignedByte(struct soap *soap, const char *tag, unsigned char *a, const char *type)
-{	unsigned char *p;
-	p = soap_inunsignedByte(soap, tag, a, type, SOAP_TYPE_KMS_Discovery_unsignedByte);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedByte(struct soap *soap, const unsigned char *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_unsignedByte);
-	if (soap_out_unsignedByte(soap, tag?tag:"unsignedByte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_get_unsignedByte(struct soap *soap, unsigned char *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_unsignedByte(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedInt(struct soap *soap, unsigned int *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_unsignedInt
-	*a = SOAP_DEFAULT_unsignedInt;
-#else
-	*a = (unsigned int)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedInt(struct soap *soap, const char *tag, int id, const unsigned int *a, const char *type)
-{
-	return soap_outunsignedInt(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery_unsignedInt);
-}
-
-SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_in_unsignedInt(struct soap *soap, const char *tag, unsigned int *a, const char *type)
-{	unsigned int *p;
-	p = soap_inunsignedInt(soap, tag, a, type, SOAP_TYPE_KMS_Discovery_unsignedInt);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedInt(struct soap *soap, const unsigned int *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_unsignedInt);
-	if (soap_out_unsignedInt(soap, tag?tag:"unsignedInt", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_get_unsignedInt(struct soap *soap, unsigned int *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_unsignedInt(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_xsd__boolean2s(struct soap *soap, bool n)
-{	return soap_bool2s(soap, n);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__boolean(struct soap *soap, const char *tag, int id, const bool *a, const char *type)
-{	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Discovery_xsd__boolean), type) || soap_send(soap, soap_xsd__boolean2s(soap, *a)))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2xsd__boolean(struct soap *soap, const char *s, bool *a)
-{
-	return soap_s2bool(soap, s, a);
-}
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_xsd__boolean(struct soap *soap, const char *tag, bool *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, NULL))
-		return NULL;
-	if (*soap->type && soap_match_tag(soap, soap->type, type) && soap_match_tag(soap, soap->type, ":boolean"))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (bool *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Discovery_xsd__boolean, sizeof(bool), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	if (soap->body && !*soap->href)
-	{	if (!a || soap_s2xsd__boolean(soap, soap_value(soap), a) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (bool *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Discovery_xsd__boolean, 0, sizeof(bool), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__boolean(struct soap *soap, const bool *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_xsd__boolean);
-	if (soap_out_xsd__boolean(soap, tag?tag:"xsd:boolean", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_xsd__boolean(struct soap *soap, bool *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__boolean(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_bool(struct soap *soap, bool *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_bool
-	*a = SOAP_DEFAULT_bool;
-#else
-	*a = (bool)0;
-#endif
-}
-
-static const struct soap_code_map soap_codes_bool[] =
-{	{ (long)false, "false" },
-	{ (long)true, "true" },
-	{ 0, NULL }
-};
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_bool2s(struct soap *soap, bool n)
-{
-	(void)soap; /* appease -Wall -Werror */
-return soap_code_str(soap_codes_bool, n!=0);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_bool(struct soap *soap, const char *tag, int id, const bool *a, const char *type)
-{	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Discovery_bool), type) || soap_send(soap, soap_bool2s(soap, *a)))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2bool(struct soap *soap, const char *s, bool *a)
-{
-	const struct soap_code_map *map;
-	if (!s)
-		return soap->error;
-	map = soap_code(soap_codes_bool, s);
-	if (map)
-		*a = (bool)(map->code != 0);
-	else
-	{	long n;
-		if (soap_s2long(soap, s, &n) || n < 0 || n > 1)
-			return soap->error = SOAP_TYPE;
-		*a = (bool)(n != 0);
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_bool(struct soap *soap, const char *tag, bool *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, NULL))
-		return NULL;
-	if (*soap->type && soap_match_tag(soap, soap->type, type) && soap_match_tag(soap, soap->type, ":boolean"))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (bool *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Discovery_bool, sizeof(bool), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	if (soap->body && !*soap->href)
-	{	if (!a || soap_s2bool(soap, soap_value(soap), a) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (bool *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Discovery_bool, 0, sizeof(bool), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_bool(struct soap *soap, const bool *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_bool);
-	if (soap_out_bool(soap, tag?tag:"boolean", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_bool(struct soap *soap, bool *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_bool(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default__QName(soap, &a->faultcode);
-	soap_default_string(soap, &a->faultstring);
-	soap_default_string(soap, &a->faultactor);
-	a->detail = NULL;
-	a->SOAP_ENV__Code = NULL;
-	a->SOAP_ENV__Reason = NULL;
-	soap_default_string(soap, &a->SOAP_ENV__Node);
-	soap_default_string(soap, &a->SOAP_ENV__Role);
-	a->SOAP_ENV__Detail = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Fault(struct soap *soap, const struct SOAP_ENV__Fault *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize__QName(soap, &a->faultcode);
-	soap_serialize_string(soap, &a->faultstring);
-	soap_serialize_string(soap, &a->faultactor);
-	soap_serialize_PointerToSOAP_ENV__Detail(soap, &a->detail);
-	soap_serialize_PointerToSOAP_ENV__Code(soap, &a->SOAP_ENV__Code);
-	soap_serialize_PointerToSOAP_ENV__Reason(soap, &a->SOAP_ENV__Reason);
-	soap_serialize_string(soap, &a->SOAP_ENV__Node);
-	soap_serialize_string(soap, &a->SOAP_ENV__Role);
-	soap_serialize_PointerToSOAP_ENV__Detail(soap, &a->SOAP_ENV__Detail);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Fault(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Fault *a, const char *type)
-{
-	const char *soap_tmp_faultcode = soap_QName2s(soap, a->faultcode);
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Fault), type))
-		return soap->error;
-	if (soap_out__QName(soap, "faultcode", -1, (char*const*)&soap_tmp_faultcode, ""))
-		return soap->error;
-	if (soap_out_string(soap, "faultstring", -1, &a->faultstring, "xsd:string"))
-		return soap->error;
-	if (soap_out_string(soap, "faultactor", -1, &a->faultactor, "xsd:string"))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Detail(soap, "detail", -1, &a->detail, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Code", -1, &a->SOAP_ENV__Code, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Reason(soap, "SOAP-ENV:Reason", -1, &a->SOAP_ENV__Reason, ""))
-		return soap->error;
-	if (soap_out_string(soap, "SOAP-ENV:Node", -1, &a->SOAP_ENV__Node, ""))
-		return soap->error;
-	if (soap_out_string(soap, "SOAP-ENV:Role", -1, &a->SOAP_ENV__Role, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Detail(soap, "SOAP-ENV:Detail", -1, &a->SOAP_ENV__Detail, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_in_SOAP_ENV__Fault(struct soap *soap, const char *tag, struct SOAP_ENV__Fault *a, const char *type)
-{
-	size_t soap_flag_faultcode = 1;
-	size_t soap_flag_faultstring = 1;
-	size_t soap_flag_faultactor = 1;
-	size_t soap_flag_detail = 1;
-	size_t soap_flag_SOAP_ENV__Code = 1;
-	size_t soap_flag_SOAP_ENV__Reason = 1;
-	size_t soap_flag_SOAP_ENV__Node = 1;
-	size_t soap_flag_SOAP_ENV__Role = 1;
-	size_t soap_flag_SOAP_ENV__Detail = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Fault *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Fault, sizeof(struct SOAP_ENV__Fault), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Fault(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_faultcode && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in__QName(soap, "faultcode", &a->faultcode, ""))
-				{	soap_flag_faultcode--;
-					continue;
-				}
-			if (soap_flag_faultstring && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "faultstring", &a->faultstring, "xsd:string"))
-				{	soap_flag_faultstring--;
-					continue;
-				}
-			if (soap_flag_faultactor && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "faultactor", &a->faultactor, "xsd:string"))
-				{	soap_flag_faultactor--;
-					continue;
-				}
-			if (soap_flag_detail && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Detail(soap, "detail", &a->detail, ""))
-				{	soap_flag_detail--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Code && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Code", &a->SOAP_ENV__Code, ""))
-				{	soap_flag_SOAP_ENV__Code--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Reason && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Reason(soap, "SOAP-ENV:Reason", &a->SOAP_ENV__Reason, ""))
-				{	soap_flag_SOAP_ENV__Reason--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Node && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "SOAP-ENV:Node", &a->SOAP_ENV__Node, "xsd:string"))
-				{	soap_flag_SOAP_ENV__Node--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Role && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "SOAP-ENV:Role", &a->SOAP_ENV__Role, "xsd:string"))
-				{	soap_flag_SOAP_ENV__Role--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Detail && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Detail(soap, "SOAP-ENV:Detail", &a->SOAP_ENV__Detail, ""))
-				{	soap_flag_SOAP_ENV__Detail--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Fault *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Fault, 0, sizeof(struct SOAP_ENV__Fault), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Fault(struct soap *soap, const struct SOAP_ENV__Fault *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Fault);
-	if (soap_out_SOAP_ENV__Fault(soap, tag?tag:"SOAP-ENV:Fault", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_get_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Fault(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Fault * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Fault(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Fault(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Fault, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Fault);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Fault);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Fault[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Fault);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Fault*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Fault(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Fault %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Fault*)p = *(struct SOAP_ENV__Fault*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_string(soap, &a->SOAP_ENV__Text);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Reason(struct soap *soap, const struct SOAP_ENV__Reason *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_string(soap, &a->SOAP_ENV__Text);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Reason(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Reason *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Reason), type))
-		return soap->error;
-	if (soap->lang)
-		soap_set_attr(soap, "xml:lang", soap->lang, 1);
-	if (soap_out_string(soap, "SOAP-ENV:Text", -1, &a->SOAP_ENV__Text, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_in_SOAP_ENV__Reason(struct soap *soap, const char *tag, struct SOAP_ENV__Reason *a, const char *type)
-{
-	size_t soap_flag_SOAP_ENV__Text = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Reason *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Reason, sizeof(struct SOAP_ENV__Reason), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Reason(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_SOAP_ENV__Text && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "SOAP-ENV:Text", &a->SOAP_ENV__Text, "xsd:string"))
-				{	soap_flag_SOAP_ENV__Text--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Reason *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Reason, 0, sizeof(struct SOAP_ENV__Reason), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Reason(struct soap *soap, const struct SOAP_ENV__Reason *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Reason);
-	if (soap_out_SOAP_ENV__Reason(soap, tag?tag:"SOAP-ENV:Reason", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_get_SOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Reason(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Reason * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Reason(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Reason(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Reason, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Reason);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Reason);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Reason[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Reason);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Reason*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Reason(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Reason %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Reason*)p = *(struct SOAP_ENV__Reason*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	a->__type = 0;
-	a->fault = NULL;
-	a->__any = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Detail(struct soap *soap, const struct SOAP_ENV__Detail *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_markelement(soap, a->fault, a->__type);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Detail(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Detail *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Detail), type))
-		return soap->error;
-	if (soap_putelement(soap, a->fault, "fault", -1, a->__type))
-		return soap->error;
-	soap_outliteral(soap, "-any", &a->__any, NULL);
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_in_SOAP_ENV__Detail(struct soap *soap, const char *tag, struct SOAP_ENV__Detail *a, const char *type)
-{
-	size_t soap_flag_fault = 1;
-	size_t soap_flag___any = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Detail *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Detail, sizeof(struct SOAP_ENV__Detail), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Detail(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_fault && soap->error == SOAP_TAG_MISMATCH)
-				if ((a->fault = soap_getelement(soap, &a->__type)))
-				{	soap_flag_fault = 0;
-					continue;
-				}
-			if (soap_flag___any && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_inliteral(soap, "-any", &a->__any))
-				{	soap_flag___any--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Detail *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Detail, 0, sizeof(struct SOAP_ENV__Detail), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Detail(struct soap *soap, const struct SOAP_ENV__Detail *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Detail);
-	if (soap_out_SOAP_ENV__Detail(soap, tag?tag:"SOAP-ENV:Detail", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_get_SOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Detail(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Detail * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Detail(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Detail(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Detail, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Detail);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Detail);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Detail[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Detail);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Detail*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Detail(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Detail %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Detail*)p = *(struct SOAP_ENV__Detail*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default__QName(soap, &a->SOAP_ENV__Value);
-	a->SOAP_ENV__Subcode = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Code(struct soap *soap, const struct SOAP_ENV__Code *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize__QName(soap, &a->SOAP_ENV__Value);
-	soap_serialize_PointerToSOAP_ENV__Code(soap, &a->SOAP_ENV__Subcode);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Code(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Code *a, const char *type)
-{
-	const char *soap_tmp_SOAP_ENV__Value = soap_QName2s(soap, a->SOAP_ENV__Value);
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Code), type))
-		return soap->error;
-	if (soap_out__QName(soap, "SOAP-ENV:Value", -1, (char*const*)&soap_tmp_SOAP_ENV__Value, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Subcode", -1, &a->SOAP_ENV__Subcode, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_in_SOAP_ENV__Code(struct soap *soap, const char *tag, struct SOAP_ENV__Code *a, const char *type)
-{
-	size_t soap_flag_SOAP_ENV__Value = 1;
-	size_t soap_flag_SOAP_ENV__Subcode = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Code *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Code, sizeof(struct SOAP_ENV__Code), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Code(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_SOAP_ENV__Value && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in__QName(soap, "SOAP-ENV:Value", &a->SOAP_ENV__Value, ""))
-				{	soap_flag_SOAP_ENV__Value--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Subcode && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Subcode", &a->SOAP_ENV__Subcode, ""))
-				{	soap_flag_SOAP_ENV__Subcode--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Code *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Code, 0, sizeof(struct SOAP_ENV__Code), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Code(struct soap *soap, const struct SOAP_ENV__Code *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Code);
-	if (soap_out_SOAP_ENV__Code(soap, tag?tag:"SOAP-ENV:Code", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_get_SOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Code(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Code * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Code(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Code(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Code, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Code);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Code);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Code[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Code);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Code*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Code(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Code %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Code*)p = *(struct SOAP_ENV__Code*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Header(struct soap *soap, struct SOAP_ENV__Header *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Header(struct soap *soap, const struct SOAP_ENV__Header *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Header(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Header *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Header), type))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_in_SOAP_ENV__Header(struct soap *soap, const char *tag, struct SOAP_ENV__Header *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Header *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Header, sizeof(struct SOAP_ENV__Header), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Header(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Header *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Header, 0, sizeof(struct SOAP_ENV__Header), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Header(struct soap *soap, const struct SOAP_ENV__Header *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Header);
-	if (soap_out_SOAP_ENV__Header(soap, tag?tag:"SOAP-ENV:Header", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_get_SOAP_ENV__Header(struct soap *soap, struct SOAP_ENV__Header *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Header(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Header * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Header(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Header(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Header, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Header);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Header);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Header[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Header);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Header*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Header(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Header %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Header*)p = *(struct SOAP_ENV__Header*)q;
-}
-
-#endif
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Discovery__DiscoverCluster(struct soap *soap, struct KMS_Discovery__DiscoverCluster *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	/* transient _ skipped */
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Discovery__DiscoverCluster(struct soap *soap, const struct KMS_Discovery__DiscoverCluster *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	/* transient _ skipped */
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Discovery__DiscoverCluster(struct soap *soap, const char *tag, int id, const struct KMS_Discovery__DiscoverCluster *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverCluster), type))
-		return soap->error;
-	/* transient _ skipped */
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Discovery__DiscoverCluster * SOAP_FMAC4 soap_in_KMS_Discovery__DiscoverCluster(struct soap *soap, const char *tag, struct KMS_Discovery__DiscoverCluster *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Discovery__DiscoverCluster *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverCluster, sizeof(struct KMS_Discovery__DiscoverCluster), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Discovery__DiscoverCluster(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-		/* transient _ skipped */
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Discovery__DiscoverCluster *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverCluster, 0, sizeof(struct KMS_Discovery__DiscoverCluster), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Discovery__DiscoverCluster(struct soap *soap, const struct KMS_Discovery__DiscoverCluster *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverCluster);
-	if (soap_out_KMS_Discovery__DiscoverCluster(soap, tag?tag:"KMS-Discovery:DiscoverCluster", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Discovery__DiscoverCluster * SOAP_FMAC4 soap_get_KMS_Discovery__DiscoverCluster(struct soap *soap, struct KMS_Discovery__DiscoverCluster *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Discovery__DiscoverCluster(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Discovery__DiscoverCluster * SOAP_FMAC2 soap_instantiate_KMS_Discovery__DiscoverCluster(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Discovery__DiscoverCluster(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverCluster, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Discovery__DiscoverCluster);
-		if (size)
-			*size = sizeof(struct KMS_Discovery__DiscoverCluster);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Discovery__DiscoverCluster[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Discovery__DiscoverCluster);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Discovery__DiscoverCluster*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Discovery__DiscoverCluster(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Discovery__DiscoverCluster %p -> %p\n", q, p));
-	*(struct KMS_Discovery__DiscoverCluster*)p = *(struct KMS_Discovery__DiscoverCluster*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Discovery__DiscoverClusterResponse(struct soap *soap, struct KMS_Discovery__DiscoverClusterResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__string(soap, &a->EntitySiteID);
-	soap_default_KMS_Discovery__ArrayOfClusterMembers(soap, &a->ArrayOfClusterMembers);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Discovery__DiscoverClusterResponse(struct soap *soap, const struct KMS_Discovery__DiscoverClusterResponse *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->EntitySiteID);
-	soap_serialize_KMS_Discovery__ArrayOfClusterMembers(soap, &a->ArrayOfClusterMembers);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Discovery__DiscoverClusterResponse(struct soap *soap, const char *tag, int id, const struct KMS_Discovery__DiscoverClusterResponse *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverClusterResponse), type))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "EntitySiteID", -1, &a->EntitySiteID, "xsd:string"))
-		return soap->error;
-	if (soap_out_KMS_Discovery__ArrayOfClusterMembers(soap, "ArrayOfClusterMembers", -1, &a->ArrayOfClusterMembers, "KMS-Discovery:ArrayOfClusterMembers"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Discovery__DiscoverClusterResponse * SOAP_FMAC4 soap_in_KMS_Discovery__DiscoverClusterResponse(struct soap *soap, const char *tag, struct KMS_Discovery__DiscoverClusterResponse *a, const char *type)
-{
-	size_t soap_flag_EntitySiteID = 1;
-	size_t soap_flag_ArrayOfClusterMembers = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Discovery__DiscoverClusterResponse *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverClusterResponse, sizeof(struct KMS_Discovery__DiscoverClusterResponse), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Discovery__DiscoverClusterResponse(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_EntitySiteID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "EntitySiteID", &a->EntitySiteID, "xsd:string"))
-				{	soap_flag_EntitySiteID--;
-					continue;
-				}
-			if (soap_flag_ArrayOfClusterMembers && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_KMS_Discovery__ArrayOfClusterMembers(soap, "ArrayOfClusterMembers", &a->ArrayOfClusterMembers, "KMS-Discovery:ArrayOfClusterMembers"))
-				{	soap_flag_ArrayOfClusterMembers--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Discovery__DiscoverClusterResponse *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverClusterResponse, 0, sizeof(struct KMS_Discovery__DiscoverClusterResponse), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Discovery__DiscoverClusterResponse(struct soap *soap, const struct KMS_Discovery__DiscoverClusterResponse *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverClusterResponse);
-	if (soap_out_KMS_Discovery__DiscoverClusterResponse(soap, tag?tag:"KMS-Discovery:DiscoverClusterResponse", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Discovery__DiscoverClusterResponse * SOAP_FMAC4 soap_get_KMS_Discovery__DiscoverClusterResponse(struct soap *soap, struct KMS_Discovery__DiscoverClusterResponse *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Discovery__DiscoverClusterResponse(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Discovery__DiscoverClusterResponse * SOAP_FMAC2 soap_instantiate_KMS_Discovery__DiscoverClusterResponse(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Discovery__DiscoverClusterResponse(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverClusterResponse, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Discovery__DiscoverClusterResponse);
-		if (size)
-			*size = sizeof(struct KMS_Discovery__DiscoverClusterResponse);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Discovery__DiscoverClusterResponse[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Discovery__DiscoverClusterResponse);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Discovery__DiscoverClusterResponse*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Discovery__DiscoverClusterResponse(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Discovery__DiscoverClusterResponse %p -> %p\n", q, p));
-	*(struct KMS_Discovery__DiscoverClusterResponse*)p = *(struct KMS_Discovery__DiscoverClusterResponse*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Discovery__ArrayOfClusterMembers(struct soap *soap, struct KMS_Discovery__ArrayOfClusterMembers *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-	a->__size = 0;
-	a->__ptr = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Discovery__ArrayOfClusterMembers(struct soap *soap, struct KMS_Discovery__ArrayOfClusterMembers const*a)
-{
-	int i;
-	if (a->__ptr && !soap_array_reference(soap, a, (struct soap_array*)&a->__ptr, 1, SOAP_TYPE_KMS_Discovery_KMS_Discovery__ArrayOfClusterMembers))
-		for (i = 0; i < a->__size; i++)
-		{	soap_embedded(soap, a->__ptr + i, SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember);
-			soap_serialize_KMS_Discovery_ClusterMember(soap, a->__ptr + i);
-		}
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Discovery__ArrayOfClusterMembers(struct soap *soap, const char *tag, int id, const struct KMS_Discovery__ArrayOfClusterMembers *a, const char *type)
-{
-	int i, n = a->__size;
-	id = soap_element_id(soap, tag, id, a, (struct soap_array*)&a->__ptr, 1, type, SOAP_TYPE_KMS_Discovery_KMS_Discovery__ArrayOfClusterMembers);
-	if (id < 0)
-		return soap->error;
-	if (soap_element_begin_out(soap, tag, id, type))
-		return soap->error;
-	for (i = 0; i < n; i++)
-	{
-		soap_out_KMS_Discovery_ClusterMember(soap, "item", -1, &a->__ptr[i], "KMS-Discovery-ClusterMember");
-	}
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Discovery__ArrayOfClusterMembers * SOAP_FMAC4 soap_in_KMS_Discovery__ArrayOfClusterMembers(struct soap *soap, const char *tag, struct KMS_Discovery__ArrayOfClusterMembers *a, const char *type)
-{	int i, j;
-	struct KMS_Discovery_ClusterMember *p;
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (*soap->type && soap_match_array(soap, "KMS-Discovery-ClusterMember") && soap_match_tag(soap, soap->type, type))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (struct KMS_Discovery__ArrayOfClusterMembers *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Discovery_KMS_Discovery__ArrayOfClusterMembers, sizeof(struct KMS_Discovery__ArrayOfClusterMembers), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Discovery__ArrayOfClusterMembers(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		a->__size = soap_getsize(soap->arraySize, soap->arrayOffset, &j);
-		if (a->__size >= 0)
-		{	a->__ptr = (struct KMS_Discovery_ClusterMember *)soap_malloc(soap, sizeof(struct KMS_Discovery_ClusterMember) * a->__size);
-			for (i = 0; i < a->__size; i++)
-				soap_default_KMS_Discovery_ClusterMember(soap, a->__ptr+i);
-			for (i = 0; i < a->__size; i++)
-			{	soap_peek_element(soap);
-				if (soap->position)
-				{	i = soap->positions[0]-j;
-					if (i < 0 || i >= a->__size)
-					{	soap->error = SOAP_IOB;
-						return NULL;
-					}
-				}
-				if (!soap_in_KMS_Discovery_ClusterMember(soap, NULL, a->__ptr + i, "KMS-Discovery-ClusterMember"))
-				{	if (soap->error != SOAP_NO_TAG)
-						return NULL;
-					soap->error = SOAP_OK;
-					break;
-				}
-			}
-		}
-		else
-		{	if (soap_new_block(soap) == NULL)
-				return NULL;
-			for (a->__size = 0; ; a->__size++)
-			{	p = (struct KMS_Discovery_ClusterMember *)soap_push_block(soap, NULL, sizeof(struct KMS_Discovery_ClusterMember));
-				if (!p)
-					return NULL;
-				soap_default_KMS_Discovery_ClusterMember(soap, p);
-				if (!soap_in_KMS_Discovery_ClusterMember(soap, NULL, p, "KMS-Discovery-ClusterMember"))
-				{	if (soap->error != SOAP_NO_TAG)
-						return NULL;
-					soap->error = SOAP_OK;
-					break;
-				}
-			}
-			soap_pop_block(soap, NULL);
-			a->__ptr = (struct KMS_Discovery_ClusterMember *)soap_malloc(soap, soap->blist->size);
-			soap_save_block(soap, NULL, (char*)a->__ptr, 1);
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Discovery__ArrayOfClusterMembers *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Discovery_KMS_Discovery__ArrayOfClusterMembers, 0, sizeof(struct KMS_Discovery__ArrayOfClusterMembers), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Discovery__ArrayOfClusterMembers(struct soap *soap, const struct KMS_Discovery__ArrayOfClusterMembers *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, (struct soap_array*)&a->__ptr, 1, tag, SOAP_TYPE_KMS_Discovery_KMS_Discovery__ArrayOfClusterMembers);
-	if (soap_out_KMS_Discovery__ArrayOfClusterMembers(soap, tag?tag:"SOAP-ENC:Array", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Discovery__ArrayOfClusterMembers * SOAP_FMAC4 soap_get_KMS_Discovery__ArrayOfClusterMembers(struct soap *soap, struct KMS_Discovery__ArrayOfClusterMembers *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Discovery__ArrayOfClusterMembers(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Discovery__ArrayOfClusterMembers * SOAP_FMAC2 soap_instantiate_KMS_Discovery__ArrayOfClusterMembers(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Discovery__ArrayOfClusterMembers(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Discovery_KMS_Discovery__ArrayOfClusterMembers, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Discovery__ArrayOfClusterMembers);
-		if (size)
-			*size = sizeof(struct KMS_Discovery__ArrayOfClusterMembers);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Discovery__ArrayOfClusterMembers[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Discovery__ArrayOfClusterMembers);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Discovery__ArrayOfClusterMembers*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Discovery__ArrayOfClusterMembers(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Discovery__ArrayOfClusterMembers %p -> %p\n", q, p));
-	*(struct KMS_Discovery__ArrayOfClusterMembers*)p = *(struct KMS_Discovery__ArrayOfClusterMembers*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Discovery_ClusterMember(struct soap *soap, struct KMS_Discovery_ClusterMember *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_xsd__long(soap, &a->KMAID);
-	soap_default_xsd__string(soap, &a->KMAName);
-	soap_default_xsd__string(soap, &a->KMASiteID);
-	soap_default_xsd__string(soap, &a->KMAHostName);
-	soap_default_xsd__string(soap, &a->KMANetworkAddress);
-	soap_default_xsd__boolean(soap, &a->Enabled);
-	soap_default_xsd__int(soap, &a->Load);
-	soap_default_xsd__boolean(soap, &a->Responding);
-	a->KMAVersion = (char *)"";
-	a->KMAHostNameIPv6 = (char *)"";
-	a->KMANetworkAddressIPv6 = (char *)"";
-	a->KMS_Discovery__Locked = (bool)0;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Discovery_ClusterMember(struct soap *soap, const struct KMS_Discovery_ClusterMember *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_xsd__string(soap, &a->KMAName);
-	soap_serialize_xsd__string(soap, &a->KMASiteID);
-	soap_serialize_xsd__string(soap, &a->KMAHostName);
-	soap_serialize_xsd__string(soap, &a->KMANetworkAddress);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Discovery_ClusterMember(struct soap *soap, const char *tag, int id, const struct KMS_Discovery_ClusterMember *a, const char *type)
-{
-	if (a->KMAVersion)
-		soap_set_attr(soap, "KMAVersion", a->KMAVersion, 1);
-	if (a->KMAHostNameIPv6)
-		soap_set_attr(soap, "KMAHostNameIPv6", a->KMAHostNameIPv6, 1);
-	if (a->KMANetworkAddressIPv6)
-		soap_set_attr(soap, "KMANetworkAddressIPv6", a->KMANetworkAddressIPv6, 1);
-	soap_set_attr(soap, "KMS-Discovery:Locked", soap_xsd__boolean2s(soap, a->KMS_Discovery__Locked), 1);
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember), type))
-		return soap->error;
-	if (soap_out_xsd__long(soap, "KMAID", -1, &a->KMAID, "xsd:long"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KMAName", -1, &a->KMAName, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KMASiteID", -1, &a->KMASiteID, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KMAHostName", -1, &a->KMAHostName, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__string(soap, "KMANetworkAddress", -1, &a->KMANetworkAddress, "xsd:string"))
-		return soap->error;
-	if (soap_out_xsd__boolean(soap, "Enabled", -1, &a->Enabled, "xsd:boolean"))
-		return soap->error;
-	if (soap_out_xsd__int(soap, "Load", -1, &a->Load, "xsd:int"))
-		return soap->error;
-	if (soap_out_xsd__boolean(soap, "Responding", -1, &a->Responding, "xsd:boolean"))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct KMS_Discovery_ClusterMember * SOAP_FMAC4 soap_in_KMS_Discovery_ClusterMember(struct soap *soap, const char *tag, struct KMS_Discovery_ClusterMember *a, const char *type)
-{
-	size_t soap_flag_KMAID = 1;
-	size_t soap_flag_KMAName = 1;
-	size_t soap_flag_KMASiteID = 1;
-	size_t soap_flag_KMAHostName = 1;
-	size_t soap_flag_KMANetworkAddress = 1;
-	size_t soap_flag_Enabled = 1;
-	size_t soap_flag_Load = 1;
-	size_t soap_flag_Responding = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct KMS_Discovery_ClusterMember *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember, sizeof(struct KMS_Discovery_ClusterMember), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_KMS_Discovery_ClusterMember(soap, a);
-	if (soap_s2string(soap, soap_attr_value(soap, "KMAVersion", 0), &a->KMAVersion, -1, -1))
-		return NULL;
-	if (soap_s2string(soap, soap_attr_value(soap, "KMAHostNameIPv6", 0), &a->KMAHostNameIPv6, -1, -1))
-		return NULL;
-	if (soap_s2string(soap, soap_attr_value(soap, "KMANetworkAddressIPv6", 0), &a->KMANetworkAddressIPv6, -1, -1))
-		return NULL;
-	if (soap_s2xsd__boolean(soap, soap_attr_value(soap, "KMS-Discovery:Locked", 0), &a->KMS_Discovery__Locked))
-		return NULL;
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_KMAID && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__long(soap, "KMAID", &a->KMAID, "xsd:long"))
-				{	soap_flag_KMAID--;
-					continue;
-				}
-			if (soap_flag_KMAName && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KMAName", &a->KMAName, "xsd:string"))
-				{	soap_flag_KMAName--;
-					continue;
-				}
-			if (soap_flag_KMASiteID && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KMASiteID", &a->KMASiteID, "xsd:string"))
-				{	soap_flag_KMASiteID--;
-					continue;
-				}
-			if (soap_flag_KMAHostName && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KMAHostName", &a->KMAHostName, "xsd:string"))
-				{	soap_flag_KMAHostName--;
-					continue;
-				}
-			if (soap_flag_KMANetworkAddress && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_xsd__string(soap, "KMANetworkAddress", &a->KMANetworkAddress, "xsd:string"))
-				{	soap_flag_KMANetworkAddress--;
-					continue;
-				}
-			if (soap_flag_Enabled && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__boolean(soap, "Enabled", &a->Enabled, "xsd:boolean"))
-				{	soap_flag_Enabled--;
-					continue;
-				}
-			if (soap_flag_Load && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__int(soap, "Load", &a->Load, "xsd:int"))
-				{	soap_flag_Load--;
-					continue;
-				}
-			if (soap_flag_Responding && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_xsd__boolean(soap, "Responding", &a->Responding, "xsd:boolean"))
-				{	soap_flag_Responding--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Discovery_ClusterMember *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember, 0, sizeof(struct KMS_Discovery_ClusterMember), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	if ((soap->mode & SOAP_XML_STRICT) && (soap_flag_KMAID > 0 || soap_flag_Enabled > 0 || soap_flag_Load > 0 || soap_flag_Responding > 0))
-	{	soap->error = SOAP_OCCURS;
-		return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Discovery_ClusterMember(struct soap *soap, const struct KMS_Discovery_ClusterMember *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember);
-	if (soap_out_KMS_Discovery_ClusterMember(soap, tag?tag:"KMS-Discovery-ClusterMember", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Discovery_ClusterMember * SOAP_FMAC4 soap_get_KMS_Discovery_ClusterMember(struct soap *soap, struct KMS_Discovery_ClusterMember *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_KMS_Discovery_ClusterMember(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct KMS_Discovery_ClusterMember * SOAP_FMAC2 soap_instantiate_KMS_Discovery_ClusterMember(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_KMS_Discovery_ClusterMember(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Discovery_ClusterMember);
-		if (size)
-			*size = sizeof(struct KMS_Discovery_ClusterMember);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct KMS_Discovery_ClusterMember[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct KMS_Discovery_ClusterMember);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct KMS_Discovery_ClusterMember*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Discovery_ClusterMember(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct KMS_Discovery_ClusterMember %p -> %p\n", q, p));
-	*(struct KMS_Discovery_ClusterMember*)p = *(struct KMS_Discovery_ClusterMember*)q;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_xsd__hexBinary(struct soap *soap, struct xsd__hexBinary *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-	a->__size = 0;
-	a->__ptr = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__hexBinary(struct soap *soap, struct xsd__hexBinary const*a)
-{
-	if (a->__ptr)
-		soap_array_reference(soap, a, (struct soap_array*)&a->__ptr, 1, SOAP_TYPE_KMS_Discovery_xsd__hexBinary);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__hexBinary(struct soap *soap, const char *tag, int id, const struct xsd__hexBinary *a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, a, (struct soap_array*)&a->__ptr, 1, type, SOAP_TYPE_KMS_Discovery_xsd__hexBinary);
-	if (id < 0)
-		return soap->error;
-	if (soap_element_begin_out(soap, tag, id, type))
-		return soap->error;
-	if (soap_puthex(soap, a->__ptr, a->__size))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct xsd__hexBinary * SOAP_FMAC4 soap_in_xsd__hexBinary(struct soap *soap, const char *tag, struct xsd__hexBinary *a, const char *type)
-{
-	(void)type; /* appease -Wall -Werror */
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (*soap->type && soap_match_tag(soap, soap->type, type) && soap_match_tag(soap, soap->type, ":hexBinary"))
-	{	soap->error = SOAP_TYPE;
-		return NULL;
-	}
-	a = (struct xsd__hexBinary *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_KMS_Discovery_xsd__hexBinary, sizeof(struct xsd__hexBinary), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_xsd__hexBinary(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		a->__ptr = soap_gethex(soap, &a->__size);
-		if ((!a->__ptr && soap->error) || soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct xsd__hexBinary *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_KMS_Discovery_xsd__hexBinary, 0, sizeof(struct xsd__hexBinary), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__hexBinary(struct soap *soap, const struct xsd__hexBinary *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, (struct soap_array*)&a->__ptr, 1, tag, SOAP_TYPE_KMS_Discovery_xsd__hexBinary);
-	if (soap_out_xsd__hexBinary(soap, tag?tag:"SOAP-ENC:Array", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct xsd__hexBinary * SOAP_FMAC4 soap_get_xsd__hexBinary(struct soap *soap, struct xsd__hexBinary *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__hexBinary(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct xsd__hexBinary * SOAP_FMAC2 soap_instantiate_xsd__hexBinary(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_xsd__hexBinary(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_KMS_Discovery_xsd__hexBinary, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct xsd__hexBinary);
-		if (size)
-			*size = sizeof(struct xsd__hexBinary);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct xsd__hexBinary[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct xsd__hexBinary);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct xsd__hexBinary*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__hexBinary(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct xsd__hexBinary %p -> %p\n", q, p));
-	*(struct xsd__hexBinary*)p = *(struct xsd__hexBinary*)q;
-}
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Reason))
-		soap_serialize_SOAP_ENV__Reason(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Reason(struct soap *soap, const char *tag, int id, struct SOAP_ENV__Reason *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Reason);
-	if (id < 0)
-		return soap->error;
-	return soap_out_SOAP_ENV__Reason(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Reason(struct soap *soap, const char *tag, struct SOAP_ENV__Reason **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct SOAP_ENV__Reason **)soap_malloc(soap, sizeof(struct SOAP_ENV__Reason *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_SOAP_ENV__Reason(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Reason **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Reason, sizeof(struct SOAP_ENV__Reason), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_PointerToSOAP_ENV__Reason);
-	if (soap_out_PointerToSOAP_ENV__Reason(soap, tag?tag:"SOAP-ENV:Reason", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToSOAP_ENV__Reason(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Detail))
-		soap_serialize_SOAP_ENV__Detail(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Detail(struct soap *soap, const char *tag, int id, struct SOAP_ENV__Detail *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Detail);
-	if (id < 0)
-		return soap->error;
-	return soap_out_SOAP_ENV__Detail(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Detail(struct soap *soap, const char *tag, struct SOAP_ENV__Detail **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct SOAP_ENV__Detail **)soap_malloc(soap, sizeof(struct SOAP_ENV__Detail *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_SOAP_ENV__Detail(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Detail **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Detail, sizeof(struct SOAP_ENV__Detail), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_PointerToSOAP_ENV__Detail);
-	if (soap_out_PointerToSOAP_ENV__Detail(soap, tag?tag:"SOAP-ENV:Detail", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToSOAP_ENV__Detail(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Code))
-		soap_serialize_SOAP_ENV__Code(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Code(struct soap *soap, const char *tag, int id, struct SOAP_ENV__Code *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Code);
-	if (id < 0)
-		return soap->error;
-	return soap_out_SOAP_ENV__Code(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Code(struct soap *soap, const char *tag, struct SOAP_ENV__Code **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct SOAP_ENV__Code **)soap_malloc(soap, sizeof(struct SOAP_ENV__Code *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_SOAP_ENV__Code(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Code **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Discovery_SOAP_ENV__Code, sizeof(struct SOAP_ENV__Code), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_PointerToSOAP_ENV__Code);
-	if (soap_out_PointerToSOAP_ENV__Code(soap, tag?tag:"SOAP-ENV:Code", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToSOAP_ENV__Code(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#endif
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToKMS_Discovery_ClusterMember(struct soap *soap, struct KMS_Discovery_ClusterMember *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember))
-		soap_serialize_KMS_Discovery_ClusterMember(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToKMS_Discovery_ClusterMember(struct soap *soap, const char *tag, int id, struct KMS_Discovery_ClusterMember *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember);
-	if (id < 0)
-		return soap->error;
-	return soap_out_KMS_Discovery_ClusterMember(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct KMS_Discovery_ClusterMember ** SOAP_FMAC4 soap_in_PointerToKMS_Discovery_ClusterMember(struct soap *soap, const char *tag, struct KMS_Discovery_ClusterMember **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct KMS_Discovery_ClusterMember **)soap_malloc(soap, sizeof(struct KMS_Discovery_ClusterMember *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_KMS_Discovery_ClusterMember(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct KMS_Discovery_ClusterMember **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember, sizeof(struct KMS_Discovery_ClusterMember), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToKMS_Discovery_ClusterMember(struct soap *soap, struct KMS_Discovery_ClusterMember *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_PointerToKMS_Discovery_ClusterMember);
-	if (soap_out_PointerToKMS_Discovery_ClusterMember(soap, tag?tag:"KMS-Discovery-ClusterMember", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct KMS_Discovery_ClusterMember ** SOAP_FMAC4 soap_get_PointerToKMS_Discovery_ClusterMember(struct soap *soap, struct KMS_Discovery_ClusterMember **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToKMS_Discovery_ClusterMember(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTounsignedByte(struct soap *soap, unsigned char *const*a)
-{
-	soap_reference(soap, *a, SOAP_TYPE_KMS_Discovery_unsignedByte);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTounsignedByte(struct soap *soap, const char *tag, int id, unsigned char *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_KMS_Discovery_unsignedByte);
-	if (id < 0)
-		return soap->error;
-	return soap_out_unsignedByte(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_in_PointerTounsignedByte(struct soap *soap, const char *tag, unsigned char **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (unsigned char **)soap_malloc(soap, sizeof(unsigned char *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_unsignedByte(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (unsigned char **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_KMS_Discovery_unsignedByte, sizeof(unsigned char), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTounsignedByte(struct soap *soap, unsigned char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_PointerTounsignedByte);
-	if (soap_out_PointerTounsignedByte(soap, tag?tag:"unsignedByte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_get_PointerTounsignedByte(struct soap *soap, unsigned char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerTounsignedByte(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__networkAddress(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery_xsd__networkAddress);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__networkAddress(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Discovery_xsd__networkAddress, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__networkAddress(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_xsd__networkAddress);
-	if (soap_out_xsd__networkAddress(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__networkAddress(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__networkAddress(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__kmaVersion(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery_xsd__kmaVersion);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__kmaVersion(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Discovery_xsd__kmaVersion, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__kmaVersion(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_xsd__kmaVersion);
-	if (soap_out_xsd__kmaVersion(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__kmaVersion(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__kmaVersion(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__duration(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery_xsd__duration);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__duration(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Discovery_xsd__duration, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__duration(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_xsd__duration);
-	if (soap_out_xsd__duration(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__duration(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__duration(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__dateTime(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery_xsd__dateTime);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__dateTime(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Discovery_xsd__dateTime, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__dateTime(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_xsd__dateTime);
-	if (soap_out_xsd__dateTime(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__dateTime(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__dateTime(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__string(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery_xsd__string);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__string(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Discovery_xsd__string, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__string(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_xsd__string);
-	if (soap_out_xsd__string(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__string(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_xsd__string(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out__QName(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery__QName);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in__QName(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Discovery__QName, 2, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put__QName(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery__QName);
-	if (soap_out__QName(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get__QName(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in__QName(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_string(struct soap *soap, char **a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_string
-	*a = SOAP_DEFAULT_string;
-#else
-	*a = (char *)0;
-#endif
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_string(struct soap *soap, char *const*a)
-{
-	soap_reference(soap, *a, SOAP_TYPE_KMS_Discovery_string);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_string(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_KMS_Discovery_string);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_string(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_KMS_Discovery_string, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_string(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_KMS_Discovery_string);
-	if (soap_out_string(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_string(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-} // namespace KMS_Discovery
-
-
-#if defined(__BORLANDC__)
-#pragma option pop
-#pragma option pop
-#endif
-
-/* End of KMS_DiscoveryC.cpp */
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_DiscoveryClient.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* KMS_DiscoveryClient.cpp
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/DiscoveryService/KMS_Discovery_SOAP.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#if defined(__BORLANDC__)
-#pragma option push -w-8060
-#pragma option push -w-8004
-#endif
-#include "KMS_DiscoveryH.h"
-
-namespace KMS_Discovery {
-
-SOAP_SOURCE_STAMP("@(#) KMS_DiscoveryClient.cpp ver 2.7.17 2010-06-08 19:16:38 GMT")
-
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Discovery__DiscoverCluster(struct soap *soap, const char *soap_endpoint, const char *soap_action, void *_, struct KMS_Discovery__DiscoverClusterResponse &result)
-{	struct KMS_Discovery__DiscoverCluster soap_tmp_KMS_Discovery__DiscoverCluster;
-	soap_tmp_KMS_Discovery__DiscoverCluster._ = _;
-	soap_begin(soap);
-	soap_serializeheader(soap);
-	soap_serialize_KMS_Discovery__DiscoverCluster(soap, &soap_tmp_KMS_Discovery__DiscoverCluster);
-	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_KMS_Discovery__DiscoverCluster(soap, &soap_tmp_KMS_Discovery__DiscoverCluster, "KMS-Discovery:DiscoverCluster", NULL)
-		 || soap_body_end_out(soap)
-		 || soap_envelope_end_out(soap))
-			 return soap->error;
-	}
-	if (soap_end_count(soap))
-		return soap->error;
-	if (soap_connect(soap, soap_endpoint, soap_action)
-	 || soap_envelope_begin_out(soap)
-	 || soap_putheader(soap)
-	 || soap_body_begin_out(soap)
-	 || soap_put_KMS_Discovery__DiscoverCluster(soap, &soap_tmp_KMS_Discovery__DiscoverCluster, "KMS-Discovery:DiscoverCluster", NULL)
-	 || soap_body_end_out(soap)
-	 || soap_envelope_end_out(soap)
-	 || soap_end_send(soap))
-		return soap_closesock(soap);
-	if (!&result)
-		return soap_closesock(soap);
-	soap_default_KMS_Discovery__DiscoverClusterResponse(soap, &result);
-	if (soap_begin_recv(soap)
-	 || soap_envelope_begin_in(soap)
-	 || soap_recv_header(soap)
-	 || soap_body_begin_in(soap))
-		return soap_closesock(soap);
-	if (soap_recv_fault(soap, 1))
-		return soap->error;
-	soap_get_KMS_Discovery__DiscoverClusterResponse(soap, &result, "", "");
-	if (soap->error)
-		return soap_recv_fault(soap, 0);
-	if (soap_body_end_in(soap)
-	 || soap_envelope_end_in(soap)
-	 || soap_end_recv(soap))
-		return soap_closesock(soap);
-	return soap_closesock(soap);
-}
-
-} // namespace KMS_Discovery
-
-
-#if defined(__BORLANDC__)
-#pragma option pop
-#pragma option pop
-#endif
-
-/* End of KMS_DiscoveryClient.cpp */
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_DiscoveryH.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,757 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* KMS_DiscoveryH.h
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/DiscoveryService/KMS_Discovery_SOAP.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#ifndef KMS_DiscoveryH_H
-#define KMS_DiscoveryH_H
-#include "KMS_DiscoveryStub.h"
-
-namespace KMS_Discovery {
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap*, const void*, int);
-SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap*, const void*, const char*, int, int);
-SOAP_FMAC3 void *SOAP_FMAC4 soap_getelement(struct soap*, int*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_putindependent(struct soap*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_getindependent(struct soap*);
-#endif
-SOAP_FMAC3 int SOAP_FMAC4 soap_ignore_element(struct soap*);
-
-SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_fdelete(struct soap_clist*);
-SOAP_FMAC3 void* SOAP_FMAC4 soap_class_id_enter(struct soap*, const char*, void*, int, size_t, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_byte
-#define SOAP_TYPE_KMS_Discovery_byte (3)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_byte(struct soap*, char *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_byte(struct soap*, const char*, int, const char *, const char*);
-SOAP_FMAC3 char * SOAP_FMAC4 soap_in_byte(struct soap*, const char*, char *, const char*);
-
-#define soap_write_byte(soap, data) ( soap_begin_send(soap) || KMS_Discovery::soap_put_byte(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_byte(struct soap*, const char *, const char*, const char*);
-
-#define soap_read_byte(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_byte(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char * SOAP_FMAC4 soap_get_byte(struct soap*, char *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_int
-#define SOAP_TYPE_KMS_Discovery_int (1)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_int(struct soap*, int *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_int(struct soap*, const char*, int, const int *, const char*);
-SOAP_FMAC3 int * SOAP_FMAC4 soap_in_int(struct soap*, const char*, int *, const char*);
-
-#define soap_write_int(soap, data) ( soap_begin_send(soap) || KMS_Discovery::soap_put_int(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_int(struct soap*, const int *, const char*, const char*);
-
-#define soap_read_int(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_int(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 int * SOAP_FMAC4 soap_get_int(struct soap*, int *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__int
-#define SOAP_TYPE_KMS_Discovery_xsd__int (11)
-#endif
-
-#define soap_default_xsd__int(soap, a) soap_default_long(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__int(struct soap*, const char*, int, const long *, const char*);
-SOAP_FMAC3 long * SOAP_FMAC4 soap_in_xsd__int(struct soap*, const char*, long *, const char*);
-
-#define soap_write_xsd__int(soap, data) ( soap_begin_send(soap) || KMS_Discovery::soap_put_xsd__int(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__int(struct soap*, const long *, const char*, const char*);
-
-#define soap_read_xsd__int(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_xsd__int(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_get_xsd__int(struct soap*, long *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_long
-#define SOAP_TYPE_KMS_Discovery_long (10)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_long(struct soap*, long *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_long(struct soap*, const char*, int, const long *, const char*);
-SOAP_FMAC3 long * SOAP_FMAC4 soap_in_long(struct soap*, const char*, long *, const char*);
-
-#define soap_write_long(soap, data) ( soap_begin_send(soap) || KMS_Discovery::soap_put_long(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_long(struct soap*, const long *, const char*, const char*);
-
-#define soap_read_long(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_long(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 long * SOAP_FMAC4 soap_get_long(struct soap*, long *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__long
-#define SOAP_TYPE_KMS_Discovery_xsd__long (15)
-#endif
-
-#define soap_default_xsd__long(soap, a) soap_default_LONG64(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__long(struct soap*, const char*, int, const LONG64 *, const char*);
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_in_xsd__long(struct soap*, const char*, LONG64 *, const char*);
-
-#define soap_write_xsd__long(soap, data) ( soap_begin_send(soap) || KMS_Discovery::soap_put_xsd__long(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__long(struct soap*, const LONG64 *, const char*, const char*);
-
-#define soap_read_xsd__long(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_xsd__long(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_xsd__long(struct soap*, LONG64 *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_LONG64
-#define SOAP_TYPE_KMS_Discovery_LONG64 (14)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_LONG64(struct soap*, LONG64 *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_LONG64(struct soap*, const char*, int, const LONG64 *, const char*);
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_in_LONG64(struct soap*, const char*, LONG64 *, const char*);
-
-#define soap_write_LONG64(soap, data) ( soap_begin_send(soap) || KMS_Discovery::soap_put_LONG64(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_LONG64(struct soap*, const LONG64 *, const char*, const char*);
-
-#define soap_read_LONG64(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_LONG64(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 LONG64 * SOAP_FMAC4 soap_get_LONG64(struct soap*, LONG64 *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__float
-#define SOAP_TYPE_KMS_Discovery_xsd__float (9)
-#endif
-
-#define soap_default_xsd__float(soap, a) soap_default_float(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__float(struct soap*, const char*, int, const float *, const char*);
-SOAP_FMAC3 float * SOAP_FMAC4 soap_in_xsd__float(struct soap*, const char*, float *, const char*);
-
-#define soap_write_xsd__float(soap, data) ( soap_begin_send(soap) || KMS_Discovery::soap_put_xsd__float(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__float(struct soap*, const float *, const char*, const char*);
-
-#define soap_read_xsd__float(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_xsd__float(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_get_xsd__float(struct soap*, float *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_float
-#define SOAP_TYPE_KMS_Discovery_float (8)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_float(struct soap*, float *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_float(struct soap*, const char*, int, const float *, const char*);
-SOAP_FMAC3 float * SOAP_FMAC4 soap_in_float(struct soap*, const char*, float *, const char*);
-
-#define soap_write_float(soap, data) ( soap_begin_send(soap) || KMS_Discovery::soap_put_float(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_float(struct soap*, const float *, const char*, const char*);
-
-#define soap_read_float(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_float(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 float * SOAP_FMAC4 soap_get_float(struct soap*, float *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_unsignedByte
-#define SOAP_TYPE_KMS_Discovery_unsignedByte (22)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedByte(struct soap*, unsigned char *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedByte(struct soap*, const char*, int, const unsigned char *, const char*);
-SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_in_unsignedByte(struct soap*, const char*, unsigned char *, const char*);
-
-#define soap_write_unsignedByte(soap, data) ( soap_begin_send(soap) || KMS_Discovery::soap_put_unsignedByte(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedByte(struct soap*, const unsigned char *, const char*, const char*);
-
-#define soap_read_unsignedByte(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_unsignedByte(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 unsigned char * SOAP_FMAC4 soap_get_unsignedByte(struct soap*, unsigned char *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_unsignedInt
-#define SOAP_TYPE_KMS_Discovery_unsignedInt (21)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_unsignedInt(struct soap*, unsigned int *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_unsignedInt(struct soap*, const char*, int, const unsigned int *, const char*);
-SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_in_unsignedInt(struct soap*, const char*, unsigned int *, const char*);
-
-#define soap_write_unsignedInt(soap, data) ( soap_begin_send(soap) || KMS_Discovery::soap_put_unsignedInt(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_unsignedInt(struct soap*, const unsigned int *, const char*, const char*);
-
-#define soap_read_unsignedInt(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_unsignedInt(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 unsigned int * SOAP_FMAC4 soap_get_unsignedInt(struct soap*, unsigned int *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__boolean
-#define SOAP_TYPE_KMS_Discovery_xsd__boolean (13)
-#endif
-
-#define soap_default_xsd__boolean(soap, a) soap_default_bool(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__boolean(struct soap*, const char*, int, const bool *, const char*);
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_xsd__boolean2s(struct soap*, bool);
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_xsd__boolean(struct soap*, const char*, bool *, const char*);
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2xsd__boolean(struct soap*, const char*, bool *);
-
-#define soap_write_xsd__boolean(soap, data) ( soap_begin_send(soap) || KMS_Discovery::soap_put_xsd__boolean(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__boolean(struct soap*, const bool *, const char*, const char*);
-
-#define soap_read_xsd__boolean(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_xsd__boolean(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_xsd__boolean(struct soap*, bool *, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_bool
-#define SOAP_TYPE_KMS_Discovery_bool (12)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_bool(struct soap*, bool *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_bool(struct soap*, const char*, int, const bool *, const char*);
-
-SOAP_FMAC3S const char* SOAP_FMAC4S soap_bool2s(struct soap*, bool);
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_in_bool(struct soap*, const char*, bool *, const char*);
-
-SOAP_FMAC3S int SOAP_FMAC4S soap_s2bool(struct soap*, const char*, bool *);
-
-#define soap_write_bool(soap, data) ( soap_begin_send(soap) || KMS_Discovery::soap_put_bool(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_bool(struct soap*, const bool *, const char*, const char*);
-
-#define soap_read_bool(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_bool(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 bool * SOAP_FMAC4 soap_get_bool(struct soap*, bool *, const char*, const char*);
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Discovery_SOAP_ENV__Fault
-#define SOAP_TYPE_KMS_Discovery_SOAP_ENV__Fault (38)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Fault(struct soap*, struct SOAP_ENV__Fault *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Fault(struct soap*, const struct SOAP_ENV__Fault *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Fault(struct soap*, const char*, int, const struct SOAP_ENV__Fault *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_in_SOAP_ENV__Fault(struct soap*, const char*, struct SOAP_ENV__Fault *, const char*);
-
-#define soap_write_SOAP_ENV__Fault(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_SOAP_ENV__Fault(soap, data), 0) || KMS_Discovery::soap_put_SOAP_ENV__Fault(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Fault(struct soap*, const struct SOAP_ENV__Fault *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Fault(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_SOAP_ENV__Fault(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_get_SOAP_ENV__Fault(struct soap*, struct SOAP_ENV__Fault *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Fault(soap, n) soap_instantiate_SOAP_ENV__Fault(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Fault(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Fault * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Fault(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Fault(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Discovery_SOAP_ENV__Reason
-#define SOAP_TYPE_KMS_Discovery_SOAP_ENV__Reason (37)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Reason(struct soap*, const struct SOAP_ENV__Reason *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Reason(struct soap*, const char*, int, const struct SOAP_ENV__Reason *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_in_SOAP_ENV__Reason(struct soap*, const char*, struct SOAP_ENV__Reason *, const char*);
-
-#define soap_write_SOAP_ENV__Reason(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_SOAP_ENV__Reason(soap, data), 0) || KMS_Discovery::soap_put_SOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Reason(struct soap*, const struct SOAP_ENV__Reason *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Reason(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_SOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_get_SOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Reason(soap, n) soap_instantiate_SOAP_ENV__Reason(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Reason(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Reason * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Reason(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Reason(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Discovery_SOAP_ENV__Detail
-#define SOAP_TYPE_KMS_Discovery_SOAP_ENV__Detail (36)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Detail(struct soap*, const struct SOAP_ENV__Detail *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Detail(struct soap*, const char*, int, const struct SOAP_ENV__Detail *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_in_SOAP_ENV__Detail(struct soap*, const char*, struct SOAP_ENV__Detail *, const char*);
-
-#define soap_write_SOAP_ENV__Detail(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_SOAP_ENV__Detail(soap, data), 0) || KMS_Discovery::soap_put_SOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Detail(struct soap*, const struct SOAP_ENV__Detail *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Detail(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_SOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_get_SOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Detail(soap, n) soap_instantiate_SOAP_ENV__Detail(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Detail(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Detail * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Detail(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Detail(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Discovery_SOAP_ENV__Code
-#define SOAP_TYPE_KMS_Discovery_SOAP_ENV__Code (34)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Code(struct soap*, const struct SOAP_ENV__Code *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Code(struct soap*, const char*, int, const struct SOAP_ENV__Code *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_in_SOAP_ENV__Code(struct soap*, const char*, struct SOAP_ENV__Code *, const char*);
-
-#define soap_write_SOAP_ENV__Code(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_SOAP_ENV__Code(soap, data), 0) || KMS_Discovery::soap_put_SOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Code(struct soap*, const struct SOAP_ENV__Code *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Code(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_SOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_get_SOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Code(soap, n) soap_instantiate_SOAP_ENV__Code(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Code(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Code * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Code(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Code(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Discovery_SOAP_ENV__Header
-#define SOAP_TYPE_KMS_Discovery_SOAP_ENV__Header (33)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Header(struct soap*, struct SOAP_ENV__Header *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Header(struct soap*, const struct SOAP_ENV__Header *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Header(struct soap*, const char*, int, const struct SOAP_ENV__Header *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_in_SOAP_ENV__Header(struct soap*, const char*, struct SOAP_ENV__Header *, const char*);
-
-#define soap_write_SOAP_ENV__Header(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_SOAP_ENV__Header(soap, data), 0) || KMS_Discovery::soap_put_SOAP_ENV__Header(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Header(struct soap*, const struct SOAP_ENV__Header *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Header(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_SOAP_ENV__Header(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_get_SOAP_ENV__Header(struct soap*, struct SOAP_ENV__Header *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Header(soap, n) soap_instantiate_SOAP_ENV__Header(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Header(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Header * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Header(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Header(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverCluster
-#define SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverCluster (32)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Discovery__DiscoverCluster(struct soap*, struct KMS_Discovery__DiscoverCluster *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Discovery__DiscoverCluster(struct soap*, const struct KMS_Discovery__DiscoverCluster *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Discovery__DiscoverCluster(struct soap*, const char*, int, const struct KMS_Discovery__DiscoverCluster *, const char*);
-SOAP_FMAC3 struct KMS_Discovery__DiscoverCluster * SOAP_FMAC4 soap_in_KMS_Discovery__DiscoverCluster(struct soap*, const char*, struct KMS_Discovery__DiscoverCluster *, const char*);
-
-#define soap_write_KMS_Discovery__DiscoverCluster(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_KMS_Discovery__DiscoverCluster(soap, data), 0) || KMS_Discovery::soap_put_KMS_Discovery__DiscoverCluster(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Discovery__DiscoverCluster(struct soap*, const struct KMS_Discovery__DiscoverCluster *, const char*, const char*);
-
-#define soap_read_KMS_Discovery__DiscoverCluster(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_KMS_Discovery__DiscoverCluster(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Discovery__DiscoverCluster * SOAP_FMAC4 soap_get_KMS_Discovery__DiscoverCluster(struct soap*, struct KMS_Discovery__DiscoverCluster *, const char*, const char*);
-
-#define soap_new_KMS_Discovery__DiscoverCluster(soap, n) soap_instantiate_KMS_Discovery__DiscoverCluster(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Discovery__DiscoverCluster(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Discovery__DiscoverCluster * SOAP_FMAC2 soap_instantiate_KMS_Discovery__DiscoverCluster(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Discovery__DiscoverCluster(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverClusterResponse
-#define SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverClusterResponse (29)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Discovery__DiscoverClusterResponse(struct soap*, struct KMS_Discovery__DiscoverClusterResponse *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Discovery__DiscoverClusterResponse(struct soap*, const struct KMS_Discovery__DiscoverClusterResponse *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Discovery__DiscoverClusterResponse(struct soap*, const char*, int, const struct KMS_Discovery__DiscoverClusterResponse *, const char*);
-SOAP_FMAC3 struct KMS_Discovery__DiscoverClusterResponse * SOAP_FMAC4 soap_in_KMS_Discovery__DiscoverClusterResponse(struct soap*, const char*, struct KMS_Discovery__DiscoverClusterResponse *, const char*);
-
-#define soap_write_KMS_Discovery__DiscoverClusterResponse(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_KMS_Discovery__DiscoverClusterResponse(soap, data), 0) || KMS_Discovery::soap_put_KMS_Discovery__DiscoverClusterResponse(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Discovery__DiscoverClusterResponse(struct soap*, const struct KMS_Discovery__DiscoverClusterResponse *, const char*, const char*);
-
-#define soap_read_KMS_Discovery__DiscoverClusterResponse(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_KMS_Discovery__DiscoverClusterResponse(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Discovery__DiscoverClusterResponse * SOAP_FMAC4 soap_get_KMS_Discovery__DiscoverClusterResponse(struct soap*, struct KMS_Discovery__DiscoverClusterResponse *, const char*, const char*);
-
-#define soap_new_KMS_Discovery__DiscoverClusterResponse(soap, n) soap_instantiate_KMS_Discovery__DiscoverClusterResponse(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Discovery__DiscoverClusterResponse(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Discovery__DiscoverClusterResponse * SOAP_FMAC2 soap_instantiate_KMS_Discovery__DiscoverClusterResponse(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Discovery__DiscoverClusterResponse(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Discovery_KMS_Discovery__ArrayOfClusterMembers
-#define SOAP_TYPE_KMS_Discovery_KMS_Discovery__ArrayOfClusterMembers (25)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Discovery__ArrayOfClusterMembers(struct soap*, struct KMS_Discovery__ArrayOfClusterMembers *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Discovery__ArrayOfClusterMembers(struct soap*, struct KMS_Discovery__ArrayOfClusterMembers const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Discovery__ArrayOfClusterMembers(struct soap*, const char*, int, const struct KMS_Discovery__ArrayOfClusterMembers *, const char*);
-SOAP_FMAC3 struct KMS_Discovery__ArrayOfClusterMembers * SOAP_FMAC4 soap_in_KMS_Discovery__ArrayOfClusterMembers(struct soap*, const char*, struct KMS_Discovery__ArrayOfClusterMembers *, const char*);
-
-#define soap_write_KMS_Discovery__ArrayOfClusterMembers(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_KMS_Discovery__ArrayOfClusterMembers(soap, data), 0) || KMS_Discovery::soap_put_KMS_Discovery__ArrayOfClusterMembers(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Discovery__ArrayOfClusterMembers(struct soap*, const struct KMS_Discovery__ArrayOfClusterMembers *, const char*, const char*);
-
-#define soap_read_KMS_Discovery__ArrayOfClusterMembers(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_KMS_Discovery__ArrayOfClusterMembers(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Discovery__ArrayOfClusterMembers * SOAP_FMAC4 soap_get_KMS_Discovery__ArrayOfClusterMembers(struct soap*, struct KMS_Discovery__ArrayOfClusterMembers *, const char*, const char*);
-
-#define soap_new_KMS_Discovery__ArrayOfClusterMembers(soap, n) soap_instantiate_KMS_Discovery__ArrayOfClusterMembers(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Discovery__ArrayOfClusterMembers(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Discovery__ArrayOfClusterMembers * SOAP_FMAC2 soap_instantiate_KMS_Discovery__ArrayOfClusterMembers(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Discovery__ArrayOfClusterMembers(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember
-#define SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember (24)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_KMS_Discovery_ClusterMember(struct soap*, struct KMS_Discovery_ClusterMember *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_KMS_Discovery_ClusterMember(struct soap*, const struct KMS_Discovery_ClusterMember *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_KMS_Discovery_ClusterMember(struct soap*, const char*, int, const struct KMS_Discovery_ClusterMember *, const char*);
-SOAP_FMAC3 struct KMS_Discovery_ClusterMember * SOAP_FMAC4 soap_in_KMS_Discovery_ClusterMember(struct soap*, const char*, struct KMS_Discovery_ClusterMember *, const char*);
-
-#define soap_write_KMS_Discovery_ClusterMember(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_KMS_Discovery_ClusterMember(soap, data), 0) || KMS_Discovery::soap_put_KMS_Discovery_ClusterMember(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_KMS_Discovery_ClusterMember(struct soap*, const struct KMS_Discovery_ClusterMember *, const char*, const char*);
-
-#define soap_read_KMS_Discovery_ClusterMember(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_KMS_Discovery_ClusterMember(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Discovery_ClusterMember * SOAP_FMAC4 soap_get_KMS_Discovery_ClusterMember(struct soap*, struct KMS_Discovery_ClusterMember *, const char*, const char*);
-
-#define soap_new_KMS_Discovery_ClusterMember(soap, n) soap_instantiate_KMS_Discovery_ClusterMember(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_KMS_Discovery_ClusterMember(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct KMS_Discovery_ClusterMember * SOAP_FMAC2 soap_instantiate_KMS_Discovery_ClusterMember(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_KMS_Discovery_ClusterMember(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__hexBinary
-#define SOAP_TYPE_KMS_Discovery_xsd__hexBinary (20)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_xsd__hexBinary(struct soap*, struct xsd__hexBinary *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_xsd__hexBinary(struct soap*, struct xsd__hexBinary const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__hexBinary(struct soap*, const char*, int, const struct xsd__hexBinary *, const char*);
-SOAP_FMAC3 struct xsd__hexBinary * SOAP_FMAC4 soap_in_xsd__hexBinary(struct soap*, const char*, struct xsd__hexBinary *, const char*);
-
-#define soap_write_xsd__hexBinary(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_xsd__hexBinary(soap, data), 0) || KMS_Discovery::soap_put_xsd__hexBinary(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__hexBinary(struct soap*, const struct xsd__hexBinary *, const char*, const char*);
-
-#define soap_read_xsd__hexBinary(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_xsd__hexBinary(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct xsd__hexBinary * SOAP_FMAC4 soap_get_xsd__hexBinary(struct soap*, struct xsd__hexBinary *, const char*, const char*);
-
-#define soap_new_xsd__hexBinary(soap, n) soap_instantiate_xsd__hexBinary(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_xsd__hexBinary(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct xsd__hexBinary * SOAP_FMAC2 soap_instantiate_xsd__hexBinary(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_xsd__hexBinary(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Discovery_PointerToSOAP_ENV__Reason
-#define SOAP_TYPE_KMS_Discovery_PointerToSOAP_ENV__Reason (40)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Reason(struct soap*, const char *, int, struct SOAP_ENV__Reason *const*, const char *);
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Reason(struct soap*, const char*, struct SOAP_ENV__Reason **, const char*);
-
-#define soap_write_PointerToSOAP_ENV__Reason(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_PointerToSOAP_ENV__Reason(soap, data), 0) || KMS_Discovery::soap_put_PointerToSOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *const*, const char*, const char*);
-
-#define soap_read_PointerToSOAP_ENV__Reason(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_PointerToSOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason **, const char*, const char*);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Discovery_PointerToSOAP_ENV__Detail
-#define SOAP_TYPE_KMS_Discovery_PointerToSOAP_ENV__Detail (39)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Detail(struct soap*, const char *, int, struct SOAP_ENV__Detail *const*, const char *);
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Detail(struct soap*, const char*, struct SOAP_ENV__Detail **, const char*);
-
-#define soap_write_PointerToSOAP_ENV__Detail(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_PointerToSOAP_ENV__Detail(soap, data), 0) || KMS_Discovery::soap_put_PointerToSOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *const*, const char*, const char*);
-
-#define soap_read_PointerToSOAP_ENV__Detail(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_PointerToSOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail **, const char*, const char*);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_KMS_Discovery_PointerToSOAP_ENV__Code
-#define SOAP_TYPE_KMS_Discovery_PointerToSOAP_ENV__Code (35)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Code(struct soap*, const char *, int, struct SOAP_ENV__Code *const*, const char *);
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Code(struct soap*, const char*, struct SOAP_ENV__Code **, const char*);
-
-#define soap_write_PointerToSOAP_ENV__Code(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_PointerToSOAP_ENV__Code(soap, data), 0) || KMS_Discovery::soap_put_PointerToSOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *const*, const char*, const char*);
-
-#define soap_read_PointerToSOAP_ENV__Code(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_PointerToSOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code **, const char*, const char*);
-
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_PointerToKMS_Discovery_ClusterMember
-#define SOAP_TYPE_KMS_Discovery_PointerToKMS_Discovery_ClusterMember (26)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToKMS_Discovery_ClusterMember(struct soap*, struct KMS_Discovery_ClusterMember *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToKMS_Discovery_ClusterMember(struct soap*, const char *, int, struct KMS_Discovery_ClusterMember *const*, const char *);
-SOAP_FMAC3 struct KMS_Discovery_ClusterMember ** SOAP_FMAC4 soap_in_PointerToKMS_Discovery_ClusterMember(struct soap*, const char*, struct KMS_Discovery_ClusterMember **, const char*);
-
-#define soap_write_PointerToKMS_Discovery_ClusterMember(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_PointerToKMS_Discovery_ClusterMember(soap, data), 0) || KMS_Discovery::soap_put_PointerToKMS_Discovery_ClusterMember(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToKMS_Discovery_ClusterMember(struct soap*, struct KMS_Discovery_ClusterMember *const*, const char*, const char*);
-
-#define soap_read_PointerToKMS_Discovery_ClusterMember(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_PointerToKMS_Discovery_ClusterMember(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct KMS_Discovery_ClusterMember ** SOAP_FMAC4 soap_get_PointerToKMS_Discovery_ClusterMember(struct soap*, struct KMS_Discovery_ClusterMember **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_PointerTounsignedByte
-#define SOAP_TYPE_KMS_Discovery_PointerTounsignedByte (23)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerTounsignedByte(struct soap*, unsigned char *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerTounsignedByte(struct soap*, const char *, int, unsigned char *const*, const char *);
-SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_in_PointerTounsignedByte(struct soap*, const char*, unsigned char **, const char*);
-
-#define soap_write_PointerTounsignedByte(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_PointerTounsignedByte(soap, data), 0) || KMS_Discovery::soap_put_PointerTounsignedByte(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerTounsignedByte(struct soap*, unsigned char *const*, const char*, const char*);
-
-#define soap_read_PointerTounsignedByte(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_PointerTounsignedByte(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 unsigned char ** SOAP_FMAC4 soap_get_PointerTounsignedByte(struct soap*, unsigned char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__networkAddress
-#define SOAP_TYPE_KMS_Discovery_xsd__networkAddress (19)
-#endif
-
-#define soap_default_xsd__networkAddress(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize_xsd__networkAddress(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__networkAddress(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__networkAddress(struct soap*, const char*, char **, const char*);
-
-#define soap_write_xsd__networkAddress(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_xsd__networkAddress(soap, data), 0) || KMS_Discovery::soap_put_xsd__networkAddress(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__networkAddress(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_xsd__networkAddress(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_xsd__networkAddress(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__networkAddress(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__kmaVersion
-#define SOAP_TYPE_KMS_Discovery_xsd__kmaVersion (18)
-#endif
-
-#define soap_default_xsd__kmaVersion(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize_xsd__kmaVersion(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__kmaVersion(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__kmaVersion(struct soap*, const char*, char **, const char*);
-
-#define soap_write_xsd__kmaVersion(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_xsd__kmaVersion(soap, data), 0) || KMS_Discovery::soap_put_xsd__kmaVersion(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__kmaVersion(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_xsd__kmaVersion(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_xsd__kmaVersion(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__kmaVersion(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__duration
-#define SOAP_TYPE_KMS_Discovery_xsd__duration (17)
-#endif
-
-#define soap_default_xsd__duration(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize_xsd__duration(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__duration(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__duration(struct soap*, const char*, char **, const char*);
-
-#define soap_write_xsd__duration(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_xsd__duration(soap, data), 0) || KMS_Discovery::soap_put_xsd__duration(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__duration(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_xsd__duration(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_xsd__duration(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__duration(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__dateTime
-#define SOAP_TYPE_KMS_Discovery_xsd__dateTime (16)
-#endif
-
-#define soap_default_xsd__dateTime(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize_xsd__dateTime(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__dateTime(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__dateTime(struct soap*, const char*, char **, const char*);
-
-#define soap_write_xsd__dateTime(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_xsd__dateTime(soap, data), 0) || KMS_Discovery::soap_put_xsd__dateTime(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__dateTime(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_xsd__dateTime(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_xsd__dateTime(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__dateTime(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__string
-#define SOAP_TYPE_KMS_Discovery_xsd__string (7)
-#endif
-
-#define soap_default_xsd__string(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize_xsd__string(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_xsd__string(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_xsd__string(struct soap*, const char*, char **, const char*);
-
-#define soap_write_xsd__string(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_xsd__string(soap, data), 0) || KMS_Discovery::soap_put_xsd__string(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_xsd__string(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_xsd__string(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_xsd__string(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_xsd__string(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery__QName
-#define SOAP_TYPE_KMS_Discovery__QName (5)
-#endif
-
-#define soap_default__QName(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize__QName(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out__QName(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in__QName(struct soap*, const char*, char **, const char*);
-
-#define soap_write__QName(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize__QName(soap, data), 0) || KMS_Discovery::soap_put__QName(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put__QName(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read__QName(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get__QName(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get__QName(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_KMS_Discovery_string
-#define SOAP_TYPE_KMS_Discovery_string (4)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_string(struct soap*, char **);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_string(struct soap*, char *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_string(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_string(struct soap*, const char*, char **, const char*);
-
-#define soap_write_string(soap, data) ( soap_begin_send(soap) || (KMS_Discovery::soap_serialize_string(soap, data), 0) || KMS_Discovery::soap_put_string(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_string(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_string(soap, data) ( soap_begin_recv(soap) || !KMS_Discovery::soap_get_string(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap*, char **, const char*, const char*);
-
-} // namespace KMS_Discovery
-
-
-#endif
-
-/* End of KMS_DiscoveryH.h */
--- a/usr/src/lib/libkmsagent/common/SOAP/KMS_DiscoveryStub.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,301 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* KMS_DiscoveryStub.h
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/DiscoveryService/KMS_Discovery_SOAP.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#ifndef KMS_DiscoveryStub_H
-#define KMS_DiscoveryStub_H
-#ifndef WITH_NONAMESPACES
-#define WITH_NONAMESPACES
-#endif
-#ifndef WITH_NOGLOBAL
-#define WITH_NOGLOBAL
-#endif
-#include "stdsoap2.h"
-
-namespace KMS_Discovery {
-
-/******************************************************************************\
- *                                                                            *
- * Enumerations                                                               *
- *                                                                            *
-\******************************************************************************/
-
-
-/******************************************************************************\
- *                                                                            *
- * Types with Custom Serializers                                              *
- *                                                                            *
-\******************************************************************************/
-
-
-/******************************************************************************\
- *                                                                            *
- * Classes and Structs                                                        *
- *                                                                            *
-\******************************************************************************/
-
-
-#if 0 /* volatile type: do not declare here, declared elsewhere */
-
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__hexBinary
-#define SOAP_TYPE_KMS_Discovery_xsd__hexBinary (20)
-/* hexBinary schema type: */
-struct xsd__hexBinary
-{
-public:
-	unsigned char *__ptr;
-	int __size;
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember
-#define SOAP_TYPE_KMS_Discovery_KMS_Discovery_ClusterMember (24)
-/* KMS-Discovery-ClusterMember */
-struct KMS_Discovery_ClusterMember
-{
-public:
-	LONG64 KMAID;	/* required element of type xsd:long */
-	char *KMAName;	/* optional element of type xsd:string */
-	char *KMASiteID;	/* optional element of type xsd:string */
-	char *KMAHostName;	/* optional element of type xsd:string */
-	char *KMANetworkAddress;	/* optional element of type xsd:string */
-	bool Enabled;	/* required element of type xsd:boolean */
-	long Load;	/* required element of type xsd:int */
-	bool Responding;	/* required element of type xsd:boolean */
-	char *KMAVersion;	/* optional attribute of type xsd:kmaVersion */
-	char *KMAHostNameIPv6;	/* optional attribute of type xsd:networkAddress */
-	char *KMANetworkAddressIPv6;	/* optional attribute of type xsd:networkAddress */
-	bool KMS_Discovery__Locked;	/* optional attribute of type xsd:boolean */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_KMS_Discovery__ArrayOfClusterMembers
-#define SOAP_TYPE_KMS_Discovery_KMS_Discovery__ArrayOfClusterMembers (25)
-/* Sequence of KMS-Discovery:ArrayOfClusterMembers schema type: */
-struct KMS_Discovery__ArrayOfClusterMembers
-{
-public:
-	struct KMS_Discovery_ClusterMember *__ptr;
-	int __size;
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverClusterResponse
-#define SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverClusterResponse (29)
-/* KMS-Discovery:DiscoverClusterResponse */
-struct KMS_Discovery__DiscoverClusterResponse
-{
-public:
-	char *EntitySiteID;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* optional element of type xsd:string */
-	struct KMS_Discovery__ArrayOfClusterMembers ArrayOfClusterMembers;	/* optional element of type KMS-Discovery:ArrayOfClusterMembers */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverCluster
-#define SOAP_TYPE_KMS_Discovery_KMS_Discovery__DiscoverCluster (32)
-/* KMS-Discovery:DiscoverCluster */
-struct KMS_Discovery__DiscoverCluster
-{
-public:
-	void *_;	/* transient */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_SOAP_ENV__Header
-#define SOAP_TYPE_KMS_Discovery_SOAP_ENV__Header (33)
-/* SOAP Header: */
-struct SOAP_ENV__Header
-{
-#ifdef WITH_NOEMPTYSTRUCT
-private:
-	char dummy;	/* dummy member to enable compilation */
-#endif
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_SOAP_ENV__Code
-#define SOAP_TYPE_KMS_Discovery_SOAP_ENV__Code (34)
-/* SOAP Fault Code: */
-struct SOAP_ENV__Code
-{
-public:
-	char *SOAP_ENV__Value;	/* optional element of type xsd:QName */
-	struct SOAP_ENV__Code *SOAP_ENV__Subcode;	/* optional element of type SOAP-ENV:Code */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_SOAP_ENV__Detail
-#define SOAP_TYPE_KMS_Discovery_SOAP_ENV__Detail (36)
-/* SOAP-ENV:Detail */
-struct SOAP_ENV__Detail
-{
-public:
-	int __type;	/* any type of element <fault> (defined below) */
-	void *fault;	/* transient */
-	char *__any;
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_SOAP_ENV__Reason
-#define SOAP_TYPE_KMS_Discovery_SOAP_ENV__Reason (37)
-/* SOAP-ENV:Reason */
-struct SOAP_ENV__Reason
-{
-public:
-	char *SOAP_ENV__Text;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_SOAP_ENV__Fault
-#define SOAP_TYPE_KMS_Discovery_SOAP_ENV__Fault (38)
-/* SOAP Fault: */
-struct SOAP_ENV__Fault
-{
-public:
-	char *faultcode;	/* optional element of type xsd:QName */
-	char *faultstring;	/* optional element of type xsd:string */
-	char *faultactor;	/* optional element of type xsd:string */
-	struct SOAP_ENV__Detail *detail;	/* optional element of type SOAP-ENV:Detail */
-	struct SOAP_ENV__Code *SOAP_ENV__Code;	/* optional element of type SOAP-ENV:Code */
-	struct SOAP_ENV__Reason *SOAP_ENV__Reason;	/* optional element of type SOAP-ENV:Reason */
-	char *SOAP_ENV__Node;	/* optional element of type xsd:string */
-	char *SOAP_ENV__Role;	/* optional element of type xsd:string */
-	struct SOAP_ENV__Detail *SOAP_ENV__Detail;	/* optional element of type SOAP-ENV:Detail */
-};
-#endif
-
-/******************************************************************************\
- *                                                                            *
- * Typedefs                                                                   *
- *                                                                            *
-\******************************************************************************/
-
-#ifndef SOAP_TYPE_KMS_Discovery__QName
-#define SOAP_TYPE_KMS_Discovery__QName (5)
-typedef char *_QName;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery__XML
-#define SOAP_TYPE_KMS_Discovery__XML (6)
-typedef char *_XML;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__string
-#define SOAP_TYPE_KMS_Discovery_xsd__string (7)
-typedef char *xsd__string;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__float
-#define SOAP_TYPE_KMS_Discovery_xsd__float (9)
-typedef float xsd__float;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__int
-#define SOAP_TYPE_KMS_Discovery_xsd__int (11)
-typedef long xsd__int;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__boolean
-#define SOAP_TYPE_KMS_Discovery_xsd__boolean (13)
-typedef bool xsd__boolean;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__long
-#define SOAP_TYPE_KMS_Discovery_xsd__long (15)
-typedef LONG64 xsd__long;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__dateTime
-#define SOAP_TYPE_KMS_Discovery_xsd__dateTime (16)
-typedef char *xsd__dateTime;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__duration
-#define SOAP_TYPE_KMS_Discovery_xsd__duration (17)
-typedef char *xsd__duration;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__kmaVersion
-#define SOAP_TYPE_KMS_Discovery_xsd__kmaVersion (18)
-typedef char *xsd__kmaVersion;
-#endif
-
-#ifndef SOAP_TYPE_KMS_Discovery_xsd__networkAddress
-#define SOAP_TYPE_KMS_Discovery_xsd__networkAddress (19)
-typedef char *xsd__networkAddress;
-#endif
-
-
-/******************************************************************************\
- *                                                                            *
- * Externals                                                                  *
- *                                                                            *
-\******************************************************************************/
-
-
-/******************************************************************************\
- *                                                                            *
- * Server-Side Operations                                                     *
- *                                                                            *
-\******************************************************************************/
-
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Discovery__DiscoverCluster(struct soap*, void *_, struct KMS_Discovery__DiscoverClusterResponse &result);
-
-/******************************************************************************\
- *                                                                            *
- * Server-Side Skeletons to Invoke Service Operations                         *
- *                                                                            *
-\******************************************************************************/
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Discovery_serve(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 KMS_Discovery_serve_request(struct soap*);
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_serve_KMS_Discovery__DiscoverCluster(struct soap*);
-
-/******************************************************************************\
- *                                                                            *
- * Client-Side Call Stubs                                                     *
- *                                                                            *
-\******************************************************************************/
-
-
-SOAP_FMAC5 int SOAP_FMAC6 soap_call_KMS_Discovery__DiscoverCluster(struct soap *soap, const char *soap_endpoint, const char *soap_action, void *_, struct KMS_Discovery__DiscoverClusterResponse &result);
-
-} // namespace KMS_Discovery
-
-
-#endif
-
-/* End of KMS_DiscoveryStub.h */
--- a/usr/src/lib/libkmsagent/common/SOAP/envC.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1359 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* envC.cpp
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/Env/env.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#if defined(__BORLANDC__)
-#pragma option push -w-8060
-#pragma option push -w-8004
-#endif
-
-#include "envH.h"
-
-SOAP_SOURCE_STAMP("@(#) envC.cpp ver 2.7.17 2010-06-08 19:16:38 GMT")
-
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serializeheader(struct soap *soap)
-{
-	if (soap->header)
-		soap_serialize_SOAP_ENV__Header(soap, soap->header);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_putheader(struct soap *soap)
-{
-	if (soap->header)
-	{	soap->part = SOAP_IN_HEADER;
-		if (soap_out_SOAP_ENV__Header(soap, "SOAP-ENV:Header", 0, soap->header, NULL))
-			return soap->error;
-		soap->part = SOAP_END_HEADER;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_getheader(struct soap *soap)
-{
-	soap->part = SOAP_IN_HEADER;
-	soap->header = soap_in_SOAP_ENV__Header(soap, "SOAP-ENV:Header", NULL, NULL);
-	soap->part = SOAP_END_HEADER;
-	return soap->header == NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_header(struct soap *soap)
-{
-	if (!soap->header)
-	{	if ((soap->header = soap_new_SOAP_ENV__Header(soap, -1)))
-			soap_default_SOAP_ENV__Header(soap, soap->header);
-	}
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_fault(struct soap *soap)
-{
-	if (!soap->fault)
-	{	soap->fault = soap_new_SOAP_ENV__Fault(soap, -1);
-		if (!soap->fault)
-			return;
-		soap_default_SOAP_ENV__Fault(soap, soap->fault);
-	}
-	if (soap->version == 2 && !soap->fault->SOAP_ENV__Code)
-	{	soap->fault->SOAP_ENV__Code = soap_new_SOAP_ENV__Code(soap, -1);
-		soap_default_SOAP_ENV__Code(soap, soap->fault->SOAP_ENV__Code);
-	}
-	if (soap->version == 2 && !soap->fault->SOAP_ENV__Reason)
-	{	soap->fault->SOAP_ENV__Reason = soap_new_SOAP_ENV__Reason(soap, -1);
-		soap_default_SOAP_ENV__Reason(soap, soap->fault->SOAP_ENV__Reason);
-	}
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serializefault(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->fault)
-		soap_serialize_SOAP_ENV__Fault(soap, soap->fault);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_putfault(struct soap *soap)
-{
-	if (soap->fault)
-		return soap_put_SOAP_ENV__Fault(soap, soap->fault, "SOAP-ENV:Fault", NULL);
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_getfault(struct soap *soap)
-{
-	return (soap->fault = soap_get_SOAP_ENV__Fault(soap, NULL, "SOAP-ENV:Fault", NULL)) == NULL;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultcode(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 2)
-		return (const char**)&soap->fault->SOAP_ENV__Code->SOAP_ENV__Value;
-	return (const char**)&soap->fault->faultcode;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultsubcode(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 2)
-	{	if (!soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode)
-		{	soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode = soap_new_SOAP_ENV__Code(soap, -1);
-			soap_default_SOAP_ENV__Code(soap, soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode);
-		}
-		return (const char**)&soap->fault->SOAP_ENV__Code->SOAP_ENV__Subcode->SOAP_ENV__Value;
-	}
-	return (const char**)&soap->fault->faultcode;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultstring(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 2)
-		return (const char**)&soap->fault->SOAP_ENV__Reason->SOAP_ENV__Text;
-	return (const char**)&soap->fault->faultstring;
-}
-
-SOAP_FMAC3 const char ** SOAP_FMAC4 soap_faultdetail(struct soap *soap)
-{
-	soap_fault(soap);
-	if (soap->version == 1)
-	{	if (!soap->fault->detail)
-		{	soap->fault->detail = (struct SOAP_ENV__Detail*)soap_malloc(soap, sizeof(struct SOAP_ENV__Detail));
-			soap_default_SOAP_ENV__Detail(soap, soap->fault->detail);
-		}
-		return (const char**)&soap->fault->detail->__any;
-	}
-	if (!soap->fault->SOAP_ENV__Detail)
-	{	soap->fault->SOAP_ENV__Detail = soap_new_SOAP_ENV__Detail(soap, -1);
-		soap_default_SOAP_ENV__Detail(soap, soap->fault->SOAP_ENV__Detail);
-	}
-	return (const char**)&soap->fault->SOAP_ENV__Detail->__any;
-}
-
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 int SOAP_FMAC4 soap_getindependent(struct soap *soap)
-{
-	int t;
-	if (soap->version == 1)
-	{	for (;;)
-		{	if (!soap_getelement(soap, &t))
-				if (soap->error || soap_ignore_element(soap))
-					break;
-		}
-	}
-	if (soap->error == SOAP_NO_TAG || soap->error == SOAP_EOF)
-		soap->error = SOAP_OK;
-	return soap->error;
-}
-#endif
-
-#ifndef WITH_NOIDREF
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-SOAP_FMAC3 void * SOAP_FMAC4 soap_getelement(struct soap *soap, int *type)
-{
-	if (soap_peek_element(soap))
-		return NULL;
-	if (!*soap->id || !(*type = soap_lookup_type(soap, soap->id)))
-		*type = soap_lookup_type(soap, soap->href);
-	switch (*type)
-	{
-	case SOAP_TYPE_byte:
-		return soap_in_byte(soap, NULL, NULL, "xsd:byte");
-	case SOAP_TYPE_int:
-		return soap_in_int(soap, NULL, NULL, "xsd:int");
-	case SOAP_TYPE__QName:
-	{	char **s;
-		s = soap_in__QName(soap, NULL, NULL, "xsd:QName");
-		return s ? *s : NULL;
-	}
-	case SOAP_TYPE_string:
-	{	char **s;
-		s = soap_in_string(soap, NULL, NULL, "xsd:string");
-		return s ? *s : NULL;
-	}
-	default:
-	{	const char *t = soap->type;
-		if (!*t)
-			t = soap->tag;
-		if (!soap_match_tag(soap, t, "xsd:byte"))
-		{	*type = SOAP_TYPE_byte;
-			return soap_in_byte(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:int"))
-		{	*type = SOAP_TYPE_int;
-			return soap_in_int(soap, NULL, NULL, NULL);
-		}
-		if (!soap_match_tag(soap, t, "xsd:QName"))
-		{	char **s;
-			*type = SOAP_TYPE__QName;
-			s = soap_in__QName(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		if (!soap_match_tag(soap, t, "xsd:string"))
-		{	char **s;
-			*type = SOAP_TYPE_string;
-			s = soap_in_string(soap, NULL, NULL, NULL);
-			return s ? *s : NULL;
-		}
-		t = soap->tag;
-	}
-	}
-	soap->error = SOAP_TAG_MISMATCH;
-	return NULL;
-}
-
-#ifdef __cplusplus
-}
-#endif
-#endif
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_ignore_element(struct soap *soap)
-{
-	if (!soap_peek_element(soap))
-	{	int t;
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unexpected element '%s' in input (level=%u, %d)\n", soap->tag, soap->level, soap->body));
-		if (soap->mustUnderstand && !soap->other)
-			return soap->error = SOAP_MUSTUNDERSTAND;
-		if (((soap->mode & SOAP_XML_STRICT) && soap->part != SOAP_IN_HEADER) || !soap_match_tag(soap, soap->tag, "SOAP-ENV:"))
-		{	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "REJECTING element '%s'\n", soap->tag));
-			return soap->error = SOAP_TAG_MISMATCH;
-		}
-		if (!*soap->id || !soap_getelement(soap, &t))
-		{	soap->peeked = 0;
-			if (soap->fignore)
-				soap->error = soap->fignore(soap, soap->tag);
-			else
-				soap->error = SOAP_OK;
-			DBGLOG(TEST, if (!soap->error) SOAP_MESSAGE(fdebug, "IGNORING element '%s'\n", soap->tag));
-			if (!soap->error && soap->body)
-			{	soap->level++;
-				while (!soap_ignore_element(soap))
-					;
-				if (soap->error == SOAP_NO_TAG)
-					soap->error = soap_element_end_in(soap, NULL);
-			}
-		}
-	}
-	return soap->error;
-}
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC3 int SOAP_FMAC4 soap_putindependent(struct soap *soap)
-{
-	int i;
-	struct soap_plist *pp;
-	if (soap->version == 1 && soap->encodingStyle && !(soap->mode & (SOAP_XML_TREE | SOAP_XML_GRAPH)))
-		for (i = 0; i < SOAP_PTRHASH; i++)
-			for (pp = soap->pht[i]; pp; pp = pp->next)
-				if (pp->mark1 == 2 || pp->mark2 == 2)
-					if (soap_putelement(soap, pp->ptr, "id", pp->id, pp->type))
-						return soap->error;
-	return SOAP_OK;
-}
-#endif
-
-#ifndef WITH_NOIDREF
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap *soap, const void *ptr, const char *tag, int id, int type)
-{
-	switch (type)
-	{
-	case SOAP_TYPE_byte:
-		return soap_out_byte(soap, tag, id, (const char *)ptr, "xsd:byte");
-	case SOAP_TYPE_int:
-		return soap_out_int(soap, tag, id, (const int *)ptr, "xsd:int");
-	case SOAP_TYPE__QName:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:QName");
-	case SOAP_TYPE_string:
-		return soap_out_string(soap, tag, id, (char*const*)&ptr, "xsd:string");
-	}
-	return SOAP_OK;
-}
-
-#ifdef __cplusplus
-}
-#endif
-#endif
-
-#ifndef WITH_NOIDREF
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap *soap, const void *ptr, int type)
-{
-	(void)soap; (void)ptr; (void)type; /* appease -Wall -Werror */
-	switch (type)
-	{
-	case SOAP_TYPE__QName:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	case SOAP_TYPE_string:
-		soap_serialize_string(soap, (char*const*)&ptr);
-		break;
-	}
-}
-
-#ifdef __cplusplus
-}
-#endif
-#endif
-
-SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap *soap, int t, const char *type, const char *arrayType, size_t *n)
-{
-	switch (t)
-	{
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_SOAP_ENV__Header:
-		return (void*)soap_instantiate_SOAP_ENV__Header(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_SOAP_ENV__Code:
-		return (void*)soap_instantiate_SOAP_ENV__Code(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_SOAP_ENV__Detail:
-		return (void*)soap_instantiate_SOAP_ENV__Detail(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_SOAP_ENV__Reason:
-		return (void*)soap_instantiate_SOAP_ENV__Reason(soap, -1, type, arrayType, n);
-#endif
-#ifndef WITH_NOGLOBAL
-	case SOAP_TYPE_SOAP_ENV__Fault:
-		return (void*)soap_instantiate_SOAP_ENV__Fault(soap, -1, type, arrayType, n);
-#endif
-	}
-	return NULL;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_fdelete(struct soap_clist *p)
-{	switch (p->type)
-	{
-	case SOAP_TYPE_SOAP_ENV__Header:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Header*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Header*)p->ptr);
-		break;
-	case SOAP_TYPE_SOAP_ENV__Code:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Code*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Code*)p->ptr);
-		break;
-	case SOAP_TYPE_SOAP_ENV__Detail:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Detail*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Detail*)p->ptr);
-		break;
-	case SOAP_TYPE_SOAP_ENV__Reason:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Reason*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Reason*)p->ptr);
-		break;
-	case SOAP_TYPE_SOAP_ENV__Fault:
-		if (p->size < 0)
-			SOAP_DELETE((struct SOAP_ENV__Fault*)p->ptr);
-		else
-			SOAP_DELETE_ARRAY((struct SOAP_ENV__Fault*)p->ptr);
-		break;
-	default:	return SOAP_ERR;
-	}
-	return SOAP_OK;
-}
-
-SOAP_FMAC3 void* SOAP_FMAC4 soap_class_id_enter(struct soap *soap, const char *id, void *p, int t, size_t n, const char *type, const char *arrayType)
-{	return soap_id_enter(soap, id, p, t, n, 0, type, arrayType, soap_instantiate);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_byte(struct soap *soap, char *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_byte
-	*a = SOAP_DEFAULT_byte;
-#else
-	*a = (char)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_byte(struct soap *soap, const char *tag, int id, const char *a, const char *type)
-{
-	return soap_outbyte(soap, tag, id, a, type, SOAP_TYPE_byte);
-}
-
-SOAP_FMAC3 char * SOAP_FMAC4 soap_in_byte(struct soap *soap, const char *tag, char *a, const char *type)
-{	char *p;
-	p = soap_inbyte(soap, tag, a, type, SOAP_TYPE_byte);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_byte(struct soap *soap, const char *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_byte);
-	if (soap_out_byte(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char * SOAP_FMAC4 soap_get_byte(struct soap *soap, char *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_byte(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_int(struct soap *soap, int *a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_int
-	*a = SOAP_DEFAULT_int;
-#else
-	*a = (int)0;
-#endif
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_int(struct soap *soap, const char *tag, int id, const int *a, const char *type)
-{
-	return soap_outint(soap, tag, id, a, type, SOAP_TYPE_int);
-}
-
-SOAP_FMAC3 int * SOAP_FMAC4 soap_in_int(struct soap *soap, const char *tag, int *a, const char *type)
-{	int *p;
-	p = soap_inint(soap, tag, a, type, SOAP_TYPE_int);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_int(struct soap *soap, const int *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_int);
-	if (soap_out_int(soap, tag?tag:"int", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 int * SOAP_FMAC4 soap_get_int(struct soap *soap, int *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_int(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default__QName(soap, &a->faultcode);
-	soap_default_string(soap, &a->faultstring);
-	soap_default_string(soap, &a->faultactor);
-	a->detail = NULL;
-	a->SOAP_ENV__Code = NULL;
-	a->SOAP_ENV__Reason = NULL;
-	soap_default_string(soap, &a->SOAP_ENV__Node);
-	soap_default_string(soap, &a->SOAP_ENV__Role);
-	a->SOAP_ENV__Detail = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Fault(struct soap *soap, const struct SOAP_ENV__Fault *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize__QName(soap, &a->faultcode);
-	soap_serialize_string(soap, &a->faultstring);
-	soap_serialize_string(soap, &a->faultactor);
-	soap_serialize_PointerToSOAP_ENV__Detail(soap, &a->detail);
-	soap_serialize_PointerToSOAP_ENV__Code(soap, &a->SOAP_ENV__Code);
-	soap_serialize_PointerToSOAP_ENV__Reason(soap, &a->SOAP_ENV__Reason);
-	soap_serialize_string(soap, &a->SOAP_ENV__Node);
-	soap_serialize_string(soap, &a->SOAP_ENV__Role);
-	soap_serialize_PointerToSOAP_ENV__Detail(soap, &a->SOAP_ENV__Detail);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Fault(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Fault *a, const char *type)
-{
-	const char *soap_tmp_faultcode = soap_QName2s(soap, a->faultcode);
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_SOAP_ENV__Fault), type))
-		return soap->error;
-	if (soap_out__QName(soap, "faultcode", -1, (char*const*)&soap_tmp_faultcode, ""))
-		return soap->error;
-	if (soap_out_string(soap, "faultstring", -1, &a->faultstring, ""))
-		return soap->error;
-	if (soap_out_string(soap, "faultactor", -1, &a->faultactor, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Detail(soap, "detail", -1, &a->detail, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Code", -1, &a->SOAP_ENV__Code, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Reason(soap, "SOAP-ENV:Reason", -1, &a->SOAP_ENV__Reason, ""))
-		return soap->error;
-	if (soap_out_string(soap, "SOAP-ENV:Node", -1, &a->SOAP_ENV__Node, ""))
-		return soap->error;
-	if (soap_out_string(soap, "SOAP-ENV:Role", -1, &a->SOAP_ENV__Role, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Detail(soap, "SOAP-ENV:Detail", -1, &a->SOAP_ENV__Detail, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_in_SOAP_ENV__Fault(struct soap *soap, const char *tag, struct SOAP_ENV__Fault *a, const char *type)
-{
-	size_t soap_flag_faultcode = 1;
-	size_t soap_flag_faultstring = 1;
-	size_t soap_flag_faultactor = 1;
-	size_t soap_flag_detail = 1;
-	size_t soap_flag_SOAP_ENV__Code = 1;
-	size_t soap_flag_SOAP_ENV__Reason = 1;
-	size_t soap_flag_SOAP_ENV__Node = 1;
-	size_t soap_flag_SOAP_ENV__Role = 1;
-	size_t soap_flag_SOAP_ENV__Detail = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Fault *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_SOAP_ENV__Fault, sizeof(struct SOAP_ENV__Fault), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Fault(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_faultcode && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in__QName(soap, "faultcode", &a->faultcode, ""))
-				{	soap_flag_faultcode--;
-					continue;
-				}
-			if (soap_flag_faultstring && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "faultstring", &a->faultstring, "xsd:string"))
-				{	soap_flag_faultstring--;
-					continue;
-				}
-			if (soap_flag_faultactor && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "faultactor", &a->faultactor, "xsd:string"))
-				{	soap_flag_faultactor--;
-					continue;
-				}
-			if (soap_flag_detail && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Detail(soap, "detail", &a->detail, ""))
-				{	soap_flag_detail--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Code && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Code", &a->SOAP_ENV__Code, ""))
-				{	soap_flag_SOAP_ENV__Code--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Reason && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Reason(soap, "SOAP-ENV:Reason", &a->SOAP_ENV__Reason, ""))
-				{	soap_flag_SOAP_ENV__Reason--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Node && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "SOAP-ENV:Node", &a->SOAP_ENV__Node, "xsd:string"))
-				{	soap_flag_SOAP_ENV__Node--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Role && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "SOAP-ENV:Role", &a->SOAP_ENV__Role, "xsd:string"))
-				{	soap_flag_SOAP_ENV__Role--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Detail && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Detail(soap, "SOAP-ENV:Detail", &a->SOAP_ENV__Detail, ""))
-				{	soap_flag_SOAP_ENV__Detail--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Fault *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_SOAP_ENV__Fault, 0, sizeof(struct SOAP_ENV__Fault), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Fault(struct soap *soap, const struct SOAP_ENV__Fault *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_SOAP_ENV__Fault);
-	if (soap_out_SOAP_ENV__Fault(soap, tag?tag:"SOAP-ENV:Fault", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_get_SOAP_ENV__Fault(struct soap *soap, struct SOAP_ENV__Fault *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Fault(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Fault * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Fault(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Fault(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_SOAP_ENV__Fault, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Fault);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Fault);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Fault[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Fault);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Fault*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Fault(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Fault %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Fault*)p = *(struct SOAP_ENV__Fault*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default_string(soap, &a->SOAP_ENV__Text);
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Reason(struct soap *soap, const struct SOAP_ENV__Reason *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize_string(soap, &a->SOAP_ENV__Text);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Reason(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Reason *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_SOAP_ENV__Reason), type))
-		return soap->error;
-	if (soap->lang)
-		soap_set_attr(soap, "xml:lang", soap->lang, 1);
-	if (soap_out_string(soap, "SOAP-ENV:Text", -1, &a->SOAP_ENV__Text, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_in_SOAP_ENV__Reason(struct soap *soap, const char *tag, struct SOAP_ENV__Reason *a, const char *type)
-{
-	size_t soap_flag_SOAP_ENV__Text = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Reason *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_SOAP_ENV__Reason, sizeof(struct SOAP_ENV__Reason), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Reason(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_SOAP_ENV__Text && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in_string(soap, "SOAP-ENV:Text", &a->SOAP_ENV__Text, "xsd:string"))
-				{	soap_flag_SOAP_ENV__Text--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Reason *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_SOAP_ENV__Reason, 0, sizeof(struct SOAP_ENV__Reason), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Reason(struct soap *soap, const struct SOAP_ENV__Reason *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_SOAP_ENV__Reason);
-	if (soap_out_SOAP_ENV__Reason(soap, tag?tag:"SOAP-ENV:Reason", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_get_SOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Reason(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Reason * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Reason(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Reason(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_SOAP_ENV__Reason, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Reason);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Reason);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Reason[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Reason);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Reason*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Reason(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Reason %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Reason*)p = *(struct SOAP_ENV__Reason*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	a->__type = 0;
-	a->fault = NULL;
-	a->__any = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Detail(struct soap *soap, const struct SOAP_ENV__Detail *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_markelement(soap, a->fault, a->__type);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Detail(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Detail *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_SOAP_ENV__Detail), type))
-		return soap->error;
-	if (soap_putelement(soap, a->fault, "fault", -1, a->__type))
-		return soap->error;
-	soap_outliteral(soap, "-any", &a->__any, NULL);
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_in_SOAP_ENV__Detail(struct soap *soap, const char *tag, struct SOAP_ENV__Detail *a, const char *type)
-{
-	size_t soap_flag_fault = 1;
-	size_t soap_flag___any = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Detail *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_SOAP_ENV__Detail, sizeof(struct SOAP_ENV__Detail), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Detail(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_fault && soap->error == SOAP_TAG_MISMATCH)
-				if ((a->fault = soap_getelement(soap, &a->__type)))
-				{	soap_flag_fault = 0;
-					continue;
-				}
-			if (soap_flag___any && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_inliteral(soap, "-any", &a->__any))
-				{	soap_flag___any--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Detail *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_SOAP_ENV__Detail, 0, sizeof(struct SOAP_ENV__Detail), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Detail(struct soap *soap, const struct SOAP_ENV__Detail *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_SOAP_ENV__Detail);
-	if (soap_out_SOAP_ENV__Detail(soap, tag?tag:"SOAP-ENV:Detail", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_get_SOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Detail(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Detail * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Detail(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Detail(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_SOAP_ENV__Detail, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Detail);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Detail);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Detail[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Detail);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Detail*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Detail(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Detail %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Detail*)p = *(struct SOAP_ENV__Detail*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_default__QName(soap, &a->SOAP_ENV__Value);
-	a->SOAP_ENV__Subcode = NULL;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Code(struct soap *soap, const struct SOAP_ENV__Code *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-	soap_serialize__QName(soap, &a->SOAP_ENV__Value);
-	soap_serialize_PointerToSOAP_ENV__Code(soap, &a->SOAP_ENV__Subcode);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Code(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Code *a, const char *type)
-{
-	const char *soap_tmp_SOAP_ENV__Value = soap_QName2s(soap, a->SOAP_ENV__Value);
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_SOAP_ENV__Code), type))
-		return soap->error;
-	if (soap_out__QName(soap, "SOAP-ENV:Value", -1, (char*const*)&soap_tmp_SOAP_ENV__Value, ""))
-		return soap->error;
-	if (soap_out_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Subcode", -1, &a->SOAP_ENV__Subcode, ""))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_in_SOAP_ENV__Code(struct soap *soap, const char *tag, struct SOAP_ENV__Code *a, const char *type)
-{
-	size_t soap_flag_SOAP_ENV__Value = 1;
-	size_t soap_flag_SOAP_ENV__Subcode = 1;
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Code *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_SOAP_ENV__Code, sizeof(struct SOAP_ENV__Code), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Code(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap_flag_SOAP_ENV__Value && (soap->error == SOAP_TAG_MISMATCH || soap->error == SOAP_NO_TAG))
-				if (soap_in__QName(soap, "SOAP-ENV:Value", &a->SOAP_ENV__Value, ""))
-				{	soap_flag_SOAP_ENV__Value--;
-					continue;
-				}
-			if (soap_flag_SOAP_ENV__Subcode && soap->error == SOAP_TAG_MISMATCH)
-				if (soap_in_PointerToSOAP_ENV__Code(soap, "SOAP-ENV:Subcode", &a->SOAP_ENV__Subcode, ""))
-				{	soap_flag_SOAP_ENV__Subcode--;
-					continue;
-				}
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Code *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_SOAP_ENV__Code, 0, sizeof(struct SOAP_ENV__Code), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Code(struct soap *soap, const struct SOAP_ENV__Code *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_SOAP_ENV__Code);
-	if (soap_out_SOAP_ENV__Code(soap, tag?tag:"SOAP-ENV:Code", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_get_SOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Code(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Code * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Code(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Code(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_SOAP_ENV__Code, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Code);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Code);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Code[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Code);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Code*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Code(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Code %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Code*)p = *(struct SOAP_ENV__Code*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Header(struct soap *soap, struct SOAP_ENV__Header *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Header(struct soap *soap, const struct SOAP_ENV__Header *a)
-{
-	(void)soap; (void)a; /* appease -Wall -Werror */
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Header(struct soap *soap, const char *tag, int id, const struct SOAP_ENV__Header *a, const char *type)
-{
-	if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, a, SOAP_TYPE_SOAP_ENV__Header), type))
-		return soap->error;
-	return soap_element_end_out(soap, tag);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_in_SOAP_ENV__Header(struct soap *soap, const char *tag, struct SOAP_ENV__Header *a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 0, type))
-		return NULL;
-	a = (struct SOAP_ENV__Header *)soap_id_enter(soap, soap->id, a, SOAP_TYPE_SOAP_ENV__Header, sizeof(struct SOAP_ENV__Header), 0, NULL, NULL, NULL);
-	if (!a)
-		return NULL;
-	soap_default_SOAP_ENV__Header(soap, a);
-	if (soap->body && !*soap->href)
-	{
-		for (;;)
-		{	soap->error = SOAP_TAG_MISMATCH;
-			if (soap->error == SOAP_TAG_MISMATCH)
-				soap->error = soap_ignore_element(soap);
-			if (soap->error == SOAP_NO_TAG)
-				break;
-			if (soap->error)
-				return NULL;
-		}
-		if (soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Header *)soap_id_forward(soap, soap->href, (void*)a, 0, SOAP_TYPE_SOAP_ENV__Header, 0, sizeof(struct SOAP_ENV__Header), 0, NULL);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Header(struct soap *soap, const struct SOAP_ENV__Header *a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_SOAP_ENV__Header);
-	if (soap_out_SOAP_ENV__Header(soap, tag?tag:"SOAP-ENV:Header", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_get_SOAP_ENV__Header(struct soap *soap, struct SOAP_ENV__Header *p, const char *tag, const char *type)
-{
-	if ((p = soap_in_SOAP_ENV__Header(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC1 struct SOAP_ENV__Header * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Header(struct soap *soap, int n, const char *type, const char *arrayType, size_t *size)
-{
-	(void)type; (void)arrayType; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "soap_instantiate_SOAP_ENV__Header(%d, %s, %s)\n", n, type?type:"", arrayType?arrayType:""));
-	struct soap_clist *cp = soap_link(soap, NULL, SOAP_TYPE_SOAP_ENV__Header, n, soap_fdelete);
-	if (!cp)
-		return NULL;
-	if (n < 0)
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Header);
-		if (size)
-			*size = sizeof(struct SOAP_ENV__Header);
-	}
-	else
-	{	cp->ptr = (void*)SOAP_NEW(struct SOAP_ENV__Header[n]);
-		if (!cp->ptr)
-		{	soap->error = SOAP_EOM;
-			return NULL;
-		}
-		if (size)
-			*size = n * sizeof(struct SOAP_ENV__Header);
-	}
-		DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Instantiated location=%p\n", cp->ptr));
-	return (struct SOAP_ENV__Header*)cp->ptr;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Header(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{
-	(void)soap; (void)st; (void)len; (void)n; /* appease -Wall -Werror */
-	DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying struct SOAP_ENV__Header %p -> %p\n", q, p));
-	*(struct SOAP_ENV__Header*)p = *(struct SOAP_ENV__Header*)q;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_SOAP_ENV__Reason))
-		soap_serialize_SOAP_ENV__Reason(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Reason(struct soap *soap, const char *tag, int id, struct SOAP_ENV__Reason *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_SOAP_ENV__Reason);
-	if (id < 0)
-		return soap->error;
-	return soap_out_SOAP_ENV__Reason(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Reason(struct soap *soap, const char *tag, struct SOAP_ENV__Reason **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct SOAP_ENV__Reason **)soap_malloc(soap, sizeof(struct SOAP_ENV__Reason *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_SOAP_ENV__Reason(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Reason **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_SOAP_ENV__Reason, sizeof(struct SOAP_ENV__Reason), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerToSOAP_ENV__Reason);
-	if (soap_out_PointerToSOAP_ENV__Reason(soap, tag?tag:"SOAP-ENV:Reason", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Reason(struct soap *soap, struct SOAP_ENV__Reason **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToSOAP_ENV__Reason(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_SOAP_ENV__Detail))
-		soap_serialize_SOAP_ENV__Detail(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Detail(struct soap *soap, const char *tag, int id, struct SOAP_ENV__Detail *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_SOAP_ENV__Detail);
-	if (id < 0)
-		return soap->error;
-	return soap_out_SOAP_ENV__Detail(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Detail(struct soap *soap, const char *tag, struct SOAP_ENV__Detail **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct SOAP_ENV__Detail **)soap_malloc(soap, sizeof(struct SOAP_ENV__Detail *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_SOAP_ENV__Detail(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Detail **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_SOAP_ENV__Detail, sizeof(struct SOAP_ENV__Detail), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerToSOAP_ENV__Detail);
-	if (soap_out_PointerToSOAP_ENV__Detail(soap, tag?tag:"SOAP-ENV:Detail", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Detail(struct soap *soap, struct SOAP_ENV__Detail **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToSOAP_ENV__Detail(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *const*a)
-{
-	if (!soap_reference(soap, *a, SOAP_TYPE_SOAP_ENV__Code))
-		soap_serialize_SOAP_ENV__Code(soap, *a);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Code(struct soap *soap, const char *tag, int id, struct SOAP_ENV__Code *const*a, const char *type)
-{
-	id = soap_element_id(soap, tag, id, *a, NULL, 0, type, SOAP_TYPE_SOAP_ENV__Code);
-	if (id < 0)
-		return soap->error;
-	return soap_out_SOAP_ENV__Code(soap, tag, id, *a, type);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Code(struct soap *soap, const char *tag, struct SOAP_ENV__Code **a, const char *type)
-{
-	if (soap_element_begin_in(soap, tag, 1, NULL))
-		return NULL;
-	if (!a)
-		if (!(a = (struct SOAP_ENV__Code **)soap_malloc(soap, sizeof(struct SOAP_ENV__Code *))))
-			return NULL;
-	*a = NULL;
-	if (!soap->null && *soap->href != '#')
-	{	soap_revert(soap);
-		if (!(*a = soap_in_SOAP_ENV__Code(soap, tag, *a, type)))
-			return NULL;
-	}
-	else
-	{	a = (struct SOAP_ENV__Code **)soap_id_lookup(soap, soap->href, (void**)a, SOAP_TYPE_SOAP_ENV__Code, sizeof(struct SOAP_ENV__Code), 0);
-		if (soap->body && soap_element_end_in(soap, tag))
-			return NULL;
-	}
-	return a;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_PointerToSOAP_ENV__Code);
-	if (soap_out_PointerToSOAP_ENV__Code(soap, tag?tag:"SOAP-ENV:Code", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Code(struct soap *soap, struct SOAP_ENV__Code **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_PointerToSOAP_ENV__Code(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#endif
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out__QName(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE__QName);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in__QName(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE__QName, 2, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put__QName(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE__QName);
-	if (soap_out__QName(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get__QName(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in__QName(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_string(struct soap *soap, char **a)
-{
-	(void)soap; /* appease -Wall -Werror */
-#ifdef SOAP_DEFAULT_string
-	*a = SOAP_DEFAULT_string;
-#else
-	*a = (char *)0;
-#endif
-}
-
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_string(struct soap *soap, char *const*a)
-{
-	soap_reference(soap, *a, SOAP_TYPE_string);
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_string(struct soap *soap, const char *tag, int id, char *const*a, const char *type)
-{
-	return soap_outstring(soap, tag, id, a, type, SOAP_TYPE_string);
-}
-
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_string(struct soap *soap, const char *tag, char **a, const char *type)
-{	char **p;
-	p = soap_instring(soap, tag, a, type, SOAP_TYPE_string, 1, -1, -1);
-	return p;
-}
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_string(struct soap *soap, char *const*a, const char *tag, const char *type)
-{
-	register int id = soap_embed(soap, (void*)a, NULL, 0, tag, SOAP_TYPE_string);
-	if (soap_out_string(soap, tag?tag:"byte", id, a, type))
-		return soap->error;
-	return soap_putindependent(soap);
-}
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap *soap, char **p, const char *tag, const char *type)
-{
-	if ((p = soap_in_string(soap, tag, p, type)))
-		if (soap_getindependent(soap))
-			return NULL;
-	return p;
-}
-
-#if defined(__BORLANDC__)
-#pragma option pop
-#pragma option pop
-#endif
-
-/* End of envC.cpp */
--- a/usr/src/lib/libkmsagent/common/SOAP/envH.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,329 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* envH.h
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/Env/env.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#ifndef envH_H
-#define envH_H
-#include "envStub.h"
-#ifndef WITH_NOIDREF
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_markelement(struct soap*, const void*, int);
-SOAP_FMAC3 int SOAP_FMAC4 soap_putelement(struct soap*, const void*, const char*, int, int);
-SOAP_FMAC3 void *SOAP_FMAC4 soap_getelement(struct soap*, int*);
-
-#ifdef __cplusplus
-}
-#endif
-SOAP_FMAC3 int SOAP_FMAC4 soap_putindependent(struct soap*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_getindependent(struct soap*);
-#endif
-SOAP_FMAC3 int SOAP_FMAC4 soap_ignore_element(struct soap*);
-
-SOAP_FMAC3 void * SOAP_FMAC4 soap_instantiate(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_fdelete(struct soap_clist*);
-SOAP_FMAC3 void* SOAP_FMAC4 soap_class_id_enter(struct soap*, const char*, void*, int, size_t, const char*, const char*);
-
-#ifndef SOAP_TYPE_byte
-#define SOAP_TYPE_byte (3)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_byte(struct soap*, char *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_byte(struct soap*, const char*, int, const char *, const char*);
-SOAP_FMAC3 char * SOAP_FMAC4 soap_in_byte(struct soap*, const char*, char *, const char*);
-
-#define soap_write_byte(soap, data) ( soap_begin_send(soap) || soap_put_byte(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_byte(struct soap*, const char *, const char*, const char*);
-
-#define soap_read_byte(soap, data) ( soap_begin_recv(soap) || !soap_get_byte(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char * SOAP_FMAC4 soap_get_byte(struct soap*, char *, const char*, const char*);
-
-#ifndef SOAP_TYPE_int
-#define SOAP_TYPE_int (1)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_int(struct soap*, int *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_int(struct soap*, const char*, int, const int *, const char*);
-SOAP_FMAC3 int * SOAP_FMAC4 soap_in_int(struct soap*, const char*, int *, const char*);
-
-#define soap_write_int(soap, data) ( soap_begin_send(soap) || soap_put_int(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_int(struct soap*, const int *, const char*, const char*);
-
-#define soap_read_int(soap, data) ( soap_begin_recv(soap) || !soap_get_int(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 int * SOAP_FMAC4 soap_get_int(struct soap*, int *, const char*, const char*);
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_SOAP_ENV__Fault
-#define SOAP_TYPE_SOAP_ENV__Fault (14)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Fault(struct soap*, struct SOAP_ENV__Fault *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Fault(struct soap*, const struct SOAP_ENV__Fault *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Fault(struct soap*, const char*, int, const struct SOAP_ENV__Fault *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_in_SOAP_ENV__Fault(struct soap*, const char*, struct SOAP_ENV__Fault *, const char*);
-
-#define soap_write_SOAP_ENV__Fault(soap, data) ( soap_begin_send(soap) || (soap_serialize_SOAP_ENV__Fault(soap, data), 0) || soap_put_SOAP_ENV__Fault(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Fault(struct soap*, const struct SOAP_ENV__Fault *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Fault(soap, data) ( soap_begin_recv(soap) || !soap_get_SOAP_ENV__Fault(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Fault * SOAP_FMAC4 soap_get_SOAP_ENV__Fault(struct soap*, struct SOAP_ENV__Fault *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Fault(soap, n) soap_instantiate_SOAP_ENV__Fault(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Fault(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Fault * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Fault(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Fault(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_SOAP_ENV__Reason
-#define SOAP_TYPE_SOAP_ENV__Reason (13)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Reason(struct soap*, const struct SOAP_ENV__Reason *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Reason(struct soap*, const char*, int, const struct SOAP_ENV__Reason *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_in_SOAP_ENV__Reason(struct soap*, const char*, struct SOAP_ENV__Reason *, const char*);
-
-#define soap_write_SOAP_ENV__Reason(soap, data) ( soap_begin_send(soap) || (soap_serialize_SOAP_ENV__Reason(soap, data), 0) || soap_put_SOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Reason(struct soap*, const struct SOAP_ENV__Reason *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Reason(soap, data) ( soap_begin_recv(soap) || !soap_get_SOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Reason * SOAP_FMAC4 soap_get_SOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Reason(soap, n) soap_instantiate_SOAP_ENV__Reason(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Reason(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Reason * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Reason(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Reason(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_SOAP_ENV__Detail
-#define SOAP_TYPE_SOAP_ENV__Detail (10)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Detail(struct soap*, const struct SOAP_ENV__Detail *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Detail(struct soap*, const char*, int, const struct SOAP_ENV__Detail *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_in_SOAP_ENV__Detail(struct soap*, const char*, struct SOAP_ENV__Detail *, const char*);
-
-#define soap_write_SOAP_ENV__Detail(soap, data) ( soap_begin_send(soap) || (soap_serialize_SOAP_ENV__Detail(soap, data), 0) || soap_put_SOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Detail(struct soap*, const struct SOAP_ENV__Detail *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Detail(soap, data) ( soap_begin_recv(soap) || !soap_get_SOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Detail * SOAP_FMAC4 soap_get_SOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Detail(soap, n) soap_instantiate_SOAP_ENV__Detail(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Detail(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Detail * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Detail(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Detail(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_SOAP_ENV__Code
-#define SOAP_TYPE_SOAP_ENV__Code (8)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Code(struct soap*, const struct SOAP_ENV__Code *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Code(struct soap*, const char*, int, const struct SOAP_ENV__Code *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_in_SOAP_ENV__Code(struct soap*, const char*, struct SOAP_ENV__Code *, const char*);
-
-#define soap_write_SOAP_ENV__Code(soap, data) ( soap_begin_send(soap) || (soap_serialize_SOAP_ENV__Code(soap, data), 0) || soap_put_SOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Code(struct soap*, const struct SOAP_ENV__Code *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Code(soap, data) ( soap_begin_recv(soap) || !soap_get_SOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Code * SOAP_FMAC4 soap_get_SOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Code(soap, n) soap_instantiate_SOAP_ENV__Code(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Code(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Code * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Code(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Code(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_SOAP_ENV__Header
-#define SOAP_TYPE_SOAP_ENV__Header (7)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_SOAP_ENV__Header(struct soap*, struct SOAP_ENV__Header *);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_SOAP_ENV__Header(struct soap*, const struct SOAP_ENV__Header *);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_SOAP_ENV__Header(struct soap*, const char*, int, const struct SOAP_ENV__Header *, const char*);
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_in_SOAP_ENV__Header(struct soap*, const char*, struct SOAP_ENV__Header *, const char*);
-
-#define soap_write_SOAP_ENV__Header(soap, data) ( soap_begin_send(soap) || (soap_serialize_SOAP_ENV__Header(soap, data), 0) || soap_put_SOAP_ENV__Header(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_SOAP_ENV__Header(struct soap*, const struct SOAP_ENV__Header *, const char*, const char*);
-
-#define soap_read_SOAP_ENV__Header(soap, data) ( soap_begin_recv(soap) || !soap_get_SOAP_ENV__Header(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Header * SOAP_FMAC4 soap_get_SOAP_ENV__Header(struct soap*, struct SOAP_ENV__Header *, const char*, const char*);
-
-#define soap_new_SOAP_ENV__Header(soap, n) soap_instantiate_SOAP_ENV__Header(soap, n, NULL, NULL, NULL)
-
-
-#define soap_delete_SOAP_ENV__Header(soap, p) soap_delete(soap, p)
-
-SOAP_FMAC1 struct SOAP_ENV__Header * SOAP_FMAC2 soap_instantiate_SOAP_ENV__Header(struct soap*, int, const char*, const char*, size_t*);
-SOAP_FMAC3 void SOAP_FMAC4 soap_copy_SOAP_ENV__Header(struct soap*, int, int, void*, size_t, const void*, size_t);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_PointerToSOAP_ENV__Reason
-#define SOAP_TYPE_PointerToSOAP_ENV__Reason (16)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Reason(struct soap*, const char *, int, struct SOAP_ENV__Reason *const*, const char *);
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Reason(struct soap*, const char*, struct SOAP_ENV__Reason **, const char*);
-
-#define soap_write_PointerToSOAP_ENV__Reason(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerToSOAP_ENV__Reason(soap, data), 0) || soap_put_PointerToSOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason *const*, const char*, const char*);
-
-#define soap_read_PointerToSOAP_ENV__Reason(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerToSOAP_ENV__Reason(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Reason ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Reason(struct soap*, struct SOAP_ENV__Reason **, const char*, const char*);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_PointerToSOAP_ENV__Detail
-#define SOAP_TYPE_PointerToSOAP_ENV__Detail (15)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Detail(struct soap*, const char *, int, struct SOAP_ENV__Detail *const*, const char *);
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Detail(struct soap*, const char*, struct SOAP_ENV__Detail **, const char*);
-
-#define soap_write_PointerToSOAP_ENV__Detail(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerToSOAP_ENV__Detail(soap, data), 0) || soap_put_PointerToSOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail *const*, const char*, const char*);
-
-#define soap_read_PointerToSOAP_ENV__Detail(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerToSOAP_ENV__Detail(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Detail ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Detail(struct soap*, struct SOAP_ENV__Detail **, const char*, const char*);
-
-#endif
-
-#ifndef WITH_NOGLOBAL
-
-#ifndef SOAP_TYPE_PointerToSOAP_ENV__Code
-#define SOAP_TYPE_PointerToSOAP_ENV__Code (9)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_PointerToSOAP_ENV__Code(struct soap*, const char *, int, struct SOAP_ENV__Code *const*, const char *);
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_in_PointerToSOAP_ENV__Code(struct soap*, const char*, struct SOAP_ENV__Code **, const char*);
-
-#define soap_write_PointerToSOAP_ENV__Code(soap, data) ( soap_begin_send(soap) || (soap_serialize_PointerToSOAP_ENV__Code(soap, data), 0) || soap_put_PointerToSOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code *const*, const char*, const char*);
-
-#define soap_read_PointerToSOAP_ENV__Code(soap, data) ( soap_begin_recv(soap) || !soap_get_PointerToSOAP_ENV__Code(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 struct SOAP_ENV__Code ** SOAP_FMAC4 soap_get_PointerToSOAP_ENV__Code(struct soap*, struct SOAP_ENV__Code **, const char*, const char*);
-
-#endif
-
-#ifndef SOAP_TYPE__QName
-#define SOAP_TYPE__QName (5)
-#endif
-
-#define soap_default__QName(soap, a) soap_default_string(soap, a)
-
-
-#define soap_serialize__QName(soap, a) soap_serialize_string(soap, a)
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_out__QName(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in__QName(struct soap*, const char*, char **, const char*);
-
-#define soap_write__QName(soap, data) ( soap_begin_send(soap) || (soap_serialize__QName(soap, data), 0) || soap_put__QName(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put__QName(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read__QName(soap, data) ( soap_begin_recv(soap) || !soap_get__QName(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get__QName(struct soap*, char **, const char*, const char*);
-
-#ifndef SOAP_TYPE_string
-#define SOAP_TYPE_string (4)
-#endif
-SOAP_FMAC3 void SOAP_FMAC4 soap_default_string(struct soap*, char **);
-SOAP_FMAC3 void SOAP_FMAC4 soap_serialize_string(struct soap*, char *const*);
-SOAP_FMAC3 int SOAP_FMAC4 soap_out_string(struct soap*, const char*, int, char*const*, const char*);
-SOAP_FMAC3 char * * SOAP_FMAC4 soap_in_string(struct soap*, const char*, char **, const char*);
-
-#define soap_write_string(soap, data) ( soap_begin_send(soap) || (soap_serialize_string(soap, data), 0) || soap_put_string(soap, data, NULL, NULL) || soap_end_send(soap) )
-
-SOAP_FMAC3 int SOAP_FMAC4 soap_put_string(struct soap*, char *const*, const char*, const char*);
-
-#define soap_read_string(soap, data) ( soap_begin_recv(soap) || !soap_get_string(soap, data, NULL, NULL) || soap_end_recv(soap) )
-
-SOAP_FMAC3 char ** SOAP_FMAC4 soap_get_string(struct soap*, char **, const char*, const char*);
-
-#endif
-
-/* End of envH.h */
--- a/usr/src/lib/libkmsagent/common/SOAP/envStub.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/* envStub.h
-   Generated by gSOAP 2.7.17 from ../gsoapStubs/Env/env.h
-   Copyright(C) 2000-2010, Robert van Engelen, Genivia Inc. All Rights Reserved.
-   This part of the software is released under one of the following licenses:
-   GPL, the gSOAP public license, or Genivia's license for commercial use.
-*/
-
-#ifndef envStub_H
-#define envStub_H
-#include "stdsoap2.h"
-
-/******************************************************************************\
- *                                                                            *
- * Enumerations                                                               *
- *                                                                            *
-\******************************************************************************/
-
-
-/******************************************************************************\
- *                                                                            *
- * Types with Custom Serializers                                              *
- *                                                                            *
-\******************************************************************************/
-
-
-/******************************************************************************\
- *                                                                            *
- * Classes and Structs                                                        *
- *                                                                            *
-\******************************************************************************/
-
-
-#if 0 /* volatile type: do not declare here, declared elsewhere */
-
-#endif
-
-#ifndef SOAP_TYPE_SOAP_ENV__Header
-#define SOAP_TYPE_SOAP_ENV__Header (7)
-/* SOAP Header: */
-struct SOAP_ENV__Header
-{
-#ifdef WITH_NOEMPTYSTRUCT
-private:
-	char dummy;	/* dummy member to enable compilation */
-#endif
-};
-#endif
-
-#ifndef SOAP_TYPE_SOAP_ENV__Code
-#define SOAP_TYPE_SOAP_ENV__Code (8)
-/* SOAP Fault Code: */
-struct SOAP_ENV__Code
-{
-public:
-	char *SOAP_ENV__Value;	/* optional element of type xsd:QName */
-	struct SOAP_ENV__Code *SOAP_ENV__Subcode;	/* optional element of type SOAP-ENV:Code */
-};
-#endif
-
-#ifndef SOAP_TYPE_SOAP_ENV__Detail
-#define SOAP_TYPE_SOAP_ENV__Detail (10)
-/* SOAP-ENV:Detail */
-struct SOAP_ENV__Detail
-{
-public:
-	int __type;	/* any type of element <fault> (defined below) */
-	void *fault;	/* transient */
-	char *__any;
-};
-#endif
-
-#ifndef SOAP_TYPE_SOAP_ENV__Reason
-#define SOAP_TYPE_SOAP_ENV__Reason (13)
-/* SOAP-ENV:Reason */
-struct SOAP_ENV__Reason
-{
-public:
-	char *SOAP_ENV__Text;	/* optional element of type xsd:string */
-};
-#endif
-
-#ifndef SOAP_TYPE_SOAP_ENV__Fault
-#define SOAP_TYPE_SOAP_ENV__Fault (14)
-/* SOAP Fault: */
-struct SOAP_ENV__Fault
-{
-public:
-	char *faultcode;	/* optional element of type xsd:QName */
-	char *faultstring;	/* optional element of type xsd:string */
-	char *faultactor;	/* optional element of type xsd:string */
-	struct SOAP_ENV__Detail *detail;	/* optional element of type SOAP-ENV:Detail */
-	struct SOAP_ENV__Code *SOAP_ENV__Code;	/* optional element of type SOAP-ENV:Code */
-	struct SOAP_ENV__Reason *SOAP_ENV__Reason;	/* optional element of type SOAP-ENV:Reason */
-	char *SOAP_ENV__Node;	/* optional element of type xsd:string */
-	char *SOAP_ENV__Role;	/* optional element of type xsd:string */
-	struct SOAP_ENV__Detail *SOAP_ENV__Detail;	/* optional element of type SOAP-ENV:Detail */
-};
-#endif
-
-/******************************************************************************\
- *                                                                            *
- * Typedefs                                                                   *
- *                                                                            *
-\******************************************************************************/
-
-#ifndef SOAP_TYPE__QName
-#define SOAP_TYPE__QName (5)
-typedef char *_QName;
-#endif
-
-#ifndef SOAP_TYPE__XML
-#define SOAP_TYPE__XML (6)
-typedef char *_XML;
-#endif
-
-
-/******************************************************************************\
- *                                                                            *
- * Externals                                                                  *
- *                                                                            *
-\******************************************************************************/
-
-
-#endif
-
-/* End of envStub.h */
--- a/usr/src/lib/libkmsagent/common/SOAP/stdsoap2.cpp	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15632 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-/*
-	stdsoap2.c[pp] 2.7.17
-
-	gSOAP runtime engine
-
-gSOAP XML Web services tools
-Copyright (C) 2000-2010, Robert van Engelen, Genivia Inc., All Rights Reserved.
-This part of the software is released under ONE of the following licenses:
-GPL, or the gSOAP public license, or Genivia's license for commercial use.
---------------------------------------------------------------------------------
-Contributors:
-
-Oracle, Inc. - additions are noted in the code commented with
-"Oracle customization"
-  - customization of the SSL accept timeout
-  - work around for SSL_Sleep reporting closed connection
-  - Function ssl_auth_init was static, but is now exported for external override
-  - redirection of gSoap debug logs when debug builds enabled
-  - added SSL_CTX_set_cipher_list call to restrict the cipher suite to RSA-2048/AES
-    TLS_RSA_WITH_AES_256_CBC_SHA is defined in RFC 3268
-    also see http://www.openssl.org/docs/apps/ciphers.html
-  - Added SSL_OP_NO_SSLv3 to force use of TLS
-  - bug fix: added call to close socket handle in various places noted in the code,
-    since the caller overwrites soap->socket with the return value
-  - compile warning cleanup
-
-
-  Wind River Systems Inc., for the following additions under gSOAP public license:
-  - vxWorks compatible
---------------------------------------------------------------------------------
-gSOAP public license.
-
-The contents of this file are subject to the gSOAP Public License Version 1.3
-(the "License"); you may not use this file except in compliance with the
-License. You may obtain a copy of the License at
-http://www.cs.fsu.edu/~engelen/soaplicense.html
-Software distributed under the License is distributed on an "AS IS" basis,
-WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-for the specific language governing rights and limitations under the License.
-
-The Initial Developer of the Original Code is Robert A. van Engelen.
-Copyright (C) 2000-2010, Robert van Engelen, Genivia Inc., All Rights Reserved.
---------------------------------------------------------------------------------
-GPL license.
-
-This program is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free Software
-Foundation; either version 2 of the License, or (at your option) any later
-version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with
-this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-Place, Suite 330, Boston, MA 02111-1307 USA
-
-Author contact information:
-engelen@genivia.com / engelen@acm.org
-
-This program is released under the GPL with the additional exemption that
-compiling, linking, and/or using OpenSSL is allowed.
---------------------------------------------------------------------------------
-A commercial use license is available from Genivia, Inc., contact@genivia.com
---------------------------------------------------------------------------------
-
-Installation note:
-
-Win32 build needs winsock.dll (Visual C++ "wsock32.lib")
-To do this in Visual C++ 6.0, go to "Project", "settings", select the "Link"
-tab (the project file needs to be selected in the file view) and add
-"wsock32.lib" to the "Object/library modules" entry
-
-On Mac OS X with gcc (GCC) 3.1 20020420 (prerelease) you MUST compile with
--fstack_check when using -O2 because gcc 3.1 has a bug that smashes the stack
-when locally allocated data exceeds 64K.
-
-*/
-
-#ifdef AS400
-# pragma convert(819)	/* EBCDIC to ASCII */
-#endif
-
-#include "stdsoap2.h"
-
-/*
- Oracle customization for OpenSSL 0.9.8 removal of deprecated function usage: RSA_generate_key
-*/
-#ifdef WITH_OPENSSL
-#ifdef OPENSSL_NO_DEPRECATED
-#include <openssl/rsa.h>
-#include <openssl/bn.h>
-#include <openssl/dh.h>
-#endif
-#endif
-
-#ifdef SOAP_MEM_DEBUG
-#ifndef WIN32
-#include <ucontext.h>   /* Oracle customization (for printstack(3C)) */
-#endif
-#endif
-
-#ifdef __BORLANDC__
-# pragma warn -8060
-#else
-# ifdef WIN32
-#  ifdef UNDER_CE
-#   pragma comment(lib, "winsock.lib")
-#  else
-#   pragma comment(lib, "wsock32.lib")
-#  endif
-#  pragma warning(disable : 4996) /* disable deprecation warnings */
-# endif
-#endif
-
-#ifdef __cplusplus
-SOAP_SOURCE_STAMP("@(#) stdsoap2.cpp ver 2.7.17 2010-05-10 00:00:00 GMT")
-extern "C" {
-#else
-SOAP_SOURCE_STAMP("@(#) stdsoap2.c ver 2.7.17 2010-05-10 00:00:00 GMT")
-#endif
-
-/* 8bit character representing unknown/nonrepresentable character data (e.g. not supported by current locale with multibyte support enabled) */
-#ifndef SOAP_UNKNOWN_CHAR
-#define SOAP_UNKNOWN_CHAR (127)
-#endif
-
-/*      EOF=-1 */
-#define SOAP_LT (soap_wchar)(-2) /* XML character '<' */
-#define SOAP_TT (soap_wchar)(-3) /* XML character '</' */
-#define SOAP_GT (soap_wchar)(-4) /* XML character '>' */
-#define SOAP_QT (soap_wchar)(-5) /* XML character '"' */
-#define SOAP_AP (soap_wchar)(-6) /* XML character ''' */
-
-#define soap_blank(c)		((c) >= 0 && (c) <= 32)
-#define soap_notblank(c)	((c) > 32)
-
-#if defined(WIN32) && !defined(UNDER_CE)
-#define soap_hash_ptr(p)	((PtrToUlong(p) >> 3) & (SOAP_PTRHASH - 1))
-#else
-#define soap_hash_ptr(p)	((size_t)(((unsigned long)(p) >> 3) & (SOAP_PTRHASH-1)))
-#endif
-
-#if !defined(WITH_LEAN) || defined(SOAP_DEBUG)
-static void soap_init_logs(struct soap*);
-#endif
-#ifdef SOAP_DEBUG
-static void soap_close_logfile(struct soap*, int);
-static void soap_set_logfile(struct soap*, int, const char*);
-#endif
-
-#ifdef SOAP_MEM_DEBUG
-static void soap_init_mht(struct soap*);
-static void soap_free_mht(struct soap*);
-static void soap_track_unlink(struct soap*, const void*);
-#endif
-
-#ifndef PALM_2
-static int soap_set_error(struct soap*, const char*, const char*, const char*, const char*, int);
-static int soap_copy_fault(struct soap*, const char*, const char*, const char*, const char*);
-static int soap_getattrval(struct soap*, char*, size_t, soap_wchar);
-#endif
-
-#ifndef PALM_1
-static void soap_free_ns(struct soap *soap);
-static soap_wchar soap_char(struct soap*);
-static soap_wchar soap_get_pi(struct soap*);
-static int soap_isxdigit(int);
-static void *fplugin(struct soap*, const char*);
-static char *soap_get_http_body(struct soap*);
-static size_t soap_count_attachments(struct soap *soap);
-static int soap_try_connect_command(struct soap*, int http_command, const char *endpoint, const char *action);
-#ifndef WITH_NOIDREF
-static void soap_update_ptrs(struct soap*, char*, char*, char*, char*);
-static int soap_has_copies(struct soap*, const char*, const char*);
-static void soap_init_iht(struct soap*);
-static void soap_free_iht(struct soap*);
-static void soap_init_pht(struct soap*);
-static void soap_free_pht(struct soap*);
-#endif
-#endif
-
-#ifndef WITH_LEAN
-static const char *soap_set_validation_fault(struct soap*, const char*, const char*);
-static int soap_isnumeric(struct soap*, const char*);
-static struct soap_nlist *soap_push_ns(struct soap *soap, const char *id, const char *ns, short utilized);
-static void soap_utilize_ns(struct soap *soap, const char *tag, size_t n);
-#endif
-
-#ifndef WITH_LEANER
-#ifndef PALM_1
-static struct soap_multipart *soap_new_multipart(struct soap*, struct soap_multipart**, struct soap_multipart**, char*, size_t);
-static int soap_putdimefield(struct soap*, const char*, size_t);
-static char *soap_getdimefield(struct soap*, size_t);
-static void soap_select_mime_boundary(struct soap*);
-static int soap_valid_mime_boundary(struct soap*);
-static void soap_resolve_attachment(struct soap*, struct soap_multipart*);
-#endif
-#endif
-
-#ifdef WITH_GZIP
-static int soap_getgziphdr(struct soap*);
-#endif
-
-#ifdef WITH_OPENSSL
-int soap_ssl_init_done = 0;
-
-//
-// Oracle customization
-//
-// Function ssl_auth_init was static, but is now exported for external override
-/*
-static int ssl_auth_init(struct soap*);
-*/
-int ssl_auth_init(struct soap*);
-static int ssl_verify_callback(int, X509_STORE_CTX*);
-static int ssl_verify_callback_allow_expired_certificate(int, X509_STORE_CTX*);
-static int ssl_password(char*, int, int, void *);
-#endif
-
-#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
-#ifndef PALM_1
-static const char *soap_decode(char*, size_t, const char*, const char*);
-#endif
-#endif
-
-#ifndef WITH_NOHTTP
-#ifndef PALM_1
-static soap_wchar soap_getchunkchar(struct soap*);
-static const char *http_error(struct soap*, int);
-static int http_get(struct soap*);
-static int http_405(struct soap*);
-static int http_post(struct soap*, const char*, const char*, int, const char*, const char*, size_t);
-static int http_send_header(struct soap*, const char*);
-static int http_post_header(struct soap*, const char*, const char*);
-static int http_response(struct soap*, int, size_t);
-static int http_parse(struct soap*);
-static int http_parse_header(struct soap*, const char*, const char*);
-#endif
-#endif
-
-#ifndef WITH_NOIO
-
-#ifndef PALM_1
-static int fsend(struct soap*, const char*, size_t);
-static size_t frecv(struct soap*, char*, size_t);
-static int tcp_init(struct soap*);
-static const char *tcp_error(struct soap*);
-#ifndef WITH_IPV6
-static int tcp_gethost(struct soap*, const char *addr, struct in_addr *inaddr);
-#endif
-static SOAP_SOCKET tcp_connect(struct soap*, const char *endpoint, const char *host, int port);
-static SOAP_SOCKET tcp_accept(struct soap*, SOAP_SOCKET, struct sockaddr*, int*);
-static int tcp_select(struct soap*, SOAP_SOCKET, int, int);
-static int tcp_disconnect(struct soap*);
-static int tcp_closesocket(struct soap*, SOAP_SOCKET);
-static int tcp_shutdownsocket(struct soap*, SOAP_SOCKET, int);
-static const char *soap_strerror(struct soap*);
-#endif
-
-#define SOAP_TCP_SELECT_RCV 0x1
-#define SOAP_TCP_SELECT_SND 0x2
-#define SOAP_TCP_SELECT_ERR 0x4
-#define SOAP_TCP_SELECT_ALL 0x7
-
-#if defined(WIN32)
-  #define SOAP_SOCKBLOCK(fd) \
-  { u_long blocking = 0; \
-    ioctlsocket(fd, FIONBIO, &blocking); \
-  }
-  #define SOAP_SOCKNONBLOCK(fd) \
-  { u_long nonblocking = 1; \
-    ioctlsocket(fd, FIONBIO, &nonblocking); \
-  }
-#elif defined(VXWORKS)
-  #define SOAP_SOCKBLOCK(fd) \
-  { u_long blocking = 0; \
-    ioctl(fd, FIONBIO, (int)(&blocking)); \
-  }
-  #define SOAP_SOCKNONBLOCK(fd) \
-  { u_long nonblocking = 1; \
-    ioctl(fd, FIONBIO, (int)(&nonblocking)); \
-  }
-#elif defined(PALM)
-  #define SOAP_SOCKBLOCK(fd) fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0)&~O_NONBLOCK);
-  #define SOAP_SOCKNONBLOCK(fd) fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0)|O_NONBLOCK);
-#elif defined(SYMBIAN)
-  #define SOAP_SOCKBLOCK(fd) \
-  { long blocking = 0; \
-    ioctl(fd, 0/*FIONBIO*/, &blocking); \
-  }
-  #define SOAP_SOCKNONBLOCK(fd) \
-  { long nonblocking = 1; \
-    ioctl(fd, 0/*FIONBIO*/, &nonblocking); \
-  }
-#else
-  #define SOAP_SOCKBLOCK(fd) fcntl(fd, F_SETFL, fcntl(fd, F_GETFL)&~O_NONBLOCK);
-  #define SOAP_SOCKNONBLOCK(fd) fcntl(fd, F_SETFL, fcntl(fd, F_GETFL)|O_NONBLOCK);
-#endif
-
-#endif
-
-#if defined(PALM) && !defined(PALM_2)
-unsigned short errno;
-#endif
-
-#ifndef PALM_1
-static const char soap_env1[42] = "http://schemas.xmlsoap.org/soap/envelope/";
-static const char soap_enc1[42] = "http://schemas.xmlsoap.org/soap/encoding/";
-static const char soap_env2[40] = "http://www.w3.org/2003/05/soap-envelope";
-static const char soap_enc2[40] = "http://www.w3.org/2003/05/soap-encoding";
-static const char soap_rpc[35] = "http://www.w3.org/2003/05/soap-rpc";
-#endif
-
-#ifndef PALM_1
-const struct soap_double_nan soap_double_nan = {0xFFFFFFFF, 0xFFFFFFFF};
-static const char soap_base64o[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-static const char soap_base64i[81] = "\76XXX\77\64\65\66\67\70\71\72\73\74\75XXXXXXX\00\01\02\03\04\05\06\07\10\11\12\13\14\15\16\17\20\21\22\23\24\25\26\27\30\31XXXXXX\32\33\34\35\36\37\40\41\42\43\44\45\46\47\50\51\52\53\54\55\56\57\60\61\62\63";
-#endif
-
-#ifndef WITH_LEAN
-static const char soap_indent[11] = "\n\t\t\t\t\t\t\t\t\t";
-/* Alternative indentation form for SOAP_XML_INDENT:
-static const char soap_indent[21] = "\n                   ";
-*/
-#endif
-
-#ifndef SOAP_CANARY
-# define SOAP_CANARY (0xC0DE)
-#endif
-
-static const char soap_padding[4] = "\0\0\0";
-#define SOAP_STR_PADDING (soap_padding)
-#define SOAP_STR_EOS (soap_padding)
-#define SOAP_NON_NULL (soap_padding)
-
-#ifndef WITH_LEAN
-static const struct soap_code_map html_entity_codes[] = /* entities for XHTML parsing */
-{ { 160, "nbsp" },
-  { 161, "iexcl" },
-  { 162, "cent" },
-  { 163, "pound" },
-  { 164, "curren" },
-  { 165, "yen" },
-  { 166, "brvbar" },
-  { 167, "sect" },
-  { 168, "uml" },
-  { 169, "copy" },
-  { 170, "ordf" },
-  { 171, "laquo" },
-  { 172, "not" },
-  { 173, "shy" },
-  { 174, "reg" },
-  { 175, "macr" },
-  { 176, "deg" },
-  { 177, "plusmn" },
-  { 178, "sup2" },
-  { 179, "sup3" },
-  { 180, "acute" },
-  { 181, "micro" },
-  { 182, "para" },
-  { 183, "middot" },
-  { 184, "cedil" },
-  { 185, "sup1" },
-  { 186, "ordm" },
-  { 187, "raquo" },
-  { 188, "frac14" },
-  { 189, "frac12" },
-  { 190, "frac34" },
-  { 191, "iquest" },
-  { 192, "Agrave" },
-  { 193, "Aacute" },
-  { 194, "Acirc" },
-  { 195, "Atilde" },
-  { 196, "Auml" },
-  { 197, "Aring" },
-  { 198, "AElig" },
-  { 199, "Ccedil" },
-  { 200, "Egrave" },
-  { 201, "Eacute" },
-  { 202, "Ecirc" },
-  { 203, "Euml" },
-  { 204, "Igrave" },
-  { 205, "Iacute" },
-  { 206, "Icirc" },
-  { 207, "Iuml" },
-  { 208, "ETH" },
-  { 209, "Ntilde" },
-  { 210, "Ograve" },
-  { 211, "Oacute" },
-  { 212, "Ocirc" },
-  { 213, "Otilde" },
-  { 214, "Ouml" },
-  { 215, "times" },
-  { 216, "Oslash" },
-  { 217, "Ugrave" },
-  { 218, "Uacute" },
-  { 219, "Ucirc" },
-  { 220, "Uuml" },
-  { 221, "Yacute" },
-  { 222, "THORN" },
-  { 223, "szlig" },
-  { 224, "agrave" },
-  { 225, "aacute" },
-  { 226, "acirc" },
-  { 227, "atilde" },
-  { 228, "auml" },
-  { 229, "aring" },
-  { 230, "aelig" },
-  { 231, "ccedil" },
-  { 232, "egrave" },
-  { 233, "eacute" },
-  { 234, "ecirc" },
-  { 235, "euml" },
-  { 236, "igrave" },
-  { 237, "iacute" },
-  { 238, "icirc" },
-  { 239, "iuml" },
-  { 240, "eth" },
-  { 241, "ntilde" },
-  { 242, "ograve" },
-  { 243, "oacute" },
-  { 244, "ocirc" },
-  { 245, "otilde" },
-  { 246, "ouml" },
-  { 247, "divide" },
-  { 248, "oslash" },
-  { 249, "ugrave" },
-  { 250, "uacute" },
-  { 251, "ucirc" },
-  { 252, "uuml" },
-  { 253, "yacute" },
-  { 254, "thorn" },
-  { 255, "yuml" },
-  {   0, NULL }
-};
-#endif
-
-#ifndef WITH_NOIO
-#ifndef WITH_LEAN
-static const struct soap_code_map h_error_codes[] =
-{
-#ifdef HOST_NOT_FOUND   
-  { HOST_NOT_FOUND, "Host not found" },
-#endif
-#ifdef TRY_AGAIN
-  { TRY_AGAIN, "Try Again" },
-#endif
-#ifdef NO_RECOVERY  
-  { NO_RECOVERY, "No Recovery" },
-#endif
-#ifdef NO_DATA
-  { NO_DATA, "No Data" },
-#endif
-#ifdef NO_ADDRESS
-  { NO_ADDRESS, "No Address" },
-#endif
-  { 0, NULL }
-};
-#endif
-#endif
-
-#ifndef WITH_NOHTTP
-#ifndef WITH_LEAN
-static const struct soap_code_map h_http_error_codes[] =
-{ { 200, "OK" },
-  { 201, "Created" },
-  { 202, "Accepted" },
-  { 203, "Non-Authoritative Information" },
-  { 204, "No Content" },
-  { 205, "Reset Content" },
-  { 206, "Partial Content" },
-  { 300, "Multiple Choices" },
-  { 301, "Moved Permanently" },
-  { 302, "Found" },
-  { 303, "See Other" },
-  { 304, "Not Modified" },
-  { 305, "Use Proxy" },
-  { 307, "Temporary Redirect" },
-  { 400, "Bad Request" },
-  { 401, "Unauthorized" },
-  { 402, "Payment Required" },
-  { 403, "Forbidden" },
-  { 404, "Not Found" },
-  { 405, "Method Not Allowed" },
-  { 406, "Not Acceptable" },
-  { 407, "Proxy Authentication Required" },
-  { 408, "Request Time-out" },
-  { 409, "Conflict" },
-  { 410, "Gone" },
-  { 411, "Length Required" },
-  { 412, "Precondition Failed" },
-  { 413, "Request Entity Too Large" },
-  { 414, "Request-URI Too Large" },
-  { 415, "Unsupported Media Type" },
-  { 416, "Requested range not satisfiable" },
-  { 417, "Expectation Failed" },
-  { 500, "Internal Server Error" },
-  { 501, "Not Implemented" },
-  { 502, "Bad Gateway" },
-  { 503, "Service Unavailable" },
-  { 504, "Gateway Time-out" },
-  { 505, "HTTP Version not supported" },
-  {   0, NULL }
-};
-#endif
-#endif
-
-#ifdef WITH_OPENSSL
-static const struct soap_code_map h_ssl_error_codes[] =
-{
-#define _SSL_ERROR(e) { e, #e }
-  _SSL_ERROR(SSL_ERROR_SSL),
-  _SSL_ERROR(SSL_ERROR_ZERO_RETURN),
-  _SSL_ERROR(SSL_ERROR_WANT_READ),
-  _SSL_ERROR(SSL_ERROR_WANT_WRITE),
-  _SSL_ERROR(SSL_ERROR_WANT_CONNECT),
-  _SSL_ERROR(SSL_ERROR_WANT_X509_LOOKUP),
-  _SSL_ERROR(SSL_ERROR_SYSCALL),
-  { 0, NULL }
-};
-#endif
-
-#ifndef WITH_LEANER
-static const struct soap_code_map mime_codes[] =
-{ { SOAP_MIME_7BIT,		"7bit" },
-  { SOAP_MIME_8BIT,		"8bit" },
-  { SOAP_MIME_BINARY,		"binary" },
-  { SOAP_MIME_QUOTED_PRINTABLE, "quoted-printable" },
-  { SOAP_MIME_BASE64,		"base64" },
-  { SOAP_MIME_IETF_TOKEN,	"ietf-token" },
-  { SOAP_MIME_X_TOKEN,		"x-token" },
-  { 0,				NULL }
-};
-#endif
-
-#ifdef WIN32
-static int tcp_done = 0;
-#endif
-
-#if defined(HP_UX) && defined(HAVE_GETHOSTBYNAME_R)
-extern int h_errno;
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIO
-#ifndef PALM_1
-static int
-fsend(struct soap *soap, const char *s, size_t n)
-{ register int nwritten, err;
-#if defined(__cplusplus) && !defined(WITH_LEAN) && !defined(WITH_COMPAT)
-  if (soap->os)
-  { soap->os->write(s, (std::streamsize)n);
-    if (soap->os->good())
-      return SOAP_OK;
-    soap->errnum = 0;
-    return SOAP_EOF;
-  }
-#endif
-  while (n)
-  { if (soap_valid_socket(soap->socket))
-    { 
-      if (soap->send_timeout)
-      { for (;;)
-        { register int r;
-#ifdef WITH_OPENSSL
-          if (soap->ssl)
-            r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_ALL, soap->send_timeout);
-          else
-#endif
-            r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, soap->send_timeout);
-          if (r > 0)
-            break;
-          if (!r)
-            return SOAP_EOF;
-	  err = soap->errnum;
-	  if (!err)
-            return soap->error;
-          if (err != SOAP_EINTR && err != SOAP_EAGAIN && err != SOAP_EWOULDBLOCK)
-            return SOAP_EOF;
-        }
-      }
-#ifdef WITH_OPENSSL
-      if (soap->ssl)
-        nwritten = SSL_write(soap->ssl, s, (int)n);
-      else if (soap->bio)
-        nwritten = BIO_write(soap->bio, s, (int)n);
-      else
-#endif
-#ifndef WITH_LEAN
-      if ((soap->omode & SOAP_IO_UDP))
-      { if (soap->peerlen)
-          nwritten = sendto(soap->socket, (char*)s, (SOAP_WINSOCKINT)n, soap->socket_flags, (struct sockaddr*)&soap->peer, (SOAP_WINSOCKINT)soap->peerlen);
-        else
-          nwritten = send(soap->socket, s, (SOAP_WINSOCKINT)n, soap->socket_flags);
-        /* retry and back-off algorithm */
-        /* TODO: this is not very clear from specs so verify and limit conditions under which we should loop (e.g. ENOBUFS) */
-        if (nwritten < 0)
-        { int udp_repeat;
-          int udp_delay;
-          if ((soap->connect_flags & SO_BROADCAST))
-            udp_repeat = 3; /* SOAP-over-UDP MULTICAST_UDP_REPEAT - 1 */
-          else
-            udp_repeat = 1; /* SOAP-over-UDP UNICAST_UDP_REPEAT - 1 */
-          udp_delay = (soap_random % 201) + 50; /* UDP_MIN_DELAY .. UDP_MAX_DELAY */
-          do
-          { tcp_select(soap, soap->socket, SOAP_TCP_SELECT_ERR, -1000 * udp_delay);
-            if (soap->peerlen)
-              nwritten = sendto(soap->socket, (char*)s, (SOAP_WINSOCKINT)n, soap->socket_flags, (struct sockaddr*)&soap->peer, (SOAP_WINSOCKINT)soap->peerlen);
-            else
-              nwritten = send(soap->socket, s, (SOAP_WINSOCKINT)n, soap->socket_flags);
-            udp_delay <<= 1;
-            if (udp_delay > 500) /* UDP_UPPER_DELAY */
-              udp_delay = 500;
-          }
-          while (nwritten < 0 && --udp_repeat > 0);
-        }
-      }
-      else
-#endif
-#if !defined(PALM) && !defined(AS400)
-        nwritten = send(soap->socket, s, (int)n, soap->socket_flags);
-#else
-        nwritten = send(soap->socket, (void*)s, n, soap->socket_flags);
-#endif
-      if (nwritten <= 0)
-      {
-        register int r = 0;
-        err = soap_socket_errno(soap->socket);
-#ifdef WITH_OPENSSL
-        if (soap->ssl && (r = SSL_get_error(soap->ssl, nwritten)) != SSL_ERROR_NONE && r != SSL_ERROR_WANT_READ && r != SSL_ERROR_WANT_WRITE)
-        { soap->errnum = err;
-          return SOAP_EOF;
-        }
-#endif
-        if (err == SOAP_EWOULDBLOCK || err == SOAP_EAGAIN)
-        {
-#ifdef WITH_OPENSSL
-          if (soap->ssl && r == SSL_ERROR_WANT_READ)
-            r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, soap->send_timeout ? soap->send_timeout : -10000);
-          else
-            r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, soap->send_timeout ? soap->send_timeout : -10000);
-#else
-          r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, soap->send_timeout ? soap->send_timeout : -10000);
-#endif
-	  if (!r && soap->send_timeout)
-            return SOAP_EOF;
-	  if (r < 0 && soap->errnum != SOAP_EINTR)
-            return SOAP_EOF;
-        }
-        else if (err && err != SOAP_EINTR)
-        { soap->errnum = err;
-          return SOAP_EOF;
-        }
-        nwritten = 0; /* and call write() again */
-      }
-    }
-    else
-    {
-#ifdef WITH_FASTCGI
-      nwritten = fwrite((void*)s, 1, n, stdout);
-      fflush(stdout);
-#else
-#ifdef UNDER_CE
-      nwritten = fwrite(s, 1, n, soap->sendfd);
-#else
-#ifdef VXWORKS
-#ifdef WMW_RPM_IO
-      if (soap->rpmreqid)
-        nwritten = (httpBlockPut(soap->rpmreqid, (char*)s, n) == 0) ? n : -1; 
-      else
-#endif
-        nwritten = fwrite(s, sizeof(char), n, fdopen(soap->sendfd, "w"));
-#else
-#ifdef WIN32
-      nwritten = _write(soap->sendfd, s, (unsigned int)n);
-#else
-      nwritten = write(soap->sendfd, s, (unsigned int)n);
-#endif
-#endif
-#endif
-#endif
-      if (nwritten <= 0)
-      { 
-#ifndef WITH_FASTCGI
-        err = soap_errno;
-#else
-        err = EOF;
-#endif
-        if (err && err != SOAP_EINTR && err != SOAP_EWOULDBLOCK && err != SOAP_EAGAIN)
-        { soap->errnum = err;
-          return SOAP_EOF;
-        }
-        nwritten = 0; /* and call write() again */
-      }
-    }
-    n -= nwritten;
-    s += nwritten;
-  }
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_send_raw(struct soap *soap, const char *s, size_t n)
-{ if (!n)
-    return SOAP_OK;
-  if (soap->mode & SOAP_IO_LENGTH)
-  { soap->count += n;
-#ifndef WITH_LEANER
-    if (soap->fpreparesend && (soap->mode & SOAP_IO) != SOAP_IO_STORE)
-      return soap->error = soap->fpreparesend(soap, s, n);
-#endif
-    return SOAP_OK;
-  }
-  if (soap->mode & SOAP_IO)
-  { register size_t i = SOAP_BUFLEN - soap->bufidx;
-    while (n >= i)
-    { memcpy(soap->buf + soap->bufidx, s, i);
-      soap->bufidx = SOAP_BUFLEN;
-      if (soap_flush(soap))
-        return soap->error;
-      s += i;
-      n -= i;
-      i = SOAP_BUFLEN;
-    }
-    memcpy(soap->buf + soap->bufidx, s, n);
-    soap->bufidx += n;
-    return SOAP_OK;
-  }
-  return soap_flush_raw(soap, s, n);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_flush(struct soap *soap)
-{ register size_t n = soap->bufidx;
-  if (n)
-  {
-#ifndef WITH_LEANER
-    if ((soap->mode & SOAP_IO) == SOAP_IO_STORE)
-    { register int r;
-      if (soap->fpreparesend && (r = soap->fpreparesend(soap, soap->buf, n)))
-        return soap->error = r;
-    }
-#endif
-    soap->bufidx = 0;
-#ifdef WITH_ZLIB
-    if (soap->mode & SOAP_ENC_ZLIB)
-    { soap->d_stream->next_in = (Byte*)soap->buf;
-      soap->d_stream->avail_in = (unsigned int)n;
-#ifdef WITH_GZIP
-      soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)n);
-#endif
-      do
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflating %u bytes\n", soap->d_stream->avail_in));
-        if (deflate(soap->d_stream, Z_NO_FLUSH) != Z_OK)
-        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to deflate: %s\n", soap->d_stream->msg?soap->d_stream->msg:SOAP_STR_EOS));
-          return soap->error = SOAP_ZLIB_ERROR;
-        }
-        if (!soap->d_stream->avail_out)
-        { if (soap_flush_raw(soap, soap->z_buf, SOAP_BUFLEN))
-            return soap->error;
-          soap->d_stream->next_out = (Byte*)soap->z_buf;
-          soap->d_stream->avail_out = SOAP_BUFLEN;
-        }
-      } while (soap->d_stream->avail_in);
-    }
-    else
-#endif
-      return soap_flush_raw(soap, soap->buf, n);
-  }
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_flush_raw(struct soap *soap, const char *s, size_t n)
-{ if ((soap->mode & SOAP_IO) == SOAP_IO_STORE)
-  { register char *t;
-    if (!(t = (char*)soap_push_block(soap, NULL, n)))
-      return soap->error = SOAP_EOM;
-    memcpy(t, s, n);
-    return SOAP_OK;
-  }
-#ifndef WITH_LEANER
-  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
-  { char t[16];
-    sprintf(t, "\r\n%lX\r\n" + (soap->chunksize ? 0 : 2), (unsigned long)n);
-    DBGMSG(SENT, t, strlen(t));
-    if ((soap->error = soap->fsend(soap, t, strlen(t))))
-      return soap->error;
-    soap->chunksize += n;
-  }
-  DBGMSG(SENT, s, n);
-#endif
-  return soap->error = soap->fsend(soap, s, n);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_send(struct soap *soap, const char *s)
-{ if (s)
-    return soap_send_raw(soap, s, strlen(s));
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_send2(struct soap *soap, const char *s1, const char *s2)
-{ if (soap_send(soap, s1))
-    return soap->error;
-  return soap_send(soap, s2);
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_send3(struct soap *soap, const char *s1, const char *s2, const char *s3)
-{ if (soap_send(soap, s1)
-   || soap_send(soap, s2))
-    return soap->error;
-  return soap_send(soap, s3);
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIO
-#ifndef PALM_1
-static size_t
-frecv(struct soap *soap, char *s, size_t n)
-{ register int r;
-  register int retries = 100; /* max 100 retries with non-blocking sockets */
-  soap->errnum = 0;
-#if defined(__cplusplus) && !defined(WITH_LEAN) && !defined(WITH_COMPAT)
-  if (soap->is)
-  { if (soap->is->good())
-      return soap->is->read(s, (std::streamsize)n).gcount();
-    return 0;
-  }
-#endif
-  if (soap_valid_socket(soap->socket))
-  { for (;;)
-    { 
-#ifdef WITH_OPENSSL
-      register int err = 0;
-#endif
-#ifdef WITH_OPENSSL
-      if (soap->recv_timeout && !soap->ssl) /* SSL: sockets are nonblocking */
-#else
-      if (soap->recv_timeout)
-#endif
-      { for (;;)
-        { r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, soap->recv_timeout);
-          if (r > 0)
-            break;
-          if (!r)
-            return 0;
-	  r = soap->errnum;
-          if (r != SOAP_EINTR && r != SOAP_EAGAIN && r != SOAP_EWOULDBLOCK)
-            return 0;
-        }
-      }
-#ifdef WITH_OPENSSL
-      if (soap->ssl)
-      { r = SSL_read(soap->ssl, s, (int)n);
-        if (r > 0)
-          return (size_t)r;
-        err = SSL_get_error(soap->ssl, r);
-        if (err != SSL_ERROR_NONE && err != SSL_ERROR_WANT_READ && err != SSL_ERROR_WANT_WRITE)
-          return 0;
-      }
-      else if (soap->bio)
-      { r = BIO_read(soap->bio, s, (int)n);
-        if (r > 0)
-          return (size_t)r;
-        return 0;
-      }
-      else
-#endif
-      { 
-#ifndef WITH_LEAN
-        if ((soap->omode & SOAP_IO_UDP))
-        { SOAP_SOCKLEN_T k = (SOAP_SOCKLEN_T)sizeof(soap->peer);
-          memset((void*)&soap->peer, 0, sizeof(soap->peer));
-          r = recvfrom(soap->socket, s, (SOAP_WINSOCKINT)n, soap->socket_flags, (struct sockaddr*)&soap->peer, &k);	/* portability note: see SOAP_SOCKLEN_T definition in stdsoap2.h */
-          soap->peerlen = (size_t)k;
-#ifndef WITH_IPV6
-          soap->ip = ntohl(soap->peer.sin_addr.s_addr);
-#endif
-        }
-        else
-#endif
-          r = recv(soap->socket, s, (int)n, soap->socket_flags);
-#ifdef PALM
-        /* CycleSyncDisplay(curStatusMsg); */
-#endif
-        if (r >= 0)
-          return (size_t)r;
-        r = soap_socket_errno(soap->socket);
-        if (r != SOAP_EINTR && r != SOAP_EAGAIN && r != SOAP_EWOULDBLOCK)
-        { soap->errnum = r;
-          return 0;
-        }
-      }
-#ifdef WITH_OPENSSL
-      if (soap->ssl && err == SSL_ERROR_WANT_WRITE)
-         r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, soap->recv_timeout ? soap->recv_timeout : 5);
-       else
-         r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, soap->recv_timeout ? soap->recv_timeout : 5);
-#else
-       r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, soap->recv_timeout ? soap->recv_timeout : 5);
-#endif
-       if (!r && soap->recv_timeout)
-         return 0;
-       if (r < 0)
-       { r = soap->errnum;
-         if (r != SOAP_EINTR && r != SOAP_EAGAIN && r != SOAP_EWOULDBLOCK)
-           return 0;
-       }
-       if (retries-- <= 0)
-         return 0;
-#ifdef PALM
-      r = soap_socket_errno(soap->socket);
-      if (r != SOAP_EINTR && retries-- <= 0)
-      { soap->errnum = r;
-        return 0;
-      }
-#endif
-    }
-  }
-#ifdef WITH_FASTCGI
-  return fread(s, 1, n, stdin);
-#else
-#ifdef UNDER_CE
-  return fread(s, 1, n, soap->recvfd);
-#else
-#ifdef WMW_RPM_IO
-  if (soap->rpmreqid)
-    r = httpBlockRead(soap->rpmreqid, s, n);
-  else
-#endif
-#ifdef WIN32
-    r = _read(soap->recvfd, s, (unsigned int)n);
-#else
-    r = read(soap->recvfd, s, (unsigned int)n);
-#endif
-  if (r >= 0)
-    return (size_t)r;
-  soap->errnum = soap_errno;
-  return 0;
-#endif
-#endif
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOHTTP
-#ifndef PALM_1
-static soap_wchar
-soap_getchunkchar(struct soap *soap)
-{ if (soap->bufidx < soap->buflen)
-    return soap->buf[soap->bufidx++];
-  soap->bufidx = 0;
-  soap->buflen = soap->chunkbuflen = soap->frecv(soap, soap->buf, SOAP_BUFLEN);
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes from socket %d\n", (unsigned int)soap->buflen, soap->socket));
-  DBGMSG(RECV, soap->buf, soap->buflen);
-  if (soap->buflen)
-    return soap->buf[soap->bufidx++];
-  return EOF;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-static int
-soap_isxdigit(int c)
-{ return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f');
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_recv_raw(struct soap *soap)
-{ register size_t ret;
-#if !defined(WITH_LEANER) || defined(WITH_ZLIB)
-  register int r;
-#endif
-#ifdef WITH_ZLIB
-  if (soap->mode & SOAP_ENC_ZLIB)
-  { if (soap->d_stream->next_out == Z_NULL)
-      return EOF;
-    if (soap->d_stream->avail_in || !soap->d_stream->avail_out)
-    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflating\n"));
-      soap->d_stream->next_out = (Byte*)soap->buf;
-      soap->d_stream->avail_out = SOAP_BUFLEN;
-      r = inflate(soap->d_stream, Z_NO_FLUSH);
-      if (r == Z_NEED_DICT && soap->z_dict)
-	r = inflateSetDictionary(soap->d_stream, (const Bytef*)soap->z_dict, soap->z_dict_len);
-      if (r == Z_OK || r == Z_STREAM_END)
-      { soap->bufidx = 0;
-        ret = soap->buflen = SOAP_BUFLEN - soap->d_stream->avail_out;
-        if (soap->zlib_in == SOAP_ZLIB_GZIP)
-          soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)ret);
-        if (r == Z_STREAM_END)
-        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated %lu->%lu bytes\n", soap->d_stream->total_in, soap->d_stream->total_out));
-          soap->z_ratio_in = (float)soap->d_stream->total_in / (float)soap->d_stream->total_out;
-          soap->d_stream->next_out = Z_NULL;
-        }
-        if (ret)
-        { soap->count += ret;
-          DBGLOG(RECV, SOAP_MESSAGE(fdebug, "\n---- decompressed ----\n"));
-          DBGMSG(RECV, soap->buf, ret);
-          DBGLOG(RECV, SOAP_MESSAGE(fdebug, "\n----\n"));
-#ifndef WITH_LEANER
-          if (soap->fpreparerecv && (r = soap->fpreparerecv(soap, soap->buf, ret)))
-            return soap->error = r;
-#endif
-          return SOAP_OK;
-        }
-      }
-      else if (r != Z_BUF_ERROR)
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflate error: %s\n", soap->d_stream->msg?soap->d_stream->msg:SOAP_STR_EOS));
-        soap->d_stream->next_out = Z_NULL;
-        soap->error = SOAP_ZLIB_ERROR;
-        return EOF;
-      }
-    }
-zlib_again:
-    if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK && !soap->chunksize)
-    { memcpy(soap->buf, soap->z_buf, SOAP_BUFLEN);
-      soap->buflen = soap->z_buflen;
-    }
-    DBGLOG(RECV, SOAP_MESSAGE(fdebug, "\n---- compressed ----\n"));
-  }
-#endif
-#ifndef WITH_NOHTTP
-  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) /* read HTTP chunked transfer */
-  { for (;;)
-    { register soap_wchar c;
-      char *t, tmp[8];
-      if (soap->chunksize)
-      { soap->buflen = ret = soap->frecv(soap, soap->buf, soap->chunksize > SOAP_BUFLEN ? SOAP_BUFLEN : soap->chunksize);
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Getting chunk: read %u bytes\n", (unsigned int)ret));
-        DBGMSG(RECV, soap->buf, ret);
-        soap->bufidx = 0;
-        soap->chunksize -= ret;
-        break;
-      }
-      t = tmp;
-      if (!soap->chunkbuflen)
-      { soap->chunkbuflen = ret = soap->frecv(soap, soap->buf, SOAP_BUFLEN);
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes (chunked) from socket %d\n", (unsigned int)ret, soap->socket));
-        DBGMSG(RECV, soap->buf, ret);
-        soap->bufidx = 0;
-        if (!ret)
-          return soap->ahead = EOF;
-      }
-      else
-        soap->bufidx = soap->buflen;
-      soap->buflen = soap->chunkbuflen;
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Getting chunk size (idx=%u len=%u)\n", (unsigned int)soap->bufidx, (unsigned int)soap->buflen));
-      while (!soap_isxdigit((int)(c = soap_getchunkchar(soap))))
-      { if ((int)c == EOF)
-          return soap->ahead = EOF;
-      }
-      do
-        *t++ = (char)c;
-      while (soap_isxdigit((int)(c = soap_getchunkchar(soap))) && t - tmp < 7);
-      while ((int)c != EOF && c != '\n')
-        c = soap_getchunkchar(soap);
-      if ((int)c == EOF)
-        return soap->ahead = EOF;
-      *t = '\0';
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunk size = %s (hex)\n", tmp));
-      soap->chunksize = soap_strtoul(tmp, &t, 16);
-      if (!soap->chunksize)
-      { soap->chunkbuflen = 0;
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of chunked message\n"));
-        while ((int)c != EOF && c != '\n')
-          c = soap_getchunkchar(soap);
-        ret = 0;
-        soap->ahead = EOF;
-	break;
-      }
-      soap->buflen = soap->bufidx + soap->chunksize;
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Moving buf len to idx=%u len=%u (%s)\n", (unsigned int)soap->bufidx, (unsigned int)soap->buflen, tmp));
-      if (soap->buflen > soap->chunkbuflen)
-      { soap->buflen = soap->chunkbuflen;
-        soap->chunksize -= soap->buflen - soap->bufidx;
-        soap->chunkbuflen = 0;
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Passed end of buffer for chunked HTTP (%u bytes left)\n", (unsigned int)(soap->buflen - soap->bufidx)));
-      }
-      else if (soap->chunkbuflen)
-        soap->chunksize = 0;
-      ret = soap->buflen - soap->bufidx;
-      if (ret)
-        break;
-    }
-  }
-  else
-#endif
-  { soap->bufidx = 0;
-    soap->buflen = ret = soap->frecv(soap, soap->buf, SOAP_BUFLEN);
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Read %u bytes from socket %d\n", (unsigned int)ret, soap->socket));
-    DBGMSG(RECV, soap->buf, ret);
-  }
-#ifdef WITH_ZLIB
-  if (soap->mode & SOAP_ENC_ZLIB)
-  { memcpy(soap->z_buf, soap->buf, SOAP_BUFLEN);
-    soap->d_stream->next_in = (Byte*)(soap->z_buf + soap->bufidx);
-    soap->d_stream->avail_in = (unsigned int)ret;
-    soap->d_stream->next_out = (Byte*)soap->buf;
-    soap->d_stream->avail_out = SOAP_BUFLEN;
-    r = inflate(soap->d_stream, Z_NO_FLUSH);
-    if (r == Z_NEED_DICT && soap->z_dict)
-      r = inflateSetDictionary(soap->d_stream, (const Bytef*)soap->z_dict, soap->z_dict_len);
-    if (r == Z_OK || r == Z_STREAM_END)
-    { soap->bufidx = 0;
-      soap->z_buflen = soap->buflen;
-      soap->buflen = SOAP_BUFLEN - soap->d_stream->avail_out;
-      if (soap->zlib_in == SOAP_ZLIB_GZIP)
-        soap->z_crc = crc32(soap->z_crc, (Byte*)soap->buf, (unsigned int)soap->buflen);
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated %u bytes\n", (unsigned int)soap->buflen));
-      if (ret && !soap->buflen && r != Z_STREAM_END)
-        goto zlib_again;
-      ret = soap->buflen;
-      if (r == Z_STREAM_END)
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflated total %lu->%lu bytes\n", soap->d_stream->total_in, soap->d_stream->total_out));
-        soap->z_ratio_in = (float)soap->d_stream->total_in / (float)soap->d_stream->total_out;
-        soap->d_stream->next_out = Z_NULL;
-      }
-      DBGLOG(RECV, SOAP_MESSAGE(fdebug, "\n---- decompressed ----\n"));
-      DBGMSG(RECV, soap->buf, ret);
-#ifndef WITH_LEANER
-      if (soap->fpreparerecv && (r = soap->fpreparerecv(soap, soap->buf, ret)))
-        return soap->error = r;
-#endif
-    }
-    else
-    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to inflate: (%d) %s\n", r, soap->d_stream->msg?soap->d_stream->msg:SOAP_STR_EOS));
-      soap->d_stream->next_out = Z_NULL;
-      soap->error = SOAP_ZLIB_ERROR;
-      return EOF;
-    }
-  }
-#endif
-#ifndef WITH_LEANER
-  if (soap->fpreparerecv
-#ifdef WITH_ZLIB
-   && soap->zlib_in == SOAP_ZLIB_NONE
-#endif
-   && (r = soap->fpreparerecv(soap, soap->buf + soap->bufidx, ret)))
-    return soap->error = r;
-#endif
-  soap->count += ret;
-  return !ret;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_recv(struct soap *soap)
-{ 
-#ifndef WITH_LEANER
-  if (soap->mode & SOAP_ENC_DIME)
-  { if (soap->dime.buflen)
-    { char *s;
-      int i;
-      unsigned char tmp[12];
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME hdr for chunked DIME is in buffer\n"));
-      soap->count += soap->dime.buflen - soap->buflen;
-      soap->buflen = soap->dime.buflen;
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Skip padding (%ld bytes)\n", -(long)soap->dime.size&3));
-      for (i = -(long)soap->dime.size&3; i > 0; i--)
-      { soap->bufidx++;
-        if (soap->bufidx >= soap->buflen)
-          if (soap_recv_raw(soap))
-            return EOF;
-      }
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get DIME hdr for next chunk\n"));
-      s = (char*)tmp;
-      for (i = 12; i > 0; i--)
-      { *s++ = soap->buf[soap->bufidx++];
-        if (soap->bufidx >= soap->buflen)
-          if (soap_recv_raw(soap))
-            return EOF;
-      }
-      soap->dime.flags = tmp[0] & 0x7;
-      soap->dime.size = ((size_t)tmp[8] << 24) | ((size_t)tmp[9] << 16) | ((size_t)tmp[10] << 8) | ((size_t)tmp[11]);
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get DIME chunk (%u bytes)\n", (unsigned int)soap->dime.size));
-      if (soap->dime.flags & SOAP_DIME_CF)
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "More chunking\n"));
-        soap->dime.chunksize = soap->dime.size;
-        if (soap->buflen - soap->bufidx >= soap->dime.size)
-        { soap->dime.buflen = soap->buflen;
-          soap->buflen = soap->bufidx + soap->dime.chunksize;
-        }
-        else
-          soap->dime.chunksize -= soap->buflen - soap->bufidx;
-      }
-      else
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Last chunk\n"));
-        soap->dime.buflen = 0;
-        soap->dime.chunksize = 0;
-      }
-      soap->count = soap->buflen - soap->bufidx;
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%u bytes remaining\n", (unsigned int)soap->count));
-      return SOAP_OK;
-    }
-    if (soap->dime.chunksize)
-    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get next DIME hdr for chunked DIME (%u bytes chunk)\n", (unsigned int)soap->dime.chunksize));
-      if (soap_recv_raw(soap))
-        return EOF;
-      if (soap->buflen - soap->bufidx >= soap->dime.chunksize)
-      { soap->dime.buflen = soap->buflen;
-        soap->count -= soap->buflen - soap->bufidx - soap->dime.chunksize;
-        soap->buflen = soap->bufidx + soap->dime.chunksize;
-      }
-      else
-        soap->dime.chunksize -= soap->buflen - soap->bufidx;
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%lu bytes remaining, count=%u\n", (unsigned long)(soap->buflen-soap->bufidx), (unsigned int)soap->count));
-      return SOAP_OK;
-    }
-  }
-#endif
-  return soap_recv_raw(soap);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-soap_wchar
-SOAP_FMAC2
-soap_getchar(struct soap *soap)
-{ register soap_wchar c;
-  c = soap->ahead;
-  if (c)
-  { if (c != EOF)
-      soap->ahead = 0;
-    return c;
-  }
-  return soap_get1(soap);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-const struct soap_code_map*
-SOAP_FMAC2
-soap_code(const struct soap_code_map *code_map, const char *str)
-{ if (code_map && str)
-  { while (code_map->string)
-    { if (!strcmp(str, code_map->string)) /* case sensitive */
-        return code_map;
-      code_map++;
-    }
-  }
-  return NULL;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-long
-SOAP_FMAC2
-soap_code_int(const struct soap_code_map *code_map, const char *str, long other)
-{ if (code_map)
-  { while (code_map->string)
-    { if (!soap_tag_cmp(str, code_map->string)) /* case insensitive */
-        return code_map->code;
-      code_map++;
-    }
-  }
-  return other;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_code_str(const struct soap_code_map *code_map, long code)
-{ if (!code_map)
-    return NULL;
-  while (code_map->code != code && code_map->string)
-    code_map++;
-  return code_map->string;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-long
-SOAP_FMAC2
-soap_code_bits(const struct soap_code_map *code_map, const char *str)
-{ register long bits = 0;
-  if (code_map)
-  { while (str && *str)
-    { const struct soap_code_map *p;
-      for (p = code_map; p->string; p++)
-      { register size_t n = strlen(p->string);
-        if (!strncmp(p->string, str, n) && soap_blank(str[n]))
-        { bits |= p->code;
-          str += n;
-          while (*str > 0 && *str <= 32)
-            str++;
-          break;
-        }
-      }
-      if (!p->string)
-        return 0;
-    }
-  }
-  return bits;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_code_list(struct soap *soap, const struct soap_code_map *code_map, long code)
-{ register char *t = soap->tmpbuf;
-  if (code_map)
-  { while (code_map->string)
-    { if (code_map->code & code)
-      { register const char *s = code_map->string;
-        if (t != soap->tmpbuf)
-          *t++ = ' ';
-        while (*s && t < soap->tmpbuf + sizeof(soap->tmpbuf) - 1)
-          *t++ = *s++;
-        if (t == soap->tmpbuf + sizeof(soap->tmpbuf) - 1)
-          break;
-      }
-      code_map++;
-    }
-  }
-  *t = '\0';
-  return soap->tmpbuf;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-static soap_wchar
-soap_char(struct soap *soap)
-{ char tmp[8];
-  register int i;
-  register soap_wchar c;
-  register char *s = tmp;
-  for (i = 0; i < 7; i++)
-  { c = soap_get1(soap);
-    if (c == ';' || (int)c == EOF)
-      break;
-    *s++ = (char)c;
-  }
-  *s = '\0';
-  if (*tmp == '#')
-  { if (tmp[1] == 'x' || tmp[1] == 'X')
-      return (soap_wchar)soap_strtol(tmp + 2, NULL, 16);
-    return (soap_wchar)soap_strtol(tmp + 1, NULL, 10);
-  }
-  if (!strcmp(tmp, "lt"))
-    return '<';
-  if (!strcmp(tmp, "gt"))
-    return '>';
-  if (!strcmp(tmp, "amp"))
-    return '&';
-  if (!strcmp(tmp, "quot"))
-    return '"';
-  if (!strcmp(tmp, "apos"))
-    return '\'';
-#ifndef WITH_LEAN
-  return (soap_wchar)soap_code_int(html_entity_codes, tmp, SOAP_UNKNOWN_CHAR);
-#else
-  return SOAP_UNKNOWN_CHAR; /* use this to represent unknown code */
-#endif
-}
-#endif
-
-/******************************************************************************/
-#ifdef WITH_LEAN
-#ifndef PALM_1
-soap_wchar
-soap_get0(struct soap *soap)
-{ if (soap->bufidx >= soap->buflen && soap_recv(soap))
-    return EOF;
-  return (unsigned char)soap->buf[soap->bufidx];
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifdef WITH_LEAN
-#ifndef PALM_1
-soap_wchar
-soap_get1(struct soap *soap)
-{ if (soap->bufidx >= soap->buflen && soap_recv(soap))
-    return EOF;
-  return (unsigned char)soap->buf[soap->bufidx++];
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-soap_wchar
-SOAP_FMAC2
-soap_get(struct soap *soap)
-{ register soap_wchar c;
-  c = soap->ahead;
-  if (c)
-  { if ((int)c != EOF)
-      soap->ahead = 0;
-  }
-  else
-    c = soap_get1(soap);
-  while ((int)c != EOF)
-  { if (soap->cdata)
-    { if (c == ']')
-      { c = soap_get1(soap);
-        if (c == ']')
-        { c = soap_get0(soap);
-          if (c == '>')
-          { soap->cdata = 0;
-            soap_get1(soap);
-            c = soap_get1(soap);
-          }
-          else
-          { soap_unget(soap, ']');
-            return ']';
-          }
-        }
-        else
-        { soap_revget1(soap);
-          return ']';
-        }
-      }
-      else
-        return c;
-    }
-    switch (c)
-    { case '<':
-        do c = soap_get1(soap);
-        while (soap_blank(c));
-        if (c == '!' || c == '?' || c == '%')
-        { register int k = 1;
-          if (c == '!')
-          { c = soap_get1(soap);
-            if (c == '[')
-            { do c = soap_get1(soap);
-              while ((int)c != EOF && c != '[');
-              if ((int)c == EOF)
-                break;
-              soap->cdata = 1;
-              c = soap_get1(soap);
-              continue;
-            }
-            if (c == '-' && (c = soap_get1(soap)) == '-')
-            { do
-              { c = soap_get1(soap);
-                if (c == '-' && (c = soap_get1(soap)) == '-')
-                  break;
-              } while ((int)c != EOF);
-            }
-          }
-          else if (c == '?')
-            c = soap_get_pi(soap);
-          while ((int)c != EOF)
-          { if (c == '<')
-              k++;
-            else if (c == '>')
-            { if (--k <= 0)
-                break;
-            }
-            c = soap_get1(soap);
-          }
-          if ((int)c == EOF)
-            break;
-          c = soap_get1(soap);
-          continue;
-        }
-        if (c == '/')
-          return SOAP_TT;
-        soap_revget1(soap);
-        return SOAP_LT;
-      case '>':
-        return SOAP_GT;
-      case '"':
-        return SOAP_QT;
-      case '\'':
-        return SOAP_AP;
-      case '&':
-        return soap_char(soap) | 0x80000000;
-    }
-    break;
-  }
-  return c;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-static soap_wchar
-soap_get_pi(struct soap *soap)
-{ char buf[64];
-  register char *s = buf;
-  register int i = sizeof(buf);
-  register soap_wchar c = soap_getchar(soap);
-  /* This is a quick way to parse XML PI and we could use a callback instead to
-   * enable applications to intercept processing instructions */
-  while ((int)c != EOF && c != '?')
-  { if (--i > 0)
-    { if (soap_blank(c))
-        c = ' ';
-      *s++ = (char)c;
-    }
-    c = soap_getchar(soap);
-  }
-  *s = '\0';
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "XML PI <?%s?>\n", buf));
-  if (!strncmp(buf, "xml ", 4))
-  { s = strstr(buf, " encoding=");
-    if (s && s[10])
-    { if (!soap_tag_cmp(s + 11, "iso-8859-1*")
-       || !soap_tag_cmp(s + 11, "latin1*"))
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Switching to latin1 encoding\n"));
-        soap->mode |= SOAP_ENC_LATIN;
-      }
-      else if (!soap_tag_cmp(s + 11, "utf-8*"))
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Switching to utf-8 encoding\n"));
-        soap->mode &= ~SOAP_ENC_LATIN;
-      }
-    }
-  }
-  if ((int)c != EOF)
-    c = soap_getchar(soap);
-  return c;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_move(struct soap *soap, long n)
-{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Moving %ld bytes forward\n", (long)n));
-  for (; n > 0; n--)
-    if ((int)soap_getchar(soap) == EOF)
-      return SOAP_EOF;
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-size_t
-SOAP_FMAC2
-soap_tell(struct soap *soap)
-{ return soap->count - soap->buflen + soap->bufidx - (soap->ahead != 0);
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_pututf8(struct soap *soap, register unsigned long c)
-{ char tmp[16];
-  if (c < 0x80 && c > 0)
-  { *tmp = (char)c;
-    return soap_send_raw(soap, tmp, 1);
-  }
-#ifndef WITH_LEAN
-  if (c >= 0x80)
-  { register char *t = tmp;
-    if (c < 0x0800)
-      *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
-    else
-    { if (c < 0x010000)
-        *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
-      else
-      { if (c < 0x200000)
-          *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
-        else
-        { if (c < 0x04000000)
-            *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
-          else
-          { *t++ = (char)(0xFC | ((c >> 30) & 0x01));
-            *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
-          }
-          *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
-        }     
-        *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
-      }
-      *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
-    }
-    *t++ = (char)(0x80 | (c & 0x3F));
-    *t = '\0';
-  }
-#else
-  sprintf(tmp, "&#%lu;", c);
-#endif
-  return soap_send(soap, tmp);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-soap_wchar
-SOAP_FMAC2
-soap_getutf8(struct soap *soap)
-{ register soap_wchar c, c1, c2, c3, c4;
-  c = soap->ahead;
-  if (c > 0x7F)
-  { soap->ahead = 0;
-    return c;
-  }
-  c = soap_get(soap);
-  if (c < 0x80 || (soap->mode & SOAP_ENC_LATIN))
-    return c;
-  c1 = soap_get1(soap);
-  if (c1 < 0x80)
-  { soap_revget1(soap); /* doesn't look like this is UTF8 */
-    return c;
-  }
-  c1 &= 0x3F;
-  if (c < 0xE0)
-    return ((soap_wchar)(c & 0x1F) << 6) | c1;
-  c2 = (soap_wchar)soap_get1(soap) & 0x3F;
-  if (c < 0xF0)
-    return ((soap_wchar)(c & 0x0F) << 12) | (c1 << 6) | c2;
-  c3 = (soap_wchar)soap_get1(soap) & 0x3F;
-  if (c < 0xF8)
-    return ((soap_wchar)(c & 0x07) << 18) | (c1 << 12) | (c2 << 6) | c3;
-  c4 = (soap_wchar)soap_get1(soap) & 0x3F;
-  if (c < 0xFC)
-    return ((soap_wchar)(c & 0x03) << 24) | (c1 << 18) | (c2 << 12) | (c3 << 6) | c4;
-  return ((soap_wchar)(c & 0x01) << 30) | (c1 << 24) | (c2 << 18) | (c3 << 12) | (c4 << 6) | (soap_wchar)(soap_get1(soap) & 0x3F);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_puthex(struct soap *soap, const unsigned char *s, int n)
-{ char d[2];
-  register int i;
-#ifdef WITH_DOM
-  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
-  { if (!(soap->dom->data = soap_s2hex(soap, s, NULL, n)))
-      return soap->error;
-    return SOAP_OK;
-  }
-#endif
-  for (i = 0; i < n; i++)
-  { register int m = *s++;
-    d[0] = (char)((m >> 4) + (m > 159 ? '7' : '0'));
-    m &= 0x0F;
-    d[1] = (char)(m + (m > 9 ? '7' : '0'));
-    if (soap_send_raw(soap, d, 2))
-      return soap->error;
-  }
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-unsigned char*
-SOAP_FMAC2
-soap_gethex(struct soap *soap, int *n)
-{
-#ifdef WITH_DOM
-  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
-  { soap->dom->data = soap_string_in(soap, 0, -1, -1);
-    return (unsigned char*)soap_hex2s(soap, soap->dom->data, NULL, 0, n);
-  }
-#endif
-#ifdef WITH_FAST
-  soap->labidx = 0;
-  for (;;)
-  { register char *s;
-    register size_t i, k;
-    if (soap_append_lab(soap, NULL, 0))
-      return NULL;
-    s = soap->labbuf + soap->labidx;
-    k = soap->lablen - soap->labidx;
-    soap->labidx = soap->lablen;
-    for (i = 0; i < k; i++)
-    { register char d1, d2;
-      register soap_wchar c;
-      c = soap_get(soap);
-      if (soap_isxdigit(c))
-      { d1 = (char)c;
-        c = soap_get(soap); 
-        if (soap_isxdigit(c))
-          d2 = (char)c;
-        else 
-        { soap->error = SOAP_TYPE;
-          return NULL;
-        }
-      }
-      else
-      { unsigned char *p;
-        soap_unget(soap, c);
-        if (n)
-          *n = (int)(soap->lablen + i - k);
-        p = (unsigned char*)soap_malloc(soap, soap->lablen + i - k);
-        if (p)
-          memcpy(p, soap->labbuf, soap->lablen + i - k);
-        return p;
-      }
-      *s++ = ((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0');
-    }
-  }
-#else
-  if (soap_new_block(soap) == NULL)
-    return NULL;
-  for (;;)
-  { register int i;
-    register char *s = (char*)soap_push_block(soap, NULL, SOAP_BLKLEN);
-    if (!s)
-    { soap_end_block(soap, NULL);
-      return NULL;
-    }
-    for (i = 0; i < SOAP_BLKLEN; i++)
-    { register char d1, d2;
-      register soap_wchar c = soap_get(soap);
-      if (soap_isxdigit(c))
-      { d1 = (char)c;
-        c = soap_get(soap); 
-        if (soap_isxdigit(c))
-          d2 = (char)c;
-        else 
-        { soap_end_block(soap, NULL);
-          soap->error = SOAP_TYPE;
-          return NULL;
-        }
-      }
-      else
-      { unsigned char *p;
-        soap_unget(soap, c);
-        if (n)
-          *n = (int)soap_size_block(soap, NULL, i);
-        p = (unsigned char*)soap_save_block(soap, NULL, 0);
-        return p;
-      }
-      *s++ = ((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0');
-    }
-  }
-#endif
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_putbase64(struct soap *soap, const unsigned char *s, int n)
-{ register int i;
-  register unsigned long m;
-  char d[4];
-  if (!s)
-    return SOAP_OK;
-#ifdef WITH_DOM
-  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
-  { if (!(soap->dom->data = soap_s2base64(soap, s, NULL, n)))
-      return soap->error;
-    return SOAP_OK;
-  }
-#endif
-  for (; n > 2; n -= 3, s += 3)
-  { m = s[0];
-    m = (m << 8) | s[1];
-    m = (m << 8) | s[2];
-    for (i = 4; i > 0; m >>= 6)
-      d[--i] = soap_base64o[m & 0x3F];
-    if (soap_send_raw(soap, d, 4))
-      return soap->error;
-  }
-  if (n > 0)
-  { m = 0;
-    for (i = 0; i < n; i++)
-      m = (m << 8) | *s++;
-    for (; i < 3; i++)
-      m <<= 8;
-    for (i++; i > 0; m >>= 6)
-      d[--i] = soap_base64o[m & 0x3F];
-    for (i = 3; i > n; i--)
-      d[i] = '=';
-    if (soap_send_raw(soap, d, 4))
-      return soap->error;
-  }
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-unsigned char*
-SOAP_FMAC2
-soap_getbase64(struct soap *soap, int *n, int malloc_flag)
-{ 
-#ifdef WITH_DOM
-  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
-  { soap->dom->data = soap_string_in(soap, 0, -1, -1);
-    return (unsigned char*)soap_base642s(soap, soap->dom->data, NULL, 0, n);
-  }
-#endif
-#ifdef WITH_FAST
-  soap->labidx = 0;
-  for (;;)
-  { register size_t i, k;
-    register char *s;
-    if (soap_append_lab(soap, NULL, 2))
-      return NULL;
-    s = soap->labbuf + soap->labidx;
-    k = soap->lablen - soap->labidx;
-    soap->labidx = 3 * (soap->lablen / 3);
-    if (!s)
-      return NULL;
-    if (k > 2)
-    { for (i = 0; i < k - 2; i += 3)
-      { register unsigned long m = 0;
-        register int j = 0;
-        do
-        { register soap_wchar c = soap_get(soap);
-          if (c == '=' || c < 0)
-          { unsigned char *p;
-            switch (j)
-            { case 2:
-                *s++ = (char)((m >> 4) & 0xFF);
-                i++;
-                break;
-              case 3:
-                *s++ = (char)((m >> 10) & 0xFF);
-                *s++ = (char)((m >> 2) & 0xFF);
-                i += 2;
-            }
-            if (n)
-              *n = (int)(soap->lablen + i - k);
-            p = (unsigned char*)soap_malloc(soap, soap->lablen + i - k);
-            if (p)
-              memcpy(p, soap->labbuf, soap->lablen + i - k);
-            if (c >= 0)
-            { while ((int)((c = soap_get(soap)) != EOF) && c != SOAP_LT && c != SOAP_TT)
-                ;
-            }
-            soap_unget(soap, c);
-            return p;
-          }
-          c -= '+';
-          if (c >= 0 && c <= 79)
-          { register int b = soap_base64i[c];
-            if (b >= 64)
-            { soap->error = SOAP_TYPE;
-              return NULL;  
-            }
-            m = (m << 6) + b;
-            j++;
-          }
-          else if (!soap_blank(c + '+'))
-          { soap->error = SOAP_TYPE;
-            return NULL;  
-          }
-        } while (j < 4);
-        *s++ = (char)((m >> 16) & 0xFF);
-        *s++ = (char)((m >> 8) & 0xFF);
-        *s++ = (char)(m & 0xFF);
-      }
-    }
-  }
-#else
-  if (soap_new_block(soap) == NULL)
-    return NULL;
-  for (;;)
-  { register int i;
-    register char *s = (char*)soap_push_block(soap, NULL, 3 * SOAP_BLKLEN); /* must be multiple of 3 */
-    if (!s)
-    { soap_end_block(soap, NULL);
-      return NULL;
-    }
-    for (i = 0; i < SOAP_BLKLEN; i++)
-    { register unsigned long m = 0;
-      register int j = 0;
-      do
-      { register soap_wchar c = soap_get(soap);
-        if (c == '=' || c < 0)
-        { unsigned char *p;
-          i *= 3;
-          switch (j)
-          { case 2:
-              *s++ = (char)((m >> 4) & 0xFF);
-              i++;
-              break;
-            case 3:
-              *s++ = (char)((m >> 10) & 0xFF);
-              *s++ = (char)((m >> 2) & 0xFF);
-              i += 2;
-          }
-          if (n)
-            *n = (int)soap_size_block(soap, NULL, i);
-          p = (unsigned char*)soap_save_block(soap, NULL, 0);
-          if (c >= 0)
-          { while ((int)((c = soap_get(soap)) != EOF) && c != SOAP_LT && c != SOAP_TT)
-              ;
-          }
-          soap_unget(soap, c);
-          return p;
-        }
-        c -= '+';
-        if (c >= 0 && c <= 79)
-        { int b = soap_base64i[c];
-          if (b >= 64)
-          { soap->error = SOAP_TYPE;
-            return NULL;  
-          }
-          m = (m << 6) + b;
-          j++;
-        }
-        else if (!soap_blank(c))
-        { soap->error = SOAP_TYPE;
-          return NULL;  
-        }
-      } while (j < 4);
-      *s++ = (char)((m >> 16) & 0xFF);
-      *s++ = (char)((m >> 8) & 0xFF);
-      *s++ = (char)(m & 0xFF);
-    }
-  }
-#endif
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_xop_forward(struct soap *soap, unsigned char **ptr, int *size, char **id, char **type, char **options)
-{ /* Check MTOM xop:Include element (within hex/base64Binary) */
-  /* TODO: this code to be obsoleted with new import/xop.h conventions */
-  int body = soap->body; /* should save type too? */
-  if (!soap_peek_element(soap))
-  { if (!soap_element_begin_in(soap, "xop:Include", 0, NULL) && *soap->href)
-    { if (soap_dime_forward(soap, ptr, size, id, type, options))
-        return soap->error;
-    }
-    if (soap->body && soap_element_end_in(soap, NULL))
-      return soap->error;
-  }
-  soap->body = body;
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_dime_forward(struct soap *soap, unsigned char **ptr, int *size, char **id, char **type, char **options)
-{ struct soap_xlist *xp;
-  *ptr = NULL;
-  *size = 0;
-  *id = NULL;
-  *type = NULL;
-  *options = NULL;
-  if (!*soap->href)
-    return SOAP_OK;
-  *id = soap_strdup(soap, soap->href);
-  xp = (struct soap_xlist*)SOAP_MALLOC(soap, sizeof(struct soap_xlist));
-  if (!xp)
-    return soap->error = SOAP_EOM;
-  xp->next = soap->xlist;
-  xp->ptr = ptr;
-  xp->size = size;
-  xp->id = *id;
-  xp->type = type;
-  xp->options = options;
-  soap->xlist = xp;
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-char *
-SOAP_FMAC2
-soap_strdup(struct soap *soap, const char *s)
-{ char *t = NULL;
-  if (s && (t = (char*)soap_malloc(soap, strlen(s) + 1)))
-    strcpy(t, s);
-  return t;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-wchar_t *
-SOAP_FMAC2
-soap_wstrdup(struct soap *soap, const wchar_t *s)
-{ wchar_t *t = NULL;
-  if (s)
-  { size_t n = 0;
-    while (s[n])
-      n++;
-    if ((t = (wchar_t*)soap_malloc(soap, sizeof(wchar_t)*(n+1))))
-      memcpy(t, s, sizeof(wchar_t)*(n+1));
-  }
-  return t;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-struct soap_blist*
-SOAP_FMAC2
-soap_new_block(struct soap *soap)
-{ struct soap_blist *p;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New block sequence (prev=%p)\n", soap->blist));
-  if (!(p = (struct soap_blist*)SOAP_MALLOC(soap, sizeof(struct soap_blist))))
-  { soap->error = SOAP_EOM;   
-    return NULL;
-  }
-  p->next = soap->blist; 
-  p->ptr = NULL;
-  p->size = 0;
-  soap->blist = p;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-void*
-SOAP_FMAC2
-soap_push_block(struct soap *soap, struct soap_blist *b, size_t n)
-{ char *p;
-  if (!b)
-    b = soap->blist;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push block of %u bytes (%u bytes total)\n", (unsigned int)n, (unsigned int)b->size + (unsigned int)n));
-  if (!(p = (char*)SOAP_MALLOC(soap, n + sizeof(char*) + sizeof(size_t))))
-  { soap->error = SOAP_EOM;
-    return NULL;
-  }
-  *(char**)p = b->ptr;
-  *(size_t*)(p + sizeof(char*)) = n;
-  b->ptr = p;
-  b->size += n;
-  return p + sizeof(char*) + sizeof(size_t);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_pop_block(struct soap *soap, struct soap_blist *b)
-{ char *p;
-  if (!b)
-    b = soap->blist;
-  if (!b->ptr)
-    return;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Pop block\n"));
-  p = b->ptr;
-  b->size -= *(size_t*)(p + sizeof(char*));
-  b->ptr = *(char**)p;
-  SOAP_FREE(soap, p);
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_1
-static void
-soap_update_ptrs(struct soap *soap, char *start, char *end, char *p1, char *p2)
-{ int i;
-  register struct soap_ilist *ip = NULL;
-  register struct soap_flist *fp = NULL;
-#ifndef WITH_LEANER
-  register struct soap_xlist *xp = NULL;
-#endif
-  register void *p, **q;
-  for (i = 0; i < SOAP_IDHASH; i++)
-  { for (ip = soap->iht[i]; ip; ip = ip->next)
-    { if (ip->ptr && (char*)ip->ptr >= start && (char*)ip->ptr < end)
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update id='%s' %p -> %p\n", ip->id, ip->ptr, (char*)ip->ptr + (p1-p2)));
-        ip->ptr = (char*)ip->ptr + (p1-p2);
-      }
-      for (q = &ip->link; q; q = (void**)p)
-      { p = *q;
-        if (p && (char*)p >= start && (char*)p < end)
-        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Link update id='%s' %p\n", ip->id, p));
-          *q = (char*)p + (p1-p2);
-        }
-      }
-      for (q = &ip->copy; q; q = (void**)p)
-      { p = *q;
-        if (p && (char*)p >= start && (char*)p < end)
-        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy chain update id='%s' %p\n", ip->id, p));
-          *q = (char*)p + (p1-p2);
-        }
-      }
-      for (fp = ip->flist; fp; fp = fp->next)
-      { if ((char*)fp->ptr >= start && (char*)fp->ptr < end)
-        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy list update id='%s' %p\n", ip->id, fp));
-          fp->ptr = (char*)fp->ptr + (p1-p2);
-        }
-      }
-    }
-  }
-#ifndef WITH_LEANER
-  for (xp = soap->xlist; xp; xp = xp->next)
-  { if (xp->ptr && (char*)xp->ptr >= start && (char*)xp->ptr < end)
-    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update id='%s' %p -> %p\n", xp->id?xp->id:SOAP_STR_EOS, xp->ptr, (char*)xp->ptr + (p1-p2)));
-      xp->ptr = (unsigned char**)((char*)xp->ptr + (p1-p2));
-      xp->size = (int*)((char*)xp->size + (p1-p2));
-      xp->type = (char**)((char*)xp->type + (p1-p2));
-      xp->options = (char**)((char*)xp->options + (p1-p2));
-    }
-  }
-#endif
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_1
-static int
-soap_has_copies(struct soap *soap, register const char *start, register const char *end)
-{ register int i;
-  register struct soap_ilist *ip = NULL;
-  register struct soap_flist *fp = NULL;
-  register const char *p;
-  for (i = 0; i < SOAP_IDHASH; i++)
-  { for (ip = soap->iht[i]; ip; ip = ip->next)
-    { for (p = (const char*)ip->copy; p; p = *(const char**)p)
-        if (p >= start && p < end)
-          return SOAP_ERR;
-      for (fp = ip->flist; fp; fp = fp->next)
-        if ((const char*)fp->ptr >= start && (const char*)fp->ptr < end)
-          return SOAP_ERR;
-    }
-  }
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_resolve(struct soap *soap)
-{ register int i;
-  register struct soap_ilist *ip = NULL;
-  register struct soap_flist *fp = NULL;
-  short flag;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving forwarded data\n"));
-  for (i = 0; i < SOAP_IDHASH; i++)
-  { for (ip = soap->iht[i]; ip; ip = ip->next)
-    { if (ip->ptr)
-      { register void *p, **q, *r;
-        q = (void**)ip->link;
-        ip->link = NULL;
-        r = ip->ptr;
-        DBGLOG(TEST, if (q) SOAP_MESSAGE(fdebug, "Traversing link chain to resolve id='%s'\n", ip->id));
-        while (q)
-        { p = *q;
-          *q = r;
-          DBGLOG(TEST,SOAP_MESSAGE(fdebug, "... link %p -> %p\n", q, r));
-          q = (void**)p;
-        }
-      }
-      else if (*ip->id == '#')
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Missing data for id='%s'\n", ip->id));
-        /* Oracle customization */
-        strncpy(soap->id, ip->id + 1, sizeof(soap->id) - 1);
-        soap->id[sizeof(soap->id) - 1] = '\0';
-        return soap->error = SOAP_MISSING_ID;
-      }
-    }
-  }
-  do
-  { flag = 0;
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution phase\n"));
-    for (i = 0; i < SOAP_IDHASH; i++)
-    { for (ip = soap->iht[i]; ip; ip = ip->next)
-      { if (ip->ptr && !soap_has_copies(soap, (const char*)ip->ptr, (const char*)ip->ptr + ip->size))
-        { if (ip->copy)
-          { register void *p, **q = (void**)ip->copy;
-            DBGLOG(TEST, if (q) SOAP_MESSAGE(fdebug, "Traversing copy chain to resolve id='%s'\n", ip->id));
-            ip->copy = NULL;
-            do
-            { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... copy %p -> %p (%u bytes)\n", ip->ptr, q, (unsigned int)ip->size));
-              p = *q;
-              memcpy(q, ip->ptr, ip->size);
-              q = (void**)p;
-            } while (q);
-            flag = 1;
-          }
-          for (fp = ip->flist; fp; fp = ip->flist)
-          { register unsigned int k = fp->level;
-            register void *p = ip->ptr;
-            DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving forwarded data type=%d location=%p level=%u,%u id='%s'\n", ip->type, p, ip->level, fp->level, ip->id));
-            while (ip->level < k)
-            { register void **q = (void**)soap_malloc(soap, sizeof(void*));  
-              if (!q)
-                return soap->error;
-              *q = p;
-              DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level, new location=%p holds=%p...\n", q, *q));
-              p = (void*)q;
-              k--;
-            }
-            if (fp->fcopy)
-              fp->fcopy(soap, ip->type, fp->type, fp->ptr, fp->len, p, ip->size);
-            else
-              soap_fcopy(soap, ip->type, fp->type, fp->ptr, fp->len, p, ip->size);
-            ip->flist = fp->next;
-            SOAP_FREE(soap, fp);
-            flag = 1;
-          }
-        }
-      }
-    }
-  } while (flag);
-#ifdef SOAP_DEBUG
-  for (i = 0; i < SOAP_IDHASH; i++)
-  { for (ip = soap->iht[i]; ip; ip = ip->next)
-    { if (ip->copy || ip->flist)
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution error: forwarded data for id='%s' could not be propagated, please report this problem to the developers\n", ip->id));
-      }
-    }
-  }
-#endif
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolution done\n"));
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-size_t
-SOAP_FMAC2
-soap_size_block(struct soap *soap, struct soap_blist *b, size_t n)
-{ if (!b)
-    b = soap->blist;
-  if (b->ptr)
-  { b->size -= *(size_t*)(b->ptr + sizeof(char*)) - n;
-    *(size_t*)(b->ptr + sizeof(char*)) = n;
-  }
-  return b->size;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-char*
-SOAP_FMAC2
-soap_first_block(struct soap *soap, struct soap_blist *b)
-{ char *p, *q, *r;
-  if (!b)
-    b = soap->blist;
-  p = b->ptr;
-  if (!p)
-    return NULL;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "First block\n"));
-  r = NULL;
-  do
-  { q = *(char**)p;
-    *(char**)p = r;
-    r = p;
-    p = q;
-  } while (p);
-  b->ptr = r;
-  return r + sizeof(char*) + sizeof(size_t);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-char*
-SOAP_FMAC2
-soap_next_block(struct soap *soap, struct soap_blist *b)
-{ char *p;
-  if (!b)
-    b = soap->blist;
-  p = b->ptr;
-  if (p)
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Next block\n"));
-    b->ptr = *(char**)p;
-    SOAP_FREE(soap, p);
-    if (b->ptr)
-      return b->ptr + sizeof(char*) + sizeof(size_t);
-  }
-  return NULL;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-size_t
-SOAP_FMAC2
-soap_block_size(struct soap *soap, struct soap_blist *b)
-{ if (!b)
-    b = soap->blist;
-  return *(size_t*)(b->ptr + sizeof(char*));
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_end_block(struct soap *soap, struct soap_blist *b)
-{ char *p, *q;
-  if (!b)
-    b = soap->blist;
-  if (b)
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of block sequence, free all remaining blocks\n"));
-    for (p = b->ptr; p; p = q)
-    { q = *(char**)p;
-      SOAP_FREE(soap, p);
-    }
-    if (soap->blist == b)
-      soap->blist = b->next;
-    else
-    { struct soap_blist *bp;
-      for (bp = soap->blist; bp; bp = bp->next)
-      { if (bp->next == b)
-        { bp->next = b->next;
-	  break;
-        }
-      }
-    }
-    SOAP_FREE(soap, b);
-  }
-  DBGLOG(TEST, if (soap->blist) SOAP_MESSAGE(fdebug, "Restore previous block sequence\n"));
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-char*
-SOAP_FMAC2
-soap_save_block(struct soap *soap, struct soap_blist *b, char *p, int flag)
-{ register size_t n;
-  register char *q, *s;
-  if (!b)
-    b = soap->blist;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Save all blocks in contiguous memory space of %u bytes (%p->%p)\n", (unsigned int)b->size, b->ptr, p));
-  if (b->size)
-  { if (!p)
-      p = (char*)soap_malloc(soap, b->size);
-    if (p)
-    { for (s = p, q = soap_first_block(soap, b); q; q = soap_next_block(soap, b))
-      { n = soap_block_size(soap, b);
-#ifndef WITH_NOIDREF
-        if (flag)
-          soap_update_ptrs(soap, q, q + n, s, q);
-#endif
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copy %u bytes from %p to %p\n", (unsigned int)n, q, s));
-        memcpy(s, q, n);
-        s += n;
-      }
-    }
-    else
-      soap->error = SOAP_EOM;
-  }
-  soap_end_block(soap, b);
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-char *
-SOAP_FMAC2
-soap_putsize(struct soap *soap, const char *type, int size)
-{ return soap_putsizes(soap, type, &size, 1);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-char *
-SOAP_FMAC2
-soap_putsizes(struct soap *soap, const char *type, const int *size, int dim)
-{ return soap_putsizesoffsets(soap, type, size, NULL, dim);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-char *
-SOAP_FMAC2
-soap_putsizesoffsets(struct soap *soap, const char *type, const int *size, const int *offset, int dim)
-{ int i;
-  if (!type)
-    return NULL;
-  if (soap->version == 2)
-  { sprintf(soap->type, "%s[%d", type, size[0]);
-    for (i = 1; i < dim; i++)
-      sprintf(soap->type + strlen(soap->type), " %d", size[i]);
-  }
-  else
-  { if (offset)
-    { sprintf(soap->type, "%s[%d", type, size[0] + offset[0]);
-      for (i = 1; i < dim; i++)
-        sprintf(soap->type + strlen(soap->type), ",%d", size[i] + offset[i]);
-    }
-    else
-    { sprintf(soap->type, "%s[%d", type, size[0]);
-      for (i = 1; i < dim; i++)
-        sprintf(soap->type + strlen(soap->type), ",%d", size[i]);
-    }
-    strcat(soap->type, "]");
-  }
-  return soap->type;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-char *
-SOAP_FMAC2
-soap_putoffset(struct soap *soap, int offset)
-{ return soap_putoffsets(soap, &offset, 1);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-char *
-SOAP_FMAC2
-soap_putoffsets(struct soap *soap, const int *offset, int dim)
-{ register int i;
-  sprintf(soap->arrayOffset, "[%d", offset[0]);
-  for (i = 1; i < dim; i++)
-    sprintf(soap->arrayOffset + strlen(soap->arrayOffset), ",%d", offset[i]);
-  strcat(soap->arrayOffset, "]");
-  return soap->arrayOffset;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_size(const int *size, int dim)
-{ register int i, n = size[0];
-  for (i = 1; i < dim; i++)
-    n *= size[i];
-  return n;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_getoffsets(const char *attr, const int *size, int *offset, int dim)
-{ register int i, j = 0;
-  if (offset)
-    for (i = 0; i < dim && attr && *attr; i++)
-    { attr++;
-      j *= size[i];
-      j += offset[i] = (int)soap_strtol(attr, NULL, 10);
-      attr = strchr(attr, ',');
-    }
-  else
-    for (i = 0; i < dim && attr && *attr; i++)
-    { attr++;
-      j *= size[i];
-      j += (int)soap_strtol(attr, NULL, 10);
-      attr = strchr(attr, ',');
-    }
-  return j;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_getsize(const char *attr1, const char *attr2, int *j)
-{ register int n, k;
-  char *s;
-  *j = 0;
-  if (!*attr1)
-    return -1;
-  if (*attr1 == '[')
-    attr1++;
-  n = 1;
-  for (;;)
-  { k = (int)soap_strtol(attr1, &s, 10);
-    n *= k;
-    if (k < 0 || n > SOAP_MAXARRAYSIZE || s == attr1)
-      return -1;
-    attr1 = strchr(s, ',');
-    if (!attr1)
-      attr1 = strchr(s, ' ');
-    if (attr2 && *attr2)
-    { attr2++;
-      *j *= k;
-      k = (int)soap_strtol(attr2, &s, 10);
-      *j += k;
-      if (k < 0)
-        return -1;
-      attr2 = s;
-    }
-    if (!attr1)
-      break;
-    attr1++;
-  }
-  return n - *j;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_getsizes(const char *attr, int *size, int dim)
-{ register int i, k, n;
-  if (!*attr)
-    return -1;
-  i = (int)strlen(attr);
-  n = 1;
-  do
-  { for (i = i-1; i >= 0; i--)
-      if (attr[i] == '[' || attr[i] == ',' || attr[i] == ' ')
-        break;
-    k = (int)soap_strtol(attr + i + 1, NULL, 10);
-    n *= size[--dim] = k;
-    if (k < 0 || n > SOAP_MAXARRAYSIZE)
-      return -1;
-  } while (i >= 0 && attr[i] != '[');
-  return n;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_getposition(const char *attr, int *pos)
-{ register int i, n;
-  if (!*attr)
-    return -1;
-  n = 0;
-  i = 1;
-  do
-  { pos[n++] = (int)soap_strtol(attr + i, NULL, 10);
-    while (attr[i] && attr[i] != ',' && attr[i] != ']')
-      i++;
-    if (attr[i] == ',')
-      i++;
-  } while (n < SOAP_MAXDIMS && attr[i] && attr[i] != ']');
-  return n;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-struct soap_nlist *
-SOAP_FMAC2
-soap_push_namespace(struct soap *soap, const char *id, const char *ns)
-{ register struct soap_nlist *np;
-  register struct Namespace *p;
-  register short i = -1;
-  register size_t n, k;
-  n = strlen(id);
-  k = strlen(ns) + 1;
-  p = soap->local_namespaces;
-  if (p)
-  { for (i = 0; p->id; p++, i++)
-    { if (p->ns && !strcmp(ns, p->ns))
-      { if (p->out)
-        { SOAP_FREE(soap, p->out);
-          p->out = NULL;
-        }
-        break;
-      }
-      if (p->out)
-      { if (!strcmp(ns, p->out))
-          break;
-      }
-      else if (p->in)
-      { if (!soap_tag_cmp(ns, p->in))
-        { if ((p->out = (char*)SOAP_MALLOC(soap, k)))
-            strcpy(p->out, ns);
-          break;
-        }
-      }
-    }
-    if (!p || !p->id)
-      i = -1;
-  }
-  if (i >= 0)
-    k = 0;
-  np = (struct soap_nlist*)SOAP_MALLOC(soap, sizeof(struct soap_nlist) + n + k);
-  if (!np)
-  { soap->error = SOAP_EOM;
-    return NULL;
-  }
-  np->next = soap->nlist;
-  soap->nlist = np;
-  np->level = soap->level;
-  np->index = i;
-  strcpy(np->id, id);
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push namespace binding (level=%u) '%s' '%s'\n", soap->level, id, ns));
-  if (i < 0)
-  { np->ns = strcpy(np->id + n + 1, ns);
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push NOT OK: no match found for '%s' in namespace mapping table (added to stack anyway)\n", ns));
-  }
-  else
-  { np->ns = NULL;
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Push OK ('%s' matches '%s' in namespace table)\n", id, p->id));
-  }
-  return np;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_pop_namespace(struct soap *soap)
-{ register struct soap_nlist *np, *nq;
-  for (np = soap->nlist; np && np->level >= soap->level; np = nq)
-  { nq = np->next;
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Pop namespace binding (level=%u) '%s'\n", soap->level, np->id));
-    SOAP_FREE(soap, np);
-  }
-  soap->nlist = np;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_match_namespace(struct soap *soap, const char *id1, const char *id2, size_t n1, size_t n2) 
-{ register struct soap_nlist *np = soap->nlist;
-  while (np && (strncmp(np->id, id1, n1) || np->id[n1]))
-    np = np->next;
-  if (np)
-  { if (!(soap->mode & SOAP_XML_IGNORENS))
-      if (np->index < 0
-       || (soap->local_namespaces[np->index].id
-        && (strncmp(soap->local_namespaces[np->index].id, id2, n2)
-         || soap->local_namespaces[np->index].id[n2])))
-        return SOAP_NAMESPACE;
-    return SOAP_OK;
-  }
-  if (n1 == 0)
-    return SOAP_NAMESPACE;
-  if ((n1 == 3 && n1 == n2 && !strncmp(id1, "xml", 3) && !strncmp(id1, id2, 3))
-   || (soap->mode & SOAP_XML_IGNORENS))
-    return SOAP_OK;
-  return soap->error = SOAP_SYNTAX_ERROR; 
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_current_namespace(struct soap *soap, const char *tag)
-{ register struct soap_nlist *np;
-  register const char *s;
-  if (!tag || !strncmp(tag, "xml", 3))
-    return NULL;
-  np = soap->nlist;
-  if (!(s = strchr(tag, ':')))
-  { while (np && *np->id) /* find default namespace, if present */
-      np = np->next;
-  }
-  else
-  { while (np && (strncmp(np->id, tag, s - tag) || np->id[s - tag]))
-      np = np->next;
-    if (!np)
-      soap->error = SOAP_NAMESPACE;
-  }
-  if (np)
-  { if (np->index >= 0)
-      return soap->namespaces[np->index].ns;
-    if (np->ns)
-      return soap_strdup(soap, np->ns);
-  }
-  return NULL;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_tag_cmp(const char *s, const char *t)
-{ for (;;)
-  { register int c1 = *s;
-    register int c2 = *t;
-    if (!c1 || c1 == '"')
-      break;
-    if (c2 != '-')
-    { if (c1 != c2)
-      { if (c1 >= 'A' && c1 <= 'Z')
-          c1 += 'a' - 'A';
-        if (c2 >= 'A' && c2 <= 'Z')
-          c2 += 'a' - 'A';
-      }
-      if (c1 != c2)
-      { if (c2 != '*')
-          return 1;
-        c2 = *++t;
-        if (!c2)
-          return 0;
-        if (c2 >= 'A' && c2 <= 'Z')
-          c2 += 'a' - 'A';
-        for (;;)
-        { c1 = *s;
-          if (!c1 || c1 == '"')
-            break;
-          if (c1 >= 'A' && c1 <= 'Z')
-            c1 += 'a' - 'A';
-          if (c1 == c2 && !soap_tag_cmp(s + 1, t + 1))
-            return 0;
-          s++;
-        }
-        break;
-      }
-    }
-    s++;
-    t++;
-  }
-  if (*t == '*' && !t[1])
-    return 0;
-  return *t;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_match_tag(struct soap *soap, const char *tag1, const char *tag2)
-{ register const char *s, *t;
-  register int err;
-  if (!tag1 || !tag2 || !*tag2)
-    return SOAP_OK;
-  s = strchr(tag1, ':');
-  t = strchr(tag2, ':');
-  if (t)
-  { if (s)
-    { if (t[1] && SOAP_STRCMP(s + 1, t + 1))
-        return SOAP_TAG_MISMATCH;
-      if (t != tag2 && (err = soap_match_namespace(soap, tag1, tag2, s - tag1, t - tag2)))
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags '%s' and '%s' match but namespaces differ\n", tag1, tag2));
-        if (err == SOAP_NAMESPACE)
-          return SOAP_TAG_MISMATCH;
-        return err;
-      }
-    } 
-    else if (SOAP_STRCMP(tag1, t + 1))
-    { return SOAP_TAG_MISMATCH;
-    }
-    else if (t != tag2 && (err = soap_match_namespace(soap, tag1, tag2, 0, t - tag2)))
-    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags '%s' and '%s' match but namespaces differ\n", tag1, tag2));
-      if (err == SOAP_NAMESPACE)
-        return SOAP_TAG_MISMATCH;
-      return err;
-    }
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags and (default) namespaces match: '%s' '%s'\n", tag1, tag2));
-    return SOAP_OK;
-  }
-  if (s)
-  { if (SOAP_STRCMP(s + 1, tag2))
-      return SOAP_TAG_MISMATCH;
-  }
-  else if (SOAP_STRCMP(tag1, tag2))
-    return SOAP_TAG_MISMATCH;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Tags match: '%s' '%s'\n", tag1, tag2));
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_match_array(struct soap *soap, const char *type)
-{ if (*soap->arrayType)
-    if (soap_match_tag(soap, soap->arrayType, type)
-     && soap_match_tag(soap, soap->arrayType, "xsd:anyType")
-     && soap_match_tag(soap, soap->arrayType, "xsd:ur-type")
-    )
-    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array type mismatch: '%s' '%s'\n", soap->arrayType, type));
-      return SOAP_TAG_MISMATCH;
-    }
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************\
- *
- *	SSL/TLS
- *
-\******************************************************************************/
-
-/******************************************************************************/
-#ifdef WITH_OPENSSL
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_rand()
-{ unsigned char buf[4];
-  if (!soap_ssl_init_done)
-    soap_ssl_init();
-  RAND_pseudo_bytes(buf, 4);
-  return *(int*)buf;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifdef WITH_OPENSSL
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_ssl_server_context(struct soap *soap, unsigned short flags, const char *keyfile, const char *password, const char *cafile, const char *capath, const char *dhfile, const char *randfile, const char *sid)
-{ int err;
-  soap->keyfile = keyfile;
-  soap->password = password;
-  soap->cafile = cafile;
-  soap->capath = capath;
-  soap->crlfile = NULL;
-  soap->dhfile = dhfile;
-  soap->randfile = randfile;
-  soap->ssl_flags = flags | (dhfile == NULL ? SOAP_SSL_RSA : 0);
-  if (!(err = soap->fsslauth(soap)))
-  { if (sid)
-      SSL_CTX_set_session_id_context(soap->ctx, (unsigned char*)sid, (unsigned int)strlen(sid));
-    else
-      SSL_CTX_set_session_cache_mode(soap->ctx, SSL_SESS_CACHE_OFF);
-  }
-  return err; 
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifdef WITH_OPENSSL
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_ssl_client_context(struct soap *soap, unsigned short flags, const char *keyfile, const char *password, const char *cafile, const char *capath, const char *randfile)
-{ soap->keyfile = keyfile;
-  soap->password = password;
-  soap->cafile = cafile;
-  soap->capath = capath;
-  soap->dhfile = NULL;
-  soap->ssl_flags = flags;
-  soap->randfile = randfile;
-  soap->fsslverify = (flags & SOAP_SSL_ALLOW_EXPIRED_CERTIFICATE) == 0 ? ssl_verify_callback : ssl_verify_callback_allow_expired_certificate;
-  return soap->fsslauth(soap);
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifdef WITH_OPENSSL
-#ifndef PALM_2
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_ssl_init()
-{ /* Note: for MT systems, the main program MUST call soap_ssl_init() before any threads are started */
-  if (!soap_ssl_init_done)
-  { soap_ssl_init_done = 1;
-    SSL_library_init();
-#ifndef WITH_LEAN
-    SSL_load_error_strings();
-#endif
-    if (!RAND_load_file("/dev/urandom", 1024))
-    { char buf[1024];
-      RAND_seed(buf, sizeof(buf));
-      while (!RAND_status())
-      { int r = rand();
-        RAND_seed(&r, sizeof(int));
-      }
-    }
-  }
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifdef WITH_OPENSSL
-#ifndef PALM_1
-SOAP_FMAC1
-const char *
-SOAP_FMAC2
-soap_ssl_error(struct soap *soap, int ret)
-{ int err = SSL_get_error(soap->ssl, ret);
-  const char *msg = soap_code_str(h_ssl_error_codes, err);
-  size_t msgbufsize = sizeof(soap->msgbuf);
-  if (msg)
-  { /* Oracle customization */
-    strncpy(soap->msgbuf, msg, msgbufsize - 1);
-    soap->msgbuf[msgbufsize - 1] = '\0';
-  }
-  else
-    return ERR_error_string(err, soap->msgbuf);
-  if (ERR_peek_error())
-  { unsigned long r;
-    /* Oracle customization */
-    if (strlen(soap->msgbuf) < (msgbufsize-1))
-        strcat(soap->msgbuf, "\n");
-    else
-        soap->msgbuf[msgbufsize - 2] = '\n';
-    while ((r = ERR_get_error()))
-      ERR_error_string_n(r, soap->msgbuf + strlen(soap->msgbuf), sizeof(soap->msgbuf) - strlen(soap->msgbuf));
-  } 
-  else
-  { switch (ret)
-    { case 0:
-        {
-          /* Oracle customization -- display SSL error code and string at the end */
-          int myerrno = errno;
-          unsigned long ec = ERR_get_error();
-          sprintf(soap->msgbuf,
-            "EOF was observed that violates the protocol. The client probably provided invalid authentication information. SSL error code is %s. ",
-            msg);
-          if (ec != 0)
-          {
-            /* display the next error string in the error queue */
-            ERR_error_string_n(ec, soap->msgbuf + strlen(soap->msgbuf),
-                sizeof(soap->msgbuf) - strlen(soap->msgbuf));
-            if (sizeof(soap->msgbuf) - strlen(soap->msgbuf) > 2)
-            {
-                strcat(soap->msgbuf, ". ");
-            }
-          }
-          if (myerrno != 0)
-          {
-            /* display system error too */
-            char *mystrerror = strerror(myerrno);
-            if (strlen(mystrerror)
-                < (sizeof(soap->msgbuf) - strlen(soap->msgbuf)))
-            {
-                strncat(soap->msgbuf + strlen(soap->msgbuf), mystrerror,
-                    strlen(mystrerror));
-            }
-            else
-            {
-                strncat(soap->msgbuf + strlen(soap->msgbuf), mystrerror,
-                    (sizeof(soap->msgbuf) - strlen(soap->msgbuf)));
-            }
-            soap->msgbuf[sizeof(soap->msgbuf) - 1] = '\0';
-          }
-        }
-        break;
-      case -1:
-        sprintf(soap->msgbuf, "Error observed by underlying BIO: %s", strerror(errno));  
-        break;
-    }
-  }
-  return soap->msgbuf;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifdef WITH_OPENSSL
-#ifndef PALM_1
-static int
-ssl_password(char *buf, int num, int rwflag, void *userdata)
-{ if (num < (int)strlen((char*)userdata) + 1)
-    return 0;
-  return (int)strlen(strcpy(buf, (char*)userdata));
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifdef WITH_OPENSSL
-#ifndef PALM_1
-/*
-static int
-*/
-int
-ssl_auth_init(struct soap *soap)
-{ long flags;
-  int mode;
-  if (!soap_ssl_init_done)
-    soap_ssl_init();
-  ERR_clear_error();
-  if (!soap->ctx)
-  { if (!(soap->ctx = SSL_CTX_new(SSLv23_method())))
-      return soap_set_receiver_error(soap, "SSL error", "Can't setup context", SOAP_SSL_ERROR);
-    /* The following alters the behavior of SSL read/write: */
-#if 0
-    SSL_CTX_set_mode(soap->ctx, SSL_MODE_ENABLE_PARTIAL_WRITE | SSL_MODE_AUTO_RETRY);
-#endif
-  }
-  //
-  // Oracle customization
-  //
-  // added SSL_CTX_set_cipher_list call to restrict the cipher suite to RSA-2048/AES
-  // TLS_RSA_WITH_AES_256_CBC_SHA is defined in RFC 3268
-  // also see http://www.openssl.org/docs/apps/ciphers.html
-  //
-    if (!SSL_CTX_set_cipher_list(soap->ctx, "AES256-SHA"))
-        return soap_set_receiver_error(soap, "SSL error", "Cannot set cipher suite", SOAP_SSL_ERROR);
-  if (soap->randfile)
-  { if (!RAND_load_file(soap->randfile, -1))
-      return soap_set_receiver_error(soap, "SSL error", "Can't load randomness", SOAP_SSL_ERROR);
-  }
-  if (soap->cafile || soap->capath)
-  { if (!SSL_CTX_load_verify_locations(soap->ctx, soap->cafile, soap->capath))
-      return soap_set_receiver_error(soap, "SSL error", "Can't read CA file and directory", SOAP_SSL_ERROR);
-    if (soap->cafile && (soap->ssl_flags & SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION))
-      SSL_CTX_set_client_CA_list(soap->ctx, SSL_load_client_CA_file(soap->cafile));
-  }
-  if (!(soap->ssl_flags & SOAP_SSL_NO_DEFAULT_CA_PATH))
-  { if (!SSL_CTX_set_default_verify_paths(soap->ctx))
-      return soap_set_receiver_error(soap, "SSL error", "Can't read default CA file and/or directory", SOAP_SSL_ERROR);
-  }
-/* This code assumes a typical scenario, see alternative code below */
-  if (soap->keyfile)
-  { if (!SSL_CTX_use_certificate_chain_file(soap->ctx, soap->keyfile))
-      return soap_set_receiver_error(soap, "SSL error", "Can't read certificate key file", SOAP_SSL_ERROR);
-    if (soap->password)
-    { SSL_CTX_set_default_passwd_cb_userdata(soap->ctx, (void*)soap->password);
-      SSL_CTX_set_default_passwd_cb(soap->ctx, ssl_password);
-    }
-    if (!SSL_CTX_use_PrivateKey_file(soap->ctx, soap->keyfile, SSL_FILETYPE_PEM))
-      return soap_set_receiver_error(soap, "SSL error", "Can't read key file", SOAP_SSL_ERROR);
-  }
-/* Suggested alternative approach to check the key file for certs (cafile=NULL):*/
-#if 0
-  if (soap->password)
-  { SSL_CTX_set_default_passwd_cb_userdata(soap->ctx, (void*)soap->password);
-    SSL_CTX_set_default_passwd_cb(soap->ctx, ssl_password);
-  }
-  if (!soap->cafile || !SSL_CTX_use_certificate_chain_file(soap->ctx, soap->cafile))
-  { if (soap->keyfile)
-    { if (!SSL_CTX_use_certificate_chain_file(soap->ctx, soap->keyfile))
-        return soap_set_receiver_error(soap, "SSL error", "Can't read certificate or key file", SOAP_SSL_ERROR);
-      if (!SSL_CTX_use_PrivateKey_file(soap->ctx, soap->keyfile, SSL_FILETYPE_PEM))
-        return soap_set_receiver_error(soap, "SSL error", "Can't read key file", SOAP_SSL_ERROR);
-    }
-  }
-#endif
-  if ((soap->ssl_flags & SOAP_SSL_RSA))
-  {
-    /*
-     Oracle customization for OpenSSL 0.9.8 removal of deprecated function usage: RSA_generate_key
-    */
-#ifdef OPENSSL_NO_DEPRECATED
-    RSA *rsa = RSA_new();
-    if (!rsa)
-    {
-        return soap_set_receiver_error(soap, "SSL error", "Can't allocate RSA struct", SOAP_SSL_ERROR);
-    }
-
-    BIGNUM *e = BN_new();
-    if (!e)
-    {
-        RSA_free(rsa);
-        return soap_set_receiver_error(soap, "SSL error", "Can't allocate BIGNUM", SOAP_SSL_ERROR);
-    }
-    if (!BN_set_word(e, RSA_F4 ))
-    {
-        RSA_free(rsa);
-        BN_free(e);
-        return soap_set_receiver_error(soap, "SSL error", "Can't set BIGNUM value", SOAP_SSL_ERROR);
-    }
-
-#if OPENSSL_VERSION_NUMBER > 0x00908000L
-    if (!RSA_generate_key_ex(rsa, 1024, e, NULL))
-#else
-    if (( rsa = RSA_generate_key(1024, RSA_F4, NULL, NULL)) == NULL )
-#endif
-    {
-        RSA_free(rsa);
-        BN_free(e);
-        return soap_set_receiver_error(soap, "SSL error", "Can't set RSA key", SOAP_SSL_ERROR);
-    }
-
-#else
-    RSA *rsa = RSA_generate_key(1024, RSA_F4, NULL, NULL);
-#endif
-    if (!SSL_CTX_set_tmp_rsa(soap->ctx, rsa))
-    { if (rsa)
-        RSA_free(rsa);
-/*
- Oracle customization for OpenSSL 0.9.8 removal of deprecated function usage: RSA_generate_key
-*/
-#ifdef OPENSSL_NO_DEPRECATED
-      BN_free(e);
-#endif
-      return soap_set_receiver_error(soap, "SSL error", "Can't set RSA key", SOAP_SSL_ERROR);
-    }
-    RSA_free(rsa);
-/*
- Oracle customization for OpenSSL 0.9.8 removal of deprecated function usage: RSA_generate_key
-*/
-#ifdef OPENSSL_NO_DEPRECATED
-      BN_free(e);
-#endif
-  }
-  else if (soap->dhfile)
-  {
-    DH *dh = 0;
-#ifdef OPENSSL_NO_DEPRECATED
-    DH dhrec;
-#endif
-    char *s;
-    int n = (int)soap_strtoul(soap->dhfile, &s, 10);
-    /* if dhfile is numeric, treat it as a key length to generate DH params which can take a while */
-    if (n >= 512 && s && *s == '\0') {
-#if !defined(OPENSSL_NO_DEPRECATED) || OPENSSL_VERSION_NUMBER < 0x00908000L
-      dh = DH_generate_parameters(n, 2/*or 5*/, NULL, NULL);
-#else
-      if (DH_generate_parameters_ex(&dhrec, n, 2/*or 5*/, NULL) == 0)
-	  dh = &dhrec;
-      else
-	  return soap_set_receiver_error(soap, "SSL error", "Can't compute DH params", SOAP_SSL_ERROR);
-#endif
-    }
-    else
-    { BIO *bio;
-      bio = BIO_new_file(soap->dhfile, "r");
-      if (!bio)
-        return soap_set_receiver_error(soap, "SSL error", "Can't read DH file", SOAP_SSL_ERROR);
-      dh = PEM_read_bio_DHparams(bio, NULL, NULL, NULL);
-      BIO_free(bio);
-    }
-    if (!dh || DH_check(dh, &n) != 1 || SSL_CTX_set_tmp_dh(soap->ctx, dh) < 0)
-    {
-#ifndef OPENSSL_NO_DEPRECATED
-      if (dh)
-        DH_free(dh);
-#endif
-      return soap_set_receiver_error(soap, "SSL error", "Can't set DH parameters", SOAP_SSL_ERROR);
-    }
-#ifndef OPENSSL_NO_DEPRECATED
-    DH_free(dh);
-#endif
-  }
-  
-  //
-  // Oracle customization
-  //
-  // Added SSL_OP_NO_SSLv3 to force use of TLS
-  // Added SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG to prevent forced downgrade
-  // of security level
-
-  flags = ((SSL_OP_ALL & ~SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG) | SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
-
-  flags = (SSL_OP_ALL | SSL_OP_NO_SSLv2);
-  if ((soap->ssl_flags & SOAP_SSLv3))
-    flags |= SSL_OP_NO_TLSv1;
-  if ((soap->ssl_flags & SOAP_TLSv1))
-    flags |= SSL_OP_NO_SSLv3;
-#ifdef SSL_OP_NO_TICKET
-  /* TLS extension is enabled by default in OPENSSL v0.9.8k
-     Disable it by adding SSL_OP_NO_TICKET */
-  flags |= SSL_OP_NO_TICKET;
-#endif
-  SSL_CTX_set_options(soap->ctx, flags);
-  if ((soap->ssl_flags & SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION))
-    mode = (SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT);
-  else if ((soap->ssl_flags & SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION))
-    mode = SSL_VERIFY_PEER;
-  else
-    mode = SSL_VERIFY_NONE;
-  SSL_CTX_set_verify(soap->ctx, mode, soap->fsslverify);
-#if (OPENSSL_VERSION_NUMBER < 0x00905100L)
-  SSL_CTX_set_verify_depth(soap->ctx, 1); 
-#else
-  SSL_CTX_set_verify_depth(soap->ctx, 9); 
-#endif  
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifdef WITH_OPENSSL
-#ifndef PALM_1
-static int
-ssl_verify_callback(int ok, X509_STORE_CTX *store)
-{
-#ifdef SOAP_DEBUG
-  if (!ok) 
-  { char data[256];
-    X509 *cert = X509_STORE_CTX_get_current_cert(store);
-    fprintf(stderr, "SSL verify error or warning with certificate at depth %d: %s\n", X509_STORE_CTX_get_error_depth(store), X509_verify_cert_error_string(X509_STORE_CTX_get_error(store)));
-    X509_NAME_oneline(X509_get_issuer_name(cert), data, sizeof(data));
-    fprintf(stderr, "certificate issuer %s\n", data);
-    X509_NAME_oneline(X509_get_subject_name(cert), data, sizeof(data));
-    fprintf(stderr, "certificate subject %s\n", data);
-  }
-#endif
-  /* Note: return 1 to continue, but unsafe progress will be terminated by SSL */
-  return ok;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifdef WITH_OPENSSL
-#ifndef PALM_1
-static int
-ssl_verify_callback_allow_expired_certificate(int ok, X509_STORE_CTX *store)
-{ ok = ssl_verify_callback(ok, store);
-  if (ok == 0 && X509_STORE_CTX_get_error(store) == X509_V_ERR_CERT_HAS_EXPIRED)
-  {
-#ifdef SOAP_DEBUG
-    fprintf(stderr, "ignoring certificate expiration\n");
-#endif
-    X509_STORE_CTX_set_error(store, X509_V_OK);
-    ok = 1;
-  }
-  /* Note: return 1 to continue, but unsafe progress will be terminated by SSL */
-  return ok;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifdef WITH_OPENSSL
-#ifndef WITH_NOIO
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_ssl_accept(struct soap *soap)
-{ BIO *bio;
-  int retries, r, s;
-  if (!soap_valid_socket(soap->socket))
-    return soap_set_receiver_error(soap, "SSL error", "No socket in soap_ssl_accept()", SOAP_SSL_ERROR);
-  if (!soap->ctx && (soap->error = soap->fsslauth(soap)))
-    return SOAP_SSL_ERROR;
-  if (!soap->ssl)
-  { soap->ssl = SSL_new(soap->ctx);
-    if (!soap->ssl)
-      return soap_set_receiver_error(soap, "SSL error", "SSL_new() failed in soap_ssl_accept()", SOAP_SSL_ERROR);
-  }
-  else
-    SSL_clear(soap->ssl);
-  soap->imode |= SOAP_ENC_SSL;
-  soap->omode |= SOAP_ENC_SSL;
-  /* Set SSL sockets to non-blocking */
-  SOAP_SOCKNONBLOCK(soap->socket)
-  bio = BIO_new_socket((int)soap->socket, BIO_NOCLOSE);
-  SSL_set_bio(soap->ssl, bio, bio);
-  retries = 100; /* SSL_accept timeout: 10 sec retries, 100 times 0.1 sec */
-#if defined(WITH_OPENSSL) && defined(KMS_SERVER)
-  /* Oracle customization for Ultra 2 KMS Server */
-  if (soap->ssl_accept_timeout > 0 )
-  {
-      retries = 10 * soap->ssl_accept_timeout;
-  }
-#endif
-
-while ((r = SSL_accept(soap->ssl)) <= 0)
-  { int err = SSL_get_error(soap->ssl, r);
-    if (err == SSL_ERROR_WANT_ACCEPT || err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE)
-    { if (err == SSL_ERROR_WANT_READ)
-        s = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, -100000);
-      else
-        s = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000);
-      if (s < 0 && soap->errnum != SOAP_EINTR)
-        break;
-    }
-    else
-    { soap->errnum = soap_socket_errno(soap->socket);
-      break;
-    }
-    if (retries-- <= 0)
-      break;
-  }
-  if (r <= 0)
-  { soap_set_receiver_error(soap, soap_ssl_error(soap, r), "SSL_accept() failed in soap_ssl_accept()", SOAP_SSL_ERROR);
-    soap_closesock(soap);
-    return SOAP_SSL_ERROR;
-  }
-  if ((soap->ssl_flags & SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION))
-  { X509 *peer;
-    int err;
-    if ((err = SSL_get_verify_result(soap->ssl)) != X509_V_OK)
-    { soap_closesock(soap);
-      return soap_set_sender_error(soap, X509_verify_cert_error_string(err), "SSL certificate presented by peer cannot be verified in soap_ssl_accept()", SOAP_SSL_ERROR);
-    }
-    peer = SSL_get_peer_certificate(soap->ssl);
-    if (!peer)
-    { soap_closesock(soap);
-      return soap_set_sender_error(soap, "SSL error", "No SSL certificate was presented by the peer in soap_ssl_accept()", SOAP_SSL_ERROR);
-    }
-    X509_free(peer);
-  }
-  return SOAP_OK;
-}
-#endif
-#endif
-#endif
-
-/******************************************************************************\
- *
- *	TCP/UDP [SSL/TLS] IPv4 and IPv6
- *
-\******************************************************************************/
-
-/******************************************************************************/
-#ifndef WITH_NOIO
-#ifndef PALM_1
-static int
-tcp_init(struct soap *soap)
-{ soap->errmode = 1;
-#ifdef WIN32
-  if (tcp_done)
-    return 0;
-  else
-  { WSADATA w;
-    if (WSAStartup(MAKEWORD(1, 1), &w))
-      return -1;
-    tcp_done = 1;
-  }
-#endif
-  return 0;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIO
-#ifndef PALM_1
-static const char*
-tcp_error(struct soap *soap)
-{ register const char *msg = NULL;
-  switch (soap->errmode)
-  { case 0:
-      msg = soap_strerror(soap);
-      break;
-    case 1:
-      msg = "WSAStartup failed";
-      break;
-    case 2:
-    {
-#ifndef WITH_LEAN
-      msg = soap_code_str(h_error_codes, soap->errnum);
-      if (!msg)
-#endif
-      { sprintf(soap->msgbuf, "TCP/UDP IP error %d", soap->errnum);
-        msg = soap->msgbuf;
-      }
-    }
-  }
-  return msg;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_IPV6
-#ifndef WITH_NOIO
-#ifndef PALM_1
-static int
-tcp_gethost(struct soap *soap, const char *addr, struct in_addr *inaddr)
-{ soap_int32 iadd = -1;
-  struct hostent hostent, *host = &hostent;
-#ifdef VXWORKS
-  int hostint;
-  /* inet_addr(), and hostGetByName() expect "char *"; addr is a "const char *". */
-  iadd = inet_addr((char*)addr);
-#else
-#if defined(_AIX43) || ((defined(TRU64) || defined(HP_UX)) && defined(HAVE_GETHOSTBYNAME_R))
-  struct hostent_data ht_data;
-#endif
-#ifdef AS400
-  iadd = inet_addr((void*)addr);
-#else
-  iadd = inet_addr(addr);
-#endif
-#endif
-  if (iadd != -1)
-  { memcpy(inaddr, &iadd, sizeof(iadd));
-    return SOAP_OK;
-  }
-#if defined(__GLIBC__) || (defined(HAVE_GETHOSTBYNAME_R) && (defined(FREEBSD) || defined(__FreeBSD__)))
-  if (gethostbyname_r(addr, &hostent, soap->buf, SOAP_BUFLEN, &host, &soap->errnum) < 0)
-    host = NULL;
-#elif defined(_AIX43) || ((defined(TRU64) || defined(HP_UX)) && defined(HAVE_GETHOSTBYNAME_R))
-  memset((void*)&ht_data, 0, sizeof(ht_data));
-  if (gethostbyname_r(addr, &hostent, &ht_data) < 0)
-  { host = NULL;
-    soap->errnum = h_errno;
-  }
-#elif defined(HAVE_GETHOSTBYNAME_R)
-  host = gethostbyname_r(addr, &hostent, soap->buf, SOAP_BUFLEN, &soap->errnum);
-#elif defined(VXWORKS)
-  /* If the DNS resolver library resolvLib has been configured in the vxWorks
-   * image, a query for the host IP address is sent to the DNS server, if the
-   * name was not found in the local host table. */
-  hostint = hostGetByName((char*)addr);
-  if (hostint == ERROR)
-  { host = NULL;
-    soap->errnum = soap_errno; 
-  }
-#else
-#ifdef AS400
-  if (!(host = gethostbyname((void*)addr)))
-    soap->errnum = h_errno;
-#else
-  if (!(host = gethostbyname(addr)))
-    soap->errnum = h_errno;
-#endif
-#endif
-  if (!host)
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Host name not found\n"));
-    return SOAP_ERR;
-  }
-#ifdef VXWORKS
-  inaddr->s_addr = hostint;
-#else
-  memcpy(inaddr, host->h_addr, host->h_length);
-#endif
-  return SOAP_OK;
-}
-#endif
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIO
-#ifndef PALM_1
-static SOAP_SOCKET
-tcp_connect(struct soap *soap, const char *endpoint, const char *host, int port)
-{
-#ifdef WITH_IPV6
-  struct addrinfo hints, *res, *ressave;
-#endif
-  SOAP_SOCKET fd;
-  int err = 0;
-#ifndef WITH_LEAN
-  int len = SOAP_BUFLEN;
-  int set = 1;
-#endif
-#if !defined(WITH_LEAN) || defined(WITH_OPENSSL)
-  int retries;
-#endif
-  if (soap_valid_socket(soap->socket))
-    soap->fclosesocket(soap, soap->socket);
-  soap->socket = SOAP_INVALID_SOCKET;
-  if (tcp_init(soap))
-  { soap->errnum = 0;
-    soap_set_sender_error(soap, tcp_error(soap), "TCP init failed in tcp_connect()", SOAP_TCP_ERROR);
-    return SOAP_INVALID_SOCKET;
-  }
-  soap->errmode = 0;
-#ifdef WITH_IPV6
-  memset((void*)&hints, 0, sizeof(hints));
-  hints.ai_family = PF_UNSPEC;
-#ifndef WITH_LEAN
-  if ((soap->omode & SOAP_IO_UDP))
-    hints.ai_socktype = SOCK_DGRAM;
-  else
-#endif
-    hints.ai_socktype = SOCK_STREAM;
-  soap->errmode = 2;
-  res = NULL;
-  if (soap->proxy_host)
-    err = getaddrinfo(soap->proxy_host, soap_int2s(soap, soap->proxy_port), &hints, &res);
-  else
-    err = getaddrinfo(host, soap_int2s(soap, port), &hints, &res);
-  /* Oracle customization: check err before using res */
-  if (err || (res==NULL))
-  { soap_set_sender_error(soap, SOAP_GAI_STRERROR(err), "getaddrinfo failed in tcp_connect()", SOAP_TCP_ERROR);
-    if (res)
-    {
-      freeaddrinfo(res);
-    }
-    return SOAP_INVALID_SOCKET;
-  }
-  ressave = res;
-again:
-  fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
-  soap->errmode = 0;
-#else
-#ifndef WITH_LEAN
-again:
-#endif
-#ifndef WITH_LEAN
-  if ((soap->omode & SOAP_IO_UDP))
-    fd = socket(AF_INET, SOCK_DGRAM, 0);
-  else
-#endif
-    fd = socket(AF_INET, SOCK_STREAM, 0);
-#endif
-  if (!soap_valid_socket(fd))
-  {
-#ifdef WITH_IPV6
-    if (res->ai_next)
-    { res = res->ai_next;
-      goto again;
-    }
-#endif
-    soap->errnum = soap_socket_errno(fd);
-    soap_set_sender_error(soap, tcp_error(soap), "socket failed in tcp_connect()", SOAP_TCP_ERROR);
-#ifdef WITH_IPV6
-    freeaddrinfo(ressave);
-#endif
-    return SOAP_INVALID_SOCKET;
-  }
-#ifdef SOCKET_CLOSE_ON_EXEC
-#ifdef WIN32
-#ifndef UNDER_CE
-  SetHandleInformation((HANDLE)fd, HANDLE_FLAG_INHERIT, 0);
-#endif
-#else
-  fcntl(fd, F_SETFD, 1);
-#endif
-#endif
-#ifndef WITH_LEAN
-  if (soap->connect_flags == SO_LINGER)
-  { struct linger linger;
-    memset((void*)&linger, 0, sizeof(linger));
-    linger.l_onoff = 1;
-    linger.l_linger = soap->linger_time;
-    if (setsockopt(fd, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(struct linger)))
-    { soap->errnum = soap_socket_errno(fd);
-      soap_set_sender_error(soap, tcp_error(soap), "setsockopt SO_LINGER failed in tcp_connect()", SOAP_TCP_ERROR);
-      soap->fclosesocket(soap, fd);
-#ifdef WITH_IPV6
-      freeaddrinfo(ressave);
-#endif
-      return SOAP_INVALID_SOCKET;
-    }
-  }
-  else if (soap->connect_flags && setsockopt(fd, SOL_SOCKET, soap->connect_flags, (char*)&set, sizeof(int)))
-  { soap->errnum = soap_socket_errno(fd);
-    soap_set_sender_error(soap, tcp_error(soap), "setsockopt failed in tcp_connect()", SOAP_TCP_ERROR);
-    soap->fclosesocket(soap, fd);
-#ifdef WITH_IPV6
-    freeaddrinfo(ressave);
-#endif
-    return SOAP_INVALID_SOCKET;
-  }
-  if ((soap->keep_alive || soap->tcp_keep_alive) && setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int)))
-  { soap->errnum = soap_socket_errno(fd);
-    soap_set_sender_error(soap, tcp_error(soap), "setsockopt SO_KEEPALIVE failed in tcp_connect()", SOAP_TCP_ERROR);
-    soap->fclosesocket(soap, fd);
-#ifdef WITH_IPV6
-    freeaddrinfo(ressave);
-#endif
-    return SOAP_INVALID_SOCKET;
-  }
-  if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int)))
-  { soap->errnum = soap_socket_errno(fd);
-    soap_set_sender_error(soap, tcp_error(soap), "setsockopt SO_SNDBUF failed in tcp_connect()", SOAP_TCP_ERROR);
-    soap->fclosesocket(soap, fd);
-#ifdef WITH_IPV6
-    freeaddrinfo(ressave);
-#endif
-    return SOAP_INVALID_SOCKET;
-  }
-  if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int)))
-  { soap->errnum = soap_socket_errno(fd);
-    soap_set_sender_error(soap, tcp_error(soap), "setsockopt SO_RCVBUF failed in tcp_connect()", SOAP_TCP_ERROR);
-    soap->fclosesocket(soap, fd);
-#ifdef WITH_IPV6
-    freeaddrinfo(ressave);
-#endif
-    return SOAP_INVALID_SOCKET;
-  }
-#ifdef TCP_KEEPIDLE
-  if (soap->tcp_keep_idle && setsockopt((SOAP_SOCKET)fd, IPPROTO_TCP, TCP_KEEPIDLE, (char*)&(soap->tcp_keep_idle), sizeof(int)))
-  { soap->errnum = soap_socket_errno(fd);
-    soap_set_sender_error(soap, tcp_error(soap), "setsockopt TCP_KEEPIDLE failed in tcp_connect()", SOAP_TCP_ERROR);
-    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
-#ifdef WITH_IPV6
-    freeaddrinfo(ressave);
-#endif
-    return SOAP_INVALID_SOCKET;
-  }
-#endif
-#ifdef TCP_KEEPINTVL
-  if (soap->tcp_keep_intvl && setsockopt((SOAP_SOCKET)fd, IPPROTO_TCP, TCP_KEEPINTVL, (char*)&(soap->tcp_keep_intvl), sizeof(int)))
-  { soap->errnum = soap_socket_errno(fd);
-    soap_set_sender_error(soap, tcp_error(soap), "setsockopt TCP_KEEPINTVL failed in tcp_connect()", SOAP_TCP_ERROR);
-    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
-#ifdef WITH_IPV6
-    freeaddrinfo(ressave);
-#endif
-    return SOAP_INVALID_SOCKET;
-  }
-#endif
-#ifdef TCP_KEEPCNT
-  if (soap->tcp_keep_cnt && setsockopt((SOAP_SOCKET)fd, IPPROTO_TCP, TCP_KEEPCNT, (char*)&(soap->tcp_keep_cnt), sizeof(int)))
-  { soap->errnum = soap_socket_errno(fd);
-    soap_set_sender_error(soap, tcp_error(soap), "setsockopt TCP_KEEPCNT failed in tcp_connect()", SOAP_TCP_ERROR);
-    soap->fclosesocket(soap, (SOAP_SOCKET)fd);
-#ifdef WITH_IPV6
-    freeaddrinfo(ressave);
-#endif
-    return SOAP_INVALID_SOCKET;
-  }
-#endif
-#ifdef TCP_NODELAY
-  if (!(soap->omode & SOAP_IO_UDP) && setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int)))
-  { soap->errnum = soap_socket_errno(fd);
-    soap_set_sender_error(soap, tcp_error(soap), "setsockopt TCP_NODELAY failed in tcp_connect()", SOAP_TCP_ERROR);
-    soap->fclosesocket(soap, fd);
-#ifdef WITH_IPV6
-    freeaddrinfo(ressave);
-#endif
-    return SOAP_INVALID_SOCKET;
-  }
-#endif
-#ifdef WITH_IPV6
-  if ((soap->omode & SOAP_IO_UDP) && soap->ipv6_multicast_if)
-  { struct sockaddr_in6 *in6addr = (struct sockaddr_in6*)res->ai_addr;
-    in6addr->sin6_scope_id = soap->ipv6_multicast_if;
-  }
-#endif
-#ifdef IP_MULTICAST_TTL
-  if ((soap->omode & SOAP_IO_UDP) && soap->ipv4_multicast_if && !soap->ipv6_multicast_if)
-  { if (soap->ipv4_multicast_ttl > 0)
-    { char ttl = (char)(soap->ipv4_multicast_ttl);
-      if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ttl, sizeof(ttl)))
-      { soap->errnum = soap_socket_errno(fd);
-        soap_set_sender_error(soap, tcp_error(soap), "setsockopt IP_MULTICAST_TTL failed in tcp_connect()", SOAP_TCP_ERROR);
-        soap->fclosesocket(soap, fd);
-        return SOAP_INVALID_SOCKET;
-      }
-    }
-#ifndef WINDOWS
-    if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (char*)soap->ipv4_multicast_if, sizeof(struct in_addr))) 
-    { soap->errnum = soap_socket_errno(fd);
-      soap_set_sender_error(soap, tcp_error(soap), "setsockopt IP_MULTICAST_IF failed in tcp_connect()", SOAP_TCP_ERROR);
-      soap->fclosesocket(soap, fd);
-      return SOAP_INVALID_SOCKET;
-    }
-#else
-#ifndef IP_MULTICAST_IF
-#define IP_MULTICAST_IF 2
-#endif
-    if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (char*)soap->ipv4_multicast_if, sizeof(struct in_addr))) 
-    { soap->errnum = soap_socket_errno(fd);
-      soap_set_sender_error(soap, tcp_error(soap), "setsockopt IP_MULTICAST_IF failed in tcp_connect()", SOAP_TCP_ERROR);
-      soap->fclosesocket(soap, fd);
-      return SOAP_INVALID_SOCKET;
-    }
-#endif
-  }
-#endif
-#endif
-  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Opening socket %d to host='%s' port=%d\n", fd, host, port));
-#ifndef WITH_IPV6
-  soap->peerlen = sizeof(soap->peer);
-  memset((void*)&soap->peer, 0, sizeof(soap->peer));
-  soap->peer.sin_family = AF_INET;
-  soap->errmode = 2;
-  if (soap->proxy_host)
-  { if (soap->fresolve(soap, soap->proxy_host, &soap->peer.sin_addr))
-    { soap_set_sender_error(soap, tcp_error(soap), "get proxy host by name failed in tcp_connect()", SOAP_TCP_ERROR);
-      soap->fclosesocket(soap, fd);
-      return SOAP_INVALID_SOCKET;
-    }
-    soap->peer.sin_port = htons((short)soap->proxy_port);
-  }
-  else
-  { if (soap->fresolve(soap, host, &soap->peer.sin_addr))
-    { soap_set_sender_error(soap, tcp_error(soap), "get host by name failed in tcp_connect()", SOAP_TCP_ERROR);
-      soap->fclosesocket(soap, fd);
-      return SOAP_INVALID_SOCKET;
-    }
-    soap->peer.sin_port = htons((short)port);
-  }
-  soap->errmode = 0;
-#ifndef WITH_LEAN
-  if ((soap->omode & SOAP_IO_UDP))
-    return fd;
-#endif
-#else
-  if ((soap->omode & SOAP_IO_UDP))
-  { memcpy(&soap->peer, res->ai_addr, res->ai_addrlen);
-    soap->peerlen = res->ai_addrlen;
-    freeaddrinfo(ressave);
-    return fd;
-  }
-#endif
-#ifndef WITH_LEAN
-  if (soap->connect_timeout)
-    SOAP_SOCKNONBLOCK(fd)
-  else
-    SOAP_SOCKBLOCK(fd)
-  retries = 10;
-#endif
-  for (;;)
-  { 
-#ifdef WITH_IPV6
-    if (connect(fd, res->ai_addr, (int)res->ai_addrlen))
-#else
-    if (connect(fd, (struct sockaddr*)&soap->peer, sizeof(soap->peer)))
-#endif
-    { err = soap_socket_errno(fd);
-#ifndef WITH_LEAN
-      if (err == SOAP_EADDRINUSE)
-      { soap->fclosesocket(soap, fd);
-        if (retries-- > 0)
-          goto again;
-      }
-      else if (soap->connect_timeout && (err == SOAP_EINPROGRESS || err == SOAP_EAGAIN || err == SOAP_EWOULDBLOCK))
-      {
-        SOAP_SOCKLEN_T k;
-        for (;;)
-        { register int r;
-          r = tcp_select(soap, fd, SOAP_TCP_SELECT_SND, soap->connect_timeout);
-          if (r > 0)
-            break;
-          if (!r)
-          { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connect timeout\n"));
-            soap_set_sender_error(soap, "Timeout", "connect failed in tcp_connect()", SOAP_TCP_ERROR);
-            soap->fclosesocket(soap, fd);
-            soap->socket = SOAP_INVALID_SOCKET;      /* Oracle customization */
-#ifdef WITH_IPV6
-            freeaddrinfo(ressave);
-#endif
-            return SOAP_INVALID_SOCKET;
-          }
-    	  r = soap->errnum;
-          if (r != SOAP_EINTR)
-          { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not connect to host\n"));
-            soap_set_sender_error(soap, tcp_error(soap), "connect failed in tcp_connect()", SOAP_TCP_ERROR);
-            soap->fclosesocket(soap, fd);
-            soap->socket = SOAP_INVALID_SOCKET;      /* Oracle customization */
-#ifdef WITH_IPV6
-            freeaddrinfo(ressave);
-#endif
-            return SOAP_INVALID_SOCKET;
-          }
-        }
-        k = (SOAP_SOCKLEN_T)sizeof(soap->errnum);
-        if (!getsockopt(fd, SOL_SOCKET, SO_ERROR, (char*)&soap->errnum, &k) && !soap->errnum)	/* portability note: see SOAP_SOCKLEN_T definition in stdsoap2.h */
-          break;
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not connect to host\n"));
-        if (!soap->errnum)
-          soap->errnum = soap_socket_errno(fd);
-        soap_set_sender_error(soap, tcp_error(soap), "connect failed in tcp_connect()", SOAP_TCP_ERROR);
-        soap->fclosesocket(soap, fd);
-#ifdef WITH_IPV6
-        freeaddrinfo(ressave);
-#endif
-        return SOAP_INVALID_SOCKET;
-      }
-#endif
-#ifdef WITH_IPV6
-      if (res->ai_next)
-      { res = res->ai_next;
-        soap->fclosesocket(soap, fd);
-        goto again;
-      }
-#endif
-      if (err && err != SOAP_EINTR)
-      { soap->errnum = err;
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not connect to host\n"));
-        soap_set_sender_error(soap, tcp_error(soap), "connect failed in tcp_connect()", SOAP_TCP_ERROR);
-        soap->fclosesocket(soap, fd);
-#ifdef WITH_IPV6
-        freeaddrinfo(ressave);
-#endif
-        return SOAP_INVALID_SOCKET;
-      }
-    }  
-    else
-      break;
-  }
-#ifdef WITH_IPV6
-  soap->peerlen = 0; /* IPv6: already connected so use send() */
-  freeaddrinfo(ressave);
-#endif
-  if (soap->recv_timeout || soap->send_timeout)
-    SOAP_SOCKNONBLOCK(fd)
-  else
-    SOAP_SOCKBLOCK(fd)
-  soap->socket = fd;
-  soap->imode &= ~SOAP_ENC_SSL;
-  soap->omode &= ~SOAP_ENC_SSL;
-  if (!soap_tag_cmp(endpoint, "https:*"))
-  {
-#ifdef WITH_OPENSSL
-    BIO *bio;
-    int r;
-    if (soap->proxy_host)
-    { soap_mode m = soap->mode; /* preserve settings */
-      soap_mode om = soap->omode; /* make sure we only parse HTTP */
-      size_t n = soap->count; /* save the content length */
-      const char *userid, *passwd;
-      soap->omode &= ~SOAP_ENC; /* mask IO and ENC */
-      soap->omode |= SOAP_IO_BUFFER;
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connecting to %s proxy server\n", soap->proxy_http_version));
-      sprintf(soap->tmpbuf, "CONNECT %s:%d HTTP/%s", host, port, soap->proxy_http_version);
-      if (soap_begin_send(soap)
-       || (soap->error = soap->fposthdr(soap, soap->tmpbuf, NULL)))
-      { soap->fclosesocket(soap, fd);
-        soap->socket = SOAP_INVALID_SOCKET;      /* Oracle customization */
-        return SOAP_INVALID_SOCKET;
-      }
-#ifndef WITH_LEAN
-      if (soap->proxy_userid && soap->proxy_passwd && strlen(soap->proxy_userid) + strlen(soap->proxy_passwd) < 761)
-      { sprintf(soap->tmpbuf + 262, "%s:%s", soap->proxy_userid, soap->proxy_passwd);
-        strcpy(soap->tmpbuf, "Basic ");
-        soap_s2base64(soap, (const unsigned char*)(soap->tmpbuf + 262), soap->tmpbuf + 6, (int)strlen(soap->tmpbuf + 262));
-        if ((soap->error = soap->fposthdr(soap, "Proxy-Authorization", soap->tmpbuf)))
-        { soap->fclosesocket(soap, fd);
-          soap->socket = SOAP_INVALID_SOCKET;      /* Oracle customization */
-          //
-          // Oracle customization
-          // TODO: returning soap->error may also be a bug
-          //
-          return soap->error;
-        }
-      }
-#endif
-      if ((soap->error = soap->fposthdr(soap, NULL, NULL))
-       || soap_flush(soap))
-      { soap->fclosesocket(soap, fd);
-        soap->socket = SOAP_INVALID_SOCKET;      /* Oracle customization */
-        return SOAP_INVALID_SOCKET;
-      }
-      soap->omode = om;
-      om = soap->imode;
-      soap->imode &= ~SOAP_ENC; /* mask IO and ENC */
-      userid = soap->userid; /* preserve */
-      passwd = soap->passwd; /* preserve */
-      if ((soap->error = soap->fparse(soap)))
-      { soap->fclosesocket(soap, fd);
-        soap->socket = SOAP_INVALID_SOCKET;      /* Oracle customization */
-        return SOAP_INVALID_SOCKET;
-      }
-      soap->userid = userid; /* restore */
-      soap->passwd = passwd; /* restore */
-      soap->imode = om; /* restore */
-      soap->count = n; /* restore */
-      if (soap_begin_send(soap))
-      { soap->fclosesocket(soap, fd);
-        return SOAP_INVALID_SOCKET;
-      }
-      if (endpoint)
-        strncpy(soap->endpoint, endpoint, sizeof(soap->endpoint)-1); /* restore */
-      soap->mode = m;
-    }
-    if (!soap->ctx && (soap->error = soap->fsslauth(soap)))
-    { soap_set_sender_error(soap, "SSL error", "SSL authentication failed in tcp_connect(): check password, key file, and ca file.", SOAP_SSL_ERROR);
-      soap->fclosesocket(soap, fd);
-      soap->socket = SOAP_INVALID_SOCKET;      /* Oracle customization */
-      return SOAP_INVALID_SOCKET;
-    }
-    if (!soap->ssl)
-    { soap->ssl = SSL_new(soap->ctx);
-      if (!soap->ssl)
-      { soap->fclosesocket(soap, fd);
-        soap->socket = SOAP_INVALID_SOCKET;      /* Oracle customization */
-        soap->error = SOAP_SSL_ERROR;
-        return SOAP_INVALID_SOCKET;
-      }
-    }
-    else
-      SSL_clear(soap->ssl);
-    if (soap->session)
-    { if (!strcmp(soap->session_host, host) && soap->session_port == port)
-        SSL_set_session(soap->ssl, soap->session);
-      SSL_SESSION_free(soap->session);
-      soap->session = NULL;
-    }
-    soap->imode |= SOAP_ENC_SSL;
-    soap->omode |= SOAP_ENC_SSL;
-    bio = BIO_new_socket((int)fd, BIO_NOCLOSE);
-    SSL_set_bio(soap->ssl, bio, bio);
-    retries = 0;
-#ifndef WITH_LEAN
-    /* Connect timeout: set SSL sockets to non-blocking */
-    if (soap->connect_timeout)
-    { SOAP_SOCKNONBLOCK(fd)
-      retries = 10*soap->connect_timeout;
-    }
-    else
-      SOAP_SOCKBLOCK(fd)
-#endif
-    //
-    // Oracle customization
-    //
-    // Clear error queue of any errors remaining from a previous operation
-    ERR_clear_error();
-    
-    if (retries <= 0)
-      retries = 100; /* SSL connect timeout: 10 sec retries, 100 x 0.1 sec */
-    /* Try connecting until success or timeout (when nonblocking) */
-    do
-    { if ((r = SSL_connect(soap->ssl)) <= 0)
-      { int err = SSL_get_error(soap->ssl, r);
-        if (err == SSL_ERROR_WANT_CONNECT || err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE)
-        { register int s;
-	  if (err == SSL_ERROR_WANT_READ)
-            s = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, -100000);
-          else
-            s = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_SND | SOAP_TCP_SELECT_ERR, -100000);
-          if (s < 0 && soap->errnum != SOAP_EINTR)
-          { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL_connect/select error in tcp_connect\n"));
-            soap_set_sender_error(soap, soap_ssl_error(soap, r), "SSL_connect failed in tcp_connect()", SOAP_TCP_ERROR);
-            soap->fclosesocket(soap, fd);
-            soap->socket = SOAP_INVALID_SOCKET;      /* Oracle customization */
-            return SOAP_INVALID_SOCKET;
-          }
-	  if (s == 0 && retries-- <= 0)
-          { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL connect timeout\n"));
-            soap_set_sender_error(soap, "Timeout", "SSL connect failed in tcp_connect()", SOAP_TCP_ERROR);
-            soap->fclosesocket(soap, fd);
-            soap->socket = SOAP_INVALID_SOCKET;      /* Oracle customization */
-            return SOAP_INVALID_SOCKET;
-          }
-        }
-	else
-        { soap_set_sender_error(soap, soap_ssl_error(soap, r), "SSL_connect error in tcp_connect()", SOAP_SSL_ERROR);
-          soap->fclosesocket(soap, fd);
-          soap->socket = SOAP_INVALID_SOCKET;      /* Oracle customization */
-          return SOAP_INVALID_SOCKET;
-        }
-      }
-    } while (!SSL_is_init_finished(soap->ssl));
-    /* Set SSL sockets to nonblocking */
-    SOAP_SOCKNONBLOCK(fd)
-    /* Check server credentials when required */
-    if ((soap->ssl_flags & SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION))
-    { int err;
-      if ((err = SSL_get_verify_result(soap->ssl)) != X509_V_OK)
-      { soap_set_sender_error(soap, X509_verify_cert_error_string(err), "SSL certificate presented by peer cannot be verified in tcp_connect()", SOAP_SSL_ERROR);
-        soap->fclosesocket(soap, fd);
-        soap->socket = SOAP_INVALID_SOCKET;      /* Oracle customization */
-        return SOAP_INVALID_SOCKET;
-      }
-      if (!(soap->ssl_flags & SOAP_SSL_SKIP_HOST_CHECK))
-      { /* Oracle customization: X509_NAME *subj; */
-        int ext_count;
-        int ok = 0;
-        X509 *peer;
-        peer = SSL_get_peer_certificate(soap->ssl);
-        if (!peer)
-        { soap_set_sender_error(soap, "SSL error", "No SSL certificate was presented by the peer in tcp_connect()", SOAP_SSL_ERROR);
-          soap->fclosesocket(soap, fd);
-          soap->socket = SOAP_INVALID_SOCKET;      /* Oracle customization */
-          return SOAP_INVALID_SOCKET;
-        }
-        ext_count = X509_get_ext_count(peer);
-        if (ext_count > 0)
-        { int i;
-          for (i = 0; i < ext_count; i++)
-          { X509_EXTENSION *ext = X509_get_ext(peer, i);
-            const char *ext_str = OBJ_nid2sn(OBJ_obj2nid(X509_EXTENSION_get_object(ext)));
-            if (ext_str && !strcmp(ext_str, "subjectAltName"))
-            { X509V3_EXT_METHOD *meth = (X509V3_EXT_METHOD*)X509V3_EXT_get(ext);
-              void *ext_data;
-#if (OPENSSL_VERSION_NUMBER >= 0x0090800fL)
-              const unsigned char *data;
-#else
-              unsigned char *data;
-#endif
-              STACK_OF(CONF_VALUE) *val;
-              int j;
-              if (!meth)
-                break;
-              data = ext->value->data;
-#if (OPENSSL_VERSION_NUMBER > 0x00907000L)
-              if (meth->it) 
-                ext_data = ASN1_item_d2i(NULL, &data, ext->value->length, ASN1_ITEM_ptr(meth->it));
-              else
-              { /* OpenSSL not perfectly portable at this point (?):
-                   Some compilers appear to prefer
-                     meth->d2i(NULL, (const unsigned char**)&data, ...
-                   and others prefer
-                     meth->d2i(NULL, &data, ext->value->length);
-                */
-                ext_data = meth->d2i(NULL, &data, ext->value->length);
-              }
-#else
-              ext_data = meth->d2i(NULL, &data, ext->value->length);
-#endif
-              if (ext_data)
-              { val = meth->i2v(meth, ext_data, NULL);
-		if (val)
-                { for (j = 0; j < sk_CONF_VALUE_num(val); j++)
-                  { CONF_VALUE *nval = sk_CONF_VALUE_value(val, j);
-                    if (nval && !strcmp(nval->name, "DNS") && !strcmp(nval->value, host))
-                    { ok = 1;
-                      break;
-                    }
-                  }
-                  sk_CONF_VALUE_pop_free(val, X509V3_conf_free);
-                }
-#if (OPENSSL_VERSION_NUMBER > 0x00907000L)
-                if (meth->it)
-                  ASN1_item_free((ASN1_VALUE*)ext_data, ASN1_ITEM_ptr(meth->it));
-                else
-                  meth->ext_free(ext_data);
-#else
-                meth->ext_free(ext_data);
-#endif
-	      }
-            }
-            if (ok)
-              break;
-          }
-        }
-        //
-        // Oracle customization
-        //
-        // the certificate subject name is an entity name, not a DNS name
-        //
-        /*
-        if (!ok && (subj = X509_get_subject_name(peer)))
-        { int i = -1;
-          do
-          { ASN1_STRING *name;
-            i = X509_NAME_get_index_by_NID(subj, NID_commonName, i);
-            if (i == -1)
-              break;
-            name = X509_NAME_ENTRY_get_data(X509_NAME_get_entry(subj, i));
-            if (name)
-            { if (!soap_tag_cmp(host, (const char*)M_ASN1_STRING_data(name)))
-                ok = 1;
-              else
-              { unsigned char *tmp = NULL;
-                ASN1_STRING_to_UTF8(&tmp, name);
-                if (tmp)
-                { if (!soap_tag_cmp(host, (const char*)tmp))
-                    ok = 1;
-                  OPENSSL_free(tmp);
-                }
-              }
-            }
-          } while (!ok);
-        }
-        */
-        X509_free(peer);
-        /*
-        if (!ok)
-        { soap_set_sender_error(soap, "SSL error", "SSL certificate host name mismatch in tcp_connect()", SOAP_SSL_ERROR);
-          soap->fclosesocket(soap, fd);
-          return SOAP_INVALID_SOCKET;
-        }
-        */
-      }
-    }
-#ifdef SOAP_DEBUG
-    //
-    // Oracle customization for debug
-    //
-    if ( SSL_session_reused( soap->ssl ) == 1)
-    {
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL session reused\n"));
-    }
-    else
-    {
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "SSL session negotiated\n"));
-    }
-#endif
-#else
-    soap->fclosesocket(soap, fd);
-    soap->socket = SOAP_INVALID_SOCKET;      /* Oracle customization */
-    soap->error = SOAP_SSL_ERROR;
-    return SOAP_INVALID_SOCKET;
-#endif
-  }
-  return fd;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIO
-#ifndef PALM_1
-static int
-tcp_select(struct soap *soap, SOAP_SOCKET s, int flags, int timeout)
-{ register int r;
-  struct timeval tv;
-  fd_set fd[3], *rfd, *sfd, *efd;
-  soap->errnum = 0;
-#ifndef WIN32
-  /* if fd max set size exceeded, use poll() when available */
-#if defined(__QNX__) || defined(QNX) /* select() is not MT safe on some QNX */
-  if (1)
-#else
-  if ((int)s >= (int)FD_SETSIZE)
-#endif
-#ifdef HAVE_POLL
-  { struct pollfd pollfd;
-    int retries = 0;
-    pollfd.fd = (int)s;
-    pollfd.events = 0;
-    if (flags & SOAP_TCP_SELECT_RCV)
-      pollfd.events |= POLLIN;
-    if (flags & SOAP_TCP_SELECT_SND)
-      pollfd.events |= POLLOUT;
-    if (flags & SOAP_TCP_SELECT_ERR)
-      pollfd.events |= POLLERR;
-    if (timeout < 0)
-      timeout /= -1000; /* -usec -> ms */
-    else if (timeout <= 1000000) /* avoid overflow */
-      timeout *= 1000; /* sec -> ms */
-    else
-    { retries = timeout / 1000000;
-      timeout = 1000000000;
-    }
-    do r = poll(&pollfd, 1, timeout);
-    while (r == 0 && retries--);
-    if (r > 0)
-    { r = 0;
-      if ((flags & SOAP_TCP_SELECT_RCV) && (pollfd.revents & POLLIN))
-        r |= SOAP_TCP_SELECT_RCV;
-      if ((flags & SOAP_TCP_SELECT_SND) && (pollfd.revents & POLLOUT))
-        r |= SOAP_TCP_SELECT_SND;
-      if ((flags & SOAP_TCP_SELECT_ERR) && (pollfd.revents & POLLERR))
-        r |= SOAP_TCP_SELECT_ERR;
-    }
-    else if (r < 0)
-      soap->errnum = soap_socket_errno(s);
-    return r;
-  }
-#else
-  { soap->error = SOAP_FD_EXCEEDED;
-    return -1;
-  }
-#endif
-#endif
-  rfd = sfd = efd = NULL;
-  if (flags & SOAP_TCP_SELECT_RCV)
-  { rfd = &fd[0];
-    FD_ZERO(rfd);
-    FD_SET(s, rfd);
-  }
-  if (flags & SOAP_TCP_SELECT_SND)
-  { sfd = &fd[1];
-    FD_ZERO(sfd);
-    FD_SET(s, sfd);
-  }
-  if (flags & SOAP_TCP_SELECT_ERR)
-  { efd = &fd[2];
-    FD_ZERO(efd);
-    FD_SET(s, efd);
-  }
-  if (timeout >= 0)
-  { tv.tv_sec = timeout;
-    tv.tv_usec = 0;
-  }
-  else
-  { tv.tv_sec = -timeout / 1000000;
-    tv.tv_usec = -timeout % 1000000;
-  }
-  r = select((int)s + 1, rfd, sfd, efd, &tv);
-  if (r > 0)
-  { r = 0;
-    if ((flags & SOAP_TCP_SELECT_RCV) && FD_ISSET(s, rfd))
-      r |= SOAP_TCP_SELECT_RCV;
-    if ((flags & SOAP_TCP_SELECT_SND) && FD_ISSET(s, sfd))
-      r |= SOAP_TCP_SELECT_SND;
-    if ((flags & SOAP_TCP_SELECT_ERR) && FD_ISSET(s, efd))
-      r |= SOAP_TCP_SELECT_ERR;
-  }
-  else if (r < 0)
-    soap->errnum = soap_socket_errno(s);
-  return r;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIO
-#ifndef PALM_1
-static SOAP_SOCKET
-tcp_accept(struct soap *soap, SOAP_SOCKET s, struct sockaddr *a, int *n)
-{ SOAP_SOCKET fd;
-  fd = accept(s, a, (SOAP_SOCKLEN_T*)n); /* portability note: see SOAP_SOCKLEN_T definition in stdsoap2.h */
-#ifdef SOCKET_CLOSE_ON_EXEC
-#ifdef WIN32
-#ifndef UNDER_CE
-  SetHandleInformation((HANDLE)fd, HANDLE_FLAG_INHERIT, 0);
-#endif
-#else
-  fcntl(fd, F_SETFD, FD_CLOEXEC);
-#endif
-#endif
-  return fd;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIO
-#ifndef PALM_1
-static int
-tcp_disconnect(struct soap *soap)
-{
-#ifdef WITH_OPENSSL
-  if (soap->ssl)
-  { int r, s = 0;
-    if (soap->session)
-    { SSL_SESSION_free(soap->session);
-      soap->session = NULL;
-    }
-    if (*soap->host)
-    { soap->session = SSL_get1_session(soap->ssl);
-      if (soap->session)
-      { strcpy(soap->session_host, soap->host);
-        soap->session_port = soap->port;
-      }
-    }
-    r = SSL_shutdown(soap->ssl);
-    /* SSL shutdown does not work when reads are pending */
-    while (SSL_want_read(soap->ssl))
-    { SSL_read(soap->ssl, NULL, 0);
-      if (soap_socket_errno(soap->socket) != SOAP_EAGAIN)
-      { r = SSL_shutdown(soap->ssl);
-	break;
-      }
-    }
-    if (r == 0)
-    { if (soap_valid_socket(soap->socket))
-      { if (!soap->fshutdownsocket(soap, soap->socket, 1))
-        {
-#ifndef WITH_LEAN
-	  /*
-          wait up to 10 seconds for close_notify to be sent by peer (if peer not
-          present, this avoids calling SSL_shutdown() which has a lengthy return
-          timeout)
-          */
-          r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_ERR, 10);
-          if (r <= 0 && soap->errnum != SOAP_EINTR)
-          { soap->errnum = 0;
-            DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Connection lost...\n"));
-            soap->fclosesocket(soap, soap->socket);
-            soap->socket = SOAP_INVALID_SOCKET;
-            ERR_remove_state(0);
-            return SOAP_OK;
-          }
-#else
-          r = SSL_shutdown(soap->ssl);
-#endif
-        }
-      }
-    }
-    if (r != 1)
-    { s = ERR_get_error();
-      if (s)
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Shutdown failed: %d\n", SSL_get_error(soap->ssl, r)));
-        if (soap_valid_socket(soap->socket) && !(soap->omode & SOAP_IO_UDP))
-        { soap->fclosesocket(soap, soap->socket);
-          soap->socket = SOAP_INVALID_SOCKET;
-        }
-      }
-    }
-    SSL_free(soap->ssl);
-    soap->ssl = NULL;
-    if (s)
-      return SOAP_SSL_ERROR;
-    ERR_remove_state(0);
-  }
-#endif
-  if (soap_valid_socket(soap->socket) && !(soap->omode & SOAP_IO_UDP))
-  { soap->fshutdownsocket(soap, soap->socket, 2);
-    soap->fclosesocket(soap, soap->socket);
-    soap->socket = SOAP_INVALID_SOCKET;
-  }
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIO
-#ifndef PALM_1
-static int
-tcp_closesocket(struct soap *soap, SOAP_SOCKET fd)
-{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Close socket %d\n", (int)fd));
-  return soap_closesocket(fd);
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIO
-#ifndef PALM_1
-static int
-tcp_shutdownsocket(struct soap *soap, SOAP_SOCKET fd, int how)
-{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Shutdown socket %d how=%d\n", (int)fd, how));
-  return shutdown(fd, how);
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIO
-#ifndef PALM_1
-SOAP_FMAC1
-SOAP_SOCKET
-SOAP_FMAC2
-soap_bind(struct soap *soap, const char *host, int port, int backlog)
-{
-#ifdef WITH_IPV6
-  struct addrinfo *addrinfo = NULL;
-  struct addrinfo hints;
-  struct addrinfo res;
-  int err;
-#ifdef IPV6_V6ONLY
-  int unset = 0;
-#ifdef SOL_IP
-  int level = SOL_IP;
-#else
-  int level = IPPROTO_IPV6;
-#endif
-#endif
-#endif
-#ifndef WITH_LEAN
-  int len = SOAP_BUFLEN;
-  int set = 1;
-#endif
-  if (soap_valid_socket(soap->master))
-  { soap->fclosesocket(soap, soap->master);
-    soap->master = SOAP_INVALID_SOCKET;
-  }
-  soap->socket = SOAP_INVALID_SOCKET;
-  soap->errmode = 1;
-  if (tcp_init(soap))
-  { soap_set_receiver_error(soap, tcp_error(soap), "TCP init failed in soap_bind()", SOAP_TCP_ERROR);
-    return SOAP_INVALID_SOCKET;
-  }
-#ifdef WITH_IPV6
-  memset((void*)&hints, 0, sizeof(hints));
-  hints.ai_family = PF_UNSPEC;
-#ifndef WITH_LEAN
-  if ((soap->omode & SOAP_IO_UDP))
-    hints.ai_socktype = SOCK_DGRAM;
-  else
-#endif
-    hints.ai_socktype = SOCK_STREAM;
-  hints.ai_flags = AI_PASSIVE;
-  soap->errmode = 2;
-  /* Oracle customization: check err before using addrinfo */
-  err = getaddrinfo(host, soap_int2s(soap, port), &hints, &addrinfo);
-  if (err || !addrinfo)
-  { soap_set_receiver_error(soap, SOAP_GAI_STRERROR(err), "getaddrinfo failed in soap_bind()", SOAP_TCP_ERROR);
-    if (addrinfo)
-    {
-      freeaddrinfo(addrinfo);
-    }
-    return SOAP_INVALID_SOCKET;
-  }
-  res = *addrinfo;
-  memcpy(&soap->peer, addrinfo->ai_addr, addrinfo->ai_addrlen);
-  soap->peerlen = addrinfo->ai_addrlen;
-  res.ai_addr = (struct sockaddr*)&soap->peer;
-  res.ai_addrlen = soap->peerlen;
-  freeaddrinfo(addrinfo);
-  soap->master = (int)socket(res.ai_family, res.ai_socktype, res.ai_protocol);
-#else
-#ifndef WITH_LEAN
-  if ((soap->omode & SOAP_IO_UDP))
-    soap->master = (int)socket(AF_INET, SOCK_DGRAM, 0);
-  else
-#endif
-    soap->master = (int)socket(AF_INET, SOCK_STREAM, 0);
-#endif
-  soap->errmode = 0;
-  if (!soap_valid_socket(soap->master))
-  { soap->errnum = soap_socket_errno(soap->master);
-    soap_set_receiver_error(soap, tcp_error(soap), "socket failed in soap_bind()", SOAP_TCP_ERROR);
-    return SOAP_INVALID_SOCKET;
-  }
-#ifndef WITH_LEAN
-  if ((soap->omode & SOAP_IO_UDP))
-    soap->socket = soap->master;
-#endif
-#ifdef SOCKET_CLOSE_ON_EXEC
-#ifdef WIN32
-#ifndef UNDER_CE
-  SetHandleInformation((HANDLE)soap->master, HANDLE_FLAG_INHERIT, 0);
-#endif
-#else
-  fcntl(soap->master, F_SETFD, 1);
-#endif
-#endif
-#ifndef WITH_LEAN
-  if (soap->bind_flags && setsockopt(soap->master, SOL_SOCKET, soap->bind_flags, (char*)&set, sizeof(int)))
-  { soap->errnum = soap_socket_errno(soap->master);
-    soap_set_receiver_error(soap, tcp_error(soap), "setsockopt failed in soap_bind()", SOAP_TCP_ERROR);
-    return SOAP_INVALID_SOCKET;
-  }
-  if (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) && setsockopt(soap->master, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int)))
-  { soap->errnum = soap_socket_errno(soap->master);
-    soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_KEEPALIVE failed in soap_bind()", SOAP_TCP_ERROR);
-    return SOAP_INVALID_SOCKET;
-  }
-  if (setsockopt(soap->master, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int)))
-  { soap->errnum = soap_socket_errno(soap->master);
-    soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_SNDBUF failed in soap_bind()", SOAP_TCP_ERROR);
-    return SOAP_INVALID_SOCKET;
-  }
-  if (setsockopt(soap->master, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int)))
-  { soap->errnum = soap_socket_errno(soap->master);
-    soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_RCVBUF failed in soap_bind()", SOAP_TCP_ERROR);
-    return SOAP_INVALID_SOCKET;
-  }
-#ifdef TCP_NODELAY
-  if (!(soap->omode & SOAP_IO_UDP) && setsockopt(soap->master, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int)))
-  { soap->errnum = soap_socket_errno(soap->master);
-    soap_set_receiver_error(soap, tcp_error(soap), "setsockopt TCP_NODELAY failed in soap_bind()", SOAP_TCP_ERROR);
-    return SOAP_INVALID_SOCKET;
-  }
-#endif
-#endif
-#ifdef WITH_IPV6
-#ifdef IPV6_V6ONLY
-  if (setsockopt(soap->master, level, IPV6_V6ONLY, (char*)&unset, sizeof(int)))
-  { soap->errnum = soap_socket_errno(soap->master);
-    soap_set_receiver_error(soap, tcp_error(soap), "setsockopt IPV6_V6ONLY failed in soap_bind()", SOAP_TCP_ERROR);
-    return SOAP_INVALID_SOCKET;
-  }
-#endif
-  soap->errmode = 0;
-  if (bind(soap->master, res.ai_addr, (int)res.ai_addrlen))
-  { soap->errnum = soap_socket_errno(soap->master);
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host\n"));
-    soap_closesock(soap);
-    soap_set_receiver_error(soap, tcp_error(soap), "bind failed in soap_bind()", SOAP_TCP_ERROR);
-    return SOAP_INVALID_SOCKET;
-  }  
-#else
-  soap->peerlen = sizeof(soap->peer);
-  memset((void*)&soap->peer, 0, sizeof(soap->peer));
-  soap->peer.sin_family = AF_INET;
-  soap->errmode = 2;
-  if (host)
-  { if (soap->fresolve(soap, host, &soap->peer.sin_addr))
-    { soap_set_receiver_error(soap, tcp_error(soap), "get host by name failed in soap_bind()", SOAP_TCP_ERROR);
-      return SOAP_INVALID_SOCKET;
-    }
-  }
-  else
-    soap->peer.sin_addr.s_addr = htonl(INADDR_ANY);
-  soap->peer.sin_port = htons((short)port);
-  soap->errmode = 0;
-  if (bind(soap->master, (struct sockaddr*)&soap->peer, (int)soap->peerlen))
-  { soap->errnum = soap_socket_errno(soap->master);
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host\n"));
-    soap_closesock(soap);
-    soap_set_receiver_error(soap, tcp_error(soap), "bind failed in soap_bind()", SOAP_TCP_ERROR);
-    return SOAP_INVALID_SOCKET;
-  }
-#endif
-  if (!(soap->omode & SOAP_IO_UDP) && listen(soap->master, backlog))
-  { soap->errnum = soap_socket_errno(soap->master);
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not bind to host\n"));
-    soap_closesock(soap);
-    soap_set_receiver_error(soap, tcp_error(soap), "listen failed in soap_bind()", SOAP_TCP_ERROR);
-    return SOAP_INVALID_SOCKET;
-  }  
-  return soap->master;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIO
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_poll(struct soap *soap)
-{ 
-#ifndef WITH_LEAN
-  register int r;
-  if (soap_valid_socket(soap->socket))
-  { r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_ALL, 0);
-    if (r > 0 && (r & SOAP_TCP_SELECT_ERR))
-      r = -1;
-  }
-  else if (soap_valid_socket(soap->master))
-    r = tcp_select(soap, soap->master, SOAP_TCP_SELECT_SND, 0);
-  else
-    return SOAP_OK;
-  if (r > 0)
-  {
-#ifdef WITH_OPENSSL
-    if (soap->imode & SOAP_ENC_SSL)
-    {
-      if (soap_valid_socket(soap->socket)
-       && (r & SOAP_TCP_SELECT_SND)
-       && (!(r & SOAP_TCP_SELECT_RCV)
-        || SSL_peek(soap->ssl, soap->tmpbuf, 1) > 0))
-        return SOAP_OK;
-    }
-    else
-#endif
-      if (soap_valid_socket(soap->socket)
-       && (r & SOAP_TCP_SELECT_SND)
-       && (!(r & SOAP_TCP_SELECT_RCV)
-        || recv(soap->socket, soap->tmpbuf, 1, MSG_PEEK) > 0))
-        return SOAP_OK;
-  }
-  else if (r < 0)
-  { if ((soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) && soap_socket_errno(soap->master) != SOAP_EINTR)
-    { soap_set_receiver_error(soap, tcp_error(soap), "select failed in soap_poll()", SOAP_TCP_ERROR);
-      return soap->error = SOAP_TCP_ERROR;
-    }
-  }
-  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Polling: other end down on socket=%d select=%d\n", soap->socket, r));
-  return SOAP_EOF;
-#else
-  return SOAP_OK;
-#endif
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIO
-#ifndef PALM_1
-SOAP_FMAC1
-SOAP_SOCKET
-SOAP_FMAC2
-soap_accept(struct soap *soap)
-{ int n = (int)sizeof(soap->peer);
-#ifndef WITH_LEAN
-  int len = SOAP_BUFLEN;
-  int set = 1;
-#endif
-  soap->error = SOAP_OK;
-#ifndef WITH_LEAN
-  if ((soap->omode & SOAP_IO_UDP))
-    return soap->socket = soap->master;
-#endif
-  memset((void*)&soap->peer, 0, sizeof(soap->peer));
-  soap->socket = SOAP_INVALID_SOCKET;
-  soap->errmode = 0;
-  soap->keep_alive = 0;
-  if (soap_valid_socket(soap->master))
-  { register int err;
-    for (;;)
-    { if (soap->accept_timeout || soap->send_timeout || soap->recv_timeout)
-      { for (;;)
-        { register int r;
-          r = tcp_select(soap, soap->master, SOAP_TCP_SELECT_ALL, soap->accept_timeout ? soap->accept_timeout : 60);
-          if (r > 0)
-            break;
-          if (!r && soap->accept_timeout)
-          { soap_set_receiver_error(soap, "Timeout", "accept failed in soap_accept()", SOAP_TCP_ERROR);
-            return SOAP_INVALID_SOCKET;
-          }
-	  if (r < 0)
-          { r = soap->errnum;
-            if (r != SOAP_EINTR)
-            { soap_closesock(soap);
-              soap_set_sender_error(soap, tcp_error(soap), "accept failed in soap_accept()", SOAP_TCP_ERROR);
-              return SOAP_INVALID_SOCKET;
-            }
-	  }
-        }
-      }
-      if (soap->accept_timeout || soap->send_timeout || soap->recv_timeout)
-        SOAP_SOCKNONBLOCK(soap->master)
-      else
-        SOAP_SOCKBLOCK(soap->master)
-      soap->socket = soap->faccept(soap, soap->master, (struct sockaddr*)&soap->peer, &n);
-      soap->peerlen = (size_t)n;
-      if (soap_valid_socket(soap->socket))
-      {
-#ifdef WITH_IPV6
-/* Use soap->host to store the numeric form of the remote host */
-        getnameinfo((struct sockaddr*)&soap->peer, n, soap->host, sizeof(soap->host), NULL, 0, NI_NUMERICHOST | NI_NUMERICSERV); 
-        DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Accept socket %d from %s\n", soap->socket, soap->host));
-        //
-        // Oracle customization
-        //
-        // bug fix: save off the remote host
-        strcpy(soap->session_host, soap->host);
-     soap->ip = 0; /* info stored in soap->peer and soap->host */
-        soap->port = 0; /* info stored in soap->peer and soap->host */
-#else
-        soap->ip = ntohl(soap->peer.sin_addr.s_addr);
-        soap->port = (int)ntohs(soap->peer.sin_port); /* does not return port number on some systems */
-        DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Accept socket %d at port %d from IP %d.%d.%d.%d\n", soap->socket, soap->port, (int)(soap->ip>>24)&0xFF, (int)(soap->ip>>16)&0xFF, (int)(soap->ip>>8)&0xFF, (int)soap->ip&0xFF));
-#endif
-#ifndef WITH_LEAN
-        if (soap->accept_flags == SO_LINGER)
-        { struct linger linger;
-          memset((void*)&linger, 0, sizeof(linger));
-          linger.l_onoff = 1;
-          linger.l_linger = soap->linger_time;
-          if (setsockopt(soap->socket, SOL_SOCKET, SO_LINGER, (char*)&linger, sizeof(struct linger)))
-          { soap->errnum = soap_socket_errno(soap->socket);
-            soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_LINGER failed in soap_accept()", SOAP_TCP_ERROR);
-            soap_closesock(soap);
-            return SOAP_INVALID_SOCKET;
-          }
-        }
-        else if (soap->accept_flags && setsockopt(soap->socket, SOL_SOCKET, soap->accept_flags, (char*)&set, sizeof(int)))
-        { soap->errnum = soap_socket_errno(soap->socket);
-          soap_set_receiver_error(soap, tcp_error(soap), "setsockopt failed in soap_accept()", SOAP_TCP_ERROR);
-          soap_closesock(soap);
-          return SOAP_INVALID_SOCKET;
-        }
-        if (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) && setsockopt(soap->socket, SOL_SOCKET, SO_KEEPALIVE, (char*)&set, sizeof(int)))
-        { soap->errnum = soap_socket_errno(soap->socket);
-          soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_KEEPALIVE failed in soap_accept()", SOAP_TCP_ERROR);
-          soap_closesock(soap);
-          return SOAP_INVALID_SOCKET;
-        }
-        if (setsockopt(soap->socket, SOL_SOCKET, SO_SNDBUF, (char*)&len, sizeof(int)))
-        { soap->errnum = soap_socket_errno(soap->socket);
-          soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_SNDBUF failed in soap_accept()", SOAP_TCP_ERROR);
-          soap_closesock(soap);
-          return SOAP_INVALID_SOCKET;
-        }
-        if (setsockopt(soap->socket, SOL_SOCKET, SO_RCVBUF, (char*)&len, sizeof(int)))
-        { soap->errnum = soap_socket_errno(soap->socket);
-          soap_set_receiver_error(soap, tcp_error(soap), "setsockopt SO_RCVBUF failed in soap_accept()", SOAP_TCP_ERROR);
-          soap_closesock(soap);
-          return SOAP_INVALID_SOCKET;
-        }
-#ifdef TCP_NODELAY
-        if (!(soap->omode & SOAP_IO_UDP) && setsockopt(soap->socket, IPPROTO_TCP, TCP_NODELAY, (char*)&set, sizeof(int)))
-        { soap->errnum = soap_socket_errno(soap->socket);
-          soap_set_receiver_error(soap, tcp_error(soap), "setsockopt TCP_NODELAY failed in soap_accept()", SOAP_TCP_ERROR);
-          soap_closesock(soap);
-          return SOAP_INVALID_SOCKET;
-        }
-#endif
-#endif
-        soap->keep_alive = (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) != 0);
-        return soap->socket;
-      }
-      err = soap_socket_errno(soap->socket);
-      if (err != 0 && err != SOAP_EINTR && err != SOAP_EAGAIN && err != SOAP_EWOULDBLOCK)
-      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Accept failed from %s\n", soap->host));
-        soap->errnum = err;
-        soap_set_receiver_error(soap, tcp_error(soap), "accept failed in soap_accept()", SOAP_TCP_ERROR);
-        soap_closesock(soap);
-        return SOAP_INVALID_SOCKET;
-      }
-    }
-  }
-  else
-  { soap->errnum = 0;
-    soap_set_receiver_error(soap, tcp_error(soap), "no master socket in soap_accept()", SOAP_TCP_ERROR);
-    return SOAP_INVALID_SOCKET;
-  }
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_closesock(struct soap *soap)
-{ register int status = soap->error;
-#ifndef WITH_LEANER
-  soap->mime.first = NULL;
-  soap->mime.last = NULL;
-  soap->dime.first = NULL;
-  soap->dime.last = NULL;
-#endif
-  if (soap->fdisconnect && (soap->error = soap->fdisconnect(soap)))
-    return soap->error;
-  if (status == SOAP_EOF || status == SOAP_TCP_ERROR || status == SOAP_SSL_ERROR || !soap->keep_alive)
-  { if (soap->fclose && (soap->error = soap->fclose(soap)))
-      return soap->error;
-    soap->keep_alive = 0;
-  }
-#ifdef WITH_ZLIB
-  if (soap->zlib_state == SOAP_ZLIB_DEFLATE)
-    deflateEnd(soap->d_stream);
-  else if (soap->zlib_state == SOAP_ZLIB_INFLATE)
-    inflateEnd(soap->d_stream);
-  soap->zlib_state = SOAP_ZLIB_NONE;
-#endif
-  return soap->error = status;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIO
-#ifndef PALM_2
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_cleanup(struct soap *soap)
-{ soap_done(soap);
-#ifdef WIN32
-  if (!tcp_done)
-    return;
-  tcp_done = 0;
-  WSACleanup();
-#endif
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_done(struct soap *soap)
-{ 
-#ifdef SOAP_DEBUG
-  int i;
-#endif
-  if (soap_check_state(soap))
-    return;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Done with context\n"));
-  soap_free_temp(soap);
-  while (soap->clist)
-  { struct soap_clist *p = soap->clist->next;
-    SOAP_FREE(soap, soap->clist);
-    soap->clist = p;
-  }
-  if (soap->state == SOAP_INIT)
-    soap->omode &= ~SOAP_IO_UDP; /* to force close the socket */
-  soap->keep_alive = 0; /* to force close the socket */
-  soap_closesock(soap);
-#ifdef WITH_COOKIES
-  soap_free_cookies(soap);
-#endif
-  while (soap->plugins)
-  { register struct soap_plugin *p = soap->plugins->next;
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Removing plugin '%s'\n", soap->plugins->id));
-    if (soap->plugins->fcopy || soap->state == SOAP_INIT)
-      soap->plugins->fdelete(soap, soap->plugins);
-    SOAP_FREE(soap, soap->plugins);
-    soap->plugins = p;
-  }
-  soap->fplugin = fplugin;
-  soap->fmalloc = NULL;
-#ifndef WITH_NOHTTP
-  soap->fpost = http_post;
-  soap->fget = http_get;
-  soap->fput = http_405;
-  soap->fdel = http_405;
-  soap->fhead = http_405;
-  soap->fform = NULL;
-  soap->fposthdr = http_post_header;
-  soap->fresponse = http_response;
-  soap->fparse = http_parse;
-  soap->fparsehdr = http_parse_header;
-#endif
-  soap->fheader = NULL;
-#ifndef WITH_NOIO
-#ifndef WITH_IPV6
-  soap->fresolve = tcp_gethost;
-#else
-  soap->fresolve = NULL;
-#endif
-  soap->faccept = tcp_accept;
-  soap->fopen = tcp_connect;
-  soap->fclose = tcp_disconnect;
-  soap->fclosesocket = tcp_closesocket;
-  soap->fshutdownsocket = tcp_shutdownsocket;
-  soap->fsend = fsend;
-  soap->frecv = frecv;
-  soap->fpoll = soap_poll;
-#else
-  soap->fopen = NULL;
-  soap->fclose = NULL;
-  soap->fpoll = NULL;
-#endif
-#ifndef WITH_LEANER
-  soap->fprepareinitsend = NULL;
-  soap->fprepareinitrecv = NULL;
-  soap->fpreparesend = NULL;
-  soap->fpreparerecv = NULL;
-  soap->fpreparefinalsend = NULL;
-  soap->fpreparefinalrecv = NULL;
-#endif
-  soap->fseterror = NULL;
-  soap->fignore = NULL;
-  soap->fserveloop = NULL;
-#ifdef WITH_OPENSSL
-  if (soap->session)
-  { SSL_SESSION_free(soap->session);
-    soap->session = NULL;
-  }
-#endif
-  if (soap->state == SOAP_INIT)
-  { if (soap_valid_socket(soap->master))
-    { soap->fclosesocket(soap, soap->master);
-      soap->master = SOAP_INVALID_SOCKET;
-    }
-  }
-#ifdef WITH_OPENSSL
-  if (soap->ssl)
-  { SSL_free(soap->ssl);
-    soap->ssl = NULL;
-  }
-  if (soap->state == SOAP_INIT)
-  { if (soap->ctx)
-    { SSL_CTX_free(soap->ctx);
-      soap->ctx = NULL;
-    }
-  }
-#endif
-#ifdef WITH_OPENSSL
-  ERR_remove_state(0);
-#endif
-#ifdef WITH_C_LOCALE
-  freelocale(soap->c_locale);
-#endif
-#ifdef WITH_ZLIB
-  if (soap->d_stream)
-  { SOAP_FREE(soap, (void*)soap->d_stream);
-    soap->d_stream = NULL;
-  }
-  if (soap->z_buf)
-  { SOAP_FREE(soap, (void*)soap->z_buf);
-    soap->z_buf = NULL;
-  }
-#endif
-#ifdef SOAP_DEBUG
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free logfiles\n"));
-  for (i = 0; i < SOAP_MAXLOGS; i++)
-  { if (soap->logfile[i])
-    { SOAP_FREE(soap, (void*)soap->logfile[i]);
-      soap->logfile[i] = NULL;
-    }
-    soap_close_logfile(soap, i);
-  }
-  soap->state = SOAP_NONE;
-#endif
-#ifdef SOAP_MEM_DEBUG
-  soap_free_mht(soap);
-#endif
-}
-#endif
-
-/******************************************************************************\
- *
- *	HTTP
- *
-\******************************************************************************/
-
-/******************************************************************************/
-#ifndef WITH_NOHTTP
-#ifndef PALM_1
-static int
-http_parse(struct soap *soap)
-{ char header[SOAP_HDRLEN], *s;
-  unsigned short httpcmd = 0, status = 0;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Waiting for HTTP request/response...\n"));
-  *soap->endpoint = '\0';
-  soap->length = 0;
-  soap->userid = NULL;
-  soap->passwd = NULL;
-  soap->action = NULL;
-  soap->authrealm = NULL;
-  soap->proxy_from = NULL;
-  soap->http_content = NULL;
-  soap->status = 0;
-  do
-  { if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf)))
-    { if (soap->error == SOAP_EOF)
-        return SOAP_EOF;
-      return soap->error = 414;
-    }
-    if ((s = strchr(soap->msgbuf, ' ')))
-    { soap->status = (unsigned short)soap_strtoul(s, &s, 10);
-      if (!soap_blank(*s))
-        soap->status = 0;
-    }
-    else
-      soap->status = 0;
-    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "HTTP status: %s\n", soap->msgbuf));
-    for (;;)
-    { if (soap_getline(soap, header, SOAP_HDRLEN))
-      { if (soap->error == SOAP_EOF)
-        { soap->error = SOAP_OK;
-          DBGLOG(TEST,SOAP_MESSAGE(fdebug, "EOF in HTTP header, continue anyway\n"));
-          break;
-        }
-        return soap->error;
-      }
-      if (!*header)
-        break;
-      DBGLOG(TEST,SOAP_MESSAGE(fdebug, "HTTP header: %s\n", header));
-      s = strchr(header, ':');
-      if (s)
-      { char *t;
-        *s = '\0';
-        do s++;
-        while (*s && *s <= 32);
-        if (*s == '"')
-          s++;
-        t = s + strlen(s) - 1;
-        while (t > s && *t <= 32)
-          t--;
-        if (t >= s && *t == '"')
-          t--;
-        t[1] = '\0';
-        if ((soap->error = soap->fparsehdr(soap, header, s)))
-        { if (soap->error < SOAP_STOP)
-            return soap->error;
-          status = soap->error;
-          soap->error = SOAP_OK;
-        }
-      }
-    }
-  } while (soap->status == 100);
-  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Finished HTTP header parsing, status = %d\n", soap->status));
-  s = strstr(soap->msgbuf, "HTTP/");
-  if (s && s[7] != '1')
-  { if (soap->keep_alive == 1)
-      soap->keep_alive = 0;
-    if (soap->status == 0 && (soap->omode & SOAP_IO) == SOAP_IO_CHUNK) /* soap->status == 0 for HTTP request */
-    { soap->imode |= SOAP_IO_CHUNK;
-      soap->omode = (soap->omode & ~SOAP_IO) | SOAP_IO_STORE;
-    }
-  }
-  if (soap->keep_alive < 0)
-    soap->keep_alive = 1;
-  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Keep alive connection = %d\n", soap->keep_alive));
-  if (soap->status == 0)
-  { size_t l = 0;
-    if (s)
-    { if (!strncmp(soap->msgbuf, "POST ", l = 5))
-        httpcmd = 1;
-      else if (!strncmp(soap->msgbuf, "GET ", l = 4))
-        httpcmd = 2;
-      else if (!strncmp(soap->msgbuf, "PUT ", l = 4))
-        httpcmd = 3;
-      else if (!strncmp(soap->msgbuf, "DELETE ", l = 7))
-        httpcmd = 4;
-      else if (!strncmp(soap->msgbuf, "HEAD ", l = 5))
-        httpcmd = 5;
-    }
-    if (s && httpcmd) 
-    { size_t m = strlen(soap->endpoint);
-      size_t n = m + (s - soap->msgbuf) - l - 1;
-      if (m > n)
-        m = n;
-      if (n >= sizeof(soap->endpoint))
-        n = sizeof(soap->endpoint) - 1;
-      strncpy(soap->path, soap->msgbuf + l, n - m);
-      soap->path[n - m] = '\0';
-      strcat(soap->endpoint, soap->path);
-      DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Target endpoint='%s'\n", soap->endpoint));
-      if (httpcmd > 1)
-      { switch (httpcmd)
-        { case  2: soap->error = soap->fget(soap); break;
-          case  3: soap->error = soap->fput(soap); break;
-          case  4: soap->error = soap->fdel(soap); break;
-          case  5: soap->error = soap->fhead(soap); break;
-	  default: soap->error = 405; break;
-	}
-        if (soap->error == SOAP_OK)
-          soap->error = SOAP_STOP; /* prevents further processing */
-        return soap->error;
-      }
-      if (status)
-        return soap->error = status;
-    }
-    else if (status)
-      return soap->error = status;
-    else if (s)
-      return soap->error = 405;
-  }
-  /* Status OK (HTTP 200) */
-  if (soap->status == 0 || soap->status == 200)
-    return SOAP_OK;
-  /* Status 201 (Created), 202 (Accepted), ... and HTTP 400 and 500 errors
-     may not have a body. When content length, content type, or chunking is
-     used assume there is a message to parse, either XML or HTTP.
-  This version allows parsing of content when length=0:
-  if (soap->length > 0 || soap->http_content || (soap->imode & SOAP_IO) == SOAP_IO_CHUNK)
-  */
-  if (soap->length > 0 || (soap->imode & SOAP_IO) == SOAP_IO_CHUNK)
-  { if (((soap->status > 200 && soap->status <= 299) || soap->status == 400 || soap->status == 500))
-      return SOAP_OK;
-    /* force close afterwards in soap_closesock() */
-    soap->keep_alive = 0;
-    /* read HTTP body for error details */
-    s = soap_get_http_body(soap);
-    if (s)
-      return soap_set_receiver_error(soap, soap->msgbuf, s, soap->status);
-  }
-  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "HTTP error %d\n", soap->status));
-  return soap_set_receiver_error(soap, "HTTP Error", soap->msgbuf, soap->status);
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOHTTP
-#ifndef PALM_1
-static int
-http_parse_header(struct soap *soap, const char *key, const char *val)
-{ if (!soap_tag_cmp(key, "Host"))
-  { 
-#ifdef WITH_OPENSSL
-    if (soap->imode & SOAP_ENC_SSL)
-      strcpy(soap->endpoint, "https://");
-    else
-#endif
-      strcpy(soap->endpoint, "http://");
-    strncat(soap->endpoint, val, sizeof(soap->endpoint) - 8);
-    soap->endpoint[sizeof(soap->endpoint) - 1] = '\0';
-  }
-#ifndef WITH_LEANER
-  else if (!soap_tag_cmp(key, "Content-Type"))
-  { const char *action;
-    soap->http_content = soap_strdup(soap, val);
-    if (soap_get_header_attribute(soap, val, "application/dime"))
-      soap->imode |= SOAP_ENC_DIME;
-    else if (soap_get_header_attribute(soap, val, "multipart/related")
-          || soap_get_header_attribute(soap, val, "multipart/form-data"))
-    { soap->mime.boundary = soap_strdup(soap, soap_get_header_attribute(soap, val, "boundary"));
-      soap->mime.start = soap_strdup(soap, soap_get_header_attribute(soap, val, "start"));
-      soap->imode |= SOAP_ENC_MIME;
-    }
-    action = soap_get_header_attribute(soap, val, "action");
-    if (action)
-    { if (*action == '"')
-      { soap->action = soap_strdup(soap, action + 1);
-        soap->action[strlen(soap->action) - 1] = '\0';
-      }
-      else
-        soap->action = soap_strdup(soap, action);
-    }
-  }
-#endif
-  else if (!soap_tag_cmp(key, "Content-Length"))
-  { soap->length = soap_strtoul(val, NULL, 10);
-  }
-  else if (!soap_tag_cmp(key, "Content-Encoding"))
-  { if (!soap_tag_cmp(val, "deflate"))
-#ifdef WITH_ZLIB
-      soap->zlib_in = SOAP_ZLIB_DEFLATE;
-#else
-      return SOAP_ZLIB_ERROR;
-#endif
-    else if (!soap_tag_cmp(val, "gzip"))
-#ifdef WITH_GZIP
-      soap->zlib_in = SOAP_ZLIB_GZIP;
-#else
-      return SOAP_ZLIB_ERROR;
-#endif
-  }
-#ifdef WITH_ZLIB
-  else if (!soap_tag_cmp(key, "Accept-Encoding"))
-  {
-#ifdef WITH_GZIP
-    if (strchr(val, '*') || soap_get_header_attribute(soap, val, "gzip"))
-      soap->zlib_out = SOAP_ZLIB_GZIP;
-    else
-#endif
-    if (strchr(val, '*') || soap_get_header_attribute(soap, val, "deflate"))
-      soap->zlib_out = SOAP_ZLIB_DEFLATE;
-    else
-      soap->zlib_out = SOAP_ZLIB_NONE;
-  }
-#endif
-  else if (!soap_tag_cmp(key, "Transfer-Encoding"))
-  { soap->imode &= ~SOAP_IO;
-    if (!soap_tag_cmp(val, "chunked"))
-      soap->imode |= SOAP_IO_CHUNK;
-  }
-  else if (!soap_tag_cmp(key, "Connection"))
-  { if (!soap_tag_cmp(val, "keep-alive"))
-      soap->keep_alive = -soap->keep_alive;
-    else if (!soap_tag_cmp(val, "close"))
-      soap->keep_alive = 0;
-  }
-#ifndef WITH_LEAN
-  else if (!soap_tag_cmp(key, "Authorization"))
-  { if (!soap_tag_cmp(val, "Basic *"))
-    { int n;
-      char *s;
-      soap_base642s(soap, val + 6, soap->tmpbuf, sizeof(soap->tmpbuf) - 1, &n);
-      soap->tmpbuf[n] = '\0';
-      if ((s = strchr(soap->tmpbuf, ':')))
-      { *s = '\0';
-        soap->userid = soap_strdup(soap, soap->tmpbuf);
-        soap->passwd = soap_strdup(soap, s + 1);
-      }
-    }
-  }
-  else if (!soap_tag_cmp(key, "WWW-Authenticate"))
-  { soap->authrealm = soap_strdup(soap, soap_get_header_attribute(soap, val + 6, "realm"));
-  }
-  else if (!soap_tag_cmp(key, "Expect"))
-  { if (!soap_tag_cmp(val, "100-continue"))
-    { if ((soap->error = soap->fposthdr(soap, "HTTP/1.1 100 Continue", NULL))
-       || (soap->error = soap->fposthdr(soap, NULL, NULL)))
-        return soap->error;
-    }
-  }
-#endif
-  else if (!soap_tag_cmp(key, "SOAPAction"))
-  { if (*val == '"')
-    { soap->action = soap_strdup(soap, val + 1);
-      soap->action[strlen(soap->action) - 1] = '\0';
-    }
-    else
-      soap->action = soap_strdup(soap, val);
-  }
-  else if (!soap_tag_cmp(key, "Location"))
-  { strncpy(soap->endpoint, val, sizeof(soap->endpoint));
-    soap->endpoint[sizeof(soap->endpoint) - 1] = '\0';
-  }
-  else if (!soap_tag_cmp(key, "X-Forwarded-For"))
-  { soap->proxy_from = soap_strdup(soap, val);
-  }
-#ifdef WITH_COOKIES
-  else if (!soap_tag_cmp(key, "Cookie")
-   || !soap_tag_cmp(key, "Cookie2")
-   || !soap_tag_cmp(key, "Set-Cookie")
-   || !soap_tag_cmp(key, "Set-Cookie2"))
-  { soap_getcookies(soap, val);
-  }
-#endif
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
-#ifndef PALM_1
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_get_header_attribute(struct soap *soap, const char *line, const char *key)
-{ register const char *s = line;
-  if (s)
-  { while (*s)
-    { register short flag;
-      s = soap_decode_key(soap->tmpbuf, sizeof(soap->tmpbuf), s);
-      flag = soap_tag_cmp(soap->tmpbuf, key);
-      s = soap_decode_val(soap->tmpbuf, sizeof(soap->tmpbuf), s);
-      if (!flag)
-        return soap->tmpbuf;
-    }
-  }
-  return NULL;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
-#ifndef PALM_1
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_decode_key(char *buf, size_t len, const char *val)
-{ return soap_decode(buf, len, val, "=,;");
-}
-#endif
-#endif
-
-/******************************************************************************/
-#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
-#ifndef PALM_1
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_decode_val(char *buf, size_t len, const char *val)
-{ if (*val != '=')
-  { *buf = '\0';
-    return val;
-  }
-  return soap_decode(buf, len, val + 1, ",;");
-}
-#endif
-#endif
-
-/******************************************************************************/
-#if !defined(WITH_NOHTTP) || !defined(WITH_LEANER)
-#ifndef PALM_1
-static const char*
-soap_decode(char *buf, size_t len, const char *val, const char *sep)
-{ const char *s;
-  char *t = buf;
-  for (s = val; *s; s++)
-    if (*s != ' ' && *s != '\t' && !strchr(sep, *s))
-      break;
-  if (*s == '"')
-  { s++;
-    while (*s && *s != '"' && --len)
-      *t++ = *s++;
-  }
-  else
-  { while (*s && !soap_blank(*s) && !strchr(sep, *s) && --len)
-    { if (*s == '%')
-      { *t++ = ((s[1] >= 'A' ? (s[1] & 0x7) + 9 : s[1] - '0') << 4)
-              + (s[2] >= 'A' ? (s[2] & 0x7) + 9 : s[2] - '0');
-        s += 3;
-      }
-      else
-        *t++ = *s++;
-    }
-  }
-  *t = '\0';
-  while (*s && !strchr(sep, *s))
-    s++;
-  return s;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOHTTP
-#ifndef PALM_1
-static const char*
-http_error(struct soap *soap, int status)
-{ register const char *msg = SOAP_STR_EOS;
-#ifndef WITH_LEAN
-  msg = soap_code_str(h_http_error_codes, status);
-  if (!msg)
-    msg = SOAP_STR_EOS;
-#endif
-  return msg;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOHTTP
-#ifndef PALM_1
-static int
-http_get(struct soap *soap)
-{ return SOAP_GET_METHOD;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOHTTP
-#ifndef PALM_1
-static int
-http_405(struct soap *soap)
-{ return 405;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOHTTP
-#ifndef PALM_1
-static int
-http_post(struct soap *soap, const char *endpoint, const char *host, int port, const char *path, const char *action, size_t count)
-{ register const char *s;
-  register int err;
-  if (soap->status == SOAP_GET)
-    s = "GET";
-  else
-    s = "POST";
-#ifdef PALM
-  if (!endpoint || (soap_tag_cmp(endpoint, "http:*") && soap_tag_cmp(endpoint, "https:*") && strncmp(endpoint, "httpg:", 6)) && strncmp(endpoint, "_beam:", 6) && strncmp(endpoint, "_local:", 7) && strncmp(endpoint, "_btobex:", 8))
-#else
-  if (!endpoint || (soap_tag_cmp(endpoint, "http:*") && soap_tag_cmp(endpoint, "https:*") && strncmp(endpoint, "httpg:", 6)))
-#endif
-    return SOAP_OK;
-  if (strlen(endpoint) + strlen(soap->http_version) > sizeof(soap->tmpbuf) - 80)
-    return soap->error = SOAP_EOM;
-  if (soap->proxy_host && soap_tag_cmp(endpoint, "https:*"))
-    sprintf(soap->tmpbuf, "%s %s HTTP/%s", s, endpoint, soap->http_version);
-  else
-    sprintf(soap->tmpbuf, "%s /%s HTTP/%s", s, (*path == '/' ? path + 1 : path), soap->http_version);
-  if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL)))
-    return err;
-#ifdef WITH_OPENSSL
-  if ((soap->ssl && soap->port != 443) || (!soap->ssl && soap->port != 80))
-    sprintf(soap->tmpbuf, "%s:%d", host, port);
-  else
-    strcpy(soap->tmpbuf, host); 
-#else
-  if (port != 80)
-    sprintf(soap->tmpbuf, "%s:%d", host, port);
-  else
-  {  /* Oracle customization */
-    strncpy(soap->tmpbuf, host, sizeof(soap->tmpbuf) - 1);
-    soap->tmpbuf[sizeof(soap->tmpbuf) - 1] = '\0';
-  }
-#endif
-// Oracle customization
-  if ((err = soap->fposthdr(soap, "Host", soap->tmpbuf))
-   || (err = soap->fposthdr(soap, "User-Agent", "SunKMS gSOAP/2.7.17"))
-   || (err = soap_puthttphdr(soap, SOAP_OK, count)))
-    return err;
-#ifdef WITH_ZLIB
-#ifdef WITH_GZIP
-  if ((err = soap->fposthdr(soap, "Accept-Encoding", "gzip, deflate")))
-#else
-  if ((err = soap->fposthdr(soap, "Accept-Encoding", "deflate")))
-#endif
-    return err;
-#endif
-#ifndef WITH_LEAN
-  if (soap->userid && soap->passwd && strlen(soap->userid) + strlen(soap->passwd) < 761)
-  { sprintf(soap->tmpbuf + 262, "%s:%s", soap->userid, soap->passwd);
-    strcpy(soap->tmpbuf, "Basic ");
-    soap_s2base64(soap, (const unsigned char*)(soap->tmpbuf + 262), soap->tmpbuf + 6, (int)strlen(soap->tmpbuf + 262));
-    if ((err = soap->fposthdr(soap, "Authorization", soap->tmpbuf)))
-      return err;
-  }
-  if (soap->proxy_userid && soap->proxy_passwd && strlen(soap->proxy_userid) + strlen(soap->proxy_passwd) < 761)
-  { sprintf(soap->tmpbuf + 262, "%s:%s", soap->proxy_userid, soap->proxy_passwd);
-    strcpy(soap->tmpbuf, "Basic ");
-    soap_s2base64(soap, (const unsigned char*)(soap->tmpbuf + 262), soap->tmpbuf + 6, (int)strlen(soap->tmpbuf + 262));
-    if ((err = soap->fposthdr(soap, "Proxy-Authorization", soap->tmpbuf)))
-      return err;
-  }
-#endif
-#ifdef WITH_COOKIES
-#ifdef WITH_OPENSSL
-  if (soap_putcookies(soap, host, path, soap->ssl != NULL))
-    return soap->error;
-#else
-  if (soap_putcookies(soap, host, path, 0))
-    return soap->error;
-#endif
-#endif
-  if (soap->status != SOAP_GET && (soap->version == 1 || (action && *action)))
-  { sprintf(soap->tmpbuf, "\"%s\"", action && strlen(action) < sizeof(soap->tmpbuf) - 3 ? action : SOAP_STR_EOS);
-    if ((err = soap->fposthdr(soap, "SOAPAction", soap->tmpbuf)))
-      return err;
-  }
-  return soap->fposthdr(soap, NULL, NULL);
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOHTTP
-#ifndef PALM_1
-static int
-http_send_header(struct soap *soap, const char *s)
-{ register const char *t;
-  do
-  { t = strchr(s, '\n'); /* disallow \n in HTTP headers */
-    if (!t)
-      t = s + strlen(s);
-    if (soap_send_raw(soap, s, t - s))
-      return soap->error;
-    s = t + 1;
-  } while (*t);
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOHTTP
-#ifndef PALM_1
-static int
-http_post_header(struct soap *soap, const char *key, const char *val)
-{ if (key)
-  { if (http_send_header(soap, key))
-      return soap->error;
-    if (val && (soap_send_raw(soap, ": ", 2) || http_send_header(soap, val)))
-      return soap->error;
-  }
-  return soap_send_raw(soap, "\r\n", 2);
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOHTTP
-#ifndef PALM_1
-static int
-http_response(struct soap *soap, int status, size_t count)
-{ register int err;
-#ifdef WMW_RPM_IO
-  if (soap->rpmreqid)
-    httpOutputEnable(soap->rpmreqid);
-#endif
-  if (strlen(soap->http_version) > 4)
-    return soap->error = SOAP_EOM;
-  if (!status || status == SOAP_HTML || status == SOAP_FILE)
-  { const char *s;
-    if (count || ((soap->omode & SOAP_IO) == SOAP_IO_CHUNK))
-      s = "200 OK";
-    else
-      s = "202 ACCEPTED";
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Status = %s\n", s));
-#ifdef WMW_RPM_IO
-    if (soap->rpmreqid || soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* RPM behaves as if standalone */
-#else
-    if (soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* standalone application (socket) or CGI (stdin/out)? */
-#endif
-    { sprintf(soap->tmpbuf, "HTTP/%s %s", soap->http_version, s);
-      if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL)))
-        return err;
-    }
-    else if ((err = soap->fposthdr(soap, "Status", s))) /* CGI header */
-      return err;
-  }
-  else if (status >= 200 && status < 600)
-  { sprintf(soap->tmpbuf, "HTTP/%s %d %s", soap->http_version, status, http_error(soap, status));
-    if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL)))
-      return err;
-#ifndef WITH_LEAN 
-    if (status == 401)
-    { sprintf(soap->tmpbuf, "Basic realm=\"%s\"", (soap->authrealm && strlen(soap->authrealm) < sizeof(soap->tmpbuf) - 14) ? soap->authrealm : "gSOAP Web Service");
-      if ((err = soap->fposthdr(soap, "WWW-Authenticate", soap->tmpbuf)))
-        return err;
-    }
-    else if ((status >= 301 && status <= 303) || status == 307)
-    { if ((err = soap->fposthdr(soap, "Location", soap->endpoint)))
-        return err;
-    }
-#endif
-  }
-  else
-  { const char *s = *soap_faultcode(soap);
-    if (status >= SOAP_GET_METHOD && status <= SOAP_HTTP_METHOD)
-      s = "405 Method Not Allowed";
-    else if (soap->version == 2 && (!s || !strcmp(s, "SOAP-ENV:Sender")))
-      s = "400 Bad Request";
-    else
-      s = "500 Internal Server Error";
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Error %s (status=%d)\n", s, status));
-#ifdef WMW_RPM_IO
-    if (soap->rpmreqid || soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* RPM behaves as if standalone */
-#else
-    if (soap_valid_socket(soap->master) || soap_valid_socket(soap->socket)) /* standalone application */
-#endif
-    { sprintf(soap->tmpbuf, "HTTP/%s %s", soap->http_version, s);
-      if ((err = soap->fposthdr(soap, soap->tmpbuf, NULL)))
-        return err;
-    }
-    else if ((err = soap->fposthdr(soap, "Status", s)))	/* CGI */
-      return err;
-  }
-  if ((err = soap->fposthdr(soap, "Server", "gSOAP/2.7"))
-   || (err = soap_puthttphdr(soap, status, count)))
-    return err;
-#ifdef WITH_COOKIES
-  if (soap_putsetcookies(soap))
-    return soap->error;
-#endif
-  return soap->fposthdr(soap, NULL, NULL);
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_response(struct soap *soap, int status)
-{ register size_t count;
-  if (!(soap->omode & (SOAP_ENC_XML | SOAP_IO_STORE /* this tests for chunking too */))
-   && (status == SOAP_HTML || status == SOAP_FILE))
-    soap->omode = (soap->omode & ~SOAP_IO) | SOAP_IO_STORE;
-  soap->status = status;
-  count = soap_count_attachments(soap);
-  if (soap_begin_send(soap))
-    return soap->error;
-#ifndef WITH_NOHTTP
-  if ((soap->mode & SOAP_IO) != SOAP_IO_STORE && !(soap->mode & SOAP_ENC_XML))
-  { register int n = soap->mode;
-    soap->mode &= ~(SOAP_IO | SOAP_ENC_ZLIB);
-    if ((n & SOAP_IO) != SOAP_IO_FLUSH)
-      soap->mode |= SOAP_IO_BUFFER;
-    if ((soap->error = soap->fresponse(soap, status, count)))
-      return soap->error;
-#ifndef WITH_LEANER
-    if ((n & SOAP_IO) == SOAP_IO_CHUNK)
-    { if (soap_flush(soap))
-        return soap->error;
-    }
-#endif
-    soap->mode = n;
-  }
-#endif
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************\
- *
- *	HTTP Cookies
- *
-\******************************************************************************/
-
-#ifdef WITH_COOKIES
-/******************************************************************************/
-SOAP_FMAC1
-size_t
-SOAP_FMAC2
-soap_encode_cookie(const char *s, char *t, size_t len)
-{ register int c;
-  register size_t n = len;
-  while ((c = *s++) && --n > 0)
-  { if (c > ' ' && c < 128 && !strchr("()<>@,;:\\\"/[]?={}#!$&'*+", c))
-      *t++ = c;
-    else if (n > 2)
-    { *t++ = '%';
-      *t++ = (c >> 4) + (c > 159 ? '7' : '0');
-      c &= 0xF;
-      *t++ = c + (c > 9 ? '7' : '0');
-      n -= 2;
-    }
-    else
-      break;
-  }
-  *t = '\0';
-  return len - n;
-}
-
-/******************************************************************************/
-SOAP_FMAC1
-struct soap_cookie*
-SOAP_FMAC2
-soap_cookie(struct soap *soap, const char *name, const char *domain, const char *path)
-{ struct soap_cookie *p;
-  if (!domain)
-    domain = soap->cookie_domain;
-  if (!path)
-    path = soap->cookie_path;
-  if (!path)
-    path = SOAP_STR_EOS;
-  else if (*path == '/')
-    path++;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Search cookie %s domain=%s path=%s\n", name, domain?domain:"(null)", path?path:"(null)"));
-  for (p = soap->cookies; p; p = p->next)
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Cookie in database: %s=%s domain=%s path=%s env=%hd\n", p->name, p->value?p->value:"(null)", p->domain?p->domain:"(null)", p->path?p->path:"(null)", p->env));
-    if (!strcmp(p->name, name)
-     && p->domain
-     && p->path
-     && !strcmp(p->domain, domain)
-     && (!*p->path || !strncmp(p->path, path, strlen(p->path))))
-      break;
-  }
-  return p;
-}
-
-/******************************************************************************/
-SOAP_FMAC1
-struct soap_cookie*
-SOAP_FMAC2
-soap_set_cookie(struct soap *soap, const char *name, const char *value, const char *domain, const char *path)
-{ struct soap_cookie **p, *q;
-  int n;
-  if (!domain)
-    domain = soap->cookie_domain;
-  if (!path)
-    path = soap->cookie_path;
-  if (!path)
-    path = SOAP_STR_EOS;
-  else if (*path == '/')
-    path++;
-  q = soap_cookie(soap, name, domain, path);
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set %scookie: %s=%s domain=%s path=%s\n", q ? SOAP_STR_EOS : "new ", name, value?value:"(null)", domain?domain:"(null)", path?path:"(null)"));
-  if (!q)
-  { if ((q = (struct soap_cookie*)SOAP_MALLOC(soap, sizeof(struct soap_cookie))))
-    { if ((q->name = (char*)SOAP_MALLOC(soap, strlen(name)+1)))
-        strcpy(q->name, name);
-      q->value = NULL;
-      q->domain = NULL;
-      q->path = NULL;
-      q->expire = 0;
-      q->maxage = -1;
-      q->version = 1;
-      q->secure = 0;
-      q->modified = 0;
-      for (p = &soap->cookies, n = soap->cookie_max; *p && n; p = &(*p)->next, n--)
-        if (!strcmp((*p)->name, name) && (*p)->path && path && strcmp((*p)->path, path) < 0)
-          break;
-      if (n)
-      { q->next = *p;
-        *p = q;
-      }
-      else
-      { SOAP_FREE(soap, q->name);
-        SOAP_FREE(soap, q);
-        q = NULL;
-      }
-    }
-  }
-  else
-    q->modified = 1;
-  if (q)
-  { if (q->value)
-    { if (!value || strcmp(value, q->value))
-      { SOAP_FREE(soap, q->value);
-        q->value = NULL;
-      }
-    }
-    if (value && *value && !q->value && (q->value = (char*)SOAP_MALLOC(soap, strlen(value)+1)))
-      strcpy(q->value, value);
-    if (q->domain)
-    { if (!domain || strcmp(domain, q->domain))
-      { SOAP_FREE(soap, q->domain);
-        q->domain = NULL;
-      }
-    }
-    if (domain && !q->domain && (q->domain = (char*)SOAP_MALLOC(soap, strlen(domain)+1)))
-      strcpy(q->domain, domain);
-    if (q->path)
-    { if (!path || strncmp(path, q->path, strlen(q->path)))
-      { SOAP_FREE(soap, q->path);
-        q->path = NULL;
-      }
-    }
-    if (path && !q->path && (q->path = (char*)SOAP_MALLOC(soap, strlen(path)+1)))
-      strcpy(q->path, path);
-    q->session = 1;
-    q->env = 0;
-  }
-  return q;
-}
-
-/******************************************************************************/
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_clr_cookie(struct soap *soap, const char *name, const char *domain, const char *path)
-{ struct soap_cookie **p, *q;
-  if (!domain)
-    domain = soap->cookie_domain;
-  if (!domain)
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Error in clear cookie %s: cookie domain not set\n", name?name:"(null)"));
-    return;
-  }
-  if (!path)
-    path = soap->cookie_path;
-  if (!path)
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Error in clear cookie %s: cookie path not set\n", name?name:"(null)"));
-    return;
-  }
-  if (*path == '/')
-    path++;
-  for (p = &soap->cookies, q = *p; q; q = *p)
-  { if (!strcmp(q->name, name) && !strcmp(q->domain, domain) && !strncmp(q->path, path, strlen(q->path)))
-    { if (q->value)
-        SOAP_FREE(soap, q->value);
-      if (q->domain)
-        SOAP_FREE(soap, q->domain);
-      if (q->path)
-        SOAP_FREE(soap, q->path);
-      *p = q->next;
-      SOAP_FREE(soap, q);
-    }
-    else
-      p = &q->next;
-  }
-}
-
-/******************************************************************************/
-SOAP_FMAC1
-char *
-SOAP_FMAC2
-soap_cookie_value(struct soap *soap, const char *name, const char *domain, const char *path)
-{ struct soap_cookie *p;
-  if ((p = soap_cookie(soap, name, domain, path)))
-    return p->value;
-  return NULL;
-}
-
-/******************************************************************************/
-SOAP_FMAC1
-char *
-SOAP_FMAC2
-soap_env_cookie_value(struct soap *soap, const char *name, const char *domain, const char *path)
-{ struct soap_cookie *p;
-  if ((p = soap_cookie(soap, name, domain, path)) && p->env)
-    return p->value;
-  return NULL;
-}
-
-/******************************************************************************/
-SOAP_FMAC1
-time_t
-SOAP_FMAC2
-soap_cookie_expire(struct soap *soap, const char *name, const char *domain, const char *path)
-{ struct soap_cookie *p;
-  if ((p = soap_cookie(soap, name, domain, path)))
-    return p->expire;
-  return -1;
-}
-
-/******************************************************************************/
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_set_cookie_expire(struct soap *soap, const char *name, long expire, const char *domain, const char *path)
-{ struct soap_cookie *p;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set cookie expiration max-age %ld: %s domain=%s path=%s\n", expire, name, domain?domain:"(null)", path?path:"(null)"));
-  if ((p = soap_cookie(soap, name, domain, path)))
-  { p->maxage = expire;
-    p->modified = 1;
-    return SOAP_OK;
-  }
-  return SOAP_ERR;
-}
-
-/******************************************************************************/
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_set_cookie_session(struct soap *soap, const char *name, const char *domain, const char *path)
-{ struct soap_cookie *p;
-  if ((p = soap_cookie(soap, name, domain, path)))
-  { p->session = 1;
-    p->modified = 1;
-    return SOAP_OK;
-  }
-  return SOAP_ERR;
-}
-
-/******************************************************************************/
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_clr_cookie_session(struct soap *soap, const char *name, const char *domain, const char *path)
-{ struct soap_cookie *p;
-  if ((p = soap_cookie(soap, name, domain, path)))
-  { p->session = 0;
-    p->modified = 1;
-    return SOAP_OK;
-  }
-  return SOAP_ERR;
-}
-
-/******************************************************************************/
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_putsetcookies(struct soap *soap)
-{ struct soap_cookie *p;
-  char *s, tmp[4096];
-  const char *t;
-  for (p = soap->cookies; p; p = p->next)
-  {
-    if (p->modified
-#ifdef WITH_OPENSSL
-     || (!p->env && !soap->ssl == !p->secure)
-#endif
-       )
-    { s = tmp;
-      if (p->name)
-        s += soap_encode_cookie(p->name, s, tmp-s+4064);
-      if (p->value && *p->value)
-      { *s++ = '=';
-        s += soap_encode_cookie(p->value, s, tmp-s+4064);
-      }
-      if (p->domain && (int)strlen(p->domain) < tmp-s+4064)
-      { strcpy(s, ";Domain=");
-        strcat(s, p->domain);
-      }
-      else if (soap->cookie_domain && (int)strlen(soap->cookie_domain) < tmp-s+4064)
-      { strcpy(s, ";Domain=");
-        strcat(s, soap->cookie_domain);
-      }
-      strcat(s, ";Path=/");
-      s += strlen(s);
-      if (p->path)
-        t = p->path;
-      else
-        t = soap->cookie_path;
-      if (t)
-      { if (*t == '/')
-          t++;
-        if ((int)strlen(t) < tmp-s+4064)
-        { if (strchr(t, '%'))	/* already URL encoded? */
-          { strcpy(s, t);
-            s += strlen(s);
-          }
-          else
-            s += soap_encode_cookie(t, s, tmp-s+4064);
-        }
-      }
-      if (p->version > 0 && s-tmp < 4060)
-      { sprintf(s, ";Version=%u", p->version);
-        s += strlen(s);
-      }
-      if (p->maxage >= 0 && s-tmp < 4060)
-      { sprintf(s, ";Max-Age=%ld", p->maxage);
-        s += strlen(s);
-      }
-      if (s-tmp < 4073
-       && (p->secure
-#ifdef WITH_OPENSSL
-       || soap->ssl
-#endif
-         ))
-        strcpy(s, ";Secure");
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set-Cookie: %s\n", tmp));
-      if ((soap->error = soap->fposthdr(soap, "Set-Cookie", tmp)))
-        return soap->error;
-    }
-  }
-  return SOAP_OK;
-}
-
-/******************************************************************************/
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_putcookies(struct soap *soap, const char *domain, const char *path, int secure)
-{ struct soap_cookie **p, *q;
-  unsigned int version = 0;
-  time_t now = time(NULL);
-  char *s, tmp[4096];
-  p = &soap->cookies;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending cookies for domain=%s path=%s\n", domain, path));
-  if (*path == '/')
-    path++;
-  while ((q = *p))
-  { if (q->expire && now > q->expire)
-    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Cookie %s expired\n", q->name));
-      SOAP_FREE(soap, q->name);
-      if (q->value)
-        SOAP_FREE(soap, q->value);
-      if (q->domain)
-        SOAP_FREE(soap, q->domain);
-      if (q->path)
-        SOAP_FREE(soap, q->path);
-      *p = q->next;
-      SOAP_FREE(soap, q);
-    }
-    else
-    { int flag;
-      char *t = q->domain;
-      size_t n = 0;
-      if (!t)
-        flag = 1;
-      else
-      { const char *r = strchr(t, ':');
-        if (r)
-          n = r - t;
-        else
-          n = strlen(t);
-        flag = !strncmp(t, domain, n);
-      }
-      /* domain-level cookies, cannot compile when WITH_NOIO set */
-#ifndef WITH_NOIO
-      if (!flag)
-      { struct hostent *hostent = gethostbyname((char*)domain);
-        if (hostent)
-        { const char *r = strchr(hostent->h_name, '.');
-          if (!r)
-            r = hostent->h_name;
-          flag = !strncmp(t, r, n);
-        }
-      }
-#endif
-      if (flag
-          && (!q->path || !strncmp(q->path, path, strlen(q->path)))
-          && (!q->secure || secure))
-      { s = tmp;
-        if (q->version != version)
-        { sprintf(s, "$Version=%u;", q->version);
-          version = q->version;
-        }
-        if (q->name)
-          s += soap_encode_cookie(q->name, s, tmp-s+4080);
-        if (q->value && *q->value)
-        { *s++ = '=';
-          s += soap_encode_cookie(q->value, s, tmp-s+4080);
-        }
-        if (q->path && *q->path && (int)strlen(q->path) < tmp-s+4080)
-        { sprintf(s, ";$Path=\"/%s\"", (*q->path == '/' ? q->path + 1 : q->path));
-          s += strlen(s);
-        }
-        if (q->domain && (int)strlen(q->domain) < tmp-s+4080)
-          sprintf(s, ";$Domain=\"%s\"", q->domain);
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Cookie: %s\n", tmp));
-        if ((soap->error = soap->fposthdr(soap, "Cookie", tmp)))
-          return soap->error;
-      }
-      p = &q->next;
-    }
-  }
-  return SOAP_OK;
-}
-
-/******************************************************************************/
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_getcookies(struct soap *soap, const char *val)
-{ struct soap_cookie *p = NULL, *q;
-  const char *s;
-  char *t, tmp[4096]; /* cookie size is up to 4096 bytes [RFC2109] */
-  char *domain = NULL;
-  char *path = NULL;
-  unsigned int version = 0;
-  time_t now = time(NULL);
-  if (!val)
-    return;
-  s = val;
-  while (*s)
-  { s = soap_decode_key(tmp, sizeof(tmp), s);
-    if (!soap_tag_cmp(tmp, "$Version"))
-    { if ((s = soap_decode_val(tmp, sizeof(tmp), s)))
-      { if (p)
-	  p->version = (int)soap_strtol(tmp, NULL, 10);
-	else
-	  version = (int)soap_strtol(tmp, NULL, 10);
-      }
-    }
-    else if (!soap_tag_cmp(tmp, "$Path"))
-    { s = soap_decode_val(tmp, sizeof(tmp), s);
-      if (*tmp)
-      { if ((t = (char*)SOAP_MALLOC(soap, strlen(tmp)+1)))
-          strcpy(t, tmp);
-      }
-      else
-        t = NULL;
-      if (p)
-      { if (p->path)
-          SOAP_FREE(soap, p->path);
-        p->path = t;
-      }
-      else
-      { if (path)
-          SOAP_FREE(soap, path);
-        path = t;
-      }
-    }
-    else if (!soap_tag_cmp(tmp, "$Domain"))
-    { s = soap_decode_val(tmp, sizeof(tmp), s);
-      if (*tmp)
-      { if ((t = (char*)SOAP_MALLOC(soap, strlen(tmp)+1)))
-          strcpy(t, tmp);
-      }
-      else
-        t = NULL;
-      if (p)
-      { if (p->domain)
-          SOAP_FREE(soap, p->domain);
-        p->domain = t;
-      }
-      else
-      { if (domain)
-          SOAP_FREE(soap, domain);
-        domain = t;
-      }
-    }
-    else if (p && !soap_tag_cmp(tmp, "Path"))
-    { if (p->path)
-        SOAP_FREE(soap, p->path);
-      s = soap_decode_val(tmp, sizeof(tmp), s);
-      if (*tmp)
-      { if ((p->path = (char*)SOAP_MALLOC(soap, strlen(tmp)+1)))
-          strcpy(p->path, tmp);
-      }
-      else
-        p->path = NULL;
-    }
-    else if (p && !soap_tag_cmp(tmp, "Domain"))
-    { if (p->domain)
-        SOAP_FREE(soap, p->domain);
-      s = soap_decode_val(tmp, sizeof(tmp), s);
-      if (*tmp)
-      { if ((p->domain = (char*)SOAP_MALLOC(soap, strlen(tmp)+1)))
-          strcpy(p->domain, tmp);
-      }
-      else
-        p->domain = NULL;
-    }
-    else if (p && !soap_tag_cmp(tmp, "Version"))
-    { s = soap_decode_val(tmp, sizeof(tmp), s);
-      p->version = (unsigned int)soap_strtoul(tmp, NULL, 10);
-    }
-    else if (p && !soap_tag_cmp(tmp, "Max-Age"))
-    { s = soap_decode_val(tmp, sizeof(tmp), s);
-      p->expire = now + soap_strtol(tmp, NULL, 10);
-    }
-    else if (p && !soap_tag_cmp(tmp, "Expires"))
-    { struct tm T;
-      char a[3]; 
-      static const char mns[] = "anebarprayunulugepctovec";
-      s = soap_decode_val(tmp, sizeof(tmp), s);
-      if (strlen(tmp) > 20)
-      { memset((void*)&T, 0, sizeof(T));
-        a[0] = tmp[4];
-        a[1] = tmp[5];
-        a[2] = '\0';
-        T.tm_mday = (int)soap_strtol(a, NULL, 10);
-        a[0] = tmp[8];
-        a[1] = tmp[9];
-        T.tm_mon = (int)(strstr(mns, a) - mns) / 2;
-        a[0] = tmp[11];
-        a[1] = tmp[12];
-        T.tm_year = 100 + (int)soap_strtol(a, NULL, 10);
-        a[0] = tmp[13];
-        a[1] = tmp[14];
-        T.tm_hour = (int)soap_strtol(a, NULL, 10);
-        a[0] = tmp[16];
-        a[1] = tmp[17];
-        T.tm_min = (int)soap_strtol(a, NULL, 10);
-        a[0] = tmp[19];
-        a[1] = tmp[20];
-        T.tm_sec = (int)soap_strtol(a, NULL, 10);
-        p->expire = soap_timegm(&T);
-      }
-    }
-    else if (p && !soap_tag_cmp(tmp, "Secure"))
-      p->secure = 1;
-    else
-    { if (p)
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Got environment cookie %s=%s domain=%s path=%s expire=%ld secure=%d\n", p->name, p->value?p->value:"(null)", p->domain?p->domain:"(null)", p->path?p->path:"(null)", p->expire, p->secure));
-        if ((q = soap_set_cookie(soap, p->name, p->value, p->domain, p->path)))
-        { q->version = p->version;
-          q->expire = p->expire;
-          q->secure = p->secure;
-          q->env = 1;
-        }
-        if (p->name)
-          SOAP_FREE(soap, p->name);
-        if (p->value)
-          SOAP_FREE(soap, p->value);
-        if (p->domain)
-          SOAP_FREE(soap, p->domain);
-        if (p->path)
-          SOAP_FREE(soap, p->path);
-        SOAP_FREE(soap, p);
-      }
-      if ((p = (struct soap_cookie*)SOAP_MALLOC(soap, sizeof(struct soap_cookie))))
-      { p->name = (char*)SOAP_MALLOC(soap, strlen(tmp)+1);
-        strcpy(p->name, tmp);
-        s = soap_decode_val(tmp, sizeof(tmp), s);
-        if (*tmp)
-        { p->value = (char*)SOAP_MALLOC(soap, strlen(tmp)+1);
-          strcpy(p->value, tmp);
-        }
-        else
-          p->value = NULL;
-        if (domain)
-          p->domain = domain;
-        else if (*soap->host)
-        { p->domain = (char*)SOAP_MALLOC(soap, strlen(soap->host)+1);
-          strcpy(p->domain, soap->host);
-        }
-        else
-          p->domain = NULL;
-        if (path)
-          p->path = path;
-        else if (soap->path && *soap->path)
-        { p->path = (char*)SOAP_MALLOC(soap, strlen(soap->path)+1);
-          strcpy(p->path, soap->path);
-        }
-        else
-        { p->path = (char*)SOAP_MALLOC(soap, 2);
-          strcpy(p->path, "/");
-        }
-        p->expire = 0;
-        p->secure = 0;
-        p->version = version;
-      }
-    }
-  }
-  if (p)
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Got environment cookie %s=%s domain=%s path=%s expire=%ld secure=%d\n", p->name, p->value?p->value:"(null)", p->domain?p->domain:"(null)", p->path?p->path:"(null)", p->expire, p->secure));
-    if ((q = soap_set_cookie(soap, p->name, p->value, p->domain, p->path)))
-    { q->version = p->version;
-      q->expire = p->expire;
-      q->secure = p->secure;
-      q->env = 1;
-    }
-    if (p->name)
-      SOAP_FREE(soap, p->name);
-    if (p->value)
-      SOAP_FREE(soap, p->value);
-    if (p->domain)
-      SOAP_FREE(soap, p->domain);
-    if (p->path)
-      SOAP_FREE(soap, p->path);
-    SOAP_FREE(soap, p);
-  }
-  if (domain)
-    SOAP_FREE(soap, domain);
-  if (path)
-    SOAP_FREE(soap, path);
-}
-
-/******************************************************************************/
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_getenv_cookies(struct soap *soap)
-{ struct soap_cookie *p;
-  const char *s;
-  char key[4096], val[4096]; /* cookie size is up to 4096 bytes [RFC2109] */
-  if (!(s = getenv("HTTP_COOKIE")))
-    return SOAP_ERR;
-  do
-  { s = soap_decode_key(key, sizeof(key), s);
-    s = soap_decode_val(val, sizeof(val), s);
-    p = soap_set_cookie(soap, key, val, NULL, NULL);
-    if (p)
-      p->env = 1;
-  } while (*s);
-  return SOAP_OK;
-}
-
-/******************************************************************************/
-SOAP_FMAC1
-struct soap_cookie*
-SOAP_FMAC2
-soap_copy_cookies(struct soap *copy, const struct soap *soap)
-{ struct soap_cookie *p, **q, *r;
-  q = &r;
-  for (p = soap->cookies; p; p = p->next)
-  { if (!(*q = (struct soap_cookie*)SOAP_MALLOC(copy, sizeof(struct soap_cookie))))
-      return r;
-    **q = *p;
-    if (p->name)
-    { if (((*q)->name = (char*)SOAP_MALLOC(copy, strlen(p->name)+1)))
-        strcpy((*q)->name, p->name);
-    }
-    if (p->value)
-    { if (((*q)->value = (char*)SOAP_MALLOC(copy, strlen(p->value)+1)))
-        strcpy((*q)->value, p->value);
-    }
-    if (p->domain)
-    { if (((*q)->domain = (char*)SOAP_MALLOC(copy, strlen(p->domain)+1)))
-        strcpy((*q)->domain, p->domain);
-    }
-    if (p->path)
-    { if (((*q)->path = (char*)SOAP_MALLOC(copy, strlen(p->path)+1)))
-        strcpy((*q)->path, p->path);
-    }
-    q = &(*q)->next;
-  }
-  *q = NULL;
-  return r;
-}
-
-/******************************************************************************/
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_free_cookies(struct soap *soap)
-{ struct soap_cookie *p;
-  for (p = soap->cookies; p; p = soap->cookies)
-  { soap->cookies = p->next;
-    SOAP_FREE(soap, p->name);
-    if (p->value)
-      SOAP_FREE(soap, p->value);
-    if (p->domain)
-      SOAP_FREE(soap, p->domain);
-    if (p->path)
-      SOAP_FREE(soap, p->path);
-    SOAP_FREE(soap, p);
-  }
-}
-
-/******************************************************************************/
-#endif /* WITH_COOKIES */
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-size_t
-SOAP_FMAC2
-soap_hash(register const char *s)
-{ register size_t h = 0;
-  while (*s)
-    h = 65599*h + *s++;
-  return h % SOAP_IDHASH;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_1
-static void
-soap_init_pht(struct soap *soap)
-{ register int i;
-  soap->pblk = NULL;
-  soap->pidx = 0;
-  for (i = 0; i < (int)SOAP_PTRHASH; i++)
-    soap->pht[i] = NULL;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-struct soap*
-SOAP_FMAC2
-soap_new1(soap_mode mode)
-{ return soap_new2(mode, mode);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-struct soap*
-SOAP_FMAC2
-soap_new()
-{ return soap_new2(SOAP_IO_DEFAULT, SOAP_IO_DEFAULT);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-struct soap*
-SOAP_FMAC2
-soap_new2(soap_mode imode, soap_mode omode)
-{ struct soap *soap = (struct soap*)malloc(sizeof(struct soap));
-  if (soap)
-    soap_init2(soap, imode, omode);
-  return soap;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_free(struct soap *soap)
-{ soap_done(soap);
-  free(soap);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_del(struct soap *soap)
-{ free(soap);
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_1
-static void
-soap_free_pht(struct soap *soap)
-{ register struct soap_pblk *pb, *next;
-  register int i;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free pointer hashtable\n"));
-  for (pb = soap->pblk; pb; pb = next)
-  { next = pb->next;
-    SOAP_FREE(soap, pb);
-  }
-  soap->pblk = NULL;
-  soap->pidx = 0;
-  for (i = 0; i < (int)SOAP_PTRHASH; i++)
-    soap->pht[i] = NULL;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_embed(struct soap *soap, const void *p, const struct soap_array *a, int n, const char *tag, int type)
-{ register int i;
-  struct soap_plist *pp;
-  if (soap->version == 2)
-    soap->encoding = 1;
-  if (a)
-    i = soap_array_pointer_lookup(soap, p, a, n, type, &pp);
-  else
-    i = soap_pointer_lookup(soap, p, type, &pp);
-  if (i)
-  { if (soap_is_embedded(soap, pp)
-     || soap_is_single(soap, pp))
-      return 0;
-    soap_set_embedded(soap, pp);
-  }
-  return i;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_pointer_lookup(struct soap *soap, const void *p, int type, struct soap_plist **ppp)
-{ register struct soap_plist *pp;
-  *ppp = NULL;
-  if (p)
-  { for (pp = soap->pht[soap_hash_ptr(p)]; pp; pp = pp->next)
-    { if (pp->ptr == p && pp->type == type)
-      { *ppp = pp;
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup location=%p type=%d id=%d\n", p, type, pp->id));
-        return pp->id;
-      }
-    }
-  }
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup location=%p type=%d: not found\n", p, type));
-  return 0;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_pointer_enter(struct soap *soap, const void *p, const struct soap_array *a, int n, int type, struct soap_plist **ppp)
-{ register size_t h;
-  register struct soap_plist *pp;
-  if (!soap->pblk || soap->pidx >= SOAP_PTRBLK)
-  { register struct soap_pblk *pb = (struct soap_pblk*)SOAP_MALLOC(soap, sizeof(struct soap_pblk));
-    if (!pb)
-    { soap->error = SOAP_EOM;
-      return 0;
-    }
-    pb->next = soap->pblk;
-    soap->pblk = pb;
-    soap->pidx = 0;
-  }
-  *ppp = pp = &soap->pblk->plist[soap->pidx++];
-  if (a)
-    h = soap_hash_ptr(a->__ptr);
-  else
-    h = soap_hash_ptr(p);
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Pointer enter location=%p array=%p size=%d dim=%d type=%d id=%d\n", p, a?a->__ptr:NULL, a?a->__size:0, n, type, soap->idnum+1));
-  pp->next = soap->pht[h];
-  pp->type = type;
-  pp->mark1 = 0;
-  pp->mark2 = 0;
-  pp->ptr = p;
-  pp->array = a;
-  soap->pht[h] = pp;
-  pp->id = ++soap->idnum;
-  return pp->id;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_array_pointer_lookup(struct soap *soap, const void *p, const struct soap_array *a, int n, int type, struct soap_plist **ppp)
-{ register struct soap_plist *pp;
-  *ppp = NULL;
-  if (!p || !a->__ptr)
-    return 0;
-  for (pp = soap->pht[soap_hash_ptr(a->__ptr)]; pp; pp = pp->next)
-  { if (pp->type == type && pp->array && pp->array->__ptr == a->__ptr)
-    { register int i;
-      for (i = 0; i < n; i++)
-        if (((const int*)&pp->array->__size)[i] != ((const int*)&a->__size)[i])
-          break;
-      if (i == n)
-      { *ppp = pp;
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array lookup location=%p type=%d id=%d\n", a->__ptr, type, pp->id));
-        return pp->id;
-      }
-    }
-  }
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array lookup location=%p type=%d: not found\n", a->__ptr, type));
-  return 0;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_begin_count(struct soap *soap)
-{ soap_free_ns(soap);
-#ifndef WITH_LEANER
-  if ((soap->mode & SOAP_ENC_DIME) || (soap->omode & SOAP_ENC_DIME))
-    soap->mode = soap->omode | SOAP_IO_LENGTH | SOAP_ENC_DIME;
-  else
-#endif
-  { soap->mode = soap->omode;
-    if ((soap->mode & SOAP_IO_UDP))
-      soap->mode |= SOAP_ENC_XML;
-    if ((soap->mode & SOAP_IO) == SOAP_IO_STORE
-     || (((soap->mode & SOAP_IO) == SOAP_IO_CHUNK || (soap->mode & SOAP_ENC_XML))
-#ifndef WITH_LEANER
-      && !soap->fpreparesend
-#endif
-      ))
-      soap->mode &= ~SOAP_IO_LENGTH;
-    else
-      soap->mode |= SOAP_IO_LENGTH;
-  }
-#ifdef WITH_ZLIB
-  if ((soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) == SOAP_IO_FLUSH)
-  { if (!(soap->mode & SOAP_ENC_DIME))
-      soap->mode &= ~SOAP_IO_LENGTH;
-    if (soap->mode & SOAP_ENC_XML)
-      soap->mode |= SOAP_IO_BUFFER;
-    else
-      soap->mode |= SOAP_IO_STORE;
-  }
-#endif
-  if (!soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH))
-    soap->mode |= SOAP_XML_TREE;
-#ifndef WITH_LEANER
-  if ((soap->mode & SOAP_ENC_MTOM) && (soap->mode & SOAP_ENC_DIME))
-    soap->mode |= SOAP_ENC_MIME;
-  else if (!(soap->mode & SOAP_ENC_MIME))
-    soap->mode &= ~SOAP_ENC_MTOM;
-  if (soap->mode & SOAP_ENC_MIME)
-    soap_select_mime_boundary(soap);
-  soap->dime.list = soap->dime.last;	/* keep track of last DIME attachment */
-#endif
-  soap->count = 0;
-  soap->ns = 0;
-  soap->null = 0;
-  soap->position = 0;
-  soap->mustUnderstand = 0;
-  soap->encoding = 0;
-  soap->part = SOAP_BEGIN;
-  soap->idnum = 0;
-  soap_clr_attr(soap);
-  soap_set_local_namespaces(soap);
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin count phase (socket=%d mode=0x%x count=%lu)\n", soap->socket, (unsigned int)soap->mode, (unsigned long)soap->count));
-#ifndef WITH_LEANER
-  soap->dime.count = 0; /* count # of attachments */
-  soap->dime.size = 0; /* accumulate total size of attachments */
-  if (soap->fprepareinitsend && (soap->mode & SOAP_IO) != SOAP_IO_STORE)
-    return soap->error = soap->fprepareinitsend(soap);   
-#endif
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_end_count(struct soap *soap)
-{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of count phase\n"));
-#ifndef WITH_LEANER
-  if (soap->fpreparefinalsend && (soap->mode & SOAP_IO_LENGTH))
-    return soap->error = soap->fpreparefinalsend(soap);
-#endif
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_begin_send(struct soap *soap)
-{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing for output\n"));
-  soap_free_ns(soap);
-  soap->error = SOAP_OK;
-  soap->mode = soap->omode | (soap->mode & (SOAP_IO_LENGTH | SOAP_ENC_DIME));
-#ifdef WITH_ZLIB
-  if ((soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) == SOAP_IO_FLUSH)
-  { if (soap->mode & SOAP_ENC_XML)
-      soap->mode |= SOAP_IO_BUFFER;
-    else
-      soap->mode |= SOAP_IO_STORE;
-  }
-#endif
-#ifndef WITH_LEAN
-  if ((soap->mode & SOAP_IO_UDP))
-  { soap->mode |= SOAP_ENC_XML;
-    if (soap->count > SOAP_BUFLEN)
-      return soap->error = SOAP_UDP_ERROR;
-  }
-#endif
-  if ((soap->mode & SOAP_IO) == SOAP_IO_FLUSH && soap_valid_socket(soap->socket))
-  { if (soap->count || (soap->mode & SOAP_IO_LENGTH) || (soap->mode & SOAP_ENC_XML))
-      soap->mode |= SOAP_IO_BUFFER;
-    else
-      soap->mode |= SOAP_IO_STORE;
-  }
-  soap->mode &= ~SOAP_IO_LENGTH;
-  if ((soap->mode & SOAP_IO) == SOAP_IO_STORE)
-    if (soap_new_block(soap) == NULL)
-      return soap->error;
-  if (!(soap->mode & SOAP_IO_KEEPALIVE))
-    soap->keep_alive = 0;
-  if (!soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH))
-    soap->mode |= SOAP_XML_TREE;
-#ifndef WITH_LEANER
-  if ((soap->mode & SOAP_ENC_MTOM) && (soap->mode & SOAP_ENC_DIME))
-  { soap->mode |= SOAP_ENC_MIME;
-    soap->mode &= ~SOAP_ENC_DIME;
-  }
-  else if (!(soap->mode & SOAP_ENC_MIME))
-    soap->mode &= ~SOAP_ENC_MTOM;
-  if (soap->mode & SOAP_ENC_MIME)
-    soap_select_mime_boundary(soap);
-#ifdef WIN32
-#ifndef UNDER_CE
-#ifndef WITH_FASTCGI
-  if (!soap_valid_socket(soap->socket)) /* Set win32 stdout or soap->sendfd to BINARY, e.g. to support DIME */
-#ifdef __BORLANDC__
-    setmode(soap->sendfd, _O_BINARY);
-#else
-    _setmode(soap->sendfd, _O_BINARY);
-#endif
-#endif
-#endif
-#endif
-#endif
-  if (soap->mode & SOAP_IO)
-  { soap->bufidx = 0;
-    soap->buflen = 0;
-  }
-  soap->chunksize = 0;
-  soap->ns = 0;
-  soap->null = 0;
-  soap->position = 0;
-  soap->mustUnderstand = 0;
-  soap->encoding = 0;
-  soap->idnum = 0;
-  soap->level = 0;
-  soap_clr_attr(soap);
-  soap_set_local_namespaces(soap);
-#ifdef WITH_ZLIB
-  soap->z_ratio_out = 1.0;
-  if ((soap->mode & SOAP_ENC_ZLIB) && soap->zlib_state != SOAP_ZLIB_DEFLATE)
-  { if (!soap->z_buf)
-      soap->z_buf = (char*)SOAP_MALLOC(soap, SOAP_BUFLEN);
-    soap->d_stream->next_out = (Byte*)soap->z_buf;
-    soap->d_stream->avail_out = SOAP_BUFLEN;
-#ifdef WITH_GZIP
-    if (soap->zlib_out != SOAP_ZLIB_DEFLATE)
-    { memcpy(soap->z_buf, "\37\213\10\0\0\0\0\0\0\377", 10);
-      soap->d_stream->next_out = (Byte*)soap->z_buf + 10;
-      soap->d_stream->avail_out = SOAP_BUFLEN - 10;
-      soap->z_crc = crc32(0L, NULL, 0);
-      soap->zlib_out = SOAP_ZLIB_GZIP;
-      if (soap->z_dict)
-        *((Byte*)soap->z_buf + 2) = 0xff;
-      if (deflateInit2(soap->d_stream, soap->z_level, Z_DEFLATED, -MAX_WBITS, 8, Z_DEFAULT_STRATEGY) != Z_OK)
-        return soap->error = SOAP_ZLIB_ERROR;
-    }
-    else
-#endif
-    if (deflateInit(soap->d_stream, soap->z_level) != Z_OK)
-      return soap->error = SOAP_ZLIB_ERROR;
-    if (soap->z_dict)
-    { if (deflateSetDictionary(soap->d_stream, (const Bytef*)soap->z_dict, soap->z_dict_len) != Z_OK)
-        return soap->error = SOAP_ZLIB_ERROR;
-    }
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflate initialized\n"));
-    soap->zlib_state = SOAP_ZLIB_DEFLATE;
-  }
-#endif
-#ifdef WITH_OPENSSL
-  if (soap->ssl)
-    ERR_clear_error();
-#endif
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin send phase (socket=%d mode=0x%x count=%lu)\n", soap->socket, soap->mode, (unsigned long)soap->count));
-  soap->part = SOAP_BEGIN;
-#ifndef WITH_LEANER
-  if (soap->fprepareinitsend && (soap->mode & SOAP_IO) == SOAP_IO_STORE)
-    soap->fprepareinitsend(soap);   
-#endif
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_embedded(struct soap *soap, const void *p, int t)
-{ struct soap_plist *pp;
-  if (soap_pointer_lookup(soap, p, t, &pp))
-  { pp->mark1 = 1;
-    pp->mark2 = 1;
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded %p type=%d mark set to 1\n", p, t));
-  }
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_reference(struct soap *soap, const void *p, int t)
-{ struct soap_plist *pp;
-  if (!p || (soap->mode & SOAP_XML_TREE))
-    return 1;
-  if (soap_pointer_lookup(soap, p, t, &pp))
-  { if (pp->mark1 == 0)
-    { pp->mark1 = 2;
-      pp->mark2 = 2;
-    }
-  }
-  else if (soap_pointer_enter(soap, p, NULL, 0, t, &pp))
-  { pp->mark1 = 0;
-    pp->mark2 = 0;
-  }
-  else
-    return 1;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reference %p type=%d (%d %d)\n", p, t, (int)pp->mark1, (int)pp->mark2));
-  return pp->mark1;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_array_reference(struct soap *soap, const void *p, const struct soap_array *a, int n, int t)
-{ register int i;
-  struct soap_plist *pp;
-  if (!p || !a->__ptr)
-    return 1;
-  i = soap_array_pointer_lookup(soap, p, a, n, t, &pp);
-  if (i)
-  { if (pp->mark1 == 0)
-    { pp->mark1 = 2;
-      pp->mark2 = 2;
-    }
-  }
-  else if (!soap_pointer_enter(soap, p, a, n, t, &pp))
-    return 1;
-  else
-  { pp->mark1 = 0;
-    pp->mark2 = 0;
-  }
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Array reference %p ptr=%p dim=%d type=%d (%d %d)\n", p, a->__ptr, n, t, (int)pp->mark1, (int)pp->mark2));
-  return pp->mark1;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_embedded_id(struct soap *soap, int id, const void *p, int t)
-{ struct soap_plist *pp = NULL;
-  if (soap->mode & SOAP_XML_TREE)
-    return id;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id %p type=%d id=%d\n", p, t, id));
-  if (soap->version == 1 && soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH) && soap->part != SOAP_IN_HEADER)
-  { if (id < 0)
-    { id = soap_pointer_lookup(soap, p, t, &pp);
-      if (id)
-      { if (soap->mode & SOAP_IO_LENGTH)
-          pp->mark1 = 2;
-        else
-          pp->mark2 = 2;
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id multiref id=%d %p type=%d = (%d %d)\n", id, p, t, (int)pp->mark1, (int)pp->mark2));
-      }
-      return -1;
-    }
-    return id;
-  }
-  if (id < 0)
-    id = soap_pointer_lookup(soap, p, t, &pp);
-  else if (id && !soap_pointer_lookup(soap, p, t, &pp))
-    return 0;
-  if (id && pp)
-  { if (soap->mode & SOAP_IO_LENGTH)
-      pp->mark1 = 1;
-    else
-      pp->mark2 = 1;
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Embedded_id embedded ref id=%d %p type=%d = (%d %d)\n", id, p, t, (int)pp->mark1, (int)pp->mark2));
-  }
-  return id;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_is_embedded(struct soap *soap, struct soap_plist *pp)
-{ if (!pp)
-    return 0;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Is embedded? %d %d\n", (int)pp->mark1, (int)pp->mark2));
-  if (soap->version == 1 && soap->encodingStyle && !(soap->mode & SOAP_XML_GRAPH) && soap->part != SOAP_IN_HEADER)
-  { if (soap->mode & SOAP_IO_LENGTH)
-      return pp->mark1 != 0;
-    return pp->mark2 != 0;
-  }
-  if (soap->mode & SOAP_IO_LENGTH)
-    return pp->mark1 == 1;
-  return pp->mark2 == 1;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_is_single(struct soap *soap, struct soap_plist *pp)
-{ if (soap->part == SOAP_IN_HEADER)
-    return 1;
-  if (!pp)
-    return 0;
-  if (soap->mode & SOAP_IO_LENGTH)
-    return pp->mark1 == 0;
-  return pp->mark2 == 0;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_set_embedded(struct soap *soap, struct soap_plist *pp)
-{ if (!pp)
-    return;
-  if (soap->mode & SOAP_IO_LENGTH)
-    pp->mark1 = 1;
-  else
-    pp->mark2 = 1;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_attachment(struct soap *soap, const char *tag, int id, const void *p, const struct soap_array *a, const char *aid, const char *atype, const char *aoptions, int n, const char *type, int t) 
-{
-#ifndef WITH_NOIDREF
-  struct soap_plist *pp = NULL;         /* Oracle customization */
-  int i;
-  if (!p || !a->__ptr || (!aid && !atype))
-    return soap_element_id(soap, tag, id, p, a, n, type, t);
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Attachment tag='%s' id='%s' (%d) type='%s'\n", tag, aid?aid:SOAP_STR_EOS, id, atype?atype:SOAP_STR_EOS));
-  i = soap_array_pointer_lookup(soap, p, a, n, t, &pp);
-  if (!i)
-  { i = soap_pointer_enter(soap, p, a, n, t, &pp);
-    if (!i)
-    { soap->error = SOAP_EOM;
-      return -1;
-    }
-  }
-  if (id <= 0)
-    id = i;
-  if (!aid)
-  { sprintf(soap->tmpbuf, soap->dime_id_format, id);
-    aid = soap_strdup(soap, soap->tmpbuf);
-  }
-  /* Add MTOM xop:Include element when necessary */
-  /* TODO: this code to be obsoleted with new import/xop.h conventions */
-  if ((soap->mode & SOAP_ENC_MTOM) && strcmp(tag, "xop:Include"))
-  { if (soap_element_begin_out(soap, tag, 0, type)
-     || soap_element_href(soap, "xop:Include", 0, "xmlns:xop=\"http://www.w3.org/2004/08/xop/include\" href", aid)
-     || soap_element_end_out(soap, tag))
-      return soap->error;
-  }
-  else if (soap_element_href(soap, tag, 0, "href", aid))
-    return soap->error;
-  if (soap->mode & SOAP_IO_LENGTH)
-  { if (pp && (pp->mark1 != 3))        /* Oracle customization */
-    { struct soap_multipart *content;
-      if (soap->mode & SOAP_ENC_MTOM)
-        content = soap_new_multipart(soap, &soap->mime.first, &soap->mime.last, (char*)a->__ptr, a->__size);
-      else
-        content = soap_new_multipart(soap, &soap->dime.first, &soap->dime.last, (char*)a->__ptr, a->__size);
-      if (!content)
-      { soap->error = SOAP_EOM;
-        return -1;
-      }
-      if (!strncmp(aid, "cid:", 4)) /* RFC 2111 */
-      { if (soap->mode & SOAP_ENC_MTOM)
-        { char *s = (char*)soap_malloc(soap, strlen(aid) - 1);
-          if (s)
-          { *s = '<';
-            strcpy(s + 1, aid + 4);
-            strcat(s, ">");
-            content->id = s;
-          }
-        }
-        else
-          content->id = aid + 4;
-      }
-      else
-        content->id = aid;
-      content->type = atype;
-      content->options = aoptions;
-      content->encoding = SOAP_MIME_BINARY;
-      pp->mark1 = 3;
-    }
-  }
-  else if (pp)        /* Oracle customization */
-    pp->mark2 = 3;
-#endif
-  return -1;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_1
-static void
-soap_init_iht(struct soap *soap)
-{ register int i;
-  for (i = 0; i < SOAP_IDHASH; i++)
-    soap->iht[i] = NULL;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_1
-static void
-soap_free_iht(struct soap *soap)
-{ register int i;
-  register struct soap_ilist *ip = NULL, *p = NULL;
-  register struct soap_flist *fp = NULL, *fq = NULL;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free ID hashtable\n"));
-  for (i = 0; i < SOAP_IDHASH; i++)
-  { for (ip = soap->iht[i]; ip; ip = p)
-    { for (fp = ip->flist; fp; fp = fq)
-      { fq = fp->next;
-        SOAP_FREE(soap, fp);
-      }
-      p = ip->next;
-      SOAP_FREE(soap, ip);
-    }
-    soap->iht[i] = NULL;
-  }
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-struct soap_ilist *
-SOAP_FMAC2
-soap_lookup(struct soap *soap, const char *id)
-{ register struct soap_ilist *ip = NULL;
-  for (ip = soap->iht[soap_hash(id)]; ip; ip = ip->next)
-    if (!strcmp(ip->id, id))
-      return ip;
-  return NULL;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-struct soap_ilist *
-SOAP_FMAC2
-soap_enter(struct soap *soap, const char *id)
-{ register size_t h;
-  register struct soap_ilist *ip;
-  ip = (struct soap_ilist*)SOAP_MALLOC(soap, sizeof(struct soap_ilist) + strlen(id));
-  if (ip)
-  { h = soap_hash(id);
-    strcpy(ip->id, id);
-    ip->next = soap->iht[h];
-    soap->iht[h] = ip;
-  }
-  return ip;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-void*
-SOAP_FMAC2
-soap_malloc(struct soap *soap, size_t n)
-{ register char *p;
-  if (!n)
-    return (void*)SOAP_NON_NULL;
-  if (!soap)
-    return SOAP_MALLOC(soap, n);
-  if (soap->fmalloc)
-    p = (char*)soap->fmalloc(soap, n);
-  else
-  { n += sizeof(short);
-    n += (-(long)n) & (sizeof(void*)-1); /* align at 4-, 8- or 16-byte boundary */
-    if (!(p = (char*)SOAP_MALLOC(soap, n + sizeof(void*) + sizeof(size_t))))
-    { soap->error = SOAP_EOM;
-      return NULL;
-    }
-    /* set the canary to detect corruption */
-    *(unsigned short*)(p + n - sizeof(unsigned short)) = (unsigned short)SOAP_CANARY;
-    /* keep chain of alloced cells for destruction */
-    *(void**)(p + n) = soap->alist;
-    *(size_t*)(p + n + sizeof(void*)) = n;
-    soap->alist = p + n;
-  }
-  soap->alloced = 1;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifdef SOAP_MEM_DEBUG
-static void
-soap_init_mht(struct soap *soap)
-{ register int i;
-  for (i = 0; i < (int)SOAP_PTRHASH; i++)
-    soap->mht[i] = NULL;
-}
-#endif
-
-/******************************************************************************/
-#ifdef SOAP_MEM_DEBUG
-static void
-soap_free_mht(struct soap *soap)
-{ register int i;
-  register struct soap_mlist *mp, *mq;
-  for (i = 0; i < (int)SOAP_PTRHASH; i++)
-  { for (mp = soap->mht[i]; mp; mp = mq)
-    { mq = mp->next;
-      if (mp->live)
-      {
-        fprintf(stderr, "%s(%d): malloc() = %p not freed (memory leak or forgot to call soap_end()?)\n", mp->file, mp->line, mp->ptr);
-#ifndef WIN32
-        (void) printstack( 2 );   /* Oracle customization */
-#endif
-      }
-      free(mp);
-    }
-    soap->mht[i] = NULL;
-  }
-}
-#endif
-
-/******************************************************************************/
-#ifdef SOAP_MEM_DEBUG
-SOAP_FMAC1
-void*
-SOAP_FMAC2
-soap_track_malloc(struct soap *soap, const char *file, int line, size_t size)
-{ register void *p = malloc(size);
-  if (soap)
-  { register size_t h = soap_hash_ptr(p);
-    register struct soap_mlist *mp = (struct soap_mlist*)malloc(sizeof(struct soap_mlist));
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): malloc(%lu) = %p\n", file, line, (unsigned long)size, p));
-    mp->next = soap->mht[h];
-    mp->ptr = p;
-    mp->file = file;
-    mp->line = line;
-    mp->live = 1;
-    soap->mht[h] = mp;
-  }
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifdef SOAP_MEM_DEBUG
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_track_free(struct soap *soap, const char *file, int line, void *p)
-{ register size_t h = soap_hash_ptr(p);
-  register struct soap_mlist *mp;
-  for (mp = soap->mht[h]; mp; mp = mp->next)
-    if (mp->ptr == p)
-      break;
-  if (mp)
-  { if (mp->live)
-    { free(p);
-      if (soap->fdebug[SOAP_INDEX_TEST])
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): free(%p)\n", file, line, p));
-      }
-      mp->live = 0;
-    }
-    else
-      fprintf(stderr, "%s(%d): free(%p) double free of pointer malloced at %s(%d)\n", file, line, p, mp->file, mp->line);
-  }
-  else
-    fprintf(stderr, "%s(%d): free(%p) pointer not malloced\n", file, line, p);
-}
-#endif
-
-/******************************************************************************/
-#ifdef SOAP_MEM_DEBUG
-static void
-soap_track_unlink(struct soap *soap, const void *p)
-{ register size_t h = soap_hash_ptr(p);
-  register struct soap_mlist *mp;
-  for (mp = soap->mht[h]; mp; mp = mp->next)
-    if (mp->ptr == p)
-      break;
-  if (mp)
-    mp->live = 0;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_dealloc(struct soap *soap, void *p)
-{ if (soap_check_state(soap))
-    return;
-  if (p)
-  { register char **q;
-    for (q = (char**)&soap->alist; *q; q = *(char***)q)
-    { 
-      if (*(unsigned short*)(char*)(*q - sizeof(unsigned short)) != (unsigned short)SOAP_CANARY)
-      {
-#ifdef SOAP_MEM_DEBUG
-        fprintf(stderr, "Data corruption in dynamic allocation (see logs)\n");
-#endif
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Data corruption:\n"));
-        DBGHEX(TEST, *q - 200, 200);
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "\n"));
-        soap->error = SOAP_MOE;
-        return;
-      }
-      if (p == (void*)(*q - *(size_t*)(*q + sizeof(void*))))
-      { *q = **(char***)q;
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Freed data at %p\n", p));
-        SOAP_FREE(soap, p);
-        return;
-      }
-    }
-    soap_delete(soap, p);
-  }
-  else
-  { register char *q;
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free all soap_malloc() data\n"));
-    while (soap->alist)
-    { q = (char*)soap->alist;
-      if (*(unsigned short*)(char*)(q - sizeof(unsigned short)) != (unsigned short)SOAP_CANARY)
-      {
-#ifdef SOAP_MEM_DEBUG
-        fprintf(stderr, "Data corruption in dynamic allocation (see logs)\n");
-#endif
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Data corruption:\n"));
-        DBGHEX(TEST, q - 200, 200);
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "\n"));
-        soap->error = SOAP_MOE;
-        return;
-      }
-      soap->alist = *(void**)q;
-      q -= *(size_t*)(q + sizeof(void*));
-      SOAP_FREE(soap, q);
-    }
-    /* we must assume these were deallocated: */
-    soap->action = NULL;
-    soap->fault = NULL;
-    soap->header = NULL;
-    soap->userid = NULL;
-    soap->passwd = NULL;
-    soap->authrealm = NULL;
-    soap->http_content = NULL;
-#ifndef WITH_LEANER
-    soap_clr_mime(soap);
-#endif
-  }
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_delete(struct soap *soap, void *p)
-{ register struct soap_clist **cp;
-  if (soap_check_state(soap))
-    return;
-  cp = &soap->clist;
-  if (p)
-  { while (*cp)
-    { if (p == (*cp)->ptr)
-      { register struct soap_clist *q = *cp;
-        *cp = q->next;
-        if (q->fdelete(q))
-        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not dealloc data %p: deletion callback failed for object type %d\n", q->ptr, q->type));
-#ifdef SOAP_MEM_DEBUG
-          fprintf(stderr, "new(object type = %d) = %p not freed: deletion callback failed\n", q->type, q->ptr);
-#endif
-        }
-        SOAP_FREE(soap, q);
-        return;
-      }
-      cp = &(*cp)->next;
-    }
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not dealloc data %p: address not in list\n", p));
-  }
-  else
-  { while (*cp)
-    { register struct soap_clist *q = *cp;
-      *cp = q->next;
-      if (q->fdelete(q))
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not dealloc data %p: deletion callback failed for object type %d\n", q->ptr, q->type));
-#ifdef SOAP_MEM_DEBUG
-        fprintf(stderr, "new(object type = %d) = %p not freed: deletion callback failed\n", q->type, q->ptr);
-#endif
-      }
-      SOAP_FREE(soap, q);
-    }
-  }
-  soap->fault = NULL; /* this was possibly deallocated */
-  soap->header = NULL; /* this was possibly deallocated */
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_delegate_deletion(struct soap *soap, struct soap *soap_to)
-{ register struct soap_clist *cp;
-  register char **q;
-#ifdef SOAP_MEM_DEBUG
-  register void *p;
-  register struct soap_mlist **mp, *mq;
-  size_t h;
-#endif
-  for (q = (char**)&soap->alist; *q; q = *(char***)q)
-  {
-    if (*(unsigned short*)(char*)(*q - sizeof(unsigned short)) != (unsigned short)SOAP_CANARY)
-    {
-#ifdef SOAP_MEM_DEBUG
-      fprintf(stderr, "Data corruption in dynamic allocation (see logs)\n");
-#endif
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Data corruption:\n"));
-      DBGHEX(TEST, *q - 200, 200);
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "\n"));
-      soap->error = SOAP_MOE;
-      return;
-    }
-#ifdef SOAP_MEM_DEBUG
-    p = (void*)(*q - *(size_t*)(*q + sizeof(void*)));
-    h = soap_hash_ptr(p);
-    for (mp = &soap->mht[h]; *mp; mp = &(*mp)->next)
-    { if ((*mp)->ptr == p)
-      { mq = *mp;
-        *mp = mq->next;
-	mq->next = soap_to->mht[h];
-        soap_to->mht[h] = mq;
-        break;
-      }
-    }
-#endif
-  }
-  *q = (char*)soap_to->alist;
-  soap_to->alist = soap->alist;
-  soap->alist = NULL;
-  cp = soap_to->clist;
-  if (cp)
-  { while (cp->next)
-      cp = cp->next;
-    cp->next = soap->clist;
-  }
-  else
-    soap_to->clist = soap->clist;
-  soap->clist = NULL;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-struct soap_clist *
-SOAP_FMAC2
-soap_link(struct soap *soap, void *p, int t, int n, int (*fdelete)(struct soap_clist*))
-{ register struct soap_clist *cp;
-  if ((cp = (struct soap_clist*)SOAP_MALLOC(soap, sizeof(struct soap_clist))))
-  { cp->next = soap->clist;
-    cp->type = t;
-    cp->size = n; 
-    cp->ptr = p;
-    cp->fdelete = fdelete;
-    soap->clist = cp;
-  }
-  return cp;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_unlink(struct soap *soap, const void *p)
-{ register char **q;
-  register struct soap_clist **cp;
-  if (!soap || !p)
-    return;
-  for (q = (char**)&soap->alist; *q; q = *(char***)q)
-  { if (p == (void*)(*q - *(size_t*)(*q + sizeof(void*))))
-    { *q = **(char***)q;
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unlinked data %p\n", p));
-#ifdef SOAP_MEM_DEBUG
-      soap_track_unlink(soap, p);
-#endif
-      return;
-    }
-  }
-  for (cp = &soap->clist; *cp; cp = &(*cp)->next)
-  { if (p == (*cp)->ptr)
-    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unlinked class instance %p\n", p));
-      q = (char**)*cp;
-      *cp = (*cp)->next;
-      SOAP_FREE(soap, q);
-      return;
-    }
-  }
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_lookup_type(struct soap *soap, const char *id)
-{ register struct soap_ilist *ip;
-  if (id && *id)
-  { ip = soap_lookup(soap, id);
-    if (ip)
-    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Lookup id='%s' type=%d\n", id, ip->type));
-      return ip->type;
-    }
-  }
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "lookup type id='%s' NOT FOUND! Need to get it from xsi:type\n", id));
-  return 0;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-void*
-SOAP_FMAC2
-soap_id_lookup(struct soap *soap, const char *id, void **p, int t, size_t n, unsigned int k)
-{ struct soap_ilist *ip;
-  void **q;
-  if (!p || !id || !*id)
-    return p;
-  ip = soap_lookup(soap, id); /* lookup pointer to hash table entry for string id */
-  if (!ip)
-  { if (!(ip = soap_enter(soap, id))) /* new hash table entry for string id */
-      return NULL;
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding first href='%s' type=%d %p (%u bytes)\n", id, t, p, (unsigned int)n));
-    ip->type = t;
-    ip->size = n; 
-    ip->link = p;
-    ip->copy = NULL;
-    ip->flist = NULL;
-    ip->ptr = NULL;
-    ip->level = k;
-    *p = NULL;
-  }
-  else if (ip->ptr)
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolved href='%s' type=%d location=%p (%u bytes)\n", id, t, ip->ptr, (unsigned int)n));
-    if (ip->type != t)
-    { 
-      /* Oracle customization */
-      strncpy(soap->id, id, sizeof(soap->id) - 1);
-      soap->id[sizeof(soap->id) - 1] = '\0';
-      soap->error = SOAP_HREF;
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Type incompatibility: href='%s' id-type=%d href-type=%d\n", id, ip->type, t));
-      return NULL;
-    }
-    while (ip->level < k)
-    { q = (void**)soap_malloc(soap, sizeof(void*));  
-      if (!q)
-        return NULL;
-      *p = (void*)q;
-      p = q;
-      k--;
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level...\n"));
-    }
-    *p = ip->ptr;
-  }
-  else if (ip->level > k)
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving level %u pointers to href='%s'\n", ip->level, id));
-    while (ip->level > k)
-    { void *s, **r = &ip->link;
-      q = (void**)ip->link;
-      while (q)
-      { *r = (void*)soap_malloc(soap, sizeof(void*));
-        if (!*r)
-	  return NULL;
-        s = *q;
-        *q = *r;
-        r = (void**)*r;
-        q = (void**)s;
-      }
-      *r = NULL;
-      ip->size = n; 
-      ip->copy = NULL;
-      ip->level = ip->level - 1;
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level...\n"));
-    }
-    q = (void**)ip->link;
-    ip->link = p;
-    *p = (void*)q;
-  }
-  else
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarded href='%s' type=%d location=%p (%u bytes)\n", id, t, p, (unsigned int)n));
-    while (ip->level < k)
-    { q = (void**)soap_malloc(soap, sizeof(void*));  
-      if (!q)
-        return NULL;
-      *p = q;
-      p = q;
-      k--;
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Descending one level...\n"));
-    }
-    q = (void**)ip->link;
-    ip->link = p;
-    *p = (void*)q;
-  }
-  return p;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIDREF
-#ifndef PALM_2
-SOAP_FMAC1
-void*
-SOAP_FMAC2
-soap_id_forward(struct soap *soap, const char *href, void *p, size_t len, int st, int tt, size_t n, unsigned int k, void (*fcopy)(struct soap*, int, int, void*, size_t, const void*, size_t))
-{ struct soap_ilist *ip;
-  if (!p || !href || !*href)
-    return p;
-  ip = soap_lookup(soap, href); /* lookup pointer to hash table entry for string id */
-  if (!ip)
-  { if (!(ip = soap_enter(soap, href))) /* new hash table entry for string id */
-      return NULL;
-    ip->type = st;
-    ip->size = n;
-    ip->link = NULL;
-    ip->copy = NULL;
-    ip->ptr = NULL;
-    ip->level = 0;
-    ip->flist = NULL;
-    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "New entry href='%s' type=%d size=%lu level=%d location=%p\n", href, st, (unsigned long)n, k, p));
-  }
-  else if (ip->type != st || (ip->level == k && ip->size != n))
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Type incompatibility id='%s' expect type=%d size=%lu level=%u got type=%d size=%lu\n", href, ip->type, (unsigned long)ip->size, k, st, (unsigned long)n));
-    /* Oracle customization */
-    strncpy(soap->id, href, sizeof(soap->id) - 1);
-    soap->id[sizeof(soap->id) - 1] = '\0';
-    soap->error = SOAP_HREF;
-    return NULL;
-  }
-  if (fcopy || n < sizeof(void*) || *href != '#')
-  { register struct soap_flist *fp = (struct soap_flist*)SOAP_MALLOC(soap, sizeof(struct soap_flist));
-    if (!fp)
-    { soap->error = SOAP_EOM;
-      return NULL;
-    }
-    fp->next = ip->flist;
-    fp->type = tt;
-    fp->ptr = p;
-    fp->level = k;
-    fp->len = len;
-    if (fcopy)
-      fp->fcopy = fcopy;
-    else
-      fp->fcopy = soap_fcopy;
-    ip->flist = fp;
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding type=%d (target type=%d) size=%lu location=%p level=%u len=%lu href='%s'\n", st, tt, (unsigned long)n, p, k, (unsigned long)len, href));
-  }
-  else
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Forwarding copying address %p for type=%d href='%s'\n", p, st, href));
-    *(void**)p = ip->copy;
-    ip->copy = p;
-  }
-  return p;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-void*
-SOAP_FMAC2
-soap_id_enter(struct soap *soap, const char *id, void *p, int t, size_t n, unsigned int k, const char *type, const char *arrayType, void *(*finstantiate)(struct soap*, int, const char*, const char*, size_t*))
-{
-#ifndef WITH_NOIDREF
-  struct soap_ilist *ip;
-#endif
-  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Enter id='%s' type=%d loc=%p size=%lu level=%u\n", id, t, p, (unsigned long)n, k));
-  soap->alloced = 0;
-  if (!p)
-  { if (finstantiate)
-      p = finstantiate(soap, t, type, arrayType, &n);
-    else
-      p = soap_malloc(soap, n);
-    if (p)
-      soap->alloced = 1;
-  }
-#ifndef WITH_NOIDREF
-  if (!id || !*id)
-#endif
-    return p;
-#ifndef WITH_NOIDREF
-  ip = soap_lookup(soap, id); /* lookup pointer to hash table entry for string id */
-  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Lookup entry id='%s for location=%p'\n", id, p));
-  if (!ip)
-  { if (!(ip = soap_enter(soap, id))) /* new hash table entry for string id */
-      return NULL;
-    ip->type = t;
-    ip->link = NULL;
-    ip->copy = NULL;
-    ip->flist = NULL;
-    ip->size = n;
-    ip->ptr = p;
-    ip->level = k;
-    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "New entry id='%s' type=%d size=%lu level=%u location=%p\n", id, t, (unsigned long)n, k, p));
-  }
-  else if ((ip->type != t || (ip->level == k && ip->size != n)) && (ip->copy || ip->flist))
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Type incompatibility id='%s' expect type=%d size=%lu level=%u got type=%d size=%lu\n", id, ip->type, (unsigned long)ip->size, k, t, (unsigned long)n));
-    /* Oracle customization */
-    strncpy(soap->id, id, sizeof(soap->id) - 1);
-    soap->id[sizeof(soap->id) - 1] = '\0';
-    soap->error = SOAP_HREF;
-    return NULL;
-  }
-  else if (ip->ptr)
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Multiply defined id='%s'\n", id));
-    /* Oracle customization */
-    strncpy(soap->id, id, sizeof(soap->id) - 1);
-    soap->id[sizeof(soap->id) - 1] = '\0';
-    soap->error = SOAP_DUPLICATE_ID;
-    return NULL;
-  }
-  else 
-  { ip->size = n;
-    ip->ptr = p;
-    ip->level = k;
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Update entry id='%s' type=%d location=%p size=%lu level=%u\n", id, t, p, (unsigned long)n, k));
-  }
-  return ip->ptr;
-#endif
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_fcopy(struct soap *soap, int st, int tt, void *p, size_t len, const void *q, size_t n)
-{ DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Copying data type=%d (target type=%d) %p -> %p (%lu bytes)\n", st, tt, q, p, (unsigned long)n));
-  memcpy(p, q, n);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_end_send(struct soap *soap)
-{ 
-#ifndef WITH_LEANER
-  int err;
-  if (soap->dime.list)
-  { /* SOAP body referenced attachments must appear first */
-    soap->dime.last->next = soap->dime.first;
-    soap->dime.first = soap->dime.list->next;
-    soap->dime.list->next = NULL;
-    soap->dime.last = soap->dime.list;
-  }
-  if (!(err = soap_putdime(soap)))
-    err = soap_putmime(soap);
-  soap->mime.list = NULL;
-  soap->mime.first = NULL;
-  soap->mime.last = NULL;
-  soap->dime.list = NULL;
-  soap->dime.first = NULL;
-  soap->dime.last = NULL;
-  if (err)
-    return err;
-#endif
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End send\n"));
-  if (soap->mode & SOAP_IO) /* need to flush the remaining data in buffer */
-  { if (soap_flush(soap))
-#ifdef WITH_ZLIB
-    { if (soap->mode & SOAP_ENC_ZLIB && soap->zlib_state == SOAP_ZLIB_DEFLATE)
-      { soap->zlib_state = SOAP_ZLIB_NONE;
-        deflateEnd(soap->d_stream);
-      }
-      return soap->error;
-    }
-#else
-      return soap->error;
-#endif
-#ifdef WITH_ZLIB
-    if (soap->mode & SOAP_ENC_ZLIB)
-    { int r;
-      soap->d_stream->avail_in = 0;
-      do
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflating remainder\n"));
-        r = deflate(soap->d_stream, Z_FINISH);
-        if (soap->d_stream->avail_out != SOAP_BUFLEN)
-        { if (soap_flush_raw(soap, soap->z_buf, SOAP_BUFLEN - soap->d_stream->avail_out))
-          { soap->zlib_state = SOAP_ZLIB_NONE;
-            deflateEnd(soap->d_stream);
-            return soap->error;
-          }
-          soap->d_stream->next_out = (Byte*)soap->z_buf;
-          soap->d_stream->avail_out = SOAP_BUFLEN;
-        }
-      } while (r == Z_OK);
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Deflated total %lu->%lu bytes\n", soap->d_stream->total_in, soap->d_stream->total_out));
-      soap->z_ratio_out = (float)soap->d_stream->total_out / (float)soap->d_stream->total_in;
-      soap->mode &= ~SOAP_ENC_ZLIB;
-      soap->zlib_state = SOAP_ZLIB_NONE;
-      if (deflateEnd(soap->d_stream) != Z_OK || r != Z_STREAM_END)
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Unable to end deflate: %s\n", soap->d_stream->msg?soap->d_stream->msg:SOAP_STR_EOS));
-        return soap->error = SOAP_ZLIB_ERROR;
-      }
-#ifdef WITH_GZIP
-      if (soap->zlib_out != SOAP_ZLIB_DEFLATE)
-      { soap->z_buf[0] = soap->z_crc & 0xFF;
-        soap->z_buf[1] = (soap->z_crc >> 8) & 0xFF;
-        soap->z_buf[2] = (soap->z_crc >> 16) & 0xFF;
-        soap->z_buf[3] = (soap->z_crc >> 24) & 0xFF;
-        soap->z_buf[4] = soap->d_stream->total_in & 0xFF;
-        soap->z_buf[5] = (soap->d_stream->total_in >> 8) & 0xFF;
-        soap->z_buf[6] = (soap->d_stream->total_in >> 16) & 0xFF;
-        soap->z_buf[7] = (soap->d_stream->total_in >> 24) & 0xFF;
-        if (soap_flush_raw(soap, soap->z_buf, 8))
-          return soap->error;
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip crc32=%lu\n", (unsigned long)soap->z_crc));
-      }
-#endif
-    }
-#endif
-    if ((soap->mode & SOAP_IO) == SOAP_IO_STORE)
-    { char *p;
-#ifndef WITH_NOHTTP
-      if (!(soap->mode & SOAP_ENC_XML))
-      { soap->mode--;
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending buffered message of length %u\n", (unsigned int)soap->blist->size));
-        if (soap->status >= SOAP_POST)
-          soap->error = soap->fpost(soap, soap->endpoint, soap->host, soap->port, soap->path, soap->action, soap->blist->size);
-        else if (soap->status != SOAP_STOP)
-          soap->error = soap->fresponse(soap, soap->status, soap->blist->size);
-        if (soap->error || soap_flush(soap))
-          return soap->error;
-        soap->mode++;
-      }
-#endif
-      for (p = soap_first_block(soap, NULL); p; p = soap_next_block(soap, NULL))
-      { DBGMSG(SENT, p, soap_block_size(soap, NULL));
-        if ((soap->error = soap->fsend(soap, p, soap_block_size(soap, NULL))))
-        { soap_end_block(soap, NULL);
-          return soap->error;
-        }
-      }
-      soap_end_block(soap, NULL);
-    }
-#ifndef WITH_LEANER
-    else if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
-    { DBGMSG(SENT, "\r\n0\r\n\r\n", 7);
-      if ((soap->error = soap->fsend(soap, "\r\n0\r\n\r\n", 7)))
-        return soap->error;
-    }
-#endif
-  }
-#ifdef WITH_TCPFIN
-#ifdef WITH_OPENSSL
-  if (!soap->ssl && soap_valid_socket(soap->socket) && !soap->keep_alive && !(soap->omode & SOAP_IO_UDP))
-    soap->fshutdownsocket(soap, soap->socket, 1); /* Send TCP FIN */
-#else
-  if (soap_valid_socket(soap->socket) && !soap->keep_alive && !(soap->omode & SOAP_IO_UDP))
-    soap->fshutdownsocket(soap, soap->socket, 1); /* Send TCP FIN */
-#endif
-#endif
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End of send phase\n"));
-  soap->omode &= ~SOAP_XML_SEC;
-  soap->count = 0;
-  soap->part = SOAP_END;
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_end_recv(struct soap *soap)
-{ soap->part = SOAP_END;
-#ifndef WITH_LEAN
-  soap->wsuid = NULL;		/* reset before next send */
-  soap->c14nexclude = NULL;	/* reset before next send */
-#endif
-#ifndef WITH_LEANER
-  if ((soap->mode & SOAP_ENC_DIME) && soap_getdime(soap))
-  { soap->dime.first = NULL;
-    soap->dime.last = NULL;
-    return soap->error;
-  }
-  soap->dime.list = soap->dime.first;
-  soap->dime.first = NULL;
-  soap->dime.last = NULL;
-  /* Check if MIME attachments and mime-post-check flag is set, if set call soap_resolve() and return */
-  if (soap->mode & SOAP_ENC_MIME)
-  { 
-#ifndef WITH_NOIDREF
-    if (soap->mode & SOAP_MIME_POSTCHECK)
-    { soap_resolve(soap);
-      return SOAP_OK;
-    }
-#endif
-    if (soap_getmime(soap))
-      return soap->error;
-  }
-  soap->mime.list = soap->mime.first;
-  soap->mime.first = NULL;
-  soap->mime.last = NULL;
-  soap->mime.boundary = NULL;
-  if (soap->xlist)
-  { struct soap_multipart *content;
-    for (content = soap->mime.list; content; content = content->next)
-      soap_resolve_attachment(soap, content);
-  }
-#endif
-  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "End of receive message ok\n"));
-#ifdef WITH_ZLIB
-  if (soap->mode & SOAP_ENC_ZLIB)
-  { /* Make sure end of compressed content is reached */
-    while (soap->d_stream->next_out != Z_NULL)
-      if ((int)soap_get1(soap) == EOF)
-        break;
-    soap->mode &= ~SOAP_ENC_ZLIB;
-    memcpy(soap->buf, soap->z_buf, SOAP_BUFLEN);
-    soap->bufidx = (char*)soap->d_stream->next_in - soap->z_buf;
-    soap->buflen = soap->z_buflen;
-    soap->zlib_state = SOAP_ZLIB_NONE;
-    if (inflateEnd(soap->d_stream) != Z_OK)
-      return soap->error = SOAP_ZLIB_ERROR;
-    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Inflate end ok\n"));
-#ifdef WITH_GZIP
-    if (soap->zlib_in == SOAP_ZLIB_GZIP)
-    { soap_wchar c;
-      short i;
-      DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Inflate gzip crc check\n"));
-      for (i = 0; i < 8; i++)
-      { if ((int)(c = soap_get1(soap)) == EOF)
-          return soap->error = SOAP_EOF;
-        soap->z_buf[i] = (char)c;
-      }
-      if (soap->z_crc != ((uLong)(unsigned char)soap->z_buf[0] | ((uLong)(unsigned char)soap->z_buf[1] << 8) | ((uLong)(unsigned char)soap->z_buf[2] << 16) | ((uLong)(unsigned char)soap->z_buf[3] << 24)))
-      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Gzip error: crc check failed, message corrupted? (crc32=%lu)\n", (unsigned long)soap->z_crc));
-        return soap->error = SOAP_ZLIB_ERROR;
-      }
-      if (soap->d_stream->total_out != ((uLong)(unsigned char)soap->z_buf[4] | ((uLong)(unsigned char)soap->z_buf[5] << 8) | ((uLong)(unsigned char)soap->z_buf[6] << 16) | ((uLong)(unsigned char)soap->z_buf[7] << 24)))
-      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Gzip error: incorrect message length\n"));
-        return soap->error = SOAP_ZLIB_ERROR;
-      }
-    }
-    soap->zlib_in = SOAP_ZLIB_NONE;
-#endif
-  }
-#endif
-  if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
-    while ((int)soap_getchar(soap) != EOF) /* advance to last chunk */
-      ;
-#ifndef WITH_NOIDREF
-  if (soap_resolve(soap))
-    return soap->error;
-#endif
-#ifndef WITH_LEANER
-  if (soap->xlist)
-  { if (soap->mode & SOAP_ENC_MTOM)
-      return soap->error = SOAP_MIME_HREF;
-    return soap->error = SOAP_DIME_HREF;
-  }
-#endif
-  soap_free_ns(soap);
-#ifndef WITH_LEANER
-  if (soap->fpreparefinalrecv)
-    return soap->error = soap->fpreparefinalrecv(soap);
-#endif
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_free_temp(struct soap *soap)
-{ register struct soap_attribute *tp, *tq;
-  register struct Namespace *ns;
-  soap_free_ns(soap);
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free any remaining temp blocks\n"));
-  while (soap->blist)
-    soap_end_block(soap, NULL);
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free attribute storage\n"));
-  for (tp = soap->attributes; tp; tp = tq)
-  { tq = tp->next;
-    if (tp->value)
-      SOAP_FREE(soap, tp->value);
-    SOAP_FREE(soap, tp);
-  }
-  soap->attributes = NULL;
-#ifdef WITH_FAST
-  if (soap->labbuf)
-    SOAP_FREE(soap, soap->labbuf);
-  soap->labbuf = NULL;
-  soap->lablen = 0;
-  soap->labidx = 0;
-#endif
-  ns = soap->local_namespaces;
-  if (ns)
-  { for (; ns->id; ns++)
-    { if (ns->out)
-      { if (soap->encodingStyle == ns->out)
-          soap->encodingStyle = SOAP_STR_EOS;
-        SOAP_FREE(soap, ns->out);
-        ns->out = NULL;
-      }
-      if (soap->encodingStyle == ns->ns)
-        soap->encodingStyle = SOAP_STR_EOS;
-    }
-    SOAP_FREE(soap, soap->local_namespaces);
-    soap->local_namespaces = NULL;
-  }
-#ifndef WITH_LEANER
-  while (soap->xlist)
-  { struct soap_xlist *xp = soap->xlist->next;
-    SOAP_FREE(soap, soap->xlist);
-    soap->xlist = xp;
-  }
-#endif
-#ifndef WITH_NOIDREF
-  soap_free_pht(soap);
-  soap_free_iht(soap);
-#endif
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-static void
-soap_free_ns(struct soap *soap)
-{ register struct soap_nlist *np, *nq;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free namespace stack\n"));
-  for (np = soap->nlist; np; np = nq)
-  { nq = np->next;
-    SOAP_FREE(soap, np);
-  }
-  soap->nlist = NULL;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-#if !defined(WITH_LEAN) || defined(SOAP_DEBUG)
-static void
-soap_init_logs(struct soap *soap)
-{ int i;
-  for (i = 0; i < SOAP_MAXLOGS; i++)
-  { soap->logfile[i] = NULL;
-    soap->fdebug[i] = NULL;
-  }
-}
-#endif
-#endif
-
-/******************************************************************************/
-#if !defined(WITH_LEAN) || defined(SOAP_DEBUG)
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_open_logfile(struct soap *soap, int i)
-{ if (soap->logfile[i])
-    soap->fdebug[i] = fopen(soap->logfile[i], i < 2 ? "ab" : "a");
-}
-#endif
-
-/******************************************************************************/
-#ifdef SOAP_DEBUG
-static void
-soap_close_logfile(struct soap *soap, int i)
-{ if (soap->fdebug[i])
-  { fclose(soap->fdebug[i]);
-    soap->fdebug[i] = NULL;
-  }
-}
-#endif
-
-/******************************************************************************/
-#ifdef SOAP_DEBUG
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_close_logfiles(struct soap *soap)
-{ int i;
-  for (i = 0; i < SOAP_MAXLOGS; i++)
-    soap_close_logfile(soap, i);
-}
-#endif
-
-/******************************************************************************/
-#ifdef SOAP_DEBUG
-static void
-soap_set_logfile(struct soap *soap, int i, const char *logfile)
-{ const char *s;
-  char *t = NULL;
-  soap_close_logfile(soap, i);
-  s = soap->logfile[i];
-  soap->logfile[i] = logfile;
-  if (s)
-    SOAP_FREE(soap, (void*)s);
-  if (logfile)
-    if ((t = (char*)SOAP_MALLOC(soap, strlen(logfile) + 1)))
-      strcpy(t, logfile);
-  soap->logfile[i] = t;
-}
-#endif
-
-/******************************************************************************/
-#ifdef SOAP_DEBUG
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_set_recv_logfile(struct soap *soap, const char *logfile)
-{ soap_set_logfile(soap, SOAP_INDEX_RECV, logfile);
-}
-#endif
-
-/******************************************************************************/
-#ifdef SOAP_DEBUG
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_set_sent_logfile(struct soap *soap, const char *logfile)
-{ soap_set_logfile(soap, SOAP_INDEX_SENT, logfile);
-}
-#endif
-
-/******************************************************************************/
-#ifdef SOAP_DEBUG
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_set_test_logfile(struct soap *soap, const char *logfile)
-{ soap_set_logfile(soap, SOAP_INDEX_TEST, logfile);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-struct soap*
-SOAP_FMAC2
-soap_copy(const struct soap *soap)
-{ return soap_copy_context((struct soap*)malloc(sizeof(struct soap)), soap);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-struct soap*
-SOAP_FMAC2
-soap_copy_context(struct soap *copy, const struct soap *soap)
-{ if (soap_check_state(soap))
-    return NULL;
-  if (copy)
-  { register struct soap_plugin *p = NULL;
-#ifdef __cplusplus
-    *copy = *soap;
-#else
-    memcpy(copy, soap, sizeof(struct soap));
-#endif
-    copy->state = SOAP_COPY;
-    copy->error = SOAP_OK;
-    copy->userid = NULL;
-    copy->passwd = NULL;
-    copy->nlist = NULL;
-    copy->blist = NULL;
-    copy->clist = NULL;
-    copy->alist = NULL;
-    copy->attributes = NULL;
-    copy->labbuf = NULL;
-    copy->lablen = 0;
-    copy->labidx = 0;
-#ifdef SOAP_MEM_DEBUG
-    soap_init_mht(copy);
-#endif
-#if !defined(WITH_LEAN) || defined(SOAP_DEBUG)
-    soap_init_logs(copy);
-#endif
-#ifdef SOAP_DEBUG
-    soap_set_test_logfile(copy, soap->logfile[SOAP_INDEX_TEST]);
-    soap_set_sent_logfile(copy, soap->logfile[SOAP_INDEX_SENT]);
-    soap_set_recv_logfile(copy, soap->logfile[SOAP_INDEX_RECV]);
-#endif
-#ifdef WITH_C_LOCALE
-    copy->c_locale = duplocale(soap->c_locale);
-#else
-    copy->c_locale = NULL;
-#endif
-#ifdef WITH_OPENSSL
-    copy->bio = NULL;
-    copy->ssl = NULL;
-    copy->session = NULL;
-#endif
-#ifdef WITH_ZLIB
-    copy->d_stream = (z_stream*)SOAP_MALLOC(copy, sizeof(z_stream));
-    copy->d_stream->zalloc = Z_NULL;
-    copy->d_stream->zfree = Z_NULL;
-    copy->d_stream->opaque = Z_NULL;
-    copy->z_buf = NULL;
-#endif
-    copy->local_namespaces = NULL;
-#ifndef WITH_NOIDREF
-    soap_init_iht(copy);
-    soap_init_pht(copy);
-#endif
-    copy->header = NULL;
-    copy->fault = NULL;
-    copy->action = NULL;
-#ifndef WITH_LEAN
-#ifdef WITH_COOKIES
-    copy->cookies = soap_copy_cookies(copy, soap);
-#else
-    copy->cookies = NULL;
-#endif
-#endif
-    copy->plugins = NULL;
-    for (p = soap->plugins; p; p = p->next)
-    { register struct soap_plugin *q = (struct soap_plugin*)SOAP_MALLOC(copy, sizeof(struct soap_plugin));
-      if (!q)
-        return NULL;
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Copying plugin '%s'\n", p->id));
-      *q = *p;
-      if (p->fcopy && p->fcopy(copy, q, p))
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not copy plugin '%s'\n", p->id));
-        SOAP_FREE(copy, q);
-        return NULL;
-      }
-      q->next = copy->plugins;
-      copy->plugins = q;
-    }
-  }
-  return copy;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_copy_stream(struct soap *copy, struct soap *soap)
-{ copy->mode = soap->mode;
-  copy->imode = soap->imode;
-  copy->omode = soap->omode;
-  copy->socket = soap->socket;
-  copy->recv_timeout = soap->recv_timeout;
-  copy->send_timeout = soap->send_timeout;
-#if defined(__cplusplus) && !defined(WITH_LEAN)
-  copy->os = soap->os;
-  copy->is = soap->is;
-#endif
-  copy->sendfd = soap->sendfd;
-  copy->recvfd = soap->recvfd;
-  copy->bufidx = soap->bufidx;
-  copy->buflen = soap->buflen;
-  copy->ahead = soap->ahead;
-  copy->cdata = soap->cdata;
-  copy->chunksize = soap->chunksize;
-  copy->chunkbuflen = soap->chunkbuflen;
-  copy->keep_alive = soap->keep_alive;
-  copy->tcp_keep_alive = soap->tcp_keep_alive;
-  copy->tcp_keep_idle = soap->tcp_keep_idle;
-  copy->tcp_keep_intvl = soap->tcp_keep_intvl;
-  copy->tcp_keep_cnt = soap->tcp_keep_cnt;
-  copy->max_keep_alive = soap->max_keep_alive;
-#ifndef WITH_NOIO
-  copy->peer = soap->peer;
-  copy->peerlen = soap->peerlen;
-#endif
-#ifdef WITH_OPENSSL
-  copy->bio = soap->bio;
-  copy->ssl = soap->ssl;
-  copy->ctx = soap->ctx;
-#endif
-#ifdef WITH_ZLIB
-  copy->zlib_state = soap->zlib_state;
-  copy->zlib_in = soap->zlib_in;
-  copy->zlib_out = soap->zlib_out;
-  copy->d_stream = (z_stream*)SOAP_MALLOC(copy, sizeof(z_stream));
-  memcpy(copy->d_stream, soap->d_stream, sizeof(z_stream));
-  copy->z_crc = soap->z_crc;
-  copy->z_ratio_in = soap->z_ratio_in;
-  copy->z_ratio_out = soap->z_ratio_out;
-  copy->z_buf = NULL;
-  copy->z_buflen = soap->z_buflen;
-  copy->z_level = soap->z_level;
-  if (soap->z_buf && soap->zlib_state != SOAP_ZLIB_NONE)
-  { copy->z_buf = (char*)SOAP_MALLOC(copy, SOAP_BUFLEN);
-    memcpy(copy->z_buf, soap->z_buf, sizeof(soap->z_buf));
-  }
-  copy->z_dict = soap->z_dict;
-  copy->z_dict_len = soap->z_dict_len;
-#endif
-  memcpy(copy->buf, soap->buf, sizeof(soap->buf));
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_free_stream(struct soap *soap)
-{ soap->socket = SOAP_INVALID_SOCKET;
-#ifdef WITH_OPENSSL
-  soap->bio = NULL;
-  soap->ssl = NULL;
-#endif
-#ifdef WITH_ZLIB
-  if (soap->d_stream)
-    SOAP_FREE(soap, soap->d_stream);
-  soap->d_stream = NULL;
-  if (soap->z_buf)
-    SOAP_FREE(soap, soap->z_buf);
-  soap->z_buf = NULL;
-#endif
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_init(struct soap *soap)
-{ soap->state = SOAP_INIT;
-#ifdef SOAP_MEM_DEBUG
-  soap_init_mht(soap);
-#endif
-#if !defined(WITH_LEAN) || defined(SOAP_DEBUG)
-  soap_init_logs(soap);
-#endif
-#ifdef SOAP_DEBUG
-/*
- Oracle customization for KMS server debug
-*/
-#ifdef SOAP_DEBUG_SERVER
-    soap_set_test_logfile(soap, "/var/log/SUNWkms2/TEST.log");
-    soap_set_sent_logfile(soap, "/var/log/SUNWkms2/SENT.log");
-    soap_set_recv_logfile(soap, "/var/log/SUNWkms2/RECV.log");
-#else
-  soap_set_test_logfile(soap, "TEST.log");
-  soap_set_sent_logfile(soap, "SENT.log");
-  soap_set_recv_logfile(soap, "RECV.log");
-#endif
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing context\n"));
-#endif
-  soap->version = 0;
-  soap_imode(soap, SOAP_IO_DEFAULT);
-  soap_omode(soap, SOAP_IO_DEFAULT);
-  soap->plugins = NULL;
-  soap->user = NULL;
-  soap->userid = NULL;
-  soap->passwd = NULL;
-#ifndef WITH_NOHTTP
-  soap->fpost = http_post;
-  soap->fget = http_get;
-  soap->fput = http_405;
-  soap->fdel = http_405;
-  soap->fhead = http_405;
-  soap->fform = NULL;
-  soap->fposthdr = http_post_header;
-  soap->fresponse = http_response;
-  soap->fparse = http_parse;
-  soap->fparsehdr = http_parse_header;
-#endif
-  soap->fheader = NULL;
-  soap->fconnect = NULL;
-  soap->fdisconnect = NULL;
-#ifndef WITH_NOIO
-  soap->ipv6_multicast_if = 0;
-  soap->ipv4_multicast_if = NULL;
-#ifndef WITH_IPV6
-  soap->fresolve = tcp_gethost;
-#else
-  soap->fresolve = NULL;
-#endif
-  soap->faccept = tcp_accept;
-  soap->fopen = tcp_connect;
-  soap->fclose = tcp_disconnect;
-  soap->fclosesocket = tcp_closesocket;
-  soap->fshutdownsocket = tcp_shutdownsocket;
-  soap->fsend = fsend;
-  soap->frecv = frecv;
-  soap->fpoll = soap_poll;
-#else
-  soap->fopen = NULL;
-  soap->fclose = NULL;
-  soap->fpoll = NULL;
-#endif
-  soap->fseterror = NULL;
-  soap->fignore = NULL;
-  soap->fserveloop = NULL;
-  soap->fplugin = fplugin;
-  soap->fmalloc = NULL;
-#ifndef WITH_LEANER
-  soap->fprepareinitsend = NULL;
-  soap->fprepareinitrecv = NULL;
-  soap->fpreparesend = NULL;
-  soap->fpreparerecv = NULL;
-  soap->fpreparefinalsend = NULL;
-  soap->fpreparefinalrecv = NULL;
-  soap->fdimereadopen = NULL;
-  soap->fdimewriteopen = NULL;
-  soap->fdimereadclose = NULL;
-  soap->fdimewriteclose = NULL;
-  soap->fdimeread = NULL;
-  soap->fdimewrite = NULL;
-  soap->fmimereadopen = NULL;
-  soap->fmimewriteopen = NULL;
-  soap->fmimereadclose = NULL;
-  soap->fmimewriteclose = NULL;
-  soap->fmimeread = NULL;
-  soap->fmimewrite = NULL;
-#endif
-  soap->float_format = "%.9G"; /* Alternative: use "%G" */
-  soap->double_format = "%.17lG"; /* Alternative: use "%lG" */
-  soap->dime_id_format = "cid:id%d"; /* default DIME id format */
-  soap->http_version = "1.1";
-  soap->proxy_http_version = "1.0";
-  soap->http_content = NULL;
-  soap->actor = NULL;
-  soap->lang = "en";
-  soap->keep_alive = 0;
-  soap->tcp_keep_alive = 0;
-  soap->tcp_keep_idle = 0;
-  soap->tcp_keep_intvl = 0;
-  soap->tcp_keep_cnt = 0;
-  soap->max_keep_alive = SOAP_MAXKEEPALIVE;
-  soap->recv_timeout = 0;
-  soap->send_timeout = 0;
-  soap->connect_timeout = 0;
-  soap->accept_timeout = 0;
-#if defined(WITH_OPENSSL) && defined(KMS_SERVER)
-  /* Oracle customization for Ultra 2 KMS Server */
-  soap->ssl_accept_timeout = 0;
-#endif
-  soap->socket_flags = 0;
-  soap->connect_flags = 0;
-  soap->bind_flags = 0;
-  soap->accept_flags = 0;
-  soap->linger_time = 0;
-  soap->ip = 0;
-  soap->labbuf = NULL;
-  soap->lablen = 0;
-  soap->labidx = 0;
-  soap->encodingStyle = SOAP_STR_EOS;
-#ifndef WITH_NONAMESPACES
-  soap->namespaces = namespaces;
-#else
-  soap->namespaces = NULL;
-#endif
-  soap->local_namespaces = NULL;
-  soap->nlist = NULL;
-  soap->blist = NULL;
-  soap->clist = NULL;
-  soap->alist = NULL;
-  soap->attributes = NULL;
-  soap->header = NULL;
-  soap->fault = NULL;
-  soap->master = SOAP_INVALID_SOCKET;
-  soap->socket = SOAP_INVALID_SOCKET;
-  soap->os = NULL;
-  soap->is = NULL;
-#ifndef WITH_LEANER
-  soap->dom = NULL;
-  soap->dime.list = NULL;
-  soap->dime.first = NULL;
-  soap->dime.last = NULL;
-  soap->mime.list = NULL;
-  soap->mime.first = NULL;
-  soap->mime.last = NULL;
-  soap->mime.boundary = NULL;
-  soap->mime.start = NULL;
-  soap->xlist = NULL;
-#endif
-#ifndef UNDER_CE
-  soap->recvfd = 0;
-  soap->sendfd = 1;
-#else
-  soap->recvfd = stdin;
-  soap->sendfd = stdout;
-#endif 
-  soap->host[0] = '\0';
-  soap->session_host[0] = '\0';      /* Oracle customization */
-  soap->session_port = 0;            /* Oracle customization */
-  soap->port = 0;
-  soap->action = NULL;
-  soap->proxy_host = NULL;
-  soap->proxy_port = 8080;
-  soap->proxy_userid = NULL;
-  soap->proxy_passwd = NULL;
-  soap->authrealm = NULL;
-  soap->prolog = NULL;
-#ifdef WITH_ZLIB
-  soap->zlib_state = SOAP_ZLIB_NONE;
-  soap->zlib_in = SOAP_ZLIB_NONE;
-  soap->zlib_out = SOAP_ZLIB_NONE;
-  soap->d_stream = (z_stream*)SOAP_MALLOC(soap, sizeof(z_stream));
-  soap->d_stream->zalloc = Z_NULL;
-  soap->d_stream->zfree = Z_NULL;
-  soap->d_stream->opaque = Z_NULL;
-  soap->z_buf = NULL;
-  soap->z_level = 6;
-  soap->z_dict = NULL;
-  soap->z_dict_len = 0;
-#endif
-#ifndef WITH_LEAN
-  soap->wsuid = NULL;
-  soap->c14nexclude = NULL;
-  soap->cookies = NULL;
-  soap->cookie_domain = NULL;
-  soap->cookie_path = NULL;
-  soap->cookie_max = 32;
-#endif
-#ifdef WMW_RPM_IO
-  soap->rpmreqid = NULL;
-#endif
-#ifdef PALM
-  palmNetLibOpen();
-#endif
-#ifndef WITH_NOIDREF
-  soap_init_iht(soap);
-  soap_init_pht(soap);
-#endif
-#ifdef WITH_OPENSSL
-  if (!soap_ssl_init_done)
-    soap_ssl_init();
-  soap->fsslauth = ssl_auth_init;
-  soap->fsslverify = ssl_verify_callback;
-  soap->bio = NULL;
-  soap->ssl = NULL;
-  soap->ctx = NULL;
-  soap->ssl_flags = SOAP_SSL_DEFAULT;
-  soap->keyfile = NULL;
-  soap->password = NULL;
-  soap->dhfile = NULL;
-  soap->cafile = NULL;
-  soap->capath = NULL;
-  soap->crlfile = NULL;
-  soap->randfile = NULL;
-  soap->session = NULL;
-#endif
-#ifdef WITH_C_LOCALE
-  soap->c_locale = newlocale(LC_ALL_MASK, "C", NULL);
-#else
-  soap->c_locale = NULL;
-#endif
-  soap->buflen = 0;
-  soap->bufidx = 0;
-#ifndef WITH_LEANER
-  soap->dime.chunksize = 0;
-  soap->dime.buflen = 0;
-#endif
-  soap->null = 0;
-  soap->position = 0;
-  soap->encoding = 0;
-  soap->mustUnderstand = 0;
-  soap->ns = 0;
-  soap->part = SOAP_END;
-  soap->alloced = 0;
-  soap->count = 0;
-  soap->length = 0;
-  soap->cdata = 0;
-  soap->peeked = 0;
-  soap->ahead = 0;
-  soap->idnum = 0;
-  soap->level = 0;
-  soap->endpoint[0] = '\0';
-  soap->error = SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_init1(struct soap *soap, soap_mode mode)
-{ soap_init2(soap, mode, mode);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_init2(struct soap *soap, soap_mode imode, soap_mode omode)
-{ soap_init(soap);
-  soap_imode(soap, imode);
-  soap_omode(soap, omode);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_begin(struct soap *soap)
-{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reinitializing context\n"));
-  if (!soap->keep_alive)
-  { soap->buflen = 0;
-    soap->bufidx = 0;
-  }
-  soap->keep_alive = (((soap->imode | soap->omode) & SOAP_IO_KEEPALIVE) != 0);
-  soap->null = 0;
-  soap->position = 0;
-  soap->encoding = 0;
-  soap->mustUnderstand = 0;
-  soap->mode = 0;
-  soap->ns = 0;
-  soap->part = SOAP_END;
-  soap->alloced = 0;
-  soap->count = 0;
-  soap->length = 0;
-  soap->cdata = 0;
-  soap->error = SOAP_OK;
-  soap->peeked = 0;
-  soap->ahead = 0;
-  soap->idnum = 0;
-  soap->level = 0;
-  soap->endpoint[0] = '\0';
-#ifndef WITH_LEANER
-  soap->dime.chunksize = 0;
-  soap->dime.buflen = 0;
-#endif
-  soap_free_temp(soap);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_end(struct soap *soap)
-{ if (soap_check_state(soap))
-    return;
-  soap_free_temp(soap);
-  soap_dealloc(soap, NULL);
-  while (soap->clist)
-  { register struct soap_clist *cp = soap->clist->next;
-    SOAP_FREE(soap, soap->clist);
-    soap->clist = cp;
-  }
-  soap_closesock(soap);
-#ifdef SOAP_DEBUG
-  soap_close_logfiles(soap);
-#endif
-#ifdef PALM
-  palmNetLibClose();
-#endif
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_set_namespaces(struct soap *soap, const struct Namespace *p)
-{ register struct Namespace *ns = soap->local_namespaces;
-  register struct soap_nlist *np, *nq, *nr;
-  register unsigned int level = soap->level;
-  soap->namespaces = p;
-  soap->local_namespaces = NULL;
-  soap_set_local_namespaces(soap);
-  /* reverse the namespace list */
-  np = soap->nlist;
-  soap->nlist = NULL;
-  if (np)
-  { nq = np->next;
-    np->next = NULL;
-    while (nq)
-    { nr = nq->next;
-      nq->next = np;
-      np = nq;
-      nq = nr;
-    }
-  }
-  /* then push on new stack */
-  while (np)
-  { register const char *s;
-    soap->level = np->level; /* preserve element nesting level */
-    s = np->ns;
-    if (!s && np->index >= 0 && ns)
-    { s = ns[np->index].out;
-      if (!s)
-        s = ns[np->index].ns;
-    }
-    if (s && soap_push_namespace(soap, np->id, s) == NULL)
-      return soap->error;
-    nq = np;
-    np = np->next;
-    SOAP_FREE(soap, nq);
-  }
-  if (ns)
-  { register int i;
-    for (i = 0; ns[i].id; i++)
-    { if (ns[i].out)
-      { SOAP_FREE(soap, ns[i].out);
-        ns[i].out = NULL;
-      }
-    }
-    SOAP_FREE(soap, ns);
-  }
-  soap->level = level; /* restore level */
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_set_local_namespaces(struct soap *soap)
-{ if (soap->namespaces && !soap->local_namespaces)
-  { register const struct Namespace *ns1;
-    register struct Namespace *ns2;
-    register size_t n = 1;
-    for (ns1 = soap->namespaces; ns1->id; ns1++)
-      n++;
-    n *= sizeof(struct Namespace);
-    ns2 = (struct Namespace*)SOAP_MALLOC(soap, n);
-    if (ns2)
-    { memcpy(ns2, soap->namespaces, n);
-      if (ns2[0].ns)
-      { if (!strcmp(ns2[0].ns, soap_env1))
-          soap->version = 1;
-        else
-          soap->version = 2;
-      }
-      soap->local_namespaces = ns2;
-    }
-  }
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-#ifndef PALM_1
-SOAP_FMAC1
-const char *
-SOAP_FMAC2
-soap_tagsearch(const char *big, const char *little)
-{ if (little)
-  { register size_t n = strlen(little);
-    register const char *s = big;
-    while (s) 
-    { register const char *t = s;
-      register size_t i;
-      for (i = 0; i < n; i++, t++)
-      { if (*t != little[i])
-          break;
-      }
-      if (*t == '\0' || *t == ' ')
-      { if (i == n || (i && little[i-1] == ':'))
-          return s;
-      }
-      s = strchr(t, ' ');
-      if (s)
-        s++;
-    }
-  }
-  return NULL;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-#ifndef PALM_1
-SOAP_FMAC1
-struct soap_nlist *
-SOAP_FMAC2
-soap_lookup_ns(struct soap *soap, const char *tag, size_t n)
-{ register struct soap_nlist *np;
-  for (np = soap->nlist; np; np = np->next)
-  { if (!strncmp(np->id, tag, n) && !np->id[n])
-      return np;
-  }
-  return NULL;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-static struct soap_nlist *
-soap_push_ns(struct soap *soap, const char *id, const char *ns, short utilized)
-{ register struct soap_nlist *np;
-  size_t n, k;
-  if (soap_tagsearch(soap->c14nexclude, id))
-    return NULL;
-  if (!utilized)
-  { for (np = soap->nlist; np; np = np->next)
-    { if (!strcmp(np->id, id) && (!np->ns || !strcmp(np->ns, ns)))
-        break;
-    }
-    if (np)
-    { if ((np->level < soap->level || !np->ns) && np->index == 1)
-        utilized = 1;
-      else
-        return NULL;
-    }
-  }
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Adding namespace binding (level=%u) '%s' '%s' utilized=%d\n", soap->level, id, ns?ns:"(null)", utilized));
-  n = strlen(id);
-  if (ns)
-    k = strlen(ns);
-  else
-    k = 0;
-  np = (struct soap_nlist*)SOAP_MALLOC(soap, sizeof(struct soap_nlist) + n + k + 1);
-  if (!np)
-  { soap->error = SOAP_EOM;
-    return NULL;
-  }
-  np->next = soap->nlist;
-  soap->nlist = np;
-  strcpy(np->id, id);
-  if (ns)
-    np->ns = strcpy(np->id + n + 1, ns);
-  else
-    np->ns = NULL;
-  np->level = soap->level;
-  np->index = utilized;
-  return np;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-static void
-soap_utilize_ns(struct soap *soap, const char *tag, size_t n)
-{ register struct soap_nlist *np = soap_lookup_ns(soap, tag, n);
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Utilizing namespace of '%s'\n", tag));
-  if (np)
-  { if (np->index == 0)
-      soap_push_ns(soap, np->id, np->ns, 1);
-  }
-  else if (strncmp(tag, "xml", 3))
-  { strncpy(soap->tmpbuf, tag, n);
-    soap->tmpbuf[n] = '\0';
-    soap_push_ns(soap, soap->tmpbuf, NULL, 1);
-  }
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_element(struct soap *soap, const char *tag, int id, const char *type)
-{
-#ifndef WITH_LEAN
-  register const char *s;
-#endif
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element begin tag='%s' id='%d' type='%s'\n", tag, id, type?type:SOAP_STR_EOS));
-#ifdef WITH_DOM
-#ifndef WITH_LEAN
-  if (soap->wsuid && soap_tagsearch(soap->wsuid, tag))
-  { int i;
-    for (s = tag, i = 0; *s && i < sizeof(soap->tag); s++, i++)
-      soap->tag[i] = *s == ':' ? '-' : *s;
-    soap->tag[sizeof(soap->tag) - 1] = '\0';
-    if (soap_set_attr(soap, "wsu:Id", soap->tag, 1))
-      return soap->error;
-  }
-#endif 
-  if (soap->part == SOAP_BEGIN_SECURITY && (soap->mode & SOAP_XML_CANONICAL) && !(soap->mode & SOAP_DOM_ASIS))
-  { register struct soap_nlist *np;
-    /* wsu:Id found: clear xmlns renderings, so re-emit them for exc-c14n */
-    for (np = soap->nlist; np; np = np->next)
-    { if (np->index == 2)
-        np->index = 0;
-    }
-  }
-  if (soap->mode & SOAP_XML_DOM)
-  { register struct soap_dom_element *elt = (struct soap_dom_element*)soap_malloc(soap, sizeof(struct soap_dom_element));
-    if (!elt)
-      return soap->error;
-    elt->soap = soap;
-    elt->next = NULL;
-    elt->prnt = soap->dom;
-    elt->name = soap_strdup(soap, tag);
-    elt->elts = NULL;
-    elt->atts = NULL;
-    elt->nstr = NULL;
-    elt->data = NULL;
-    elt->wide = NULL;
-    elt->node = NULL;
-    elt->type = 0;
-    elt->head = NULL;
-    elt->tail = NULL;
-    if (soap->dom)
-    { struct soap_dom_element *p = soap->dom->elts;
-      if (p)
-      { while (p->next)
-          p = p->next;
-        p->next = elt;
-      }
-      else
-        soap->dom->elts = elt;
-    }
-    soap->dom = elt;
-  }
-  else
-  {
-#endif
-    soap->level++;
-#ifndef WITH_LEAN
-    if (!soap->ns)
-    { if (!(soap->mode & SOAP_XML_CANONICAL)
-       && soap_send(soap, soap->prolog ? soap->prolog : "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"))
-        return soap->error;
-    }
-    else if (soap->mode & SOAP_XML_INDENT)
-    { if (soap->ns == 1 && soap_send_raw(soap, soap_indent, soap->level < sizeof(soap_indent) ? soap->level : sizeof(soap_indent) - 1))
-        return soap->error;
-      soap->body = 1;
-    }
-    if ((soap->mode & SOAP_XML_DEFAULTNS) && (s = strchr(tag, ':')))
-    { struct Namespace *ns = soap->local_namespaces;
-      size_t n = s - tag;
-      if (soap_send_raw(soap, "<", 1)
-       || soap_send(soap, s + 1))
-        return soap->error;
-      if (soap->nlist && !strncmp(soap->nlist->id, tag, n) && !soap->nlist->id[n])
-        ns = NULL;
-      for (; ns && ns->id; ns++)
-      { if (*ns->id && (ns->out || ns->ns) && !strncmp(ns->id, tag, n) && !ns->id[n])
-        { soap_push_ns(soap, ns->id, ns->out ? ns->out : ns->ns, 0);
-          if (soap_attribute(soap, "xmlns", ns->out ? ns->out : ns->ns))
-            return soap->error;
-          break;
-        }
-      }   
-    }
-    else
-#endif
-    if (soap_send_raw(soap, "<", 1)
-     || soap_send(soap, tag))
-      return soap->error;
-#ifdef WITH_DOM
-  }
-#endif
-  if (!soap->ns)
-  { struct Namespace *ns;
-    int k = -1;
-#ifndef WITH_LEAN
-    if ((soap->mode & SOAP_XML_DEFAULTNS))
-      k = 4; /* only produce the first four required entries */
-#endif
-    for (ns = soap->local_namespaces; ns && ns->id && k; ns++, k--)
-    { if (*ns->id && (ns->out || ns->ns))
-      { sprintf(soap->tmpbuf, "xmlns:%s", ns->id);
-        if (soap_attribute(soap, soap->tmpbuf, ns->out ? ns->out : ns->ns))
-          return soap->error;
-      }
-    }   
-  }
-  soap->ns = 1; /* namespace table control: ns = 0 or 2 to start, then 1 to stop dumping the table  */
-#ifndef WITH_LEAN
-  if (soap->mode & SOAP_XML_CANONICAL)
-  { const char *t = strchr(tag, ':');
-    if (t)
-      soap_utilize_ns(soap, tag, t - tag);
-  }
-#endif
-  if (id > 0)
-  { sprintf(soap->tmpbuf, "_%d", id);
-    if (soap_attribute(soap, "id", soap->tmpbuf))
-      return soap->error;
-  }
-  if (type && *type && (!(soap->mode & SOAP_XML_SEC) || soap->part == SOAP_IN_BODY))
-  { if (soap_attribute(soap, "xsi:type", type))
-      return soap->error;
-#ifndef WITH_LEAN
-    if (soap->mode & SOAP_XML_CANONICAL)
-    { const char *t = strchr(type, ':');
-      if (t)
-        soap_utilize_ns(soap, type, t - type);
-    }
-#endif
-  }
-  if (soap->null && soap->position > 0)
-  { register int i;
-    sprintf(soap->tmpbuf, "[%d", soap->positions[0]);
-    for (i = 1; i < soap->position; i++)
-      sprintf(soap->tmpbuf + strlen(soap->tmpbuf), ",%d", soap->positions[i]);
-    strcat(soap->tmpbuf, "]");
-    if (soap_attribute(soap, "SOAP-ENC:position", soap->tmpbuf))
-      return soap->error;
-  }
-  if (soap->mustUnderstand)
-  { if (soap->actor && *soap->actor)
-    { if (soap_attribute(soap, soap->version == 2 ? "SOAP-ENV:role" : "SOAP-ENV:actor", soap->actor))
-        return soap->error;
-    }
-    if (soap_attribute(soap, "SOAP-ENV:mustUnderstand", soap->version == 2 ? "true" : "1"))
-      return soap->error;
-    soap->mustUnderstand = 0;
-  }
-  if (soap->encoding)
-  { if (soap->encodingStyle && soap->local_namespaces)
-    { if (!*soap->encodingStyle)
-      { if (soap->local_namespaces[1].out)
-          soap->encodingStyle = soap->local_namespaces[1].out;
-        else
-          soap->encodingStyle = soap->local_namespaces[1].ns;
-      }
-      if (soap->encodingStyle && soap_attribute(soap, "SOAP-ENV:encodingStyle", soap->encodingStyle))
-        return soap->error;
-    }
-    soap->encoding = 0;
-  }
-  soap->null = 0;
-  soap->position = 0;
-  if (soap->part == SOAP_BEGIN_SECURITY && (soap->mode & SOAP_XML_CANONICAL))
-    soap->part = SOAP_IN_SECURITY;
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_element_begin_out(struct soap *soap, const char *tag, int id, const char *type)
-{ if (*tag == '-')
-    return SOAP_OK;
-  if (soap_element(soap, tag, id, type))
-    return soap->error;
-  return soap_element_start_end_out(soap, NULL);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-#ifndef HAVE_STRRCHR
-SOAP_FMAC1
-char*
-SOAP_FMAC2
-soap_strrchr(const char *s, int t)
-{ register char *r = NULL;
-  while (*s)
-    if (*s++ == t)
-      r = (char*)s - 1;
-  return r;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-#ifndef HAVE_STRTOL
-SOAP_FMAC1
-long
-SOAP_FMAC2
-soap_strtol(const char *s, char **t, int b)
-{ register long n = 0;
-  register int c;
-  while (*s > 0 && *s <= 32)
-    s++;
-  if (b == 10)
-  { short neg = 0;
-    if (*s == '-')
-    { s++;
-      neg = 1;
-    }
-    else if (*s == '+')
-      s++;
-    while ((c = *s) && c >= '0' && c <= '9')
-    { if (n >= 214748364 && (n > 214748364 || c >= '8'))
-        break;
-      n *= 10;
-      n += c - '0';
-      s++;
-    }
-    if (neg)
-      n = -n;
-  }
-  else /* assume b == 16 and value is always positive */
-  { while ((c = *s))
-    { if (c >= '0' && c <= '9')
-        c -= '0';
-      else if (c >= 'A' && c <= 'F')
-        c -= 'A' - 10;
-      else if (c >= 'a' && c <= 'f')
-        c -= 'a' - 10;
-      if (n > 0x07FFFFFF)
-        break;
-      n <<= 4;
-      n += c;
-      s++;
-    }
-  }
-  if (t)
-    *t = (char*)s;
-  return n;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-#ifndef HAVE_STRTOUL
-SOAP_FMAC1
-unsigned long
-SOAP_FMAC2
-soap_strtoul(const char *s, char **t, int b)
-{ unsigned long n = 0;
-  register int c;
-  while (*s > 0 && *s <= 32)
-    s++;
-  if (b == 10)
-  { if (*s == '+')
-      s++;
-    while ((c = *s) && c >= '0' && c <= '9')
-    { if (n >= 429496729 && (n > 429496729 || c >= '6'))
-        break;
-      n *= 10;
-      n += c - '0';
-      s++;
-    }
-  }
-  else /* b == 16 */
-  { while ((c = *s))
-    { if (c >= '0' && c <= '9')
-        c -= '0';
-      else if (c >= 'A' && c <= 'F')
-        c -= 'A' - 10;
-      else if (c >= 'a' && c <= 'f')
-        c -= 'a' - 10;
-      if (n > 0x0FFFFFFF)
-        break;
-      n <<= 4;
-      n += c;
-      s++;
-    }
-  }
-  if (t)
-    *t = (char*)s;
-  return n;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_array_begin_out(struct soap *soap, const char *tag, int id, const char *type, const char *offset)
-{ if (!type || !*type)
-    return soap_element_begin_out(soap, tag, id, NULL);
-  if (soap_element(soap, tag, id, "SOAP-ENC:Array"))
-    return soap->error;
-  if (soap->version == 2)
-  { const char *s;
-    s = soap_strrchr(type, '[');
-    if ((size_t)(s - type) < sizeof(soap->tmpbuf))
-    { strncpy(soap->tmpbuf, type, s - type);
-      soap->tmpbuf[s - type] = '\0';
-      if (soap_attribute(soap, "SOAP-ENC:itemType", soap->tmpbuf))
-        return soap->error;
-      if (s && (soap_attribute(soap, "SOAP-ENC:arraySize", s + 1)))
-        return soap->error;
-    }
-  }
-  else
-  { if (offset && soap_attribute(soap, "SOAP-ENC:offset", offset))
-      return soap->error;
-    if (soap_attribute(soap, "SOAP-ENC:arrayType", type))
-      return soap->error;
-  }
-#ifndef WITH_LEAN
-  if ((soap->mode & SOAP_XML_CANONICAL))
-  { const char *s = strchr(type, ':');
-    if (s)
-      soap_utilize_ns(soap, type, s - type);
-  }
-#endif
-  return soap_element_start_end_out(soap, NULL);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_element_start_end_out(struct soap *soap, const char *tag)
-{ register struct soap_attribute *tp;
-#ifndef WITH_LEAN
-  if (soap->mode & SOAP_XML_CANONICAL)
-  { struct soap_nlist *np;
-    for (tp = soap->attributes; tp; tp = tp->next)
-    { if (tp->visible && tp->name)
-      { const char *s = strchr(tp->name, ':');
-        if (s)
-          soap_utilize_ns(soap, tp->name, s - tp->name);
-      }
-    }
-    for (np = soap->nlist; np; np = np->next)
-    { if (np->index == 1 && np->ns)
-      { sprintf(soap->tmpbuf, "xmlns:%s", np->id);
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Enabling utilized binding (level=%u) %s='%s'\n", np->level, soap->tmpbuf, np->ns));
-        soap_set_attr(soap, soap->tmpbuf, np->ns, 1);
-        np->index = 2;
-      }
-    }
-  }
-#endif
-#ifdef WITH_DOM
-  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
-  { register struct soap_dom_attribute **att;
-    att = &soap->dom->atts;
-    for (tp = soap->attributes; tp; tp = tp->next)
-    { if (tp->visible)
-      { *att = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute));
-        if (!*att)
-          return soap->error;
-        (*att)->next = NULL;
-        (*att)->nstr = NULL;
-        (*att)->name = soap_strdup(soap, tp->name);
-        (*att)->data = soap_strdup(soap, tp->value);
-        (*att)->wide = NULL;
-        (*att)->soap = soap;
-        att = &(*att)->next;
-        tp->visible = 0;
-      }
-    }
-    return SOAP_OK;
-  }
-#endif
-  for (tp = soap->attributes; tp; tp = tp->next)
-  { if (tp->visible)
-    {
-#ifndef WITH_LEAN
-      const char *s;
-      if ((soap->mode & SOAP_XML_DEFAULTNS) && (s = strchr(tp->name, ':')))
-      { size_t n = s - tp->name;
-        if (soap->nlist && !strncmp(soap->nlist->id, tp->name, n) && !soap->nlist->id[n])
-          s++;
-        else
-          s = tp->name;
-        if (soap_send(soap, " ") || soap_send(soap, s))
-          return soap->error;
-      }
-      else
-#endif
-      if (soap_send(soap, " ") || soap_send(soap, tp->name))
-        return soap->error;
-      if (tp->visible == 2 && tp->value)
-        if (soap_send_raw(soap, "=\"", 2)
-         || soap_string_out(soap, tp->value, tp->flag)
-         || soap_send_raw(soap, "\"", 1))
-          return soap->error;
-      tp->visible = 0;
-    }
-  }
-  if (tag)
-  { 
-#ifndef WITH_LEAN
-    if (soap->mode & SOAP_XML_CANONICAL)
-    { if (soap_send_raw(soap, ">", 1)
-       || soap_element_end_out(soap, tag))
-        return soap->error;
-      return SOAP_OK;
-    }
-#endif
-    soap->level--;	/* decrement level just before /> */
-    if (soap_send_raw(soap, "/>", 2))
-      return soap->error;
-    return SOAP_OK;
-  }
-  return soap_send_raw(soap, ">", 1);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_element_end_out(struct soap *soap, const char *tag)
-{
-#ifndef WITH_LEAN
-  const char *s;
-#endif
-  if (*tag == '-')
-    return SOAP_OK;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element ending tag='%s'\n", tag));
-#ifdef WITH_DOM
-  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
-  { if (soap->dom->prnt)
-      soap->dom = soap->dom->prnt;
-    return SOAP_OK;
-  }
-#endif
-#ifndef WITH_LEAN
-  if (soap->mode & SOAP_XML_CANONICAL)
-    soap_pop_namespace(soap);
-  if (soap->mode & SOAP_XML_INDENT)
-  { if (!soap->body)
-    { if (soap_send_raw(soap, soap_indent, soap->level < sizeof(soap_indent) ? soap->level : sizeof(soap_indent) - 1))
-        return soap->error;
-    }
-    soap->body = 0;
-  }
-  if ((soap->mode & SOAP_XML_DEFAULTNS) && (s = strchr(tag, ':')))
-  { soap_pop_namespace(soap);
-    tag = s + 1;
-  }
-#endif
-  if (soap_send_raw(soap, "</", 2)
-   || soap_send(soap, tag))
-    return soap->error;
-  soap->level--;	/* decrement level just before > */
-  return soap_send_raw(soap, ">", 1);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_element_ref(struct soap *soap, const char *tag, int id, int href)
-{ register int n = 0;
-  const char *s = "href";
-  if (soap->version == 2)
-  { s = "SOAP-ENC:ref";
-    n = 1;
-  }
-  sprintf(soap->href, "#_%d", href);
-  return soap_element_href(soap, tag, id, s, soap->href + n);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_element_href(struct soap *soap, const char *tag, int id, const char *ref, const char *val)
-{ DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element '%s' reference %s='%s'\n", tag, ref, val));
-  if (soap_element(soap, tag, id, NULL)
-   || soap_attribute(soap, ref, val)
-   || soap_element_start_end_out(soap, tag))
-    return soap->error;
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_element_null(struct soap *soap, const char *tag, int id, const char *type)
-{ struct soap_attribute *tp;
-  for (tp = soap->attributes; tp; tp = tp->next)
-    if (tp->visible)
-      break;
-  if (tp || (soap->version == 2 && soap->position > 0) || id > 0 || (soap->mode & SOAP_XML_NIL))
-  { if (soap_element(soap, tag, id, type))
-      return soap->error;
-    if (!tp && soap_attribute(soap, "xsi:nil", "true"))
-      return soap->error;
-    return soap_element_start_end_out(soap, tag);
-  }
-  soap->null = 1;
-  soap->position = 0;
-  soap->mustUnderstand = 0;
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_element_id(struct soap *soap, const char *tag, int id, const void *p, const struct soap_array *a, int n, const char *type, int t) 
-{ if (!p)
-  { soap_element_null(soap, tag, id, type);
-    return -1;
-  }
-#ifndef WITH_NOIDREF
-  if (soap->mode & SOAP_XML_TREE)
-    return 0;
-  if (id < 0)
-  { struct soap_plist *pp;
-    if (a)
-      id = soap_array_pointer_lookup(soap, p, a, n, t, &pp);
-    else
-      id = soap_pointer_lookup(soap, p, t, &pp);
-    if (id)
-    { if (soap_is_embedded(soap, pp))
-      { soap_element_ref(soap, tag, 0, id);
-        return -1;
-      }
-      if (soap_is_single(soap, pp))
-        return 0;
-      soap_set_embedded(soap, pp);
-    }
-  }
-  return id;
-#else
-  return 0;
-#endif
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_element_result(struct soap *soap, const char *tag)
-{ if (soap->version == 2 && soap->encodingStyle)
-  { if (soap_element(soap, "SOAP-RPC:result", 0, NULL)
-     || soap_attribute(soap, "xmlns:SOAP-RPC", soap_rpc)
-     || soap_element_start_end_out(soap, NULL)
-     || soap_string_out(soap, tag, 0)
-     || soap_element_end_out(soap, "SOAP-RPC:result"))
-      return soap->error;
-  }
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_check_result(struct soap *soap, const char *tag)
-{ if (soap->version == 2 && soap->encodingStyle)
-  { soap_instring(soap, ":result", NULL, NULL, 0, 2, -1, -1);
-    /* just ignore content for compliance reasons, but should compare tag to element's QName value? */
-  }
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_attribute(struct soap *soap, const char *name, const char *value)
-{ 
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Attribute '%s'='%s'\n", name, value));
-#ifdef WITH_DOM
-  if ((soap->mode & SOAP_XML_DOM) && !(soap->mode & SOAP_XML_CANONICAL) && soap->dom)
-  { register struct soap_dom_attribute *a = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute));
-    if (!a)
-      return soap->error;
-    a->next = soap->dom->atts;
-    a->nstr = NULL;
-    a->name = soap_strdup(soap, name);
-    a->data = soap_strdup(soap, value);
-    a->wide = NULL;
-    a->soap = soap;
-    soap->dom->atts = a;
-    return SOAP_OK;
-  }
-#endif
-#ifndef WITH_LEAN
-  if (soap->mode & SOAP_XML_CANONICAL)
-  { /* TODO: consider using this code to handle default namespace bindings
-    if (!strncmp(name, "xmlns", 5) && (name[5] == ':' || name[5] == '\0'))
-    { if (name[5] == ':')
-        soap_push_ns(soap, name + 6, value, 0);
-      else
-        soap_push_ns(soap, "", value, 0);
-    }
-    */
-    if (!strncmp(name, "xmlns:", 6))
-      soap_push_ns(soap, name + 6, value, 0);
-    else if (soap_set_attr(soap, name, value, 1))
-      return soap->error;
-  }
-  else
-#endif
-  { if (soap_send(soap, " ") || soap_send(soap, name))
-      return soap->error;
-    if (value)
-      if (soap_send_raw(soap, "=\"", 2)
-       || soap_string_out(soap, value, 1)
-       || soap_send_raw(soap, "\"", 1))
-        return soap->error;
-  }
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_element_begin_in(struct soap *soap, const char *tag, int nillable, const char *type)
-{ if (!soap_peek_element(soap))
-  { if (soap->other)
-      return soap->error = SOAP_TAG_MISMATCH;
-    if (tag && *tag == '-')
-      return SOAP_OK;
-    if (!(soap->error = soap_match_tag(soap, soap->tag, tag)))
-    { soap->peeked = 0;
-      if (type && *soap->type && soap_match_tag(soap, soap->type, type))
-        return soap->error = SOAP_TYPE;
-      if (!nillable && soap->null && (soap->mode & SOAP_XML_STRICT))
-        return soap->error = SOAP_NULL;
-      if (soap->body)
-        soap->level++;
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Begin element found (level=%u) '%s'='%s'\n", soap->level, soap->tag, tag?tag:SOAP_STR_EOS ));
-    }
-  }
-  else if (soap->error == SOAP_NO_TAG && tag && *tag == '-')
-    soap->error = SOAP_OK;
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_element_end_in(struct soap *soap, const char *tag)  
-{ register soap_wchar c;
-  register char *s;
-  register int n = 0;
-  if (tag && *tag == '-')
-    return SOAP_OK;
-  if (soap->error == SOAP_NO_TAG)
-    soap->error = SOAP_OK;
-#ifdef WITH_DOM
-  /* this whitespace or mixed content is not insignificant for DOM */
-  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
-  { if (!soap->peeked && !soap_string_in(soap, 3, -1, -1))
-      return soap->error;
-    if (soap->dom->prnt)
-      soap->dom = soap->dom->prnt;
-  }
-#endif
-  if (soap->peeked)
-  { if (*soap->tag)
-      n++;
-    soap->peeked = 0;
-  }
-  do
-  { while (((c = soap_get(soap)) != SOAP_TT))
-    { if ((int)c == EOF)
-        return soap->error = SOAP_EOF;
-      if (c == SOAP_LT)
-        n++;
-      else if (c == '/')
-      { c = soap_get(soap);
-        if (c == SOAP_GT)
-          n--;
-        else
-          soap_unget(soap, c);
-      }
-    }
-  } while (n--);
-  s = soap->tag;
-  n = sizeof(soap->tag);
-  while (soap_notblank(c = soap_get(soap)))
-  { if (--n > 0)
-      *s++ = (char)c;
-  }
-  *s = '\0';
-  if ((int)c == EOF)
-    return soap->error = SOAP_EOF;
-  while (soap_blank(c))
-    c = soap_get(soap);
-  if (c != SOAP_GT)
-    return soap->error = SOAP_SYNTAX_ERROR;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End element found (level=%u) '%s'='%s'\n", soap->level, soap->tag, tag?tag:SOAP_STR_EOS));
-#ifndef WITH_LEAN
-  if (tag && (soap->mode & SOAP_XML_STRICT))
-  { soap_pop_namespace(soap);
-    if (soap_match_tag(soap, soap->tag, tag))
-    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "End element tag name does not match\n"));
-      return soap->error = SOAP_SYNTAX_ERROR;
-    }
-  }
-#endif
-  soap->level--;
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-const char *
-SOAP_FMAC2
-soap_attr_value(struct soap *soap, const char *name, int flag)
-{ register struct soap_attribute *tp;
-  if (*name == '-')
-    return SOAP_STR_EOS;
-  for (tp = soap->attributes; tp; tp = tp->next)
-  { if (tp->visible && !soap_match_tag(soap, tp->name, name))
-      break;
-  }
-  if (tp)
-  { if (flag == 2 && (soap->mode & SOAP_XML_STRICT))
-      soap->error = SOAP_PROHIBITED;
-    else
-      return tp->value;
-  }
-  else if (flag == 1 && (soap->mode & SOAP_XML_STRICT))
-    soap->error = SOAP_REQUIRED;
-  else
-    soap->error = SOAP_OK;
-  return NULL;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_set_attr(struct soap *soap, const char *name, const char *value, int flag)
-{ register struct soap_attribute *tp;
-  if (*name == '-')
-    return SOAP_OK;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Set attribute %s='%s'\n", name, value?value:SOAP_STR_EOS));
-  for (tp = soap->attributes; tp; tp = tp->next)
-  { if (!strcmp(tp->name, name))
-      break;
-  }
-  if (!tp)
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Allocate attribute %s\n", name));
-    if (!(tp = (struct soap_attribute*)SOAP_MALLOC(soap, sizeof(struct soap_attribute) + strlen(name))))
-      return soap->error = SOAP_EOM;
-    tp->ns = NULL;
-#ifndef WITH_LEAN
-    if ((soap->mode & SOAP_XML_CANONICAL))
-    { struct soap_attribute **tpp = &soap->attributes;
-      const char *s = strchr(name, ':');
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inserting attribute %s for c14n\n", name))
-      if (!strncmp(name, "xmlns", 5))
-      { for (; *tpp; tpp = &(*tpp)->next)
-          if (strncmp((*tpp)->name, "xmlns", 5) || strcmp((*tpp)->name + 5, name + 5) > 0)
-            break;
-      }
-      else if (!s)
-      { for (; *tpp; tpp = &(*tpp)->next)
-          if (strncmp((*tpp)->name, "xmlns", 5) && ((*tpp)->ns || strcmp((*tpp)->name, name) > 0))
-            break;
-      }
-      else
-      { int k;
-        for (; *tpp; tpp = &(*tpp)->next)
-        { if (!strncmp((*tpp)->name, "xmlns:", 6) && !strncmp((*tpp)->name + 6, name, s - name) && !(*tpp)->name[6 + s - name])
-          { if (!tp->ns)
-            { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Canonicalization: prefix %s=%p (%s)\n", name, (*tpp)->ns, (*tpp)->ns));
-              tp->ns = (*tpp)->ns;
-            }
-          }
-          else if (strncmp((*tpp)->name, "xmlns", 5) && (*tpp)->ns && tp->ns && ((k = strcmp((*tpp)->ns, tp->ns)) > 0 || (!k && strcmp((*tpp)->name, name) > 0)))
-            break;
-        }
-      }
-      tp->next = *tpp;
-      *tpp = tp;
-    }
-    else
-#endif
-    { tp->next = soap->attributes;
-      soap->attributes = tp;
-    }
-    strcpy(tp->name, name);
-    tp->value = NULL;
-  }
-  else if (tp->visible)
-  { return SOAP_OK;
-  }
-  else if (value && tp->value && tp->size <= strlen(value))
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Free attribute value of %s (free %p)\n", name, tp->value));
-    SOAP_FREE(soap, tp->value);
-    tp->value = NULL;
-    tp->ns = NULL;
-  }
-  if (value)
-  { if (!tp->value)
-    { tp->size = strlen(value) + 1;
-      if (!(tp->value = (char*)SOAP_MALLOC(soap, tp->size)))
-        return soap->error = SOAP_EOM;
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Allocate attribute value for %s (%p)\n", tp->name, tp->value));
-    }
-    strcpy(tp->value, value);
-    if (!strncmp(tp->name, "xmlns:", 6))
-      tp->ns = tp->value;
-    tp->visible = 2;
-    tp->flag = flag;
-#ifndef WITH_LEAN
-    if (soap->part != SOAP_IN_SECURITY && !strcmp(name, "wsu:Id"))
-    { soap->part = SOAP_BEGIN_SECURITY;
-      strncpy(soap->id, value, sizeof(soap->id));
-      soap->id[sizeof(soap->id)-1] = '\0';
-    }
-#endif
-  }
-  else
-    tp->visible = 1;
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_clr_attr(struct soap *soap)
-{ register struct soap_attribute *tp;
-#ifndef WITH_LEAN
-  if ((soap->mode & SOAP_XML_CANONICAL))
-  { while (soap->attributes)
-    { tp = soap->attributes->next;
-      if (soap->attributes->value)
-        SOAP_FREE(soap, soap->attributes->value);
-      SOAP_FREE(soap, soap->attributes);
-      soap->attributes = tp;
-    }
-  }
-  else
-#endif
-  { for (tp = soap->attributes; tp; tp = tp->next)
-      tp->visible = 0;
-  }
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-static int
-soap_getattrval(struct soap *soap, char *s, size_t n, soap_wchar d)
-{ register size_t i;
-  for (i = 0; i < n; i++)
-  { register soap_wchar c = soap_get(soap);
-    switch (c)
-    {
-    case SOAP_TT:
-      *s++ = '<';
-      soap_unget(soap, '/');
-      break;
-    case SOAP_LT:
-      *s++ = '<';
-      break;
-    case SOAP_GT:
-      if (d == ' ')
-      { soap_unget(soap, c);
-        *s = '\0';
-        return SOAP_OK;
-      }
-      *s++ = '>';
-      break;
-    case SOAP_QT:
-      if (c == d)
-      { *s = '\0';
-        return SOAP_OK;
-      }
-      *s++ = '"';
-      break;
-    case SOAP_AP:
-      if (c == d)
-      { *s = '\0';
-        return SOAP_OK;
-      }
-      *s++ = '\'';
-      break;
-    case '\t':
-    case '\n':
-    case '\r':
-    case ' ':
-    case '/':
-      if (d == ' ')
-      { soap_unget(soap, c);
-        *s = '\0';
-        return SOAP_OK;
-      }
-    default:
-      if ((int)c == EOF)
-        return soap->error = SOAP_EOF;
-      *s++ = (char)c;
-    }
-  }
-  return soap->error = SOAP_EOM;
-}
-#endif
-
-/******************************************************************************/
-#ifdef WITH_FAST
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_store_lab(struct soap *soap, const char *s, size_t n)
-{ soap->labidx = 0;
-  return soap_append_lab(soap, s, n);
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifdef WITH_FAST
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_append_lab(struct soap *soap, const char *s, size_t n)
-{ if (soap->labidx + n >= soap->lablen)
-  { register char *t = soap->labbuf;
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Enlarging look-aside buffer to append data, old size=%lu", (unsigned long)soap->lablen));
-    if (soap->lablen == 0)
-      soap->lablen = SOAP_LABLEN;
-    while (soap->labidx + n >= soap->lablen)
-      soap->lablen <<= 1;
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, ", new size=%lu\n", (unsigned long)soap->lablen));
-    soap->labbuf = (char*)SOAP_MALLOC(soap, soap->lablen);
-    if (!soap->labbuf)
-    { if (t)
-        SOAP_FREE(soap, t);
-      return soap->error = SOAP_EOM;
-    }
-    if (t)
-    { memcpy(soap->labbuf, t, soap->labidx);
-      SOAP_FREE(soap, t);
-    }
-  }
-  if (s)
-  { memcpy(soap->labbuf + soap->labidx, s, n);
-    soap->labidx += n;
-  }
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_peek_element(struct soap *soap)
-{
-#ifdef WITH_DOM
-  register struct soap_dom_attribute **att = NULL;
-  register char *lead = NULL;
-#endif
-  register struct soap_attribute *tp, *tq = NULL;
-  register const char *t;
-  register char *s;
-  register soap_wchar c;
-  register int i;
-  if (soap->peeked)
-  { if (!*soap->tag)
-      return soap->error = SOAP_NO_TAG;
-    return SOAP_OK;
-  }
-  soap->peeked = 1;
-  soap->id[0] = '\0';
-  soap->href[0] = '\0';
-  soap->type[0] = '\0';
-  soap->arrayType[0] = '\0';
-  soap->arraySize[0] = '\0';
-  soap->arrayOffset[0] = '\0';
-  soap->other = 0;
-  soap->root = -1;
-  soap->position = 0;
-  soap->null = 0;
-  soap->mustUnderstand = 0;
-  /* skip BOM */
-  if ((c = soap_getchar(soap)) != 0xEF || (c = soap_get1(soap)) != 0xBB || (c = soap_get1(soap)) != 0xBF)
-    soap_unget(soap, c);
-  c = soap_get(soap);
-#ifdef WITH_DOM
-  /* whitespace leading to start tag is not insignificant for DOM */
-  if (soap_blank(c))
-  { soap->labidx = 0;
-    do
-    { if (soap_append_lab(soap, NULL, 0))
-        return soap->error;
-      s = soap->labbuf + soap->labidx;
-      i = soap->lablen - soap->labidx;
-      soap->labidx = soap->lablen;
-      while (soap_blank(c) && i--)
-      { *s++ = c;
-        c = soap_get(soap);
-      }
-    }
-    while (soap_blank(c));
-    *s = '\0';
-    if (*soap->labbuf)
-      lead = soap->labbuf;
-  }
-#else
-  /* skip space */
-  while (soap_blank(c))
-    c = soap_get(soap);
-#endif
-  if (c != SOAP_LT)
-  { *soap->tag = '\0';
-    if ((int)c == EOF)
-      return soap->error = SOAP_EOF;
-    soap_unget(soap, c);
-#ifdef WITH_DOM
-    /* whitespace leading to end tag is not insignificant for DOM */
-    if ((soap->mode & SOAP_XML_DOM) && soap->dom)
-      soap->dom->tail = soap_strdup(soap, lead);
-#endif
-    return soap->error = SOAP_NO_TAG;
-  }
-  s = soap->tag;
-  do c = soap_get1(soap);
-  while (soap_blank(c));
-  i = sizeof(soap->tag);
-  while (c != '>' && c != '/' && soap_notblank(c) && (int)c != EOF)
-  { if (--i > 0)
-      *s++ = (char)c;
-    c = soap_get1(soap);
-  }
-  while (soap_blank(c))
-    c = soap_get1(soap);
-  *s = '\0';
-#ifdef WITH_DOM
-  if (soap->mode & SOAP_XML_DOM)
-  { register struct soap_dom_element *elt;
-    elt = (struct soap_dom_element*)soap_malloc(soap, sizeof(struct soap_dom_element));
-    if (!elt)
-      return soap->error;
-    elt->next = NULL;
-    elt->nstr = NULL;
-    elt->name = soap_strdup(soap, soap->tag);
-    elt->prnt = soap->dom;
-    elt->elts = NULL;
-    elt->atts = NULL;
-    elt->data = NULL;
-    elt->wide = NULL;
-    elt->type = 0;
-    elt->node = NULL;
-    elt->head = soap_strdup(soap, lead);
-    elt->tail = NULL;
-    elt->soap = soap;
-    if (soap->dom)
-    { struct soap_dom_element *p = soap->dom->elts;
-      if (p)
-      { while (p->next)
-          p = p->next;
-        p->next = elt;
-      }
-      else
-        soap->dom->elts = elt;
-    }
-    soap->dom = elt;
-    att = &elt->atts;
-  }
-#endif
-  soap_pop_namespace(soap);
-  for (tp = soap->attributes; tp; tp = tp->next)
-    tp->visible = 0;
-  while ((int)c != EOF && c != '>' && c != '/')
-  { s = soap->tmpbuf;
-    i = sizeof(soap->tmpbuf);
-    while (c != '=' && c != '>' && c != '/' && soap_notblank(c) && (int)c != EOF)
-    { if (--i > 0)
-        *s++ = (char)c;
-      c = soap_get1(soap);
-    }
-    *s = '\0';
-    if (i == sizeof(soap->tmpbuf))
-      return soap->error = SOAP_SYNTAX_ERROR;
-#ifdef WITH_DOM
-    /* add attribute name to dom */
-    if (att)
-    { *att = (struct soap_dom_attribute*)soap_malloc(soap, sizeof(struct soap_dom_attribute));
-       if (!*att)
-         return soap->error;
-       (*att)->next = NULL;
-       (*att)->nstr = NULL;
-       (*att)->name = soap_strdup(soap, soap->tmpbuf);
-       (*att)->data = NULL;
-       (*att)->wide = NULL;
-       (*att)->soap = soap;
-    }
-#endif
-    if (!strncmp(soap->tmpbuf, "xmlns", 5))
-    { if (soap->tmpbuf[5] == ':')
-        t = soap->tmpbuf + 6;
-      else if (soap->tmpbuf[5])
-        t = NULL;
-      else
-        t = SOAP_STR_EOS;
-    }
-    else
-      t = NULL;
-    tq = NULL;
-    for (tp = soap->attributes; tp; tq = tp, tp = tp->next)
-    { if (!SOAP_STRCMP(tp->name, soap->tmpbuf))
-        break;
-    }
-    if (!tp)
-    { tp = (struct soap_attribute*)SOAP_MALLOC(soap, sizeof(struct soap_attribute) + strlen(soap->tmpbuf));
-      if (!tp)
-        return soap->error = SOAP_EOM;
-      strcpy(tp->name, soap->tmpbuf);
-      tp->value = NULL;
-      tp->size = 0;
-      /* if attribute name is qualified, append it to the end of the list */
-      if (tq && strchr(soap->tmpbuf, ':'))
-      { tq->next = tp;
-        tp->next = NULL;
-      }
-      else
-      { tp->next = soap->attributes;
-        soap->attributes = tp;
-      }
-    }
-    while (soap_blank(c))
-      c = soap_get1(soap);
-    if (c == '=')
-    { do c = soap_getutf8(soap);
-      while (soap_blank(c));
-      if (c != SOAP_QT && c != SOAP_AP)
-      { soap_unget(soap, c);
-        c = ' '; /* blank delimiter */
-      }
-      if (soap_getattrval(soap, tp->value, tp->size, c))
-      {
-#ifdef WITH_FAST
-        if (soap->error != SOAP_EOM)
-          return soap->error;
-        soap->error = SOAP_OK;
-        if (soap_store_lab(soap, tp->value, tp->size))
-          return soap->error;
-        if (tp->value)
-          SOAP_FREE(soap, tp->value);
-        for (;;)
-        { if (soap_getattrval(soap, soap->labbuf + soap->labidx, soap->lablen - soap->labidx, c))
-          { if (soap->error != SOAP_EOM)
-              return soap->error;
-            soap->error = SOAP_OK;
-            soap->labidx = soap->lablen;
-            if (soap_append_lab(soap, NULL, 0))
-              return soap->error;
-          }
-          else
-            break;
-        }
-        if (soap->labidx)
-          tp->size = soap->lablen;
-        else
-        { tp->size = strlen(soap->labbuf) + 1;
-          if (tp->size < SOAP_LABLEN)
-            tp->size = SOAP_LABLEN;
-        }
-        if (!(tp->value = (char*)SOAP_MALLOC(soap, tp->size)))
-          return soap->error = SOAP_EOM;
-        strcpy(tp->value, soap->labbuf);
-#else
-        size_t n;
-        if (soap->error != SOAP_EOM)
-          return soap->error;
-        soap->error = SOAP_OK;
-        if (soap_new_block(soap) == NULL)
-          return soap->error;
-        for (;;)
-        { if (!(s = (char*)soap_push_block(soap, NULL, SOAP_BLKLEN)))
-            return soap->error;
-          if (soap_getattrval(soap, s, SOAP_BLKLEN, c))
-          { if (soap->error != SOAP_EOM)
-              return soap->error;
-            soap->error = SOAP_OK;
-          }
-          else
-            break;
-        }
-        n = tp->size + soap->blist->size;
-        if (!(s = (char*)SOAP_MALLOC(soap, n)))
-          return soap->error = SOAP_EOM;
-        if (tp->value)
-        { memcpy(s, tp->value, tp->size);
-          SOAP_FREE(soap, tp->value);
-        }
-        soap_save_block(soap, NULL, s + tp->size, 0);
-        tp->value = s;
-        tp->size = n;
-#endif
-      }
-      do c = soap_get1(soap);
-      while (soap_blank(c));
-      tp->visible = 2; /* seen this attribute w/ value */
-#ifdef WITH_DOM
-      if (att)
-        (*att)->data = soap_strdup(soap, tp->value);
-#endif
-    }
-    else
-      tp->visible = 1; /* seen this attribute w/o value */
-#ifdef WITH_DOM
-    if (att)
-      att = &(*att)->next;
-#endif
-    if (t && tp->value)
-    { if (soap_push_namespace(soap, t, tp->value) == NULL)
-        return soap->error;
-    }
-  }
-#ifdef WITH_DOM
-  if (att)
-  { soap->dom->nstr = soap_current_namespace(soap, soap->tag);
-    for (att = &soap->dom->atts; *att; att = &(*att)->next)
-      (*att)->nstr = soap_current_namespace(soap, (*att)->name);
-  }
-#endif
-  if ((int)c == EOF)
-    return soap->error = SOAP_EOF;
-  if (!(soap->body = (c != '/')))
-    do c = soap_get1(soap);
-    while (soap_blank(c));
-#ifdef WITH_DOM
-  if (soap->mode & SOAP_XML_DOM)
-  { if (!soap->body && soap->dom->prnt)
-      soap->dom = soap->dom->prnt;
-  }
-#endif
-  for (tp = soap->attributes; tp; tp = tp->next)
-  { if (tp->visible && tp->value)
-    { 
-#ifndef WITH_NOIDREF
-      if (!strcmp(tp->name, "id"))
-      { if ((soap->version > 0 && !(soap->mode & SOAP_XML_TREE))
-         || (soap->mode & SOAP_XML_GRAPH))
-        { *soap->id = '#';
-          strncpy(soap->id + 1, tp->value, sizeof(soap->id) - 2);
-          soap->id[sizeof(soap->id)-1] = '\0';
-        }
-      }
-      else if (!strcmp(tp->name, "href"))
-      { if (soap->version == 1
-         || (soap->mode & SOAP_XML_GRAPH)
-         || (soap->mode & SOAP_ENC_MTOM)
-         || (soap->mode & SOAP_ENC_DIME))
-        { strncpy(soap->href, tp->value, sizeof(soap->href) - 1);
-          soap->href[sizeof(soap->href)-1] = '\0';
-        }
-      }
-      else
-#endif
-      if (!soap_match_tag(soap, tp->name, "xsi:type"))
-      { strncpy(soap->type, tp->value, sizeof(soap->type) - 1);
-        soap->type[sizeof(soap->type)-1] = '\0';
-      }
-      else if ((!soap_match_tag(soap, tp->name, "xsi:null")
-             || !soap_match_tag(soap, tp->name, "xsi:nil"))
-            && (!strcmp(tp->value, "1")
-             || !strcmp(tp->value, "true")))
-      { soap->null = 1;
-      }
-      else if (soap->version == 1)
-      { if (!soap_match_tag(soap, tp->name, "SOAP-ENC:arrayType"))
-        { s = soap_strrchr(tp->value, '[');
-          if (s && (size_t)(s - tp->value) < sizeof(soap->arrayType))
-          { strncpy(soap->arrayType, tp->value, s - tp->value);
-            soap->arrayType[s - tp->value] = '\0';
-            strncpy(soap->arraySize, s, sizeof(soap->arraySize) - 1);
-          }
-          else
-            strncpy(soap->arrayType, tp->value, sizeof(soap->arrayType) - 1);
-          soap->arraySize[sizeof(soap->arrayType)-1] = '\0';
-          soap->arrayType[sizeof(soap->arrayType)-1] = '\0';
-        }
-        else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:offset"))
-          strncpy(soap->arrayOffset, tp->value, sizeof(soap->arrayOffset));
-        else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:position"))
-          soap->position = soap_getposition(tp->value, soap->positions);
-        else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:root"))
-          soap->root = ((!strcmp(tp->value, "1") || !strcmp(tp->value, "true")));
-        else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:mustUnderstand")
-              && (!strcmp(tp->value, "1") || !strcmp(tp->value, "true")))
-          soap->mustUnderstand = 1;
-        else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:actor"))
-        { if ((!soap->actor || strcmp(soap->actor, tp->value))
-           && strcmp(tp->value, "http://schemas.xmlsoap.org/soap/actor/next"))
-            soap->other = 1;
-        }
-      }
-      else if (soap->version == 2)
-      {
-#ifndef WITH_NOIDREF
-        if (!strcmp(tp->name, "ref")
-         || !soap_match_tag(soap, tp->name, "SOAP-ENC:ref"))
-        { *soap->href = '#';
-          strncpy(soap->href + 1, tp->value, sizeof(soap->href) - 2);
-          soap->href[sizeof(soap->href)-1] = '\0';
-        }
-        else
-#endif
-	if (!soap_match_tag(soap, tp->name, "SOAP-ENC:itemType"))
-          strncpy(soap->arrayType, tp->value, sizeof(soap->arrayType) - 1);
-        else if (!soap_match_tag(soap, tp->name, "SOAP-ENC:arraySize"))
-          strncpy(soap->arraySize, tp->value, sizeof(soap->arraySize) - 1);
-        else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:mustUnderstand")
-              && (!strcmp(tp->value, "1") || !strcmp(tp->value, "true")))
-          soap->mustUnderstand = 1;
-        else if (!soap_match_tag(soap, tp->name, "SOAP-ENV:role"))
-        { if ((!soap->actor || strcmp(soap->actor, tp->value))
-           && strcmp(tp->value, "http://www.w3.org/2003/05/soap-envelope/role/next"))
-            soap->other = 1;
-        }
-      }
-      else
-      { if (!soap_match_tag(soap, tp->name, "wsdl:required") && !strcmp(tp->value, "true"))
-          soap->mustUnderstand = 1;
-      }
-    }
-  }
-  return soap->error = SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_retry(struct soap *soap)
-{ soap->error = SOAP_OK;
-  soap_revert(soap);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_revert(struct soap *soap)
-{ if (!soap->peeked)
-  { soap->peeked = 1;
-    if (soap->body)
-      soap->level--;
-  }
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Reverting last element (level=%u)\n", soap->level));
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_string_out(struct soap *soap, const char *s, int flag)
-{ register const char *t;
-  register soap_wchar c;
-  register soap_wchar mask = (soap_wchar)0xFFFFFF80UL;
-#ifdef WITH_DOM
-  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
-  { soap->dom->data = soap_strdup(soap, s);
-    return SOAP_OK;
-  }
-#endif
-  if (flag == 2 || soap->mode & SOAP_C_UTFSTRING)
-    mask = 0;
-  t = s;
-  while ((c = *t++))
-  { switch (c)
-    { 
-    case 0x09:
-      if (flag)
-      { if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&#x9;", 5))
-          return soap->error;
-        s = t;
-      }
-      break;
-    case 0x0A:
-      if (flag || !(soap->mode & SOAP_XML_CANONICAL))
-      { if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&#xA;", 5))
-          return soap->error;
-        s = t;
-      }
-      break;
-    case 0x0D:
-      if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&#xD;", 5))
-        return soap->error;
-      s = t;
-      break;
-    case '&':
-      if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&amp;", 5))
-        return soap->error;
-      s = t;
-      break;
-    case '<':
-      if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&lt;", 4))
-        return soap->error;
-      s = t;
-      break;
-    case '>':
-      if (!flag)
-      { if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&gt;", 4))
-          return soap->error;
-        s = t;
-      }
-      break;
-    case '"':
-      if (flag)
-      { if (soap_send_raw(soap, s, t - s - 1) || soap_send_raw(soap, "&quot;", 6))
-          return soap->error;
-        s = t;
-      }
-      break;
-    default:
-#ifndef WITH_LEANER
-#ifdef HAVE_MBTOWC
-      if (soap->mode & SOAP_C_MBSTRING)
-      { wchar_t wc;
-        register int m = mbtowc(&wc, t - 1, MB_CUR_MAX);
-        if (m > 0 && wc != c)
-        { if (soap_send_raw(soap, s, t - s - 1) || soap_pututf8(soap, wc))
-            return soap->error;
-          s = t += m - 1;
-          continue;
-        }
-      }
-#endif
-#endif
-#ifndef WITH_NOSTRINGTOUTF8
-      if ((c & mask) || !(c & 0xFFFFFFE0UL))
-      { if (soap_send_raw(soap, s, t - s - 1) || soap_pututf8(soap, (unsigned char)c))
-          return soap->error;
-        s = t;
-      }
-#endif
-    }
-  }
-  return soap_send_raw(soap, s, t - s - 1);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-char *
-SOAP_FMAC2
-soap_string_in(struct soap *soap, int flag, long minlen, long maxlen)
-{ register char *s;
-  char *t = NULL;
-  register size_t i;
-  register long l = 0;
-  register int n = 0, f = 0, m = 0;
-  register soap_wchar c;
-#if !defined(WITH_LEANER) && defined(HAVE_WCTOMB)
-  char buf[MB_LEN_MAX > 8 ? MB_LEN_MAX : 8];
-#else
-  char buf[8];
-#endif
-  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Reading string content, flag=%d\n", flag));
-  if (soap->peeked && *soap->tag)
-  {
-#ifndef WITH_LEAN
-    struct soap_attribute *tp;
-    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String content includes tag '%s' and attributes\n", soap->tag));
-    t = soap->tmpbuf;
-    *t = '<';
-    t[sizeof(soap->tmpbuf)-1] = '\0';
-    strncpy(t + 1, soap->tag, sizeof(soap->tmpbuf) - 2);
-    t += strlen(t);
-    for (tp = soap->attributes; tp; tp = tp->next)
-    { if (tp->visible)
-      { if (t >= soap->tmpbuf + sizeof(soap->tmpbuf) - 2)
-          break;
-        *t++ = ' ';
-        strcpy(t, tp->name);
-        t += strlen(t);
-        if (t >= soap->tmpbuf + sizeof(soap->tmpbuf) - 2)
-          break; /* too many or large attribute values */
-        if (tp->value)
-        { *t++ = '=';
-          *t++ = '"';
-          strcpy(t, tp->value);
-          t += strlen(t);
-          *t++ = '"';
-        }
-      }
-    }
-    if (!soap->body)
-      *t++ = '/';
-    *t++ = '>';
-    *t = '\0';
-    t = soap->tmpbuf;
-    m = (int)strlen(soap->tmpbuf);
-#endif
-    if (soap->body)
-      n = 1;
-    f = 1;
-    soap->peeked = 0;
-  }
-#ifdef WITH_CDATA
-  if (!flag)
-  { register int state = 0;
-#ifdef WITH_FAST
-    soap->labidx = 0;			/* use look-aside buffer */
-#else
-    if (soap_new_block(soap) == NULL)
-      return NULL;
-#endif
-    for (;;)
-    { 
-#ifdef WITH_FAST
-      register size_t k;
-      if (soap_append_lab(soap, NULL, 0))	/* allocate more space in look-aside buffer if necessary */
-        return NULL;
-      s = soap->labbuf + soap->labidx;	/* space to populate */
-      k = soap->lablen - soap->labidx;	/* number of bytes available */
-      soap->labidx = soap->lablen;	/* claim this space */
-#else
-      register size_t k = SOAP_BLKLEN;
-      if (!(s = (char*)soap_push_block(soap, NULL, k)))
-        return NULL;
-#endif
-      for (i = 0; i < k; i++)
-      { if (m > 0)
-        { *s++ = *t++;	/* copy multibyte characters */
-          m--;
-          continue;
-        }
-        c = soap_getchar(soap);
-        if ((int)c == EOF)
-          goto end;
-        if (c >= 0x80 && state != 1 && !(soap->mode & SOAP_ENC_LATIN))
-        { soap_unget(soap, c);
-          c = soap_getutf8(soap);
-          if (soap->mode & SOAP_C_UTFSTRING)
-          { c &= 0x7FFFFFFF;
-            t = buf;
-            if (c < 0x0800)
-              *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
-            else
-            { if (c < 0x010000)
-                *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
-              else
-              { if (c < 0x200000)
-                  *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
-                else
-                { if (c < 0x04000000)
-                    *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
-                  else
-                  { *t++ = (char)(0xFC | ((c >> 30) & 0x01));
-                    *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
-                  }
-                  *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
-                }     
-                *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
-              }
-              *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
-            }
-            *t++ = (char)(0x80 | (c & 0x3F));
-            m = (int)(t - buf) - 1;
-            t = buf;
-            *s++ = *t++;
-            continue;
-          }
-        }
-        switch (state)
-        { case 1:
-            if (c == ']')
-              state = 4;
-            *s++ = c;
-            continue;
-          case 2:
-            if (c == '-')
-              state = 6;
-            *s++ = c;
-            continue;
-          case 3:
-            if (c == '?')
-              state = 8;
-            *s++ = c;
-            continue;
-          /* CDATA */
-          case 4:
-            if (c == ']')
-              state = 5;
-            else
-              state = 1;
-            *s++ = c;
-            continue;
-          case 5:
-            if (c == '>')
-              state = 0;
-            else
-              state = 1;
-            *s++ = c;
-            continue;
-          /* comment */
-          case 6:
-            if (c == '-')
-              state = 7;
-            else
-              state = 2;
-            *s++ = c;
-            continue;
-          case 7:
-            if (c == '>')
-              state = 0;
-            else
-              state = 2;
-            *s++ = c;
-            continue;
-          /* PI */
-          case 8:
-            if (c == '>')
-              state = 0;
-            else
-              state = 3;
-            *s++ = c;
-            continue;
-        }
-        switch (c)
-        {
-        case SOAP_TT:
-          if (n == 0)
-            goto end;
-          n--;
-          *s++ = '<';
-          t = (char*)"/";
-          m = 1;
-          break;
-        case SOAP_LT:
-	  if (f && n == 0)
-	    goto end;
-          n++;
-          *s++ = '<';
-          break;
-        case '/':
-          if (n > 0)
-          { c = soap_getchar(soap);
-            if (c == '>')
-              n--;
-            soap_unget(soap, c);
-          }
-          *s++ = '/';
-          break;
-        case '<':
-          c = soap_getchar(soap);
-          if (c == '/')
-          { if (n == 0)
-            { c = SOAP_TT;
-              goto end;
-            }
-            n--;
-          }
-          else if (c == '!')
-          { c = soap_getchar(soap);
-            if (c == '[')
-            { do c = soap_getchar(soap);
-              while ((int)c != EOF && c != '[');
-              if ((int)c == EOF)
-                 goto end;
-              t = (char*)"![CDATA[";
-              m = 8;
-              state = 1;
-            }
-            else if (c == '-')
-            { if ((c = soap_getchar(soap)) == '-')
-                state = 2;
-              t = (char*)"!-";
-              m = 2;
-              soap_unget(soap, c);
-            }
-            else
-            { t = (char*)"!";
-              m = 1;
-              soap_unget(soap, c);
-            }
-            *s++ = '<';
-            break;
-          }
-          else if (c == '?')
-            state = 3;
-          else if (f && n == 0)
-	  { soap_revget1(soap);
-	    c = '<';
-	    goto end;
-	  }
-	  else
-            n++;
-          soap_unget(soap, c);
-          *s++ = '<';
-          break;
-        case '>':
-          *s++ = '>';
-          break;
-        case '"':
-          *s++ = '"';
-          break;
-        default:
-#ifndef WITH_LEANER
-#ifdef HAVE_WCTOMB
-          if (soap->mode & SOAP_C_MBSTRING)
-          { m = wctomb(buf, c & 0x7FFFFFFF);
-            if (m >= 1 && m <= (int)MB_CUR_MAX)
-            { t = buf;
-              *s++ = *t++;
-              m--;
-            }
-            else
-            { *s++ = SOAP_UNKNOWN_CHAR;
-              m = 0;
-            }
-          }
-          else
-#endif
-#endif
-            *s++ = (char)(c & 0xFF);
-        }
-        l++;
-        if (maxlen >= 0 && l > maxlen)
-        { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen));
-          soap->error = SOAP_LENGTH;
-          return NULL;
-        }
-      }
-    }
-  }
-#endif
-#ifdef WITH_FAST
-  soap->labidx = 0;			/* use look-aside buffer */
-#else
-  if (soap_new_block(soap) == NULL)
-    return NULL;
-#endif
-  for (;;)
-  { 
-#ifdef WITH_FAST
-    register size_t k;
-    if (soap_append_lab(soap, NULL, 0))	/* allocate more space in look-aside buffer if necessary */
-      return NULL;
-    s = soap->labbuf + soap->labidx;	/* space to populate */
-    k = soap->lablen - soap->labidx;	/* number of bytes available */
-    soap->labidx = soap->lablen;	/* claim this space */
-#else
-    register size_t k = SOAP_BLKLEN;
-    if (!(s = (char*)soap_push_block(soap, NULL, k)))
-      return NULL;
-#endif
-    for (i = 0; i < k; i++)
-    { if (m > 0)
-      { *s++ = *t++;	/* copy multibyte characters */
-        m--;
-        continue;
-      }
-      if (soap->mode & SOAP_C_UTFSTRING)
-      { if (((c = soap_get(soap)) & 0x80000000) && c >= -0x7FFFFF80 && c < SOAP_AP)
-        { c &= 0x7FFFFFFF;
-          t = buf;
-          if (c < 0x0800)
-            *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
-          else
-          { if (c < 0x010000)
-              *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
-            else
-            { if (c < 0x200000)
-                *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
-              else
-              { if (c < 0x04000000)
-                  *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
-                else
-                { *t++ = (char)(0xFC | ((c >> 30) & 0x01));
-                  *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
-                }
-                *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
-              }     
-              *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
-            }
-            *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
-          }
-          *t++ = (char)(0x80 | (c & 0x3F));
-          m = (int)(t - buf) - 1;
-          t = buf;
-          *s++ = *t++;
-          continue;
-        }
-      }
-      else
-        c = soap_getutf8(soap);
-      switch (c)
-      {
-      case SOAP_TT:
-        if (n == 0)
-          goto end;
-        n--;
-        *s++ = '<';
-        t = (char*)"/";
-        m = 1;
-        break;
-      case SOAP_LT:
-	if (f && n == 0)
-	  goto end;
-        n++;
-        *s++ = '<';
-        break;
-      case SOAP_GT:
-        *s++ = '>';
-        break;
-      case SOAP_QT:
-        *s++ = '"';
-        break;
-      case SOAP_AP:
-        *s++ = '\'';
-        break;
-      case '/':
-        if (n > 0)
-        { c = soap_get(soap);
-          if (c == SOAP_GT)
-            n--;
-          soap_unget(soap, c);
-        }
-        *s++ = '/';
-        break;
-      case (soap_wchar)('<' | 0x80000000):
-        if (flag)
-          *s++ = '<';
-        else
-        { *s++ = '&';
-          t = (char*)"lt;";
-          m = 3;
-        }
-        break;
-      case (soap_wchar)('>' | 0x80000000):
-        if (flag)
-          *s++ = '>';
-        else
-        { *s++ = '&';
-          t = (char*)"gt;";
-          m = 3;
-        }
-        break;
-      case (soap_wchar)('&' | 0x80000000):
-        if (flag)
-          *s++ = '&';
-        else
-        { *s++ = '&';
-          t = (char*)"amp;";
-          m = 4;
-        }
-        break;
-      case (soap_wchar)('"' | 0x80000000):
-        if (flag)
-          *s++ = '"';
-        else
-        { *s++ = '&';
-          t = (char*)"quot;";
-          m = 5;
-        }
-        break;
-      case (soap_wchar)('\'' | 0x80000000):
-        if (flag)
-          *s++ = '\'';
-        else
-        { *s++ = '&';
-          t = (char*)"apos;";
-          m = 5;
-        }
-        break;
-      default:
-        if ((int)c == EOF)
-          goto end;
-#ifndef WITH_LEANER
-#ifdef HAVE_WCTOMB
-        if (soap->mode & SOAP_C_MBSTRING)
-        { m = wctomb(buf, c & 0x7FFFFFFF);
-          if (m >= 1 && m <= (int)MB_CUR_MAX)
-          { t = buf;
-            *s++ = *t++;
-            m--;
-          }
-          else
-          { *s++ = SOAP_UNKNOWN_CHAR;
-            m = 0;
-          }
-        }
-        else
-#endif
-#endif
-          *s++ = (char)(c & 0xFF);
-      }
-      l++;
-      if (maxlen >= 0 && l > maxlen)
-      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen));
-        soap->error = SOAP_LENGTH;
-        return NULL;
-      }
-    }
-  }
-end:
-  soap_unget(soap, c);
-  *s = '\0';
-#ifdef WITH_FAST
-  t = soap_strdup(soap, soap->labbuf);
-#else
-  soap_size_block(soap, NULL, i+1);
-  t = soap_save_block(soap, NULL, 0);
-#endif
-  if (l < minlen)
-  { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too short: %ld chars, minlen=%ld\n", l, minlen));
-    soap->error = SOAP_LENGTH;
-    return NULL;
-  }
-#ifdef WITH_DOM
-  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
-  { if (flag == 3)
-      soap->dom->tail = t;
-    else
-      soap->dom->data = t;
-  }
-#endif
-  if (flag == 2)
-    if (soap_s2QName(soap, t, &t, minlen, maxlen))
-      return NULL;
-  return t;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_wstring_out(struct soap *soap, const wchar_t *s, int flag)
-{ const char *t;
-  char tmp;
-  register soap_wchar c;
-#ifdef WITH_DOM
-  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
-  { wchar_t *r = (wchar_t*)s;
-    int n = 1;
-    while (*r++)
-      n++;
-    soap->dom->wide = r = (wchar_t*)soap_malloc(soap, n * sizeof(wchar_t));
-    while (n--)
-      *r++ = *s++;
-    return SOAP_OK;
-  }
-#endif
-  while ((c = *s++))
-  { switch (c)
-    { 
-    case 0x09:
-      if (flag)
-        t = "&#x9;";
-      else
-        t = "\t";
-      break;
-    case 0x0A:
-      if (flag || !(soap->mode & SOAP_XML_CANONICAL))
-        t = "&#xA;";
-      else
-        t = "\n";
-      break;
-    case 0x0D:
-      t = "&#xD;";
-      break;
-    case '&':
-      t = "&amp;";
-      break;
-    case '<':
-      t = "&lt;";
-      break;
-    case '>':
-      if (flag)
-        t = ">";
-      else
-        t = "&gt;";
-      break;
-    case '"':
-      if (flag)
-        t = "&quot;";
-      else
-        t = "\"";
-      break;
-    default:
-      if (c >= 0x20 && c < 0x80)
-      { tmp = (char)c;
-        if (soap_send_raw(soap, &tmp, 1))
-          return soap->error;
-      }
-      else if (soap_pututf8(soap, (unsigned long)c))
-        return soap->error;
-      continue;
-    }
-    if (soap_send(soap, t))
-      return soap->error;
-  }
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_2
-SOAP_FMAC1
-wchar_t *
-SOAP_FMAC2
-soap_wstring_in(struct soap *soap, int flag, long minlen, long maxlen)
-{ wchar_t *s;
-  register int i, n = 0, f = 0;
-  register long l = 0;
-  register soap_wchar c;
-  char *t = NULL;
-  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Reading wide string content\n"));
-  if (soap->peeked)
-  { if (*soap->tag)
-    {
-#ifndef WITH_LEAN
-      struct soap_attribute *tp;
-      t = soap->tmpbuf;
-      *t = '<';
-      t[sizeof(soap->tmpbuf)-1] = '\0';
-      strncpy(t + 1, soap->tag, sizeof(soap->tmpbuf) - 2);
-      t += strlen(t);
-      for (tp = soap->attributes; tp; tp = tp->next)
-      { if (tp->visible)
-        { if (t >= soap->tmpbuf + sizeof(soap->tmpbuf) - 2)
-            break;
-          *t++ = ' ';
-          strcpy(t, tp->name);
-          t += strlen(t);
-          if (t >= soap->tmpbuf + sizeof(soap->tmpbuf) - 2)
-            break;
-          if (tp->value)
-          { *t++ = '=';
-            *t++ = '"';
-            strcpy(t, tp->value);
-            t += strlen(t);
-            *t++ = '"';
-          }
-        }
-      }
-      if (!soap->body)
-        *t++ = '/';
-      *t++ = '>';
-      *t = '\0';
-      t = soap->tmpbuf;
-#endif
-      if (soap->body)
-        n = 1;
-      f = 1;
-      soap->peeked = 0;
-    }
-  }
-  if (soap_new_block(soap) == NULL)
-    return NULL;
-  for (;;)
-  { if (!(s = (wchar_t*)soap_push_block(soap, NULL, sizeof(wchar_t)*SOAP_BLKLEN)))
-      return NULL;
-    for (i = 0; i < SOAP_BLKLEN; i++)
-    { if (t)
-      { *s++ = (wchar_t)*t++;
-        if (!*t)
-          t = NULL;
-        continue;
-      }
-      c = soap_getutf8(soap);
-      switch (c)
-      {
-      case SOAP_TT:
-        if (n == 0)
-          goto end;
-        n--;
-        *s++ = '<';
-        soap_unget(soap, '/');
-        break;
-      case SOAP_LT:
-        if (f && n == 0)
-	  goto end;
-        n++;
-        *s++ = '<';
-        break;
-      case SOAP_GT:
-        *s++ = '>';
-        break;
-      case SOAP_QT:
-        *s++ = '"';
-        break;
-      case SOAP_AP:
-        *s++ = '\'';
-        break;
-      case '/':
-        if (n > 0)
-        { c = soap_getutf8(soap);
-          if (c == SOAP_GT)
-            n--;
-          soap_unget(soap, c);
-        }
-        *s++ = '/';
-        break;
-      case '<':
-        if (flag)
-          *s++ = (soap_wchar)'<';
-        else
-        { *s++ = (soap_wchar)'&';
-          t = (char*)"lt;";
-        }
-        break;
-      case '>':
-        if (flag)
-          *s++ = (soap_wchar)'>';
-        else
-        { *s++ = (soap_wchar)'&';
-          t = (char*)"gt;";
-        }
-        break;
-      case '"':
-        if (flag)
-          *s++ = (soap_wchar)'"';
-        else
-        { *s++ = (soap_wchar)'&';
-          t = (char*)"quot;";
-        }
-        break;
-      default:
-        if ((int)c == EOF)
-          goto end;
-        *s++ = (wchar_t)c & 0x7FFFFFFF;
-      }
-      l++;
-      if (maxlen >= 0 && l > maxlen)
-      { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too long: maxlen=%ld\n", maxlen));
-        soap->error = SOAP_LENGTH;
-        return NULL;
-      }
-    }
-  }
-end:
-  soap_unget(soap, c);
-  *s = '\0';
-  soap_size_block(soap, NULL, sizeof(wchar_t) * (i + 1));
-  if (l < minlen)
-  { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "String too short: %ld chars, minlen=%ld\n", l, minlen));
-    soap->error = SOAP_LENGTH;
-    return NULL;
-  }
-  s = (wchar_t*)soap_save_block(soap, NULL, NULL, 0);
-#ifdef WITH_DOM
-  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
-    soap->dom->wide = s;
-#endif
-  return s;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_int2s(struct soap *soap, int n)
-{ return soap_long2s(soap, (long)n);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outint(struct soap *soap, const char *tag, int id, const int *p, const char *type, int n)
-{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
-   || soap_string_out(soap, soap_long2s(soap, (long)*p), 0))
-    return soap->error;
-  return soap_element_end_out(soap, tag);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_s2int(struct soap *soap, const char *s, int *p)
-{ if (s)
-  { char *r;
-#ifndef WITH_NOIO
-#ifndef WITH_LEAN
-    soap_reset_errno;
-#endif
-#endif
-    *p = (int)soap_strtol(s, &r, 10);
-    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
-#ifndef WITH_NOIO
-#ifndef WITH_LEAN
-     || soap_errno == SOAP_ERANGE
-#endif
-#endif
-    )
-      soap->error = SOAP_TYPE;
-  }
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int *
-SOAP_FMAC2
-soap_inint(struct soap *soap, const char *tag, int *p, const char *type, int t)
-{ if (soap_element_begin_in(soap, tag, 0, NULL))
-    return NULL;
-#ifndef WITH_LEAN
-  if (*soap->type
-   && soap_match_tag(soap, soap->type, type)
-   && soap_match_tag(soap, soap->type, ":int")
-   && soap_match_tag(soap, soap->type, ":short")
-   && soap_match_tag(soap, soap->type, ":byte"))
-  { soap->error = SOAP_TYPE;
-    soap_revert(soap);
-    return NULL;
-  }
-#endif
-  p = (int*)soap_id_enter(soap, soap->id, p, t, sizeof(int), 0, NULL, NULL, NULL);
-  if (*soap->href)
-    p = (int*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(int), 0, NULL);
-  else if (p)
-  { if (soap_s2int(soap, soap_value(soap), p))
-      return NULL;
-  }
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_long2s(struct soap *soap, long n)
-{ sprintf(soap->tmpbuf, "%ld", n);
-  return soap->tmpbuf;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outlong(struct soap *soap, const char *tag, int id, const long *p, const char *type, int n)
-{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
-   || soap_string_out(soap, soap_long2s(soap, *p), 0))
-    return soap->error;
-  return soap_element_end_out(soap, tag);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_s2long(struct soap *soap, const char *s, long *p)
-{ if (s)
-  { char *r;
-#ifndef WITH_NOIO
-#ifndef WITH_LEAN
-    soap_reset_errno;
-#endif
-#endif
-    *p = soap_strtol(s, &r, 10);
-    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
-#ifndef WITH_NOIO
-#ifndef WITH_LEAN
-     || soap_errno == SOAP_ERANGE
-#endif
-#endif
-    )
-      soap->error = SOAP_TYPE;
-  }
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-long *
-SOAP_FMAC2
-soap_inlong(struct soap *soap, const char *tag, long *p, const char *type, int t)
-{ if (soap_element_begin_in(soap, tag, 0, NULL))
-    return NULL;
-#ifndef WITH_LEAN
-  if (*soap->type
-   && soap_match_tag(soap, soap->type, type)
-   && soap_match_tag(soap, soap->type, ":int")
-   && soap_match_tag(soap, soap->type, ":short")
-   && soap_match_tag(soap, soap->type, ":byte"))
-  { soap->error = SOAP_TYPE;
-    soap_revert(soap);
-    return NULL;
-  }
-#endif
-  p = (long*)soap_id_enter(soap, soap->id, p, t, sizeof(long), 0, NULL, NULL, NULL);
-  if (*soap->href)
-    p = (long*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(long), 0, NULL);
-  else if (p)
-  { if (soap_s2long(soap, soap_value(soap), p))
-      return NULL;
-  }
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_LONG642s(struct soap *soap, LONG64 n)
-{ sprintf(soap->tmpbuf, SOAP_LONG_FORMAT, n);
-  return soap->tmpbuf;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outLONG64(struct soap *soap, const char *tag, int id, const LONG64 *p, const char *type, int n)
-{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
-   || soap_string_out(soap, soap_LONG642s(soap, *p), 0))
-    return soap->error;
-  return soap_element_end_out(soap, tag);
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_s2LONG64(struct soap *soap, const char *s, LONG64 *p)
-{ if (s)
-  {
-#ifdef HAVE_STRTOLL
-    char *r;
-#ifndef WITH_NOIO
-#ifndef WITH_LEAN
-    soap_reset_errno;
-#endif
-#endif
-    *p = strtoll(s, &r, 10);
-    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
-#ifndef WITH_NOIO
-#ifndef WITH_LEAN
-       || soap_errno == SOAP_ERANGE
-#endif
-#endif
-      )
-#else
-# ifdef HAVE_SSCANF
-    if (sscanf(s, SOAP_LONG_FORMAT, p) != 1)
-# endif
-#endif
-      soap->error = SOAP_TYPE;
-  }
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-LONG64 *
-SOAP_FMAC2
-soap_inLONG64(struct soap *soap, const char *tag, LONG64 *p, const char *type, int t)
-{ if (soap_element_begin_in(soap, tag, 0, NULL))
-    return NULL;
-#ifndef WITH_LEAN
-  if (*soap->type
-   && soap_match_tag(soap, soap->type, type)
-   && soap_match_tag(soap, soap->type, ":integer")
-   && soap_match_tag(soap, soap->type, ":positiveInteger")
-   && soap_match_tag(soap, soap->type, ":negativeInteger")
-   && soap_match_tag(soap, soap->type, ":nonPositiveInteger")
-   && soap_match_tag(soap, soap->type, ":nonNegativeInteger")
-   && soap_match_tag(soap, soap->type, ":long")
-   && soap_match_tag(soap, soap->type, ":int")
-   && soap_match_tag(soap, soap->type, ":short")
-   && soap_match_tag(soap, soap->type, ":byte"))
-  { soap->error = SOAP_TYPE;
-    soap_revert(soap);
-    return NULL;
-  }
-#endif
-  p = (LONG64*)soap_id_enter(soap, soap->id, p, t, sizeof(LONG64), 0, NULL, NULL, NULL);
-  if (*soap->href)
-    p = (LONG64*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(LONG64), 0, NULL);
-  else if (p)
-  { if (soap_s2LONG64(soap, soap_value(soap), p))
-      return NULL;
-  }
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_byte2s(struct soap *soap, char n)
-{ return soap_long2s(soap, (long)n);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outbyte(struct soap *soap, const char *tag, int id, const char *p, const char *type, int n)
-{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
-   || soap_string_out(soap, soap_long2s(soap, (long)*p), 0))
-    return soap->error;
-  return soap_element_end_out(soap, tag);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_s2byte(struct soap *soap, const char *s, char *p)
-{ if (s)
-  { long n;
-    char *r;
-    n = soap_strtol(s, &r, 10);
-    if (s == r || *r || n < -128 || n > 127)
-      soap->error = SOAP_TYPE;
-    *p = (char)n;
-  }
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-char *
-SOAP_FMAC2
-soap_inbyte(struct soap *soap, const char *tag, char *p, const char *type, int t)
-{ if (soap_element_begin_in(soap, tag, 0, NULL))
-    return NULL;
-#ifndef WITH_LEAN
-  if (*soap->type
-   && soap_match_tag(soap, soap->type, type)
-   && soap_match_tag(soap, soap->type, ":byte"))
-  { soap->error = SOAP_TYPE;
-    soap_revert(soap);
-    return NULL;
-  }
-#endif
-  p = (char*)soap_id_enter(soap, soap->id, p, t, sizeof(char), 0, NULL, NULL, NULL);
-  if (*soap->href)
-    p = (char*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(char), 0, NULL);
-  else if (p)
-  { if (soap_s2byte(soap, soap_value(soap), p))
-      return NULL;
-  }
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_short2s(struct soap *soap, short n)
-{ return soap_long2s(soap, (long)n);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outshort(struct soap *soap, const char *tag, int id, const short *p, const char *type, int n)
-{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
-   || soap_string_out(soap, soap_long2s(soap, (long)*p), 0))
-    return soap->error;
-  return soap_element_end_out(soap, tag);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_s2short(struct soap *soap, const char *s, short *p)
-{ if (s)
-  { long n;
-    char *r;
-    n = soap_strtol(s, &r, 10);
-    if (s == r || *r || n < -32768 || n > 32767)
-      soap->error = SOAP_TYPE;
-    *p = (short)n;
-  }
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-short *
-SOAP_FMAC2
-soap_inshort(struct soap *soap, const char *tag, short *p, const char *type, int t)
-{ if (soap_element_begin_in(soap, tag, 0, NULL))
-    return NULL;
-#ifndef WITH_LEAN
-  if (*soap->type
-   && soap_match_tag(soap, soap->type, type)
-   && soap_match_tag(soap, soap->type, ":short")
-   && soap_match_tag(soap, soap->type, ":byte"))
-  { soap->error = SOAP_TYPE;
-    soap_revert(soap);
-    return NULL;
-  }
-#endif
-  p = (short*)soap_id_enter(soap, soap->id, p, t, sizeof(short), 0, NULL, NULL, NULL);
-  if (*soap->href)
-    p = (short*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(short), 0, NULL);
-  else if (p)
-  { if (soap_s2short(soap, soap_value(soap), p))
-      return NULL;
-  }
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_float2s(struct soap *soap, float n)
-{ char *s;
-  if (soap_isnan((double)n))
-    return "NaN";
-  if (soap_ispinff(n))
-    return "INF";
-  if (soap_isninff(n))
-    return "-INF";
-  s = soap->tmpbuf;
-#if defined(HAVE_SPRINTF_L)
-  sprintf_l(s, soap->c_locale, soap->float_format, n);
-#else
-  sprintf(s, soap->float_format, n);
-  s = strchr(s, ',');	/* convert decimal comma to DP */
-  if (s)
-    *s = '.';
-#endif
-  return soap->tmpbuf;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outfloat(struct soap *soap, const char *tag, int id, const float *p, const char *type, int n)
-{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
-   || soap_string_out(soap, soap_float2s(soap, *p), 0))
-    return soap->error;
-  return soap_element_end_out(soap, tag);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_s2float(struct soap *soap, const char *s, float *p)
-{ if (s)
-  { if (!*s)
-      return soap->error = SOAP_TYPE;
-    if (!soap_tag_cmp(s, "INF"))
-      *p = FLT_PINFTY;
-    else if (!soap_tag_cmp(s, "+INF"))
-      *p = FLT_PINFTY;
-    else if (!soap_tag_cmp(s, "-INF"))
-      *p = FLT_NINFTY;
-    else if (!soap_tag_cmp(s, "NaN"))
-      *p = FLT_NAN;
-    else
-    {
-/* On some systems strtof requires -std=c99 or does not even link: so we try to use strtod first */
-#if defined(HAVE_STRTOD_L)
-      char *r;
-      *p = (float)strtod_l(s, &r, soap->c_locale);
-      if (*r)
-#elif defined(HAVE_STRTOD)
-      char *r;
-      *p = (float)strtod(s, &r);
-      if (*r)
-#elif defined(HAVE_STRTOF_L)
-      char *r;
-      *p = strtof_l((char*)s, &r, soap->c_locale);
-      if (*r)
-#elif defined(HAVE_STRTOF)
-      char *r;
-      *p = strtof((char*)s, &r);
-      if (*r)
-#endif
-      {
-#if defined(HAVE_SSCANF_L) && !defined(HAVE_STRTOF_L) && !defined(HAVE_STRTOD_L)
-        if (sscanf_l(s, soap->c_locale, "%g", p) != 1)
-          soap->error = SOAP_TYPE;
-#elif defined(HAVE_SSCANF)
-        if (sscanf(s, "%g", p) != 1)
-          soap->error = SOAP_TYPE;
-#else
-        soap->error = SOAP_TYPE;
-#endif
-      }
-    }
-  }
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-static int soap_isnumeric(struct soap *soap, const char *type)
-{ if (soap_match_tag(soap, soap->type, type)
-   && soap_match_tag(soap, soap->type, ":float")
-   && soap_match_tag(soap, soap->type, ":double")
-   && soap_match_tag(soap, soap->type, ":decimal")
-   && soap_match_tag(soap, soap->type, ":integer")
-   && soap_match_tag(soap, soap->type, ":positiveInteger")
-   && soap_match_tag(soap, soap->type, ":negativeInteger")
-   && soap_match_tag(soap, soap->type, ":nonPositiveInteger")
-   && soap_match_tag(soap, soap->type, ":nonNegativeInteger")
-   && soap_match_tag(soap, soap->type, ":long")
-   && soap_match_tag(soap, soap->type, ":int")
-   && soap_match_tag(soap, soap->type, ":short")
-   && soap_match_tag(soap, soap->type, ":byte")
-   && soap_match_tag(soap, soap->type, ":unsignedLong")
-   && soap_match_tag(soap, soap->type, ":unsignedInt")
-   && soap_match_tag(soap, soap->type, ":unsignedShort")
-   && soap_match_tag(soap, soap->type, ":unsignedByte"))
-  { soap->error = SOAP_TYPE;
-    soap_revert(soap);
-    return SOAP_ERR;
-  }
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-float *
-SOAP_FMAC2
-soap_infloat(struct soap *soap, const char *tag, float *p, const char *type, int t)
-{ if (soap_element_begin_in(soap, tag, 0, NULL))
-    return NULL;
-#ifndef WITH_LEAN
-  if (*soap->type != '\0' && soap_isnumeric(soap, type))
-    return NULL;
-#endif
-  p = (float*)soap_id_enter(soap, soap->id, p, t, sizeof(float), 0, NULL, NULL, NULL);
-  if (*soap->href)
-    p = (float*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(float), 0, NULL);
-  else if (p)
-  { if (soap_s2float(soap, soap_value(soap), p))
-      return NULL;
-  }
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_double2s(struct soap *soap, double n)
-{ char *s;
-  if (soap_isnan(n))
-    return "NaN";
-  if (soap_ispinfd(n))
-    return "INF";
-  if (soap_isninfd(n))
-    return "-INF";
-  s = soap->tmpbuf;
-#if defined(HAVE_SPRINTF_L)
-  sprintf_l(s, soap->c_locale, soap->double_format, n);
-#else
-  sprintf(s, soap->double_format, n);
-  s = strchr(s, ',');	/* convert decimal comma to DP */
-  if (s)
-    *s = '.';
-#endif
-  return soap->tmpbuf;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outdouble(struct soap *soap, const char *tag, int id, const double *p, const char *type, int n)
-{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
-   || soap_string_out(soap, soap_double2s(soap, *p), 0))
-    return soap->error;
-  return soap_element_end_out(soap, tag);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_s2double(struct soap *soap, const char *s, double *p)
-{ if (s)
-  { if (!*s)
-      return soap->error = SOAP_TYPE;
-    if (!soap_tag_cmp(s, "INF"))
-      *p = DBL_PINFTY;
-    else if (!soap_tag_cmp(s, "+INF"))
-      *p = DBL_PINFTY;
-    else if (!soap_tag_cmp(s, "-INF"))
-      *p = DBL_NINFTY;
-    else if (!soap_tag_cmp(s, "NaN"))
-      *p = DBL_NAN;
-    else
-    {
-#if defined(HAVE_STRTOD_L)
-      char *r;
-      *p = strtod_l(s, &r, soap->c_locale);
-      if (*r)
-#elif defined(HAVE_STRTOD)
-      char *r;
-      *p = strtod(s, &r);
-      if (*r)
-#endif
-      {
-#if defined(HAVE_SSCANF_L) && !defined(HAVE_STRTOF_L) && !defined(HAVE_STRTOD_L)
-        if (sscanf_l(s, soap->c_locale, "%lg", p) != 1)
-          soap->error = SOAP_TYPE;
-#elif defined(HAVE_SSCANF)
-        if (sscanf(s, "%lg", p) != 1)
-          soap->error = SOAP_TYPE;
-#else
-        soap->error = SOAP_TYPE;
-#endif
-      }
-    }
-  }
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-double *
-SOAP_FMAC2
-soap_indouble(struct soap *soap, const char *tag, double *p, const char *type, int t)
-{ if (soap_element_begin_in(soap, tag, 0, NULL))
-    return NULL;
-#ifndef WITH_LEAN
-  if (*soap->type != '\0' && soap_isnumeric(soap, type))
-    return NULL;
-#endif
-  p = (double*)soap_id_enter(soap, soap->id, p, t, sizeof(double), 0, NULL, NULL, NULL);
-  if (*soap->href)
-    p = (double*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(double), 0, NULL);
-  else if (p)
-  { if (soap_s2double(soap, soap_value(soap), p))
-      return NULL;
-  }
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_unsignedByte2s(struct soap *soap, unsigned char n)
-{ return soap_unsignedLong2s(soap, (unsigned long)n);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outunsignedByte(struct soap *soap, const char *tag, int id, const unsigned char *p, const char *type, int n)
-{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
-   || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0))
-    return soap->error;
-  return soap_element_end_out(soap, tag);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_s2unsignedByte(struct soap *soap, const char *s, unsigned char *p)
-{ if (s)
-  { unsigned long n;
-    char *r;
-    n = soap_strtoul(s, &r, 10);
-    if (s == r || *r || n > 255)
-      soap->error = SOAP_TYPE;
-    *p = (unsigned char)n;
-  }
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-unsigned char *
-SOAP_FMAC2
-soap_inunsignedByte(struct soap *soap, const char *tag, unsigned char *p, const char *type, int t)
-{ if (soap_element_begin_in(soap, tag, 0, NULL))
-    return NULL;
-#ifndef WITH_LEAN
-  if (*soap->type
-   && soap_match_tag(soap, soap->type, type)
-   && soap_match_tag(soap, soap->type, ":unsignedByte"))
-  { soap->error = SOAP_TYPE;
-    soap_revert(soap);
-    return NULL;
-  }
-#endif
-  p = (unsigned char*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned char), 0, NULL, NULL, NULL);
-  if (*soap->href)
-    p = (unsigned char*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(unsigned char), 0, NULL);
-  else if (p)
-  { if (soap_s2unsignedByte(soap, soap_value(soap), p))
-      return NULL;
-  }
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_unsignedShort2s(struct soap *soap, unsigned short n)
-{ return soap_unsignedLong2s(soap, (unsigned long)n);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outunsignedShort(struct soap *soap, const char *tag, int id, const unsigned short *p, const char *type, int n)
-{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
-   || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0))
-    return soap->error;
-  return soap_element_end_out(soap, tag);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_s2unsignedShort(struct soap *soap, const char *s, unsigned short *p)
-{ if (s)
-  { unsigned long n;
-    char *r;
-    n = soap_strtoul(s, &r, 10);
-    if (s == r || *r || n > 65535)
-      soap->error = SOAP_TYPE;
-    *p = (unsigned short)n;
-  }
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-unsigned short *
-SOAP_FMAC2
-soap_inunsignedShort(struct soap *soap, const char *tag, unsigned short *p, const char *type, int t)
-{ if (soap_element_begin_in(soap, tag, 0, NULL))
-    return NULL;
-#ifndef WITH_LEAN
-  if (*soap->type
-   && soap_match_tag(soap, soap->type, type)
-   && soap_match_tag(soap, soap->type, ":unsignedShort")
-   && soap_match_tag(soap, soap->type, ":unsignedByte"))
-  { soap->error = SOAP_TYPE;
-    soap_revert(soap);
-    return NULL;
-  }
-#endif
-  p = (unsigned short*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned short), 0, NULL, NULL, NULL);
-  if (*soap->href)
-    p = (unsigned short*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(unsigned short), 0, NULL);
-  else if (p)
-  { if (soap_s2unsignedShort(soap, soap_value(soap), p))
-      return NULL;
-  }
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_unsignedInt2s(struct soap *soap, unsigned int n)
-{ return soap_unsignedLong2s(soap, (unsigned long)n);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outunsignedInt(struct soap *soap, const char *tag, int id, const unsigned int *p, const char *type, int n)
-{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
-   || soap_string_out(soap, soap_unsignedLong2s(soap, (unsigned long)*p), 0))
-    return soap->error;
-  return soap_element_end_out(soap, tag);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_s2unsignedInt(struct soap *soap, const char *s, unsigned int *p)
-{ if (s)
-  { char *r;
-#ifndef WITH_NOIO
-#ifndef WITH_LEAN
-    soap_reset_errno;
-#endif
-#endif
-    *p = (unsigned int)soap_strtoul(s, &r, 10);
-    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
-#ifndef WITH_NOIO
-#ifndef WITH_LEAN
-     || soap_errno == SOAP_ERANGE
-#endif
-#endif
-    )
-      soap->error = SOAP_TYPE;
-  }
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-unsigned int *
-SOAP_FMAC2
-soap_inunsignedInt(struct soap *soap, const char *tag, unsigned int *p, const char *type, int t)
-{ if (soap_element_begin_in(soap, tag, 0, NULL))
-    return NULL;
-#ifndef WITH_LEAN
-  if (*soap->type
-   && soap_match_tag(soap, soap->type, type)
-   && soap_match_tag(soap, soap->type, ":unsignedInt")
-   && soap_match_tag(soap, soap->type, ":unsignedShort")
-   && soap_match_tag(soap, soap->type, ":unsignedByte"))
-  { soap->error = SOAP_TYPE;
-    soap_revert(soap);
-    return NULL;
-  }
-#endif
-  p = (unsigned int*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned int), 0, NULL, NULL, NULL);
-  if (*soap->href)
-    p = (unsigned int*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(unsigned int), 0, NULL);
-  else if (p)
-  { if (soap_s2unsignedInt(soap, soap_value(soap), p))
-      return NULL;
-  }
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_unsignedLong2s(struct soap *soap, unsigned long n)
-{ sprintf(soap->tmpbuf, "%lu", n);
-  return soap->tmpbuf;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outunsignedLong(struct soap *soap, const char *tag, int id, const unsigned long *p, const char *type, int n)
-{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
-   || soap_string_out(soap, soap_unsignedLong2s(soap, *p), 0))
-    return soap->error;
-  return soap_element_end_out(soap, tag);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_s2unsignedLong(struct soap *soap, const char *s, unsigned long *p)
-{ if (s)
-  { char *r;
-#ifndef WITH_NOIO
-#ifndef WITH_LEAN
-    soap_reset_errno;
-#endif
-#endif
-    *p = soap_strtoul(s, &r, 10);
-    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
-#ifndef WITH_NOIO
-#ifndef WITH_LEAN
-     || soap_errno == SOAP_ERANGE
-#endif
-#endif
-    )
-      soap->error = SOAP_TYPE;
-  }
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-unsigned long *
-SOAP_FMAC2
-soap_inunsignedLong(struct soap *soap, const char *tag, unsigned long *p, const char *type, int t)
-{ if (soap_element_begin_in(soap, tag, 0, NULL))
-    return NULL;
-#ifndef WITH_LEAN
-  if (*soap->type
-   && soap_match_tag(soap, soap->type, type)
-   && soap_match_tag(soap, soap->type, ":unsignedInt")
-   && soap_match_tag(soap, soap->type, ":unsignedShort")
-   && soap_match_tag(soap, soap->type, ":unsignedByte"))
-  { soap->error = SOAP_TYPE;
-    soap_revert(soap);
-    return NULL;
-  }
-#endif
-  p = (unsigned long*)soap_id_enter(soap, soap->id, p, t, sizeof(unsigned long), 0, NULL, NULL, NULL);
-  if (*soap->href)
-    p = (unsigned long*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(unsigned long), 0, NULL);
-  else if (p)
-  { if (soap_s2unsignedLong(soap, soap_value(soap), p))
-      return NULL;
-  }
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_ULONG642s(struct soap *soap, ULONG64 n)
-{ sprintf(soap->tmpbuf, SOAP_ULONG_FORMAT, n);
-  return soap->tmpbuf;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outULONG64(struct soap *soap, const char *tag, int id, const ULONG64 *p, const char *type, int n)
-{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
-   || soap_string_out(soap, soap_ULONG642s(soap, *p), 0))
-    return soap->error;
-  return soap_element_end_out(soap, tag);
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_s2ULONG64(struct soap *soap, const char *s, ULONG64 *p)
-{ if (s)
-  {
-#ifdef HAVE_STRTOULL
-    char *r;
-#ifndef WITH_NOIO
-#ifndef WITH_LEAN
-    soap_reset_errno;
-#endif
-#endif
-    *p = strtoull(s, &r, 10);
-    if ((s == r && (soap->mode & SOAP_XML_STRICT)) || *r
-#ifndef WITH_NOIO
-#ifndef WITH_LEAN
-       || soap_errno == SOAP_ERANGE
-#endif
-#endif
-      )
-#else
-#ifdef HAVE_SSCANF
-    if (sscanf(s, SOAP_ULONG_FORMAT, p) != 1)
-#endif
-#endif
-      soap->error = SOAP_TYPE;
-  }
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-ULONG64 *
-SOAP_FMAC2
-soap_inULONG64(struct soap *soap, const char *tag, ULONG64 *p, const char *type, int t)
-{ if (soap_element_begin_in(soap, tag, 0, NULL))
-    return NULL;
-  if (*soap->type
-   && soap_match_tag(soap, soap->type, type)
-   && soap_match_tag(soap, soap->type, ":positiveInteger")
-   && soap_match_tag(soap, soap->type, ":nonNegativeInteger")
-   && soap_match_tag(soap, soap->type, ":unsignedLong")
-   && soap_match_tag(soap, soap->type, ":unsignedInt")
-   && soap_match_tag(soap, soap->type, ":unsignedShort")
-   && soap_match_tag(soap, soap->type, ":unsignedByte"))
-  { soap->error = SOAP_TYPE;
-    soap_revert(soap);
-    return NULL;
-  }
-  p = (ULONG64*)soap_id_enter(soap, soap->id, p, t, sizeof(ULONG64), 0, NULL, NULL, NULL);
-  if (*soap->href)
-    p = (ULONG64*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(ULONG64), 0, NULL);
-  else if (p)
-  { if (soap_s2ULONG64(soap, soap_value(soap), p))
-      return NULL;
-  }
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_s2string(struct soap *soap, const char *s, char **t, long minlen, long maxlen)
-{ if (s)
-  { long l = (long)strlen(s);
-    if ((maxlen >= 0 && l > maxlen) || l < minlen)
-      return soap->error = SOAP_LENGTH;
-    if (!(*t = soap_strdup(soap, s)))
-      return soap->error = SOAP_EOM;
-    if (!(soap->mode & (SOAP_ENC_LATIN | SOAP_C_UTFSTRING)))
-    { char *r = *t;
-      /* remove non-ASCII chars */
-      for (s = *t; *s; s++)
-        if (!(*s & 0x80))
-	  *r++ = *s;
-      *r = '\0';
-    }
-  }
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_s2QName(struct soap *soap, const char *s, char **t, long minlen, long maxlen)
-{ if (s)
-  { long l = (long)strlen(s);
-    if ((maxlen >= 0 && l > maxlen) || l < minlen)
-      return soap->error = SOAP_LENGTH;
-    soap->labidx = 0;
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Normalized namespace(s) of QNames '%s'", s));
-    /* convert (by prefix normalize prefix) all QNames in s */
-    for (;;)
-    { size_t n;
-      struct soap_nlist *np;
-      register const char *p;
-      /* skip blanks */
-      while (*s && soap_blank(*s))
-        s++;
-      if (!*s)
-        break;
-      /* find next QName */
-      n = 1;
-      while (s[n] && !soap_blank(s[n]))
-        n++;
-      np = soap->nlist;
-      /* if there is no namespace stack, or prefix is "xml" then copy string */
-      if (!np || !strncmp(s, "xml:", 4))
-      { soap_append_lab(soap, s, n);
-      }
-      else /* we normalize the QName by replacing its prefix */
-      { for (p = s; *p && p < s + n; p++)
-          if (*p == ':')
-	    break;
-        if (*p == ':')
-        { size_t k = p - s;
-          while (np && (strncmp(np->id, s, k) || np->id[k]))
-            np = np->next;
-          p++;
-        }
-        else
-        { while (np && *np->id)
-            np = np->next;
-          p = s;
-        }
-        /* replace prefix */
-        if (np)
-        { if (np->index >= 0 && soap->local_namespaces)
-          { const char *q = soap->local_namespaces[np->index].id;
-            if (q)
-              soap_append_lab(soap, q, strlen(q));
-          }
-          else if (np->ns)
-          { soap_append_lab(soap, "\"", 1);
-            soap_append_lab(soap, np->ns, strlen(np->ns));
-            soap_append_lab(soap, "\"", 1);
-          }
-          else
-          { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "\nNamespace prefix of '%s' not defined (index=%d, URI=%s)\n", s, np->index, np->ns?np->ns:SOAP_STR_EOS));
-            return soap->error = SOAP_NAMESPACE; 
-          }
-        }
-        else if (s[n]) /* no namespace, part of string */
-        { soap_append_lab(soap, s, n);
-        } 
-	else /* no namespace: assume "" namespace */
-        { soap_append_lab(soap, "\"\"", 2);
-	}
-        soap_append_lab(soap, ":", 1);
-        soap_append_lab(soap, p, n - (p-s));
-      }
-      /* advance to next and add spacing */
-      s += n;
-      if (*s)
-        soap_append_lab(soap, " ", 1);
-    }
-    soap_append_lab(soap, SOAP_STR_EOS, 1);
-    *t = soap_strdup(soap, soap->labbuf);
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, " into '%s'\n", *t));
-  }
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_QName2s(struct soap *soap, const char *s)
-{ const char *t = NULL;
-  if (s)
-  { soap->labidx = 0;
-    for (;;)
-    { size_t n;
-      /* skip blanks */
-      while (*s && soap_blank(*s))
-        s++;
-      if (!*s)
-        break;
-      /* find next QName */
-      n = 1;
-      while (s[n] && !soap_blank(s[n]))
-        n++;
-      /* normal prefix: pass string as is */
-      if (*s != '"')
-      { soap_append_lab(soap, s, n);
-#ifndef WITH_LEAN
-        if ((soap->mode & SOAP_XML_CANONICAL))
-        { const char *r = strchr(s, ':');
-          if (r)
-            soap_utilize_ns(soap, s, r - s);
-        }
-#endif
-      }
-      else /* URL-based string prefix */
-      { const char *q;
-        s++;
-        q = strchr(s, '"');
-        if (q)
-        { struct Namespace *p = soap->local_namespaces;
-          if (p)
-          { for (; p->id; p++)
-            { if (p->ns)
-                if (!soap_tag_cmp(s, p->ns))
-                  break;
-              if (p->in)
-                if (!soap_tag_cmp(s, p->in))
-                  break;
-            }
-          }
-          /* URL is in the namespace table? */
-          if (p && p->id)
-          { soap_append_lab(soap, p->id, strlen(p->id));
-          }
-          else /* not in namespace table: create xmlns binding */
-          { char *r = soap_strdup(soap, s);
-            r[q-s] = '\0';
-            sprintf(soap->tmpbuf, "xmlns:_%d", soap->idnum++);
-            soap_set_attr(soap, soap->tmpbuf, r, 1);
-            soap_append_lab(soap, soap->tmpbuf + 6, strlen(soap->tmpbuf + 6));
-          }
-          soap_append_lab(soap, q + 1, n - (q-s) - 1);
-        }
-      }
-      /* advance to next and add spacing */
-      s += n;
-      if (*s)
-        soap_append_lab(soap, " ", 1);
-    }
-    soap_append_lab(soap, SOAP_STR_EOS, 1);
-    t = soap_strdup(soap, soap->labbuf);
-  }
-  return t;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_s2wchar(struct soap *soap, const char *s, wchar_t **t, long minlen, long maxlen)
-{ if (s)
-  { long l;
-    wchar_t *r;
-    *t = r = (wchar_t*)soap_malloc(soap, sizeof(wchar_t) * (strlen(s) + 1));
-    if (!r)
-      return soap->error = SOAP_EOM;
-    if (soap->mode & SOAP_ENC_LATIN)
-    { while (*s)
-        *r++ = (wchar_t)*s++;
-    }
-    else
-    { /* Convert UTF8 to wchar */
-      while (*s)
-      { register soap_wchar c, c1, c2, c3, c4;
-        c = (unsigned char)*s++;
-        if (c < 0x80)
-          *r++ = (wchar_t)c;
-        else
-        { c1 = (soap_wchar)*s++ & 0x3F;
-          if (c < 0xE0)
-            *r++ = (wchar_t)(((soap_wchar)(c & 0x1F) << 6) | c1);
-          else
-          { c2 = (soap_wchar)*s++ & 0x3F;
-            if (c < 0xF0)
-              *r++ = (wchar_t)(((soap_wchar)(c & 0x0F) << 12) | (c1 << 6) | c2);
-            else
-            { c3 = (soap_wchar)*s++ & 0x3F;
-              if (c < 0xF8)
-                *r++ = (wchar_t)(((soap_wchar)(c & 0x07) << 18) | (c1 << 12) | (c2 << 6) | c3);
-              else
-              { c4 = (soap_wchar)*s++ & 0x3F;
-                if (c < 0xFC)
-                  *r++ = (wchar_t)(((soap_wchar)(c & 0x03) << 24) | (c1 << 18) | (c2 << 12) | (c3 << 6) | c4);
-                else
-                  *r++ = (wchar_t)(((soap_wchar)(c & 0x01) << 30) | (c1 << 24) | (c2 << 18) | (c3 << 12) | (c4 << 6) | (soap_wchar)(*s++ & 0x3F));
-              }
-            }
-          }
-        }
-      }
-    }
-    *r = L'\0';
-    l = (long)(r - *t);
-    if ((maxlen >= 0 && l > maxlen) || l < minlen)
-      return soap->error = SOAP_LENGTH;
-  }
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_wchar2s(struct soap *soap, const wchar_t *s)
-{ register soap_wchar c;
-  register char *r, *t;
-  const wchar_t *q = s;
-  size_t n = 0;
-  while ((c = *q++))
-  { if (c > 0 && c < 0x80)
-      n++;
-    else
-      n += 6;
-  }
-  r = t = (char*)soap_malloc(soap, n + 1);
-  if (r)
-  { /* Convert wchar to UTF8 */
-    while ((c = *s++))
-    { if (c > 0 && c < 0x80)
-        *t++ = (char)c;
-      else
-      { if (c < 0x0800)
-          *t++ = (char)(0xC0 | ((c >> 6) & 0x1F));
-        else
-        { if (c < 0x010000)
-            *t++ = (char)(0xE0 | ((c >> 12) & 0x0F));
-          else
-          { if (c < 0x200000)
-              *t++ = (char)(0xF0 | ((c >> 18) & 0x07));
-            else
-            { if (c < 0x04000000)
-                *t++ = (char)(0xF8 | ((c >> 24) & 0x03));
-              else
-              { *t++ = (char)(0xFC | ((c >> 30) & 0x01));
-                *t++ = (char)(0x80 | ((c >> 24) & 0x3F));
-              }
-              *t++ = (char)(0x80 | ((c >> 18) & 0x3F));
-            }     
-            *t++ = (char)(0x80 | ((c >> 12) & 0x3F));
-          }
-          *t++ = (char)(0x80 | ((c >> 6) & 0x3F));
-        }
-        *t++ = (char)(0x80 | (c & 0x3F));
-      }
-    }
-    *t = '\0';
-  }
-  return r;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outstring(struct soap *soap, const char *tag, int id, char *const*p, const char *type, int n) 
-{ id = soap_element_id(soap, tag, id, *p, NULL, 0, type, n);
-  if (id < 0)
-    return soap->error;
-  if (!**p && (soap->mode & SOAP_C_NILSTRING))
-    return soap_element_null(soap, tag, id, type);
-  if (soap_element_begin_out(soap, tag, id, type)
-   || soap_string_out(soap, *p, 0)
-   || soap_element_end_out(soap, tag))
-    return soap->error;
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-char **
-SOAP_FMAC2
-soap_instring(struct soap *soap, const char *tag, char **p, const char *type, int t, int flag, long minlen, long maxlen)
-{ if (soap_element_begin_in(soap, tag, 1, NULL))
-  { if (!tag || *tag != '-' || soap->error != SOAP_NO_TAG)
-      return NULL;
-    soap->error = SOAP_OK;
-  }
-  if (!p)
-  { if (!(p = (char**)soap_malloc(soap, sizeof(char*))))
-      return NULL;
-  }
-  if (soap->null)
-    *p = NULL;
-  else if (soap->body)
-  { *p = soap_string_in(soap, flag, minlen, maxlen);
-    if (!*p || !(char*)soap_id_enter(soap, soap->id, *p, t, sizeof(char*), 0, NULL, NULL, NULL))
-      return NULL;
-    if (!**p && tag && *tag == '-')
-    { soap->error = SOAP_NO_TAG;
-      return NULL;
-    }
-  }
-  else if (tag && *tag == '-')
-  { soap->error = SOAP_NO_TAG;
-    return NULL;
-  }
-  else if (!*soap->href && minlen > 0)
-  { soap->error = SOAP_LENGTH;
-    return NULL;
-  }
-  else
-    *p = soap_strdup(soap, SOAP_STR_EOS);
-  if (*soap->href)
-    p = (char**)soap_id_lookup(soap, soap->href, (void**)p, t, sizeof(char**), 0);
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outwstring(struct soap *soap, const char *tag, int id, wchar_t *const*p, const char *type, int n) 
-{ id = soap_element_id(soap, tag, id, *p, NULL, 0, type, n);
-  if (id < 0)
-    return soap->error;
-  if (!**p && (soap->mode & SOAP_C_NILSTRING))
-    return soap_element_null(soap, tag, id, type);
-  if (soap_element_begin_out(soap, tag, id, type)
-   || soap_wstring_out(soap, *p, 0)
-   || soap_element_end_out(soap, tag))
-    return soap->error;
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_2
-SOAP_FMAC1
-wchar_t **
-SOAP_FMAC2
-soap_inwstring(struct soap *soap, const char *tag, wchar_t **p, const char *type, int t, long minlen, long maxlen)
-{ if (soap_element_begin_in(soap, tag, 1, NULL))
-  { if (!tag || *tag != '-' || soap->error != SOAP_NO_TAG)
-      return NULL;
-    soap->error = SOAP_OK;
-  }
-  if (!p)
-  { if (!(p = (wchar_t**)soap_malloc(soap, sizeof(wchar_t*))))
-      return NULL;
-  }
-  if (soap->body)
-  { *p = soap_wstring_in(soap, 1, minlen, maxlen);
-    if (!*p || !(wchar_t*)soap_id_enter(soap, soap->id, *p, t, sizeof(wchar_t*), 0, NULL, NULL, NULL))
-      return NULL;
-    if (!**p && tag && *tag == '-')
-    { soap->error = SOAP_NO_TAG;
-      return NULL;
-    }
-  }
-  else if (tag && *tag == '-')
-  { soap->error = SOAP_NO_TAG;
-    return NULL;
-  }
-  else if (soap->null)
-    *p = NULL;
-  else
-    *p = soap_wstrdup(soap, (wchar_t*)SOAP_STR_EOS);
-  if (*soap->href)
-    p = (wchar_t**)soap_id_lookup(soap, soap->href, (void**)p, t, sizeof(wchar_t**), 0);
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-time_t
-SOAP_FMAC2
-soap_timegm(struct tm *T)
-{
-#if defined(HAVE_TIMEGM)
-  return timegm(T);
-#else
-  time_t t, g, z;
-  struct tm tm;
-  t = mktime(T);
-  if (t == (time_t)-1)
-    return (time_t)-1;
-#ifdef HAVE_GMTIME_R
-  gmtime_r(&t, &tm);
-#else
-  tm = *gmtime(&t);
-#endif
-  tm.tm_isdst = 0;
-  g = mktime(&tm);
-  if (g == (time_t)-1)
-    return (time_t)-1;
-  z = g - t;
-  return t - z;
-#endif
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_dateTime2s(struct soap *soap, time_t n)
-{ struct tm T, *pT = &T;
-#if defined(HAVE_GMTIME_R)
-  if (gmtime_r(&n, pT))
-    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT);
-#elif defined(HAVE_GMTIME)
-  if ((pT = gmtime(&n)))
-    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%SZ", pT);
-#elif defined(HAVE_GETTIMEOFDAY)
-  struct timezone tz;
-  memset((void*)&tz, 0, sizeof(tz));
-#if defined(HAVE_LOCALTIME_R)
-  if (localtime_r(&n, pT))
-  { struct timeval tv;
-    gettimeofday(&tv, &tz);
-    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
-    sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -tz.tz_minuteswest/60+(pT->tm_isdst!=0), abs(tz.tz_minuteswest)%60);
-  }
-#else
-  if ((pT = localtime(&n)))
-  { struct timeval tv;
-    gettimeofday(&tv, &tz);
-    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
-    sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -tz.tz_minuteswest/60+(pT->tm_isdst!=0), abs(tz.tz_minuteswest)%60);
-  }
-#endif
-#elif defined(HAVE_FTIME)
-  struct timeb t;
-  memset((void*)&t, 0, sizeof(t));
-#if defined(HAVE_LOCALTIME_R)
-  if (localtime_r(&n, pT))
-  {
-#ifdef __BORLANDC__
-    ::ftime(&t);
-#else
-    ftime(&t);
-#endif
-    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
-    sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -t.timezone/60+(pT->tm_isdst!=0), abs(t.timezone)%60);
-  }
-#else
-  if ((pT = localtime(&n)))
-  {
-#ifdef __BORLANDC__
-    ::ftime(&t);
-#else
-    ftime(&t);
-#endif
-    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
-    sprintf(soap->tmpbuf + strlen(soap->tmpbuf), "%+03d:%02d", -t.timezone/60+(pT->tm_isdst!=0), abs(t.timezone)%60);
-  }
-#endif
-#elif defined(HAVE_LOCALTIME_R)
-  if (localtime_r(&n, pT))
-    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
-#else
-  if ((pT = localtime(&n)))
-    strftime(soap->tmpbuf, sizeof(soap->tmpbuf), "%Y-%m-%dT%H:%M:%S", pT);
-#endif
-  else
-    strcpy(soap->tmpbuf, "1969-12-31T23:59:59Z");
-  return soap->tmpbuf;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outdateTime(struct soap *soap, const char *tag, int id, const time_t *p, const char *type, int n)
-{ if (soap_element_begin_out(soap, tag, soap_embedded_id(soap, id, p, n), type)
-   || soap_string_out(soap, soap_dateTime2s(soap, *p), 0))
-    return soap->error;
-  return soap_element_end_out(soap, tag);
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_s2dateTime(struct soap *soap, const char *s, time_t *p)
-{ if (s)
-  { char zone[32];
-    struct tm T;
-    const char *t;
-    *zone = '\0';
-    memset((void*)&T, 0, sizeof(T));
-    if (strchr(s, '-'))
-      t = "%d-%d-%dT%d:%d:%d%31s";
-    else if (strchr(s, ':'))
-      t = "%4d%2d%2dT%d:%d:%d%31s";
-    else /* parse non-XSD-standard alternative ISO 8601 format */
-      t = "%4d%2d%2dT%2d%2d%2d%31s";
-    if (sscanf(s, t, &T.tm_year, &T.tm_mon, &T.tm_mday, &T.tm_hour, &T.tm_min, &T.tm_sec, zone) < 6)
-      return soap->error = SOAP_TYPE;
-    if (T.tm_year == 1)
-      T.tm_year = 70;
-    else
-      T.tm_year -= 1900;
-    T.tm_mon--;
-    if (*zone == '.')
-    { for (s = zone + 1; *s; s++)
-        if (*s < '0' || *s > '9')
-          break;
-    }
-    else
-      s = zone;
-    if (*s)
-    {
-#ifndef WITH_NOZONE
-      if (*s == '+' || *s == '-')
-      { int h = 0, m = 0;
-        if (s[3] == ':')
-        { /* +hh:mm */
-	  sscanf(s, "%d:%d", &h, &m);
-          if (h < 0)
-            m = -m;
-        }
-        else /* +hhmm */
-        { m = (int)soap_strtol(s, NULL, 10);
-          h = m / 100;
-          m = m % 100;
-        }
-	T.tm_min -= m;
-	T.tm_hour -= h;
-	/* put hour and min in range */
-        T.tm_hour += T.tm_min / 60;
-        T.tm_min %= 60;
-        if (T.tm_min < 0)
-        { T.tm_min += 60;
-	  T.tm_hour--;
-	}
-        T.tm_mday += T.tm_hour / 24;
-        T.tm_hour %= 24;
-        if (T.tm_hour < 0)
-        { T.tm_hour += 24;
-          T.tm_mday--;
-	}
-	/* note: day of the month may be out of range, timegm() handles it */
-      }
-#endif
-      *p = soap_timegm(&T);
-    }
-    else /* no UTC or timezone, so assume we got a localtime */
-    { T.tm_isdst = -1;
-      *p = mktime(&T);
-    }
-  }
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-time_t *
-SOAP_FMAC2
-soap_indateTime(struct soap *soap, const char *tag, time_t *p, const char *type, int t)
-{ if (soap_element_begin_in(soap, tag, 0, NULL))
-    return NULL;
-  if (*soap->type
-   && soap_match_tag(soap, soap->type, type)
-   && soap_match_tag(soap, soap->type, ":dateTime"))
-  { soap->error = SOAP_TYPE;
-    soap_revert(soap);
-    return NULL;
-  }
-  p = (time_t*)soap_id_enter(soap, soap->id, p, t, sizeof(time_t), 0, NULL, NULL, NULL);
-  if (*soap->href)
-    p = (time_t*)soap_id_forward(soap, soap->href, p, 0, t, 0, sizeof(time_t), 0, NULL);
-  else if (p)
-  { if (soap_s2dateTime(soap, soap_value(soap), p))
-      return NULL;
-  }
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outliteral(struct soap *soap, const char *tag, char *const*p, const char *type)
-{ int i;
-  const char *t = NULL;
-  if (tag && *tag != '-')
-  { if (soap->local_namespaces && (t = strchr(tag, ':')))
-    { strncpy(soap->tmpbuf, tag, t-tag);
-      soap->tmpbuf[t-tag] = '\0';
-      for (i = 0; soap->local_namespaces[i].id; i++)
-        if (!strcmp(soap->tmpbuf, soap->local_namespaces[i].id))
-          break;
-      t++;
-      if (soap_element(soap, t, 0, type)
-       || soap_attribute(soap, "xmlns", soap->local_namespaces[i].ns ? soap->local_namespaces[i].ns : SOAP_STR_EOS)
-       || soap_element_start_end_out(soap, NULL))
-        return soap->error;
-    }
-    else
-    { t = tag;
-      if (soap_element_begin_out(soap, t, 0, type))
-        return soap->error;
-    }
-  }
-  if (p && *p)
-  { if (soap_send(soap, *p))
-      return soap->error;
-  }
-  if (t)
-    return soap_element_end_out(soap, t);
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-char **
-SOAP_FMAC2
-soap_inliteral(struct soap *soap, const char *tag, char **p)
-{ if (soap_element_begin_in(soap, tag, 1, NULL))
-  { if (soap->error != SOAP_NO_TAG || soap_unget(soap, soap_get(soap)) == SOAP_TT)
-      return NULL;
-    soap->error = SOAP_OK;
-  }
-  if (!p)
-  { if (!(p = (char**)soap_malloc(soap, sizeof(char*))))
-      return NULL;
-  }
-  if (soap->body || (tag && *tag == '-'))
-  { *p = soap_string_in(soap, 0, -1, -1);
-    if (!*p)
-      return NULL;
-    if (!**p && tag && *tag == '-')
-    { soap->error = SOAP_NO_TAG;
-      return NULL;
-    }
-  }
-  else if (soap->null)
-    *p = NULL;
-  else
-    *p = soap_strdup(soap, SOAP_STR_EOS);
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_outwliteral(struct soap *soap, const char *tag, wchar_t *const*p, const char *type)
-{ int i;
-  const char *t = NULL;
-  if (tag && *tag != '-')
-  { if (soap->local_namespaces && (t = strchr(tag, ':')))
-    { strncpy(soap->tmpbuf, tag, t-tag);
-      soap->tmpbuf[t-tag] = '\0';
-      for (i = 0; soap->local_namespaces[i].id; i++)
-        if (!strcmp(soap->tmpbuf, soap->local_namespaces[i].id))
-          break;
-      t++;
-      if (soap_element(soap, t, 0, type)
-       || soap_attribute(soap, "xmlns", soap->local_namespaces[i].ns ? soap->local_namespaces[i].ns : SOAP_STR_EOS)
-       || soap_element_start_end_out(soap, NULL))
-        return soap->error;
-    }
-    else
-    { t = tag;
-      if (soap_element_begin_out(soap, t, 0, type))
-        return soap->error;
-    }
-    if (soap_send(soap, soap->tmpbuf))
-      return soap->error;
-  }
-  if (p)
-  { wchar_t c;
-    const wchar_t *s = *p;
-    while ((c = *s++))
-    { if (soap_pututf8(soap, (unsigned long)c))
-        return soap->error;
-    }
-  }
-  if (t)
-    return soap_element_end_out(soap, t);
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_2
-SOAP_FMAC1
-wchar_t **
-SOAP_FMAC2
-soap_inwliteral(struct soap *soap, const char *tag, wchar_t **p)
-{ if (soap_element_begin_in(soap, tag, 1, NULL))
-  { if (soap->error != SOAP_NO_TAG || soap_unget(soap, soap_get(soap)) == SOAP_TT)
-      return NULL;
-    soap->error = SOAP_OK;
-  }
-  if (!p)
-  { if (!(p = (wchar_t**)soap_malloc(soap, sizeof(wchar_t*))))
-      return NULL;
-  }
-  if (soap->body)
-  { *p = soap_wstring_in(soap, 0, -1, -1);
-    if (!*p)
-      return NULL;
-    if (!**p && tag && *tag == '-')
-    { soap->error = SOAP_NO_TAG;
-      return NULL;
-    }
-  }
-  else if (tag && *tag == '-')
-  { soap->error = SOAP_NO_TAG;
-    return NULL;
-  }
-  else if (soap->null)
-    *p = NULL;
-  else
-    *p = soap_wstrdup(soap, (wchar_t*)SOAP_STR_EOS);
-  if (soap->body && soap_element_end_in(soap, tag))
-    return NULL;
-  return p;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-const char *
-SOAP_FMAC2
-soap_value(struct soap *soap)
-{ register size_t i;
-  register soap_wchar c = 0;
-  register char *s = soap->tmpbuf;
-  if (!soap->body)
-    return SOAP_STR_EOS;
-  do c = soap_get(soap);
-  while (soap_blank(c));
-  for (i = 0; i < sizeof(soap->tmpbuf) - 1; i++)
-  { if (c == SOAP_TT || c == SOAP_LT || (int)c == EOF)
-      break;
-    *s++ = (char)c;
-    c = soap_get(soap);
-  }
-  for (s--; i > 0; i--, s--)
-  { if (!soap_blank(*s))
-      break;
-  }
-  s[1] = '\0';
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Element content value='%s'\n", soap->tmpbuf));
-  if (c == SOAP_TT || c == SOAP_LT || (int)c == EOF)
-    soap_unget(soap, c);
-  else if (soap->mode & SOAP_XML_STRICT)
-  { soap->error = SOAP_LENGTH;
-    return NULL;
-  }
-#ifdef WITH_DOM
-  if ((soap->mode & SOAP_XML_DOM) && soap->dom)
-    soap->dom->data = soap_strdup(soap, soap->tmpbuf);
-#endif
-  return soap->tmpbuf; /* return non-null pointer */
-}
-#endif
-
-/******************************************************************************/
-#if !defined(WITH_LEANER) || !defined(WITH_NOHTTP)
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_getline(struct soap *soap, char *s, int len)
-{ int i = len;
-  soap_wchar c = 0;
-  for (;;)
-  { while (--i > 0)
-    { c = soap_getchar(soap);
-      if (c == '\r' || c == '\n')
-        break;
-      if ((int)c == EOF)
-        return soap->error = SOAP_EOF;
-      *s++ = (char)c;
-    }
-    if (c != '\n')
-      c = soap_getchar(soap); /* got \r or something else, now get \n */
-    if (c == '\n')
-    { *s = '\0';
-      if (i+1 == len) /* empty line: end of HTTP/MIME header */
-        break;
-      c = soap_get0(soap);
-      if (c != ' ' && c != '\t') /* HTTP line continuation? */
-        break;
-    }
-    else if ((int)c == EOF)
-      return soap->error = SOAP_EOF;
-    if (i < 0)
-      return soap->error = SOAP_HDR;
-  }
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-static size_t
-soap_count_attachments(struct soap *soap)
-{ 
-#ifndef WITH_LEANER
-  register struct soap_multipart *content;
-  register size_t count = soap->count;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Calculating the message size with attachments, current count=%lu\n", (unsigned long)count));
-  if ((soap->mode & SOAP_ENC_DIME) && !(soap->mode & SOAP_ENC_MTOM))
-  { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Calculating the size of DIME attachments\n"));
-    for (content = soap->dime.first; content; content = content->next)
-    { count += 12 + ((content->size+3)&(~3));
-      if (content->id)
-        count += ((strlen(content->id)+3)&(~3));
-      if (content->type)
-        count += ((strlen(content->type)+3)&(~3));
-      if (content->options)
-        count += ((((unsigned char)content->options[2] << 8) | ((unsigned char)content->options[3]))+7)&(~3);
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Size of DIME attachment content is %lu bytes\n", (unsigned long)content->size));
-    }
-  }
-  if ((soap->mode & SOAP_ENC_MIME) && soap->mime.boundary)
-  { register size_t n = strlen(soap->mime.boundary);
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Calculating the size of MIME attachments\n"));
-    for (content = soap->mime.first; content; content = content->next)
-    { register const char *s;
-      /* count \r\n--boundary\r\n */
-      count += 6 + n;
-      /* count Content-Type: ...\r\n */
-      if (content->type)
-        count += 16 + strlen(content->type);
-      /* count Content-Transfer-Encoding: ...\r\n */
-      s = soap_code_str(mime_codes, content->encoding);
-      if (s)
-        count += 29 + strlen(s);
-      /* count Content-ID: ...\r\n */
-      if (content->id)
-        count += 14 + strlen(content->id);
-      /* count Content-Location: ...\r\n */
-      if (content->location)
-        count += 20 + strlen(content->location);
-      /* count Content-Description: ...\r\n */
-      if (content->description)
-        count += 23 + strlen(content->description);
-      /* count \r\n...content */
-      count += 2 + content->size;
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Size of MIME attachment content is %lu bytes\n", (unsigned long)content->size));
-    }
-    /* count \r\n--boundary-- */
-    count += 6 + n;
-  }
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "New count is %lu bytes\n", (unsigned long)count));
-  return count;
-#else
-  return soap->count;
-#endif
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-static int
-soap_putdimefield(struct soap *soap, const char *s, size_t n)
-{ if (soap_send_raw(soap, s, n))
-    return soap->error;
-  return soap_send_raw(soap, SOAP_STR_PADDING, -(long)n&3);
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-char *
-SOAP_FMAC2
-soap_dime_option(struct soap *soap, unsigned short optype, const char *option)
-{ size_t n;
-  char *s = NULL;
-  if (option)
-  { n = strlen(option);
-    s = (char*)soap_malloc(soap, n + 5);
-    if (s)
-    { s[0] = (char)(optype >> 8);
-      s[1] = (char)(optype & 0xFF);
-      s[2] = (char)(n >> 8);
-      s[3] = (char)(n & 0xFF);
-      strcpy(s + 4, option);
-    }
-  }
-  return s;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_putdimehdr(struct soap *soap)
-{ unsigned char tmp[12];
-  size_t optlen = 0, idlen = 0, typelen = 0;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Put DIME header id='%s'\n", soap->dime.id?soap->dime.id:SOAP_STR_EOS));
-  if (soap->dime.options)
-    optlen = (((unsigned char)soap->dime.options[2] << 8) | ((unsigned char)soap->dime.options[3])) + 4;
-  if (soap->dime.id)
-  { idlen = strlen(soap->dime.id);
-    if (idlen > 0x0000FFFF)
-      idlen = 0x0000FFFF;
-  }
-  if (soap->dime.type)
-  { typelen = strlen(soap->dime.type);
-    if (typelen > 0x0000FFFF)
-      typelen = 0x0000FFFF;
-  }
-  tmp[0] = SOAP_DIME_VERSION | (soap->dime.flags & 0x7);
-  tmp[1] = soap->dime.flags & 0xF0;
-  tmp[2] = (char)(optlen >> 8);
-  tmp[3] = (char)(optlen & 0xFF);
-  tmp[4] = (char)(idlen >> 8);
-  tmp[5] = (char)(idlen & 0xFF);
-  tmp[6] = (char)(typelen >> 8);
-  tmp[7] = (char)(typelen & 0xFF);
-  tmp[8] = (char)(soap->dime.size >> 24);
-  tmp[9] = (char)((soap->dime.size >> 16) & 0xFF);
-  tmp[10] = (char)((soap->dime.size >> 8) & 0xFF);
-  tmp[11] = (char)(soap->dime.size & 0xFF);
-  if (soap_send_raw(soap, (char*)tmp, 12)
-   || soap_putdimefield(soap, soap->dime.options, optlen)
-   || soap_putdimefield(soap, soap->dime.id, idlen)
-   || soap_putdimefield(soap, soap->dime.type, typelen))
-    return soap->error;
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_putdime(struct soap *soap)
-{ struct soap_multipart *content;
-  if (!(soap->mode & SOAP_ENC_DIME))
-    return SOAP_OK;
-  for (content = soap->dime.first; content; content = content->next)
-  { void *handle;
-    soap->dime.size = content->size;
-    soap->dime.id = content->id;
-    soap->dime.type = content->type;
-    soap->dime.options = content->options;
-    soap->dime.flags = SOAP_DIME_VERSION | SOAP_DIME_MEDIA;
-    if (soap->fdimereadopen && ((handle = soap->fdimereadopen(soap, (void*)content->ptr, content->id, content->type, content->options)) || soap->error))
-    { size_t size = content->size;
-      if (!handle)
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadopen failed\n"));
-        return soap->error;
-      }
-      if (!size && ((soap->mode & SOAP_ENC_XML) || (soap->mode & SOAP_IO) == SOAP_IO_CHUNK || (soap->mode & SOAP_IO) == SOAP_IO_STORE))
-      { size_t chunksize = sizeof(soap->tmpbuf);
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked streaming DIME\n"));
-        do 
-        { size = soap->fdimeread(soap, handle, soap->tmpbuf, chunksize);
-          DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimeread returned %lu bytes\n", (unsigned long)size));
-          if (size < chunksize)
-          { soap->dime.flags &= ~SOAP_DIME_CF;
-            if (!content->next)
-              soap->dime.flags |= SOAP_DIME_ME;
-          }
-          else
-            soap->dime.flags |= SOAP_DIME_CF;
-          soap->dime.size = size;
-          if (soap_putdimehdr(soap)
-           || soap_putdimefield(soap, soap->tmpbuf, size))
-            break;
-          if (soap->dime.id)
-          { soap->dime.flags &= ~(SOAP_DIME_MB | SOAP_DIME_MEDIA);
-            soap->dime.id = NULL;
-            soap->dime.type = NULL;
-            soap->dime.options = NULL;
-          }  
-        } while (size >= chunksize);
-      }
-      else
-      { if (!content->next)
-          soap->dime.flags |= SOAP_DIME_ME;
-        if (soap_putdimehdr(soap))
-          return soap->error;
-        do
-        { size_t bufsize;
-          if (size < sizeof(soap->tmpbuf))
-            bufsize = size;
-          else
-            bufsize = sizeof(soap->tmpbuf);
-          if (!(bufsize = soap->fdimeread(soap, handle, soap->tmpbuf, bufsize)))
-          { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimeread failed: insufficient data (%lu bytes remaining from %lu bytes)\n", (unsigned long)size, (unsigned long)content->size));
-            soap->error = SOAP_EOF;
-            break;
-          }
-          if (soap_send_raw(soap, soap->tmpbuf, bufsize))
-            break;
-          size -= bufsize;
-        } while (size);
-        DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadclose\n"));
-        soap_send_raw(soap, SOAP_STR_PADDING, -(long)soap->dime.size&3);
-      }
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fdimereadclose\n"));
-      if (soap->fdimereadclose)
-        soap->fdimereadclose(soap, handle);
-    }
-    else
-    { if (!content->next)
-        soap->dime.flags |= SOAP_DIME_ME;
-      if (soap_putdimehdr(soap)
-       || soap_putdimefield(soap, (char*)content->ptr, content->size))
-        return soap->error;
-    }
-  }
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-static char *
-soap_getdimefield(struct soap *soap, size_t n)
-{ register soap_wchar c;
-  register size_t i;
-  register char *s;
-  register char *p = NULL;
-  if (n)
-  { p = (char*)soap_malloc(soap, n + 1);
-    if (p)
-    { s = p;
-      for (i = n; i > 0; i--)
-      { if ((int)(c = soap_get1(soap)) == EOF)
-        { soap->error = SOAP_EOF;
-          return NULL;
-        }
-        *s++ = (char)c;
-      }
-      *s = '\0';
-      if ((soap->error = soap_move(soap, -(long)n&3)))
-        return NULL;
-    }
-    else
-      soap->error = SOAP_EOM;
-  }
-  return p;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_getdimehdr(struct soap *soap)
-{ register soap_wchar c;
-  register char *s;
-  register int i;
-  unsigned char tmp[12];
-  size_t optlen, idlen, typelen;
-  if (!(soap->mode & SOAP_ENC_DIME))
-    return soap->error = SOAP_DIME_END;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get DIME header\n"));
-  if (soap->dime.buflen || soap->dime.chunksize)
-  { if (soap_move(soap, (long)(soap->dime.size - soap_tell(soap))))
-      return soap->error = SOAP_EOF;
-    soap_unget(soap, soap_getchar(soap)); /* skip padding and get hdr */
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "... From chunked\n"));
-    return SOAP_OK;
-  }
-  s = (char*)tmp;
-  for (i = 12; i > 0; i--)
-  { if ((int)(c = soap_getchar(soap)) == EOF)
-      return soap->error = SOAP_EOF;
-    *s++ = (char)c;
-  }
-  if ((tmp[0] & 0xF8) != SOAP_DIME_VERSION)
-    return soap->error = SOAP_DIME_MISMATCH;
-  soap->dime.flags = (tmp[0] & 0x7) | (tmp[1] & 0xF0);
-  optlen = (tmp[2] << 8) | tmp[3];
-  idlen = (tmp[4] << 8) | tmp[5];
-  typelen = (tmp[6] << 8) | tmp[7];
-  soap->dime.size = (tmp[8] << 24) | (tmp[9] << 16) | (tmp[10] << 8) | tmp[11];
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME size=%lu flags=0x%X\n", (unsigned long)soap->dime.size, soap->dime.flags));
-  if (!(soap->dime.options = soap_getdimefield(soap, optlen)) && soap->error)
-    return soap->error;
-  if (!(soap->dime.id = soap_getdimefield(soap, idlen)) && soap->error)
-    return soap->error;
-  if (!(soap->dime.type = soap_getdimefield(soap, typelen)) && soap->error)
-    return soap->error;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "DIME id=%s, type=%s, options=%s\n", soap->dime.id?soap->dime.id:SOAP_STR_EOS, soap->dime.type?soap->dime.type:"", soap->dime.options?soap->dime.options+4:SOAP_STR_EOS));
-  if (soap->dime.flags & SOAP_DIME_ME)
-    soap->mode &= ~SOAP_ENC_DIME;
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_getdime(struct soap *soap)
-{ while (soap->dime.flags & SOAP_DIME_CF)
-  { if (soap_getdimehdr(soap))
-      return soap->error;
-    if (soap_move(soap, (long)soap->dime.size))
-      return soap->error = SOAP_EOF;
-  }
-  if (soap_move(soap, (long)(((soap->dime.size+3)&(~3))-soap_tell(soap))))
-    return soap->error = SOAP_EOF;
-  for (;;)
-  { register struct soap_multipart *content;
-    if (soap_getdimehdr(soap))
-      break;
-    if (soap->fdimewriteopen && ((soap->dime.ptr = (char*)soap->fdimewriteopen(soap, soap->dime.id, soap->dime.type, soap->dime.options)) || soap->error))
-    { const char *id, *type, *options;
-      size_t size, n;
-      if (!soap->dime.ptr)
-        return soap->error;
-      id = soap->dime.id;
-      type = soap->dime.type;
-      options = soap->dime.options;
-      for (;;)
-      { size = soap->dime.size;
-        for (;;)
-        { n = soap->buflen - soap->bufidx;
-          if (size < n)
-            n = size;
-          if ((soap->error = soap->fdimewrite(soap, (void*)soap->dime.ptr, soap->buf + soap->bufidx, n)))
-            break;
-          size -= n;
-          if (!size)
-          { soap->bufidx += n;
-            break;
-          }
-          if (soap_recv(soap))
-          { soap->error = SOAP_EOF;
-            goto end;
-          }
-        }
-        if (soap_move(soap, -(long)soap->dime.size&3))
-        { soap->error = SOAP_EOF;
-          break;
-        }
-        if (!(soap->dime.flags & SOAP_DIME_CF))
-          break;
-        if (soap_getdimehdr(soap))
-          break;
-      }
-end:
-      if (soap->fdimewriteclose)
-        soap->fdimewriteclose(soap, (void*)soap->dime.ptr);
-      soap->dime.size = 0;
-      soap->dime.id = id;
-      soap->dime.type = type;
-      soap->dime.options = options;
-    }
-    else if (soap->dime.flags & SOAP_DIME_CF)
-    { const char *id, *type, *options;
-      id = soap->dime.id;
-      type = soap->dime.type;
-      options = soap->dime.options;
-      if (soap_new_block(soap) == NULL)
-        return SOAP_EOM;
-      for (;;)
-      { register soap_wchar c;
-        register size_t i;
-        register char *s;
-        s = (char*)soap_push_block(soap, NULL, soap->dime.size);
-        if (!s)
-          return soap->error = SOAP_EOM;
-        for (i = soap->dime.size; i > 0; i--)
-        { if ((int)(c = soap_get1(soap)) == EOF)
-            return soap->error = SOAP_EOF;
-          *s++ = (char)c;
-        }
-        if (soap_move(soap, -(long)soap->dime.size&3))
-          return soap->error = SOAP_EOF;
-        if (!(soap->dime.flags & SOAP_DIME_CF))
-          break;
-        if (soap_getdimehdr(soap))
-          return soap->error;
-      }
-      soap->dime.size = soap->blist->size++; /* allocate one more for '\0' */
-      if (!(soap->dime.ptr = soap_save_block(soap, NULL, NULL, 0)))
-        return soap->error;
-      soap->dime.ptr[soap->dime.size] = '\0'; /* force 0-terminated */
-      soap->dime.id = id;
-      soap->dime.type = type;
-      soap->dime.options = options;
-    }
-    else
-      soap->dime.ptr = soap_getdimefield(soap, soap->dime.size);
-    content = soap_new_multipart(soap, &soap->dime.first, &soap->dime.last, soap->dime.ptr, soap->dime.size);
-    if (!content)
-      return soap->error = SOAP_EOM;
-    content->id = soap->dime.id;
-    content->type = soap->dime.type;
-    content->options = soap->dime.options;
-    if (soap->error)
-      return soap->error;
-    soap_resolve_attachment(soap, content);
-  }
-  if (soap->error != SOAP_DIME_END)
-    return soap->error;
-  return soap->error = SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_getmimehdr(struct soap *soap)
-{ struct soap_multipart *content;
-  do
-  { if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf)))
-      return soap->error;
-  }
-  while (!*soap->msgbuf);
-  if (soap->msgbuf[0] == '-' && soap->msgbuf[1] == '-')
-  { char *s = soap->msgbuf + strlen(soap->msgbuf) - 1;
-    /* remove white space */
-    while (soap_blank(*s))
-      s--;
-    s[1] = '\0';
-    if (soap->mime.boundary)
-    { if (strcmp(soap->msgbuf + 2, soap->mime.boundary))
-        return soap->error = SOAP_MIME_ERROR;
-    }
-    else
-      soap->mime.boundary = soap_strdup(soap, soap->msgbuf + 2);
-    if (soap_getline(soap, soap->msgbuf, sizeof(soap->msgbuf)))
-      return soap->error;
-  }
-  if (soap_set_mime_attachment(soap, NULL, 0, SOAP_MIME_NONE, NULL, NULL, NULL, NULL))
-    return soap->error = SOAP_EOM;
-  content = soap->mime.last;
-  for (;;)
-  { register char *key = soap->msgbuf;
-    register char *val;
-    if (!*key)
-      break;
-    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "MIME header: %s\n", key));
-    val = strchr(soap->msgbuf, ':');
-    if (val)
-    { *val = '\0';
-      do val++;
-      while (*val && *val <= 32);
-      if (!soap_tag_cmp(key, "Content-ID"))
-        content->id = soap_strdup(soap, val);
-      else if (!soap_tag_cmp(key, "Content-Location"))
-        content->location = soap_strdup(soap, val);
-      else if (!soap_tag_cmp(key, "Content-Disposition"))
-        content->id = soap_strdup(soap, soap_get_header_attribute(soap, val, "name"));
-      else if (!soap_tag_cmp(key, "Content-Type"))
-        content->type = soap_strdup(soap, val);
-      else if (!soap_tag_cmp(key, "Content-Description"))
-        content->description = soap_strdup(soap, val);
-      else if (!soap_tag_cmp(key, "Content-Transfer-Encoding"))
-        content->encoding = (enum soap_mime_encoding)soap_code_int(mime_codes, val, (long)SOAP_MIME_NONE);
-    }
-    if (soap_getline(soap, key, sizeof(soap->msgbuf)))
-      return soap->error;
-  }
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_getmime(struct soap *soap)
-{ while (soap_get_mime_attachment(soap, NULL))
-    ;
-  return soap->error;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_post_check_mime_attachments(struct soap *soap)
-{ soap->imode |= SOAP_MIME_POSTCHECK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_check_mime_attachments(struct soap *soap)
-{ if (soap->mode & SOAP_MIME_POSTCHECK)
-    return soap_get_mime_attachment(soap, NULL) != NULL;
-  return 0;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-struct soap_multipart *
-SOAP_FMAC2
-soap_get_mime_attachment(struct soap *soap, void *handle)
-{ register soap_wchar c = 0;
-  register size_t i, m = 0;
-  register char *s, *t = NULL;
-  register struct soap_multipart *content;
-  register short flag = 0;
-  if (!(soap->mode & SOAP_ENC_MIME))
-    return NULL;
-  content = soap->mime.last;
-  if (!content)
-  { if (soap_getmimehdr(soap))
-      return NULL;
-    content = soap->mime.last;
-  }
-  else if (content != soap->mime.first)
-  { if (soap->fmimewriteopen && ((content->ptr = (char*)soap->fmimewriteopen(soap, (void*)handle, content->id, content->type, content->description, content->encoding)) || soap->error))
-    { if (!content->ptr)
-        return NULL;
-    }
-  }
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Parsing MIME content id=%s type=%s\n", content->id?content->id:SOAP_STR_EOS, content->type?content->type:SOAP_STR_EOS));
-  if (!content->ptr && soap_new_block(soap) == NULL)
-  { soap->error = SOAP_EOM;
-    return NULL;
-  }
-  for (;;)
-  { if (content->ptr)
-      s = soap->tmpbuf;
-    else if (!(s = (char*)soap_push_block(soap, NULL, sizeof(soap->tmpbuf))))
-    { soap->error = SOAP_EOM;
-      return NULL;
-    }
-    for (i = 0; i < sizeof(soap->tmpbuf); i++)
-    { if (m > 0)
-      { *s++ = *t++;
-        m--;
-      }
-      else
-      { if (!flag)
-        { c = soap_get1(soap);
-          if ((int)c == EOF)
-          { soap->error = SOAP_EOF;
-            return NULL;
-          }
-        }
-        if (flag || c == '\r')
-        { t = soap->msgbuf;
-          memset(t, 0, sizeof(soap->msgbuf));
-          strcpy(t, "\n--");
-          if (soap->mime.boundary)
-            strncat(t, soap->mime.boundary, sizeof(soap->msgbuf)-4);
-          do c = soap_getchar(soap);
-          while (c == *t++);
-          if ((int)c == EOF)
-          { soap->error = SOAP_EOF;
-            return NULL;
-          }
-          if (!*--t)
-            goto end;
-          *t = (char)c;
-          flag = (c == '\r');
-          m = t - soap->msgbuf + 1 - flag;
-          t = soap->msgbuf;
-          c = '\r';
-        }
-        *s++ = (char)c;
-      }
-    }
-    if (content->ptr && soap->fmimewrite)
-    { if ((soap->error = soap->fmimewrite(soap, (void*)content->ptr, soap->tmpbuf, i)))
-        break;
-    }
-  }
-end:
-  *s = '\0'; /* force 0-terminated */
-  if (content->ptr)
-  { if (!soap->error && soap->fmimewrite)
-      soap->error = soap->fmimewrite(soap, (void*)content->ptr, soap->tmpbuf, i);
-    if (soap->fmimewriteclose)
-      soap->fmimewriteclose(soap, (void*)content->ptr);
-    if (soap->error)
-      return NULL;
-  }
-  else
-  { content->size = soap_size_block(soap, NULL, i+1)-1;
-    content->ptr = soap_save_block(soap, NULL, NULL, 0);
-  }
-  soap_resolve_attachment(soap, content);
-  if (c == '-' && soap_getchar(soap) == '-')
-  { soap->mode &= ~SOAP_ENC_MIME;
-    if ((soap->mode & SOAP_MIME_POSTCHECK) && soap_end_recv(soap))
-      return NULL;
-  }
-  else
-  { while (c != '\r' && (int)c != EOF && soap_blank(c))
-      c = soap_getchar(soap);
-    if (c != '\r' || soap_getchar(soap) != '\n')
-    { soap->error = SOAP_MIME_ERROR;
-      return NULL;
-    }
-    if (soap_getmimehdr(soap))
-      return NULL;
-  }
-  return content;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_match_cid(struct soap *soap, const char *s, const char *t)
-{ register size_t n;
-  if (!s)
-    return 1;
-  if (!strcmp(s, t))
-    return 0;
-  if (!strncmp(s, "cid:", 4))
-    s += 4;
-  n = strlen(t);
-  if (*t == '<')
-  { t++;
-    n -= 2;
-  }
-  if (!strncmp(s, t, n) && !s[n])
-    return 0;
-  soap_decode(soap->tmpbuf, sizeof(soap->tmpbuf), s, SOAP_STR_EOS);
-  if (!strncmp(soap->tmpbuf, t, n) && !soap->tmpbuf[n])
-    return 0;
-  return 1;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-static void
-soap_resolve_attachment(struct soap *soap, struct soap_multipart *content)
-{ if (content->id)
-  { register struct soap_xlist **xp = &soap->xlist;
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Resolving attachment data for id=%s\n", content->id));
-    while (*xp)
-    { register struct soap_xlist *xq = *xp;
-      if (!soap_match_cid(soap, xq->id, content->id))
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Found matching attachment %s for content id=%s\n", xq->id, content->id));
-        *xp = xq->next;
-        *xq->ptr = (unsigned char*)content->ptr;
-        *xq->size = (int)content->size;
-        *xq->type = (char*)content->type;
-        if (content->options)
-          *xq->options = (char*)content->options;
-        else
-          *xq->options = (char*)content->description;
-        SOAP_FREE(soap, xq);
-      }
-      else
-        xp = &(*xp)->next;
-    }
-  }
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_putmimehdr(struct soap *soap, struct soap_multipart *content)
-{ const char *s;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "MIME attachment type=%s\n", content->type?content->type:SOAP_STR_EOS));
-  if (soap_send3(soap, "\r\n--", soap->mime.boundary, "\r\n"))
-    return soap->error;
-  if (content->type && soap_send3(soap, "Content-Type: ", content->type, "\r\n"))
-    return soap->error;
-  s = soap_code_str(mime_codes, content->encoding);
-  if (s && soap_send3(soap, "Content-Transfer-Encoding: ", s, "\r\n"))
-    return soap->error;
-  if (content->id && soap_send3(soap, "Content-ID: ", content->id, "\r\n"))
-    return soap->error;
-  if (content->location && soap_send3(soap, "Content-Location: ", content->location, "\r\n"))
-    return soap->error;
-  if (content->description && soap_send3(soap, "Content-Description: ", content->description, "\r\n"))
-    return soap->error;
-  return soap_send_raw(soap, "\r\n", 2);
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_putmime(struct soap *soap)
-{ struct soap_multipart *content;
-  if (!(soap->mode & SOAP_ENC_MIME) || !soap->mime.boundary)
-    return SOAP_OK;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Sending MIME attachments\n"));
-  for (content = soap->mime.first; content; content = content->next)
-  { void *handle;
-    if (soap->fmimereadopen && ((handle = soap->fmimereadopen(soap, (void*)content->ptr, content->id, content->type, content->description)) || soap->error))
-    { size_t size = content->size;
-      if (!handle)
-      { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fmimereadopen failed\n"));
-        return soap->error;
-      }
-      if (soap_putmimehdr(soap, content))
-        return soap->error;
-      if (!size)
-      { if ((soap->mode & SOAP_ENC_XML) || (soap->mode & SOAP_IO) == SOAP_IO_CHUNK || (soap->mode & SOAP_IO) == SOAP_IO_STORE)
-        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked streaming MIME\n"));
-          do 
-          { size = soap->fmimeread(soap, handle, soap->tmpbuf, sizeof(soap->tmpbuf));
-            DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fmimeread returned %lu bytes\n", (unsigned long)size));
-            if (soap_send_raw(soap, soap->tmpbuf, size))
-              break;
-          } while (size); 
-        }
-        else
-        { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Error: cannot chunk streaming MIME (no HTTP chunking)\n"));
-        }
-      }
-      else
-      { do
-        { size_t bufsize;
-          if (size < sizeof(soap->tmpbuf))
-            bufsize = size;
-          else
-            bufsize = sizeof(soap->tmpbuf);
-          if (!(bufsize = soap->fmimeread(soap, handle, soap->tmpbuf, bufsize)))
-          { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "fmimeread failed: insufficient data (%lu bytes remaining from %lu bytes)\n", (unsigned long)size, (unsigned long)content->size));
-            soap->error = SOAP_EOF;
-            break;
-          }
-          if (soap_send_raw(soap, soap->tmpbuf, bufsize))
-            break;
-          size -= bufsize;
-        } while (size);
-      }
-      if (soap->fmimereadclose)
-        soap->fmimereadclose(soap, handle);
-    }
-    else
-    { if (soap_putmimehdr(soap, content)
-       || soap_send_raw(soap, content->ptr, content->size))
-        return soap->error;
-    }
-  }
-  return soap_send3(soap, "\r\n--", soap->mime.boundary, "--");
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_set_dime(struct soap *soap)
-{ soap->omode |= SOAP_ENC_DIME;
-  soap->dime.first = NULL;
-  soap->dime.last = NULL;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_set_mime(struct soap *soap, const char *boundary, const char *start)
-{ soap->omode |= SOAP_ENC_MIME;
-  soap->mime.first = NULL;
-  soap->mime.last = NULL;
-  soap->mime.boundary = soap_strdup(soap, boundary);
-  soap->mime.start = soap_strdup(soap, start);
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_clr_dime(struct soap *soap)
-{ soap->omode &= ~SOAP_ENC_DIME;
-  soap->dime.first = NULL;
-  soap->dime.last = NULL;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_clr_mime(struct soap *soap)
-{ soap->omode &= ~SOAP_ENC_MIME;
-  soap->mime.first = NULL;
-  soap->mime.last = NULL;
-  soap->mime.boundary = NULL;
-  soap->mime.start = NULL;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-static struct soap_multipart*
-soap_new_multipart(struct soap *soap, struct soap_multipart **first, struct soap_multipart **last, char *ptr, size_t size)
-{ struct soap_multipart *content;
-  content = (struct soap_multipart*)soap_malloc(soap, sizeof(struct soap_multipart));
-  if (content)
-  { content->next = NULL;
-    content->ptr = ptr;
-    content->size = size;
-    content->id = NULL;
-    content->type = NULL;
-    content->options = NULL;
-    content->encoding = SOAP_MIME_NONE;
-    content->location = NULL;
-    content->description = NULL;
-    if (!*first)
-      *first = content;
-    if (*last)
-      (*last)->next = content;
-    *last = content;
-  }
-  return content;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_set_dime_attachment(struct soap *soap, char *ptr, size_t size, const char *type, const char *id, unsigned short optype, const char *option)
-{ struct soap_multipart *content = soap_new_multipart(soap, &soap->dime.first, &soap->dime.last, ptr, size);
-  if (!content)
-    return SOAP_EOM;
-  content->id = soap_strdup(soap, id);
-  content->type = soap_strdup(soap, type);
-  content->options = soap_dime_option(soap, optype, option);
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_set_mime_attachment(struct soap *soap, char *ptr, size_t size, enum soap_mime_encoding encoding, const char *type, const char *id, const char *location, const char *description)
-{ struct soap_multipart *content = soap_new_multipart(soap, &soap->mime.first, &soap->mime.last, ptr, size);
-  if (!content)
-    return SOAP_EOM;
-  content->id = soap_strdup(soap, id);
-  content->type = soap_strdup(soap, type);
-  content->encoding = encoding;
-  content->location = soap_strdup(soap, location);
-  content->description = soap_strdup(soap, description);
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-SOAP_FMAC1
-struct soap_multipart*
-SOAP_FMAC2
-soap_next_multipart(struct soap_multipart *content)
-{ if (content)
-    return content->next;
-  return NULL;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-static void
-soap_select_mime_boundary(struct soap *soap)
-{ while (!soap->mime.boundary || soap_valid_mime_boundary(soap))
-  { register char *s = soap->mime.boundary;
-    register size_t n = 0;
-    if (s)
-      n = strlen(s);
-    if (n < 16)
-    { n = 64;
-      s = soap->mime.boundary = (char*)soap_malloc(soap, n + 1);
-      if (!s)
-        return;
-    }
-    strcpy(s, "==");
-    s += 2;
-    n -= 4;
-    while (n)
-    { *s++ = soap_base64o[soap_random & 0x3F];
-      n--;
-    }
-    strcpy(s, "==");
-  }
-  if (!soap->mime.start)
-    soap->mime.start = "<SOAP-ENV:Envelope>";
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEANER
-#ifndef PALM_1
-static int
-soap_valid_mime_boundary(struct soap *soap)
-{ register struct soap_multipart *content;
-  register size_t k;
-  if (soap->fmimeread)
-    return SOAP_OK;
-  k = strlen(soap->mime.boundary);
-  for (content = soap->mime.first; content; content = content->next)
-  { if (content->ptr && content->size >= k)
-    { register const char *p = (const char*)content->ptr; 
-      register size_t i;
-      for (i = 0; i < content->size - k; i++, p++)
-      { if (!strncmp(p, soap->mime.boundary, k))
-          return SOAP_ERR;
-      }
-    }
-  }
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifdef WITH_GZIP
-#ifndef PALM_1
-static int
-soap_getgziphdr(struct soap *soap)
-{ int i;
-  soap_wchar c = 0, f = 0;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Get gzip header\n"));
-  for (i = 0; i < 9; i++)
-  { if ((int)(c = soap_get1(soap) == EOF))
-      return soap->error = SOAP_EOF;
-    if (i == 1 && c == 8)
-      soap->z_dict = 0;
-    if (i == 2)
-      f = c;
-  }
-  if (f & 0x04) /* FEXTRA */
-  { for (i = soap_get1(soap) | (soap_get1(soap) << 8); i; i--)
-    { if ((int)soap_get1(soap) == EOF)
-        return soap->error = SOAP_EOF;
-    }
-  }
-  if (f & 0x08) /* skip FNAME */
-  { do
-      c = soap_get1(soap);
-    while (c && (int)c != EOF);
-  }
-  if ((int)c != EOF && (f & 0x10)) /* skip FCOMMENT */
-  { do
-      c = soap_get1(soap);
-    while (c && (int)c != EOF);
-  }
-  if ((int)c != EOF && (f & 0x02)) /* skip FHCRC (CRC32 is used) */
-  { if ((int)(c = soap_get1(soap)) != EOF)
-      c = soap_get1(soap);
-  }
-  if ((int)c == EOF)
-    return soap->error = SOAP_EOF;
-  return SOAP_OK;
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_begin_recv(struct soap *soap)
-{ soap_wchar c;
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Initializing for input\n"));
-  soap->error = SOAP_OK;
-  soap_free_temp(soap);
-  soap_set_local_namespaces(soap);
-  soap->version = 0;	/* don't assume we're parsing SOAP content by default */
-#ifndef WITH_NOIDREF
-  soap_free_iht(soap);
-#endif
-  if ((soap->imode & SOAP_IO) == SOAP_IO_CHUNK)
-    soap->omode |= SOAP_IO_CHUNK;
-  soap->imode &= ~(SOAP_IO | SOAP_ENC_MIME);
-  soap->mode = soap->imode;
-  if (!soap->keep_alive)
-  { soap->buflen = 0;
-    soap->bufidx = 0;
-  }
-  if (!(soap->mode & SOAP_IO_KEEPALIVE))
-    soap->keep_alive = 0;
-  soap->ahead = 0;
-  soap->peeked = 0;
-  soap->level = 0;
-  soap->part = SOAP_BEGIN;
-  soap->alloced = 0;
-  soap->count = 0;
-  soap->length = 0;
-  soap->cdata = 0;
-  *soap->endpoint = '\0';
-  soap->action = NULL;
-  soap->header = NULL;
-  soap->fault = NULL;
-  soap->status = 0;
-#ifndef WITH_LEANER
-  soap->dom = NULL;
-  soap->dime.chunksize = 0;
-  soap->dime.buflen = 0;
-  soap->dime.list = NULL;
-  soap->dime.first = NULL;
-  soap->dime.last = NULL;
-  soap->mime.list = NULL;
-  soap->mime.first = NULL;
-  soap->mime.last = NULL;
-  soap->mime.boundary = NULL;
-  soap->mime.start = NULL;
-#endif
-#ifdef WIN32
-#ifndef UNDER_CE
-#ifndef WITH_FASTCGI
-  if (!soap_valid_socket(soap->socket))
-#ifdef __BORLANDC__
-    setmode(soap->recvfd, _O_BINARY);
-#else
-    _setmode(soap->recvfd, _O_BINARY);
-#endif
-#endif
-#endif
-#endif
-#ifdef WITH_ZLIB
-  soap->mode &= ~SOAP_ENC_ZLIB;
-  soap->zlib_in = SOAP_ZLIB_NONE;
-  soap->zlib_out = SOAP_ZLIB_NONE;
-  soap->d_stream->next_in = Z_NULL;
-  soap->d_stream->avail_in = 0;
-  soap->d_stream->next_out = (Byte*)soap->buf;
-  soap->d_stream->avail_out = SOAP_BUFLEN;
-  soap->z_ratio_in = 1.0;
-#endif
-#ifdef WITH_OPENSSL
-  if (soap->ssl)
-    ERR_clear_error();
-#endif
-#ifndef WITH_LEANER
-  if (soap->fprepareinitrecv && (soap->error = soap->fprepareinitrecv(soap)))
-    return soap->error;
-#endif
-  c = soap_getchar(soap);
-#ifdef WITH_GZIP
-  if (c == 0x1F)
-  { if (soap_getgziphdr(soap))
-      return soap->error;
-    if (inflateInit2(soap->d_stream, -MAX_WBITS) != Z_OK)
-      return soap->error = SOAP_ZLIB_ERROR;
-    if (soap->z_dict)
-    { if (inflateSetDictionary(soap->d_stream, (const Bytef*)soap->z_dict, soap->z_dict_len) != Z_OK)
-        return soap->error = SOAP_ZLIB_ERROR;
-    }
-    soap->zlib_state = SOAP_ZLIB_INFLATE;
-    soap->mode |= SOAP_ENC_ZLIB;
-    soap->zlib_in = SOAP_ZLIB_GZIP;
-    soap->z_crc = crc32(0L, NULL, 0);
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip initialized\n"));
-    if (!soap->z_buf)
-      soap->z_buf = (char*)SOAP_MALLOC(soap, SOAP_BUFLEN);
-    memcpy(soap->z_buf, soap->buf, SOAP_BUFLEN);
-    /* should not chunk over plain transport, so why bother to check? */
-    /* if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK) */
-    /*   soap->z_buflen = soap->bufidx; */
-    /* else */
-    soap->d_stream->next_in = (Byte*)(soap->z_buf + soap->bufidx);
-    soap->d_stream->avail_in = soap->buflen - soap->bufidx;
-    soap->z_buflen = soap->buflen;
-    soap->buflen = soap->bufidx;
-    c = ' ';
-  }
-#endif
-  while (soap_blank(c))
-    c = soap_getchar(soap);
-#ifndef WITH_LEANER
-  if (c == '-' && soap_get0(soap) == '-')
-    soap->mode |= SOAP_ENC_MIME;
-  else if ((c & 0xFFFC) == (SOAP_DIME_VERSION | SOAP_DIME_MB) && (soap_get0(soap) & 0xFFF0) == 0x20)
-    soap->mode |= SOAP_ENC_DIME;
-  else
-#endif
-  { /* skip BOM */
-    if (c == 0xEF && (c = soap_getchar(soap)) == 0xBB && (c = soap_getchar(soap)) == 0xBF)
-      c = soap_getchar(soap);
-    /* skip space */
-    while (soap_blank(c))
-      c = soap_getchar(soap);
-  }
-  if ((int)c == EOF)
-    return soap->error = SOAP_EOF;
-  soap_unget(soap, c);
-#ifndef WITH_NOHTTP
-  /* if not XML or MIME/DIME/ZLIB, assume HTTP header */
-  if (c != '<' && !(soap->mode & (SOAP_ENC_MIME | SOAP_ENC_DIME | SOAP_ENC_ZLIB)))
-  { soap_mode m = soap->imode;
-    soap->mode &= ~SOAP_IO;
-    soap->error = soap->fparse(soap);
-    if (soap->error && soap->error < SOAP_STOP)
-    { soap->keep_alive = 0; /* force close later */
-      return soap->error;
-    }
-    if (soap->error == SOAP_STOP)
-      return soap->error;
-    soap->mode = soap->imode; /* if imode is changed, effectuate */
-    soap->imode = m; /* restore imode */
-#ifdef WITH_ZLIB
-    soap->mode &= ~SOAP_ENC_ZLIB;
-#endif
-    if ((soap->mode & SOAP_IO) == SOAP_IO_CHUNK)
-    { soap->chunkbuflen = soap->buflen;
-      soap->buflen = soap->bufidx;
-      soap->chunksize = 0;
-    }
-    /* Note: fparse should not use soap_unget to push back last char */
-    if (soap_get0(soap) == (int)EOF)
-    { if (soap->status == 200)
-        return soap->error = SOAP_NO_DATA; /* HTTP OK: always expect data */
-      return soap->error = soap->status;
-    }
-#ifdef WITH_ZLIB
-    if (soap->zlib_in != SOAP_ZLIB_NONE)
-    {
-#ifdef WITH_GZIP
-      if (soap->zlib_in != SOAP_ZLIB_DEFLATE)
-      { c = soap_get1(soap);
-        if (c == 0x1F)
-        { if (soap_getgziphdr(soap))
-            return soap->error;
-          if (inflateInit2(soap->d_stream, -MAX_WBITS) != Z_OK)
-            return soap->error = SOAP_ZLIB_ERROR;
-          soap->z_crc = crc32(0L, NULL, 0);
-          DBGLOG(TEST, SOAP_MESSAGE(fdebug, "gzip initialized\n"));
-        }
-        else
-        { soap_revget1(soap);
-          if (inflateInit(soap->d_stream) != Z_OK)
-            return soap->error = SOAP_ZLIB_ERROR;
-          soap->zlib_in = SOAP_ZLIB_DEFLATE;
-        }
-      }
-      else
-#endif
-      if (inflateInit(soap->d_stream) != Z_OK)
-        return soap->error = SOAP_ZLIB_ERROR;
-      if (soap->z_dict)
-      { if (inflateSetDictionary(soap->d_stream, (const Bytef*)soap->z_dict, soap->z_dict_len) != Z_OK)
-          return soap->error = SOAP_ZLIB_ERROR;
-      }
-      soap->zlib_state = SOAP_ZLIB_INFLATE;
-      DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Inflate initialized\n"));
-      soap->mode |= SOAP_ENC_ZLIB;
-      if (!soap->z_buf)
-        soap->z_buf = (char*)SOAP_MALLOC(soap, SOAP_BUFLEN);
-      memcpy(soap->z_buf, soap->buf, SOAP_BUFLEN);
-      soap->d_stream->next_in = (Byte*)(soap->z_buf + soap->bufidx);
-      soap->d_stream->avail_in = soap->buflen - soap->bufidx;
-      soap->z_buflen = soap->buflen;
-      soap->buflen = soap->bufidx;
-    }
-#endif
-#ifndef WITH_LEANER
-    if (soap->fpreparerecv && (soap->mode & SOAP_IO) != SOAP_IO_CHUNK && soap->buflen > soap->bufidx)
-    { int r;
-      if ((r = soap->fpreparerecv(soap, soap->buf + soap->bufidx, soap->buflen - soap->bufidx)))
-        return soap->error = r;
-    }
-#endif
-    if (soap->error)
-    { if (soap->error == SOAP_FORM && soap->fform)
-      { soap->error = soap->fform(soap);
-        if (soap->error == SOAP_OK)
-          soap->error = SOAP_STOP; /* prevents further processing */
-      }
-      return soap->error;
-    }
-  }
-#endif
-#ifndef WITH_LEANER
-  if (soap->mode & SOAP_ENC_MIME)
-  { if (soap_getmimehdr(soap))
-      return soap->error;
-    if (soap->mime.start)
-    { do
-      { if (!soap->mime.last->id)
-          break;
-        if (!soap_match_cid(soap, soap->mime.start, soap->mime.last->id))
-          break;
-      } while (soap_get_mime_attachment(soap, NULL));
-    }
-    if (soap_get_header_attribute(soap, soap->mime.first->type, "application/dime"))
-      soap->mode |= SOAP_ENC_DIME;
-  }
-  if (soap->mode & SOAP_ENC_DIME)
-  { if (soap_getdimehdr(soap))
-      return soap->error;
-    if (soap->dime.flags & SOAP_DIME_CF)
-    { DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Chunked DIME SOAP message\n"));
-      soap->dime.chunksize = soap->dime.size;
-      if (soap->buflen - soap->bufidx >= soap->dime.chunksize)
-      { soap->dime.buflen = soap->buflen;
-        soap->buflen = soap->bufidx + soap->dime.chunksize;
-      }
-      else
-        soap->dime.chunksize -= soap->buflen - soap->bufidx;
-    }
-    soap->count = soap->buflen - soap->bufidx;
-  }
-#endif
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_envelope_begin_out(struct soap *soap)
-{
-#ifndef WITH_LEANER
-  size_t n = 0;
-  if ((soap->mode & SOAP_ENC_MIME) && soap->mime.boundary && soap->mime.start && strlen(soap->mime.boundary) + strlen(soap->mime.start) < sizeof(soap->tmpbuf) - 80 )
-  { const char *s;
-    if ((soap->mode & SOAP_ENC_DIME) && !(soap->mode & SOAP_ENC_MTOM))
-      s = "application/dime";
-    else if (soap->version == 2)
-    { if (soap->mode & SOAP_ENC_MTOM)
-        s = "application/xop+xml; charset=utf-8; type=\"application/soap+xml\"";
-      else
-        s = "application/soap+xml; charset=utf-8";
-    }
-    else if (soap->mode & SOAP_ENC_MTOM)
-      s = "application/xop+xml; charset=utf-8; type=\"text/xml\"";
-    else
-      s = "text/xml; charset=utf-8";
-    sprintf(soap->tmpbuf, "--%s\r\nContent-Type: %s\r\nContent-Transfer-Encoding: binary\r\nContent-ID: %s\r\n\r\n", soap->mime.boundary, s, soap->mime.start);
-    n = strlen(soap->tmpbuf);
-    if (soap_send_raw(soap, soap->tmpbuf, n))
-      return soap->error;
-  }
-  if (soap->mode & SOAP_IO_LENGTH)
-    soap->dime.size = soap->count;	/* DIME in MIME correction */
-  if (!(soap->mode & SOAP_IO_LENGTH) && (soap->mode & SOAP_ENC_DIME))
-  { if (soap_putdimehdr(soap))
-      return soap->error;
-  }
-#endif
-  soap->part = SOAP_IN_ENVELOPE;
-  return soap_element_begin_out(soap, "SOAP-ENV:Envelope", 0, NULL);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_envelope_end_out(struct soap *soap)
-{ if (soap_element_end_out(soap, "SOAP-ENV:Envelope") || ((soap->mode & SOAP_XML_INDENT) && soap_send_raw(soap, "\r\n", 2)))
-    return soap->error;
-#ifndef WITH_LEANER
-  if ((soap->mode & SOAP_IO_LENGTH) && (soap->mode & SOAP_ENC_DIME) && !(soap->mode & SOAP_ENC_MTOM))
-  { soap->dime.size = soap->count - soap->dime.size;	/* DIME in MIME correction */
-    sprintf(soap->id, soap->dime_id_format, 0);
-    soap->dime.id = soap->id;
-    if (soap->local_namespaces)
-    { if (soap->local_namespaces[0].out)
-        soap->dime.type = (char*)soap->local_namespaces[0].out;
-      else
-        soap->dime.type = (char*)soap->local_namespaces[0].ns;
-    }
-    soap->dime.options = NULL;
-    soap->dime.flags = SOAP_DIME_MB | SOAP_DIME_ABSURI;
-    if (!soap->dime.first)
-      soap->dime.flags |= SOAP_DIME_ME;
-    soap->count += 12 + ((strlen(soap->dime.id)+3)&(~3)) + (soap->dime.type ? ((strlen(soap->dime.type)+3)&(~3)) : 0);
-  }
-  if ((soap->mode & SOAP_ENC_DIME) && !(soap->mode & SOAP_ENC_MTOM))
-    return soap_send_raw(soap, SOAP_STR_PADDING, -(long)soap->dime.size&3);
-#endif
-  soap->part = SOAP_END_ENVELOPE;
-  return SOAP_OK;
-} 
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-static char*
-soap_get_http_body(struct soap *soap)
-{
-#ifndef WITH_LEAN
-  register size_t l = 0, n = 0;
-  register char *s;
-  /* get HTML body of HTTP error content */
-  if (!(soap->mode & SOAP_ENC_ZLIB) && (soap->mode & SOAP_IO) != SOAP_IO_CHUNK)
-  { n = soap->length;
-    if (!n)
-      return NULL;
-  }
-#ifdef WITH_FAST
-  soap->labidx = 0;			/* use look-aside buffer */
-#else
-  if (soap_new_block(soap) == NULL)
-    return NULL;
-#endif
-  for (;;)
-  { 
-#ifdef WITH_FAST
-    register size_t i, k;
-    if (soap_append_lab(soap, NULL, 0))	/* allocate more space in look-aside buffer if necessary */
-      return NULL;
-    s = soap->labbuf + soap->labidx;	/* space to populate */
-    k = soap->lablen - soap->labidx;	/* number of bytes available */
-    soap->labidx = soap->lablen;	/* claim this space */
-#else
-    register size_t i, k = SOAP_BLKLEN;
-    if (!(s = (char*)soap_push_block(soap, NULL, k)))
-      return NULL;
-#endif
-    for (i = 0; i < k; i++)
-    { register soap_wchar c = soap_getchar(soap);
-      if ((int)c == EOF)
-        goto end;
-      *s++ = (char)(c & 0xFF);
-      l++;
-      if (n > 0 && l >= n)
-        goto end;
-    }
-  }
-end:
-  *s = '\0';
-#ifdef WITH_FAST
-  s = soap_strdup(soap, soap->labbuf);
-#else
-  soap_size_block(soap, NULL, i+1);
-  s = soap_save_block(soap, NULL, 0);
-#endif
-  return s;
-#else
-  return NULL;
-#endif
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_envelope_begin_in(struct soap *soap)
-{ register struct Namespace *p;
-  soap->part = SOAP_IN_ENVELOPE;
-  if (soap_element_begin_in(soap, "SOAP-ENV:Envelope", 0, NULL))
-  { if (soap->error == SOAP_TAG_MISMATCH
-     && !soap_element_begin_in(soap, "Envelope", 0, NULL))
-      soap->error = SOAP_VERSIONMISMATCH;
-    else if (soap->status)
-      soap->error = soap->status;
-    return soap->error;
-  }
-  p = soap->local_namespaces;
-  if (p)
-  { const char *ns = p[0].out;
-    if (!ns)
-      ns = p[0].ns;
-    if (!strcmp(ns, soap_env1))
-    { soap->version = 1; /* make sure we use SOAP 1.1 */
-      if (p[1].out)
-        SOAP_FREE(soap, p[1].out);
-      if ((p[1].out = (char*)SOAP_MALLOC(soap, sizeof(soap_enc1))))
-        strcpy(p[1].out, soap_enc1);
-    }
-    else if (!strcmp(ns, soap_env2))
-    { soap->version = 2; /* make sure we use SOAP 1.2 */
-      if (p[1].out)
-        SOAP_FREE(soap, p[1].out);
-      if ((p[1].out = (char*)SOAP_MALLOC(soap, sizeof(soap_enc2))))
-        strcpy(p[1].out, soap_enc2);
-    }
-  }
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_envelope_end_in(struct soap *soap)
-{ soap->part = SOAP_END_ENVELOPE;
-  return soap_element_end_in(soap, "SOAP-ENV:Envelope");
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_body_begin_out(struct soap *soap)
-{ soap->part = SOAP_IN_BODY;
-  if (soap->version == 1)
-    soap->encoding = 1;
-#ifndef WITH_LEAN
-  if ((soap->mode & SOAP_XML_SEC) && soap_set_attr(soap, "wsu:Id", "Body", 1))
-    return soap->error;
-#endif
-  if (soap_element(soap, "SOAP-ENV:Body", 0, NULL))
-    return soap->error;
-  return soap_element_start_end_out(soap, NULL);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_body_end_out(struct soap *soap)
-{ if (soap_element_end_out(soap, "SOAP-ENV:Body"))
-    return soap->error;
-  soap->part = SOAP_END_BODY;
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_body_begin_in(struct soap *soap)
-{ soap->part = SOAP_IN_BODY;
-  if (soap_element_begin_in(soap, "SOAP-ENV:Body", 0, NULL))
-    return soap->error;
-  if (!soap->body)
-    soap->part = SOAP_NO_BODY;
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_body_end_in(struct soap *soap)
-{ if (soap->part == SOAP_NO_BODY)
-    return soap->error = SOAP_OK;
-  soap->part = SOAP_END_BODY;
-  return soap_element_end_in(soap, "SOAP-ENV:Body");
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_recv_header(struct soap *soap)
-{ if (soap_getheader(soap) && soap->error == SOAP_TAG_MISMATCH)
-    soap->error = SOAP_OK;
-  if (soap->error == SOAP_OK && soap->fheader)
-    soap->error = soap->fheader(soap);
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_set_endpoint(struct soap *soap, const char *endpoint)
-{ register const char *s;
-  register size_t i, n;
-  soap->endpoint[0] = '\0';
-  soap->host[0] = '\0';
-  soap->path[0] = '/';
-  soap->path[1] = '\0';
-  soap->port = 80;
-  if (!endpoint || !*endpoint)
-    return;
-#ifdef WITH_OPENSSL
-  if (!soap_tag_cmp(endpoint, "https:*"))
-    soap->port = 443;
-#endif
-  strncpy(soap->endpoint, endpoint, sizeof(soap->endpoint) - 1);
-  soap->endpoint[sizeof(soap->endpoint) - 1] = '\0';
-  s = strchr(endpoint, ':');
-  if (s && s[1] == '/' && s[2] == '/')
-    s += 3;
-  else
-    s = endpoint;
-  n = strlen(s);
-  if (n >= sizeof(soap->host))
-    n = sizeof(soap->host) - 1;
-#ifdef WITH_IPV6
-  if (s[0] == '[')
-  { s++;
-    for (i = 0; i < n; i++)
-    { if (s[i] == ']')
-      { s++;
-        --n;
-        break; 
-      }
-      soap->host[i] = s[i];
-    }
-  }
-  else
-  { for (i = 0; i < n; i++)
-    { soap->host[i] = s[i];
-      if (s[i] == '/' || s[i] == ':')
-        break; 
-    }
-  }
-#else
-  for (i = 0; i < n; i++)
-  { soap->host[i] = s[i];
-    if (s[i] == '/' || s[i] == ':')
-      break; 
-  }
-#endif
-  soap->host[i] = '\0';
-  if (s[i] == ':')
-  { soap->port = (int)soap_strtol(s + i + 1, NULL, 10);
-    for (i++; i < n; i++)
-      if (s[i] == '/')
-        break;
-  }
-  if (i < n && s[i])
-  { strncpy(soap->path, s + i, sizeof(soap->path));
-    soap->path[sizeof(soap->path) - 1] = '\0';
-  }
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_connect(struct soap *soap, const char *endpoint, const char *action)
-{ return soap_connect_command(soap, SOAP_POST, endpoint, action);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_connect_command(struct soap *soap, int http_command, const char *endpoints, const char *action)
-{ char *endpoint;
-  const char *s;
-  if (endpoints && (s = strchr(endpoints, ' ')))
-  { endpoint = (char*)SOAP_MALLOC(soap, strlen(endpoints) + 1);
-    for (;;)
-    { strncpy(endpoint, endpoints, s - endpoints);
-      endpoint[s - endpoints] = '\0';
-      if (soap_try_connect_command(soap, http_command, endpoint, action) != SOAP_TCP_ERROR)
-        break;
-      if (!*s)
-        break;
-      soap->error = SOAP_OK;
-      while (*s == ' ')
-        s++;
-      endpoints = s;
-      s = strchr(endpoints, ' ');
-      if (!s)
-        s = endpoints + strlen(endpoints);
-    }
-    SOAP_FREE(soap, endpoint);
-  }
-  else
-    soap_try_connect_command(soap, http_command, endpoints, action);
-  return soap->error;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-static int
-soap_try_connect_command(struct soap *soap, int http_command, const char *endpoint, const char *action)
-{ char host[sizeof(soap->host)];
-  int port;
-  size_t count;
-  soap->error = SOAP_OK;
-  strcpy(host, soap->host); /* save previous host name: if != then reconnect */
-  port = soap->port; /* save previous port to compare */
-  soap->status = http_command;
-  soap_set_endpoint(soap, endpoint);
-#ifndef WITH_LEANER
-  if (soap->fconnect)
-  { if ((soap->error = soap->fconnect(soap, endpoint, soap->host, soap->port)))
-      return soap->error;
-  }
-  else
-#endif
-  if (soap->fopen && *soap->host)
-  { if (!soap->keep_alive || !soap_valid_socket(soap->socket) || strcmp(soap->host, host) || soap->port != port || !soap->fpoll || soap->fpoll(soap))
-    { soap->keep_alive = 0; /* to force close */
-      soap->omode &= ~SOAP_IO_UDP; /* to force close */
-      soap_closesock(soap);
-      DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Connect/reconnect to host='%s' path='%s' port=%d\n", soap->host, soap->path, soap->port));
-#ifndef WITH_LEAN
-      if (!strncmp(endpoint, "soap.udp:", 9))
-        soap->omode |= SOAP_IO_UDP;
-#endif
-      soap->socket = soap->fopen(soap, endpoint, soap->host, soap->port);
-      if (soap->error)
-        return soap->error;
-      soap->keep_alive = ((soap->omode & SOAP_IO_KEEPALIVE) != 0);
-    }
-  }
-  count = soap_count_attachments(soap);
-  if (soap_begin_send(soap))
-    return soap->error;
-  if (http_command == SOAP_GET)
-  { soap->mode &= ~SOAP_IO;
-    soap->mode |= SOAP_IO_BUFFER;
-  }
-#ifndef WITH_NOHTTP
-  soap->action = soap_strdup(soap, action);
-  if ((soap->mode & SOAP_IO) != SOAP_IO_STORE && !(soap->mode & SOAP_ENC_XML) && endpoint)
-  { unsigned int k = soap->mode;
-    soap->mode &= ~(SOAP_IO | SOAP_ENC_ZLIB);
-    if ((k & SOAP_IO) != SOAP_IO_FLUSH)
-      soap->mode |= SOAP_IO_BUFFER;
-    if ((soap->error = soap->fpost(soap, endpoint, soap->host, soap->port, soap->path, action, count)))
-      return soap->error;
-#ifndef WITH_LEANER
-    if ((k & SOAP_IO) == SOAP_IO_CHUNK)
-    { if (soap_flush(soap))
-        return soap->error;
-    }
-#endif
-    soap->mode = k;
-  }
-  if (http_command == SOAP_GET)
-    return soap_end_send(soap);
-#endif
-  return SOAP_OK;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-char*
-SOAP_FMAC2
-soap_s2base64(struct soap *soap, const unsigned char *s, char *t, int n)
-{ register int i;
-  register unsigned long m;
-  register char *p;
-  if (!t)
-    t = (char*)soap_malloc(soap, (n + 2) / 3 * 4 + 1);
-  if (!t)
-    return NULL;
-  p = t;
-  t[0] = '\0';
-  if (!s)
-    return p;
-  for (; n > 2; n -= 3, s += 3)
-  { m = s[0];
-    m = (m << 8) | s[1];
-    m = (m << 8) | s[2];
-    for (i = 4; i > 0; m >>= 6)
-      t[--i] = soap_base64o[m & 0x3F];
-    t += 4;
-  }
-  t[0] = '\0';
-  if (n > 0)
-  { m = 0;
-    for (i = 0; i < n; i++)
-      m = (m << 8) | *s++;
-    for (; i < 3; i++)
-      m <<= 8;
-    for (i++; i > 0; m >>= 6)
-      t[--i] = soap_base64o[m & 0x3F];
-    for (i = 3; i > n; i--)
-      t[i] = '=';
-    t[4] = '\0';
-  }
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_base642s(struct soap *soap, const char *s, char *t, size_t l, int *n)
-{ register int i, j, c;
-  register unsigned long m;
-  register const char *p;
-  if (!s || !*s)
-  { if (n)
-      *n = 0;
-    if (soap->error)
-      return NULL;
-    return SOAP_NON_NULL;
-  }
-  if (!t)
-  { l = (strlen(s) + 3) / 4 * 3;
-    t = (char*)soap_malloc(soap, l);
-  }
-  if (!t)
-    return NULL;
-  p = t;
-  if (n)
-    *n = 0;
-  for (;;)
-  { for (i = 0; i < SOAP_BLKLEN; i++)
-    { m = 0;
-      j = 0;
-      while (j < 4)
-      { c = *s++;
-        if (c == '=' || !c)
-        { i *= 3;
-          switch (j)
-          { case 2:
-              *t++ = (char)((m >> 4) & 0xFF);
-              i++;
-              break;
-            case 3:
-              *t++ = (char)((m >> 10) & 0xFF);
-              *t++ = (char)((m >> 2) & 0xFF);
-              i += 2;
-          }
-          if (n)
-            *n += i;
-          return p;
-        }
-        c -= '+';
-        if (c >= 0 && c <= 79)
-        { int b = soap_base64i[c];
-          if (b >= 64)
-          { soap->error = SOAP_TYPE;
-            return NULL;  
-          }
-          m = (m << 6) + b;
-          j++;
-        }
-        else if (!soap_blank(c + '+'))
-        { soap->error = SOAP_TYPE;
-          return NULL;  
-        }
-      }
-      *t++ = (char)((m >> 16) & 0xFF);
-      *t++ = (char)((m >> 8) & 0xFF);
-      *t++ = (char)(m & 0xFF);
-      if (l < 3)
-      { if (n)
-          *n += i;
-        return p;
-      }
-      l -= 3;
-    }
-    if (n)
-      *n += 3 * SOAP_BLKLEN;
-  }
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-char*
-SOAP_FMAC2
-soap_s2hex(struct soap *soap, const unsigned char *s, char *t, int n)
-{ register char *p;
-  if (!t)
-    t = (char*)soap_malloc(soap, 2 * n + 1);
-  if (!t)
-    return NULL;
-  p = t;
-  t[0] = '\0';
-  if (s)
-  { for (; n > 0; n--)
-    { register int m = *s++;
-      *t++ = (char)((m >> 4) + (m > 159 ? 'a' - 10 : '0'));
-      m &= 0x0F;
-      *t++ = (char)(m + (m > 9 ? 'a' - 10 : '0'));
-    }
-  }
-  *t++ = '\0';
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-SOAP_FMAC1
-const char*
-SOAP_FMAC2
-soap_hex2s(struct soap *soap, const char *s, char *t, size_t l, int *n)
-{ register const char *p;
-  if (!s || !*s)
-  { if (n)
-      *n = 0;
-    if (soap->error)
-      return NULL;
-    return SOAP_NON_NULL;
-  }
-  if (!t)
-  { l = strlen(s) / 2;
-    t = (char*)soap_malloc(soap, l);
-  }
-  if (!t)
-    return NULL;
-  p = t;
-  while (l)
-  { register int d1, d2;
-    d1 = *s++;
-    if (!d1)
-      break;
-    d2 = *s++;
-    if (!d2)
-      break;
-    *t++ = ((d1 >= 'A' ? (d1 & 0x7) + 9 : d1 - '0') << 4) + (d2 >= 'A' ? (d2 & 0x7) + 9 : d2 - '0');
-    l--;
-  }
-  if (n)
-    *n = (int)(t - p);
-  return p;
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOHTTP
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_puthttphdr(struct soap *soap, int status, size_t count)
-{ if (soap->status != SOAP_GET)
-  { register const char *s = "text/xml; charset=utf-8";
-    register int err = SOAP_OK;
-#ifndef WITH_LEANER
-    register const char *r = NULL;
-#endif
-    if ((status == SOAP_FILE || soap->status == SOAP_POST_FILE) && soap->http_content)
-      s = soap->http_content;
-    else if (status == SOAP_HTML)
-      s = "text/html; charset=utf-8";
-    else if (count || ((soap->omode & SOAP_IO) == SOAP_IO_CHUNK))
-    { if (soap->version == 2)
-        s = "application/soap+xml; charset=utf-8";
-    }
-#ifndef WITH_LEANER
-    if (soap->mode & (SOAP_ENC_DIME | SOAP_ENC_MTOM))
-    { if (soap->mode & SOAP_ENC_MTOM)
-      { if (soap->version == 2)
-          r = "application/soap+xml";
-	else
-          r = "text/xml";
-        s = "application/xop+xml";
-      }
-      else
-        s = "application/dime";
-    }
-    if ((soap->mode & SOAP_ENC_MIME) && soap->mime.boundary && strlen(soap->mime.boundary) + strlen(soap->mime.start ? soap->mime.start : SOAP_STR_EOS) < sizeof(soap->tmpbuf) - 80)
-    { register const char *t = strchr(s, ';');
-      sprintf(soap->tmpbuf, "multipart/related; charset=utf-8; boundary=\"%s\"; type=\"", soap->mime.boundary);
-      if (t)
-      { strncat(soap->tmpbuf, s, t - s);
-        soap->tmpbuf[sizeof(soap->tmpbuf)-1] = '\0';
-      }
-      else
-        strcat(soap->tmpbuf, s);
-      if (soap->mime.start)
-      { strcat(soap->tmpbuf, "\"; start=\"");
-        strcat(soap->tmpbuf, soap->mime.start);
-      }
-      strcat(soap->tmpbuf, "\"");
-      if (r)
-      { strcat(soap->tmpbuf, "; start-info=\"");
-        strcat(soap->tmpbuf, r);
-        strcat(soap->tmpbuf, "\"");
-      }
-      s = soap->tmpbuf;
-    }
-#endif
-    if (s && (err = soap->fposthdr(soap, "Content-Type", s)))
-      return err;
-#ifdef WITH_ZLIB
-    if ((soap->omode & SOAP_ENC_ZLIB))
-    { 
-#ifdef WITH_GZIP
-      err = soap->fposthdr(soap, "Content-Encoding", soap->zlib_out == SOAP_ZLIB_DEFLATE ? "deflate" : "gzip");
-#else
-      err = soap->fposthdr(soap, "Content-Encoding", "deflate");
-#endif
-      if (err)
-        return err;
-    }
-#endif
-#ifndef WITH_LEANER
-    if ((soap->omode & SOAP_IO) == SOAP_IO_CHUNK)
-      err = soap->fposthdr(soap, "Transfer-Encoding", "chunked");
-    else
-#endif
-    if (s)
-    { sprintf(soap->tmpbuf, "%lu", (unsigned long)count);
-      err = soap->fposthdr(soap, "Content-Length", soap->tmpbuf);
-    }
-    if (err)
-      return err;
-  }
-  return soap->fposthdr(soap, "Connection", soap->keep_alive ? "keep-alive" : "close");
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_LEAN
-static const char*
-soap_set_validation_fault(struct soap *soap, const char *s, const char *t)
-{ if (*soap->tag)
-    sprintf(soap->msgbuf, "Validation constraint violation: %s%s in element '%s'", s, t?t:SOAP_STR_EOS, soap->tag);
-  else
-    sprintf(soap->msgbuf, "Validation constraint violation: %s%s", s, t?t:SOAP_STR_EOS);
-  return soap->msgbuf;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_set_fault(struct soap *soap)
-{ const char **c = soap_faultcode(soap);
-  const char **s = soap_faultstring(soap);
-  if (soap->fseterror)
-    soap->fseterror(soap, c, s);
-  if (!*c)
-  { if (soap->version == 2)
-      *c = "SOAP-ENV:Sender";
-    else
-      *c = "SOAP-ENV:Client";
-  }
-  if (*s)
-    return;
-  switch (soap->error)
-  {
-#ifndef WITH_LEAN
-    case SOAP_CLI_FAULT:
-      *s = "Client fault";
-      break;
-    case SOAP_SVR_FAULT:
-      *s = "Server fault";
-      break;
-    case SOAP_TAG_MISMATCH:
-      *s = soap_set_validation_fault(soap, "tag name or namespace mismatch", NULL);
-      break;
-    case SOAP_TYPE:
-      *s = soap_set_validation_fault(soap, "data type mismatch ", soap->type);
-      break;
-    case SOAP_SYNTAX_ERROR:
-      *s = "Well-formedness violation";
-      break;
-    case SOAP_NO_TAG:
-      *s = "No XML root element";
-      break;
-    case SOAP_MUSTUNDERSTAND:
-      *c = "SOAP-ENV:MustUnderstand";
-      sprintf(soap->msgbuf, "The data in element '%s' must be understood but cannot be handled", soap->tag);
-      *s = soap->msgbuf;
-      break;
-    case SOAP_VERSIONMISMATCH:
-      *c = "SOAP-ENV:VersionMismatch";
-      *s = "Invalid SOAP message or SOAP version mismatch";
-      break;
-    case SOAP_DATAENCODINGUNKNOWN:
-      *c = "SOAP-ENV:DataEncodingUnknown";
-      *s = "Unsupported SOAP data encoding";
-      break;
-    case SOAP_NAMESPACE:
-      *s = soap_set_validation_fault(soap, "namespace error", NULL);
-      break;
-    case SOAP_USER_ERROR:
-      *s = "User error";
-      break;
-    case SOAP_FATAL_ERROR:
-      *s = "Fatal error";
-      break;
-    case SOAP_NO_METHOD:
-      sprintf(soap->msgbuf, "Method '%s' not implemented: method name or namespace not recognized", soap->tag);
-      *s = soap->msgbuf;
-      break;
-    case SOAP_NO_DATA:
-      *s = "Data required for operation";
-      break;
-    case SOAP_GET_METHOD:
-      *s = "HTTP GET method not implemented";
-      break;
-    case SOAP_PUT_METHOD:
-      *s = "HTTP PUT method not implemented";
-      break;
-    case SOAP_HEAD_METHOD:
-      *s = "HTTP HEAD method not implemented";
-      break;
-    case SOAP_HTTP_METHOD:
-      *s = "HTTP method not implemented";
-      break;
-    case SOAP_EOM:
-      *s = "Out of memory";
-      break;
-    case SOAP_MOE:
-      *s = "Memory overflow or memory corruption error";
-      break;
-    case SOAP_HDR:
-      *s = "Header line too long";
-      break;
-    case SOAP_IOB:
-      *s = "Array index out of bounds";
-      break;
-    case SOAP_NULL:
-      *s = soap_set_validation_fault(soap, "nil not allowed", NULL);
-      break;
-    case SOAP_DUPLICATE_ID:
-      *s = soap_set_validation_fault(soap, "multiple definitions of id ", soap->id);
-      if (soap->version == 2)
-        *soap_faultsubcode(soap) = "SOAP-ENC:DuplicateID";
-      break;
-    case SOAP_MISSING_ID:
-      *s = soap_set_validation_fault(soap, "missing id for ref ", soap->id);
-      if (soap->version == 2)
-        *soap_faultsubcode(soap) = "SOAP-ENC:MissingID";
-      break;
-    case SOAP_HREF:
-      *s = soap_set_validation_fault(soap, "incompatible object type ref/id pair ", soap->id);
-      break;
-    case SOAP_FAULT:
-      break;
-#ifndef WITH_NOIO
-    case SOAP_UDP_ERROR:
-      *s = "Message too large for UDP packet";
-      break;
-    case SOAP_TCP_ERROR:
-      *s = tcp_error(soap);
-      break;
-#endif
-    case SOAP_HTTP_ERROR:
-      *s = "An HTTP processing error occurred";
-      break;
-    case SOAP_SSL_ERROR:
-#ifdef WITH_OPENSSL
-      *s = "SSL error";
-#else
-      *s = "OpenSSL not installed: recompile with -DWITH_OPENSSL";
-#endif
-      break;
-    case SOAP_PLUGIN_ERROR:
-      *s = "Plugin registry error";
-      break;
-    case SOAP_DIME_ERROR:
-      *s = "DIME format error";
-      break;
-    case SOAP_DIME_HREF:
-      *s = "DIME href to missing attachment";
-      break;
-    case SOAP_DIME_MISMATCH:
-      *s = "DIME version/transmission error";
-      break;
-    case SOAP_DIME_END:
-      *s = "End of DIME error";
-      break;
-    case SOAP_MIME_ERROR:
-      *s = "MIME format error";
-      break;
-    case SOAP_MIME_HREF:
-      *s = "MIME href to missing attachment";
-      break;
-    case SOAP_MIME_END:
-      *s = "End of MIME error";
-      break;
-    case SOAP_ZLIB_ERROR:
-#ifdef WITH_ZLIB
-      sprintf(soap->msgbuf, "Zlib/gzip error: '%s'", soap->d_stream->msg?soap->d_stream->msg:SOAP_STR_EOS);
-      *s = soap->msgbuf;
-#else
-      *s = "Zlib/gzip not installed for (de)compression: recompile with -DWITH_GZIP";
-#endif
-      break;
-    case SOAP_REQUIRED:
-      *s = soap_set_validation_fault(soap, "missing required attribute", NULL);
-      break;
-    case SOAP_PROHIBITED:
-      *s = soap_set_validation_fault(soap, "prohibited attribute present", NULL);
-      break;
-    case SOAP_OCCURS:
-      *s = soap_set_validation_fault(soap, "occurrence violation", NULL);
-      break;
-    case SOAP_LENGTH:
-      *s = soap_set_validation_fault(soap, "content range or length violation", NULL);
-      break;
-    case SOAP_FD_EXCEEDED:
-      *s = "Maximum number of open connections was reached (no define HAVE_POLL): increase FD_SETSIZE";
-      break;
-    case SOAP_STOP:
-      *s = "Stopped: no response to be sent or received (informative)";
-      break;
-#endif
-    case SOAP_EOF:
-#ifndef WITH_NOIO
-      strcpy(soap->msgbuf, soap_strerror(soap));
-#ifndef WITH_LEAN
-      if (strlen(soap->msgbuf) + 25 < sizeof(soap->msgbuf))
-      { memmove(soap->msgbuf + 25, soap->msgbuf, strlen(soap->msgbuf) + 1);
-        memcpy(soap->msgbuf, "End of file or no input: ", 25);
-      }
-#endif
-      *s = soap->msgbuf;
-      break;
-#else
-      *s = "End of file or no input";
-      break;
-#endif
-    default:
-#ifndef WITH_NOHTTP
-#ifndef WITH_LEAN
-      if (soap->error > 200 && soap->error < 600)
-      { sprintf(soap->msgbuf, "HTTP Error: %d %s", soap->error, http_error(soap, soap->error));
-        *s = soap->msgbuf;
-      }
-      else
-#endif
-#endif
-      { sprintf(soap->msgbuf, "Error %d", soap->error);
-        *s = soap->msgbuf;
-      }
-    }
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_send_fault(struct soap *soap)
-{ register int status = soap->error;
-  if (status == SOAP_STOP)
-    return soap_closesock(soap);
-  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Sending back fault struct for error code %d\n", soap->error));
-  soap->keep_alive = 0; /* to terminate connection */
-  soap_set_fault(soap);
-  if (soap->error < 200 && soap->error != SOAP_FAULT)
-    soap->header = NULL;
-  if (status != SOAP_EOF || (!soap->recv_timeout && !soap->send_timeout))
-  { int r = 1;
-#ifndef WITH_NOIO
-    if (soap->fpoll && soap->fpoll(soap))
-      r = 0;
-#ifndef WITH_LEAN
-    else if (soap_valid_socket(soap->socket))
-    { r = tcp_select(soap, soap->socket, SOAP_TCP_SELECT_RCV | SOAP_TCP_SELECT_SND, 0);
-      if (r > 0)
-      { if (!(r & SOAP_TCP_SELECT_SND)
-	 || ((r & SOAP_TCP_SELECT_RCV)
-          && recv(soap->socket, soap->tmpbuf, 1, MSG_PEEK) < 0))
-          r = 0;
-      }
-    }
-#endif
-#endif
-    if (r > 0)
-    { soap->error = SOAP_OK;
-      soap_serializeheader(soap);
-      soap_serializefault(soap);
-      soap_begin_count(soap);
-      if (soap->mode & SOAP_IO_LENGTH)
-      { soap_envelope_begin_out(soap);
-        soap_putheader(soap);
-        soap_body_begin_out(soap);
-        soap_putfault(soap);
-        soap_body_end_out(soap);
-        soap_envelope_end_out(soap);
-      }
-      soap_end_count(soap);
-      if (soap_response(soap, status)
-       || soap_envelope_begin_out(soap)
-       || soap_putheader(soap)
-       || soap_body_begin_out(soap)
-       || soap_putfault(soap)
-       || soap_body_end_out(soap)
-       || soap_envelope_end_out(soap))
-        return soap_closesock(soap);
-      soap_end_send(soap);
-    }
-  } 
-  soap->error = status;
-  return soap_closesock(soap);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_recv_fault(struct soap *soap, int check)
-{ register int status = soap->error;
-  DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Check if receiving SOAP Fault\n"));
-  if (!check)
-  { /* try getfault when no tag or tag mismatched at level 2, otherwise ret */
-    if (soap->error != SOAP_NO_TAG
-     && (soap->error != SOAP_TAG_MISMATCH || soap->level != 2))
-      return soap->error;
-  }
-  soap->error = SOAP_OK;
-  if (soap_getfault(soap))
-  { /* check flag set: check if SOAP Fault is present, if not just return */
-    if (check && soap->error == SOAP_TAG_MISMATCH && soap->level == 2)
-      return soap->error = SOAP_OK;
-    DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Error: soap_get_soapfault() failed. Is this a SOAP message at all?\n"));
-    *soap_faultcode(soap) = (soap->version == 2 ? "SOAP-ENV:Sender" : "SOAP-ENV:Client");
-    soap->error = status;
-    soap_set_fault(soap);
-  }
-  else
-  { register const char *s = *soap_faultcode(soap);
-    if (!soap_match_tag(soap, s, "SOAP-ENV:Server") || !soap_match_tag(soap, s, "SOAP-ENV:Receiver"))
-      status = SOAP_SVR_FAULT; 
-    else if (!soap_match_tag(soap, s, "SOAP-ENV:Client") || !soap_match_tag(soap, s, "SOAP-ENV:Sender"))
-      status = SOAP_CLI_FAULT;
-    else if (!soap_match_tag(soap, s, "SOAP-ENV:MustUnderstand"))
-      status = SOAP_MUSTUNDERSTAND;
-    else if (!soap_match_tag(soap, s, "SOAP-ENV:VersionMismatch"))
-      status = SOAP_VERSIONMISMATCH;
-    else
-    { DBGLOG(TEST,SOAP_MESSAGE(fdebug, "Received SOAP Fault code %s\n", s));
-      status = SOAP_FAULT;
-    }
-    if (!soap_body_end_in(soap))
-      soap_envelope_end_in(soap);
-  }
-  soap_end_recv(soap);
-  soap->error = status;
-  return soap_closesock(soap);
-}
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOHTTP
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_send_empty_response(struct soap *soap, int httpstatuscode)
-{ register soap_mode m = soap->omode;
-  soap->count = 0;
-  if ((m & SOAP_IO) == SOAP_IO_CHUNK)
-    soap->omode = (m & ~SOAP_IO) | SOAP_IO_BUFFER;
-  if (soap_response(soap, httpstatuscode) || soap_end_send(soap))
-  { soap->omode = m;
-    return soap_closesock(soap);
-  }
-  soap->omode = m;
-  return soap->error = SOAP_STOP; /* stops the server's response */
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOHTTP
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_recv_empty_response(struct soap *soap)
-{ if (!soap_begin_recv(soap))
-    soap_end_recv(soap);
-  else if (soap->error == SOAP_NO_DATA || soap->error == 202)
-    soap->error = SOAP_OK;
-  return soap_closesock(soap);
-}
-#endif
-#endif
-
-/******************************************************************************/
-#ifndef WITH_NOIO
-#ifndef PALM_1
-static const char*
-soap_strerror(struct soap *soap)
-{ register int err = soap->errnum;
-  if (err)
-  {
-#ifndef WIN32
-    return strerror(err);
-#else
-#ifndef UNDER_CE
-    DWORD len;
-    *soap->msgbuf = '\0';
-    len = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)soap->msgbuf, (DWORD)sizeof(soap->msgbuf), NULL);
-#else
-    DWORD i, len;
-    *soap->msgbuf = '\0';
-    len = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, 0, (LPTSTR)soap->msgbuf, (DWORD)(sizeof(soap->msgbuf)/sizeof(TCHAR)), NULL);
-    for (i = 0; i <= len; i++)
-    { if (((TCHAR*)soap->msgbuf)[i] < 0x80)
-        soap->msgbuf[i] = (char)((TCHAR*)soap->msgbuf)[i];
-      else
-        soap->msgbuf[i] = '?';
-    }
-#endif
-#endif
-  }
-  else
-  { char *s = soap->msgbuf;
-#ifndef WITH_LEAN
-    int rt = soap->recv_timeout, st = soap->send_timeout;
-    int ru = ' ', su = ' ';
-#endif
-    strcpy(s, "Operation interrupted or timed out");
-#ifndef WITH_LEAN
-    if (rt < 0)
-    { rt = -rt;
-      ru = 'u';
-    }
-    if (st < 0)
-    { st = -st;
-      su = 'u';
-    }
-    if (rt)
-      sprintf(s + strlen(s), " (%d%cs receive delay)", rt, ru);
-    if (st)
-      sprintf(s + strlen(s), " (%d%cs send delay)", st, su);
-#endif
-  }
-  return soap->msgbuf;
-}
-#endif
-#endif 
-
-/******************************************************************************/
-#ifndef PALM_2
-static int
-soap_set_error(struct soap *soap, const char *faultcode, const char *faultsubcodeQName, const char *faultstring, const char *faultdetailXML, int soaperror)
-{ *soap_faultcode(soap) = faultcode;
-  if (faultsubcodeQName)
-    *soap_faultsubcode(soap) = faultsubcodeQName;
-  *soap_faultstring(soap) = faultstring;
-  if (faultdetailXML && *faultdetailXML)
-  { register const char **s = soap_faultdetail(soap);
-    if (s)
-      *s = faultdetailXML;
-  }
-  return soap->error = soaperror;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_set_sender_error(struct soap *soap, const char *faultstring, const char *faultdetailXML, int soaperror)
-{ return soap_set_error(soap, soap->version == 2 ? "SOAP-ENV:Sender" : "SOAP-ENV:Client", NULL, faultstring, faultdetailXML, soaperror);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_set_receiver_error(struct soap *soap, const char *faultstring, const char *faultdetailXML, int soaperror)
-{ return soap_set_error(soap, soap->version == 2 ? "SOAP-ENV:Receiver" : "SOAP-ENV:Server", NULL, faultstring, faultdetailXML, soaperror);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-static int
-soap_copy_fault(struct soap *soap, const char *faultcode, const char *faultsubcodeQName, const char *faultstring, const char *faultdetailXML)
-{ char *r = NULL, *s = NULL, *t = NULL;
-  if (faultsubcodeQName)
-    r = soap_strdup(soap, faultsubcodeQName);
-  if (faultstring)
-    s = soap_strdup(soap, faultstring);
-  if (faultdetailXML)
-    t = soap_strdup(soap, faultdetailXML);
-  return soap_set_error(soap, faultcode, r, s, t, SOAP_FAULT);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_sender_fault(struct soap *soap, const char *faultstring, const char *faultdetailXML)
-{ return soap_sender_fault_subcode(soap, NULL, faultstring, faultdetailXML);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_sender_fault_subcode(struct soap *soap, const char *faultsubcodeQName, const char *faultstring, const char *faultdetailXML)
-{ return soap_copy_fault(soap, soap->version == 2 ? "SOAP-ENV:Sender" : "SOAP-ENV:Client", faultsubcodeQName, faultstring, faultdetailXML);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_receiver_fault(struct soap *soap, const char *faultstring, const char *faultdetailXML)
-{ return soap_receiver_fault_subcode(soap, NULL, faultstring, faultdetailXML);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_receiver_fault_subcode(struct soap *soap, const char *faultsubcodeQName, const char *faultstring, const char *faultdetailXML)
-{ return soap_copy_fault(soap, soap->version == 2 ? "SOAP-ENV:Receiver" : "SOAP-ENV:Server", faultsubcodeQName, faultstring, faultdetailXML);
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-#ifndef WITH_NOSTDLIB
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_print_fault(struct soap *soap, FILE *fd)
-{ if (soap_check_state(soap))
-    fprintf(fd, "Error: soap struct state not initialized\n");
-  else if (soap->error)
-  { const char *c, *v = NULL, *s, **d;
-    d = soap_faultcode(soap);
-    if (!*d)
-      soap_set_fault(soap);
-    c = *d;
-    if (soap->version == 2)
-      v = *soap_faultsubcode(soap);
-    s = *soap_faultstring(soap);
-    d = soap_faultdetail(soap);
-    fprintf(fd, "%s%d fault: %s [%s]\n\"%s\"\nDetail: %s\n", soap->version ? "SOAP 1." : "Error ", soap->version ? (int)soap->version : soap->error, c, v ? v : "no subcode", s ? s : "[no reason]", d && *d ? *d : "[no detail]");
-  }
-}
-#endif
-#endif
- 
-/******************************************************************************/
-#ifdef __cplusplus
-#ifndef WITH_LEAN
-#ifndef WITH_NOSTDLIB
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_stream_fault(struct soap *soap, std::ostream& os)
-{ if (soap_check_state(soap))
-    os << "Error: soap struct state not initialized\n";
-  else if (soap->error)
-  { const char *c, *v = NULL, *s, **d;
-    d = soap_faultcode(soap);
-    if (!*d)
-      soap_set_fault(soap);
-    c = *d;
-    if (soap->version == 2)
-      v = *soap_faultsubcode(soap);
-    s = *soap_faultstring(soap);
-    d = soap_faultdetail(soap);
-    os << (soap->version ? "SOAP 1." : "Error ")
-       << (soap->version ? (int)soap->version : soap->error)
-       << " fault: " << c
-       << "[" << (v ? v : "no subcode") << "]"
-       << std::endl
-       << "\"" << (s ? s : "[no reason]") << "\""
-       << std::endl
-       << "Detail: " << (d && *d ? *d : "[no detail]")
-       << std::endl;
-  }
-}
-#endif
-#endif
-#endif
- 
-/******************************************************************************/
-#ifndef WITH_LEAN
-#ifndef WITH_NOSTDLIB
-SOAP_FMAC1
-char*
-SOAP_FMAC2
-soap_sprint_fault(struct soap *soap, char *buf, size_t len)
-{ if (soap_check_state(soap))
-    strncpy(buf, "Error: soap struct not initialized", len);
-  else if (soap->error)
-  { const char *c, *v = NULL, *s, **d;
-    d = soap_faultcode(soap);
-    if (!*d)
-      soap_set_fault(soap);
-    c = *d;
-    if (soap->version == 2)
-      v = *soap_faultsubcode(soap);
-    s = *soap_faultstring(soap);
-    d = soap_faultdetail(soap);
-#ifdef HAVE_SNPRINTF
-# ifdef WIN32
-    _snprintf
-# else
-    snprintf
-# endif
-      (buf, len, "%s%d fault: %s [%s]\n\"%s\"\nDetail: %s\n", soap->version ? "SOAP 1." : "Error ", soap->version ? (int)soap->version : soap->error, c, v ? v : "no subcode", s ? s : "[no reason]", d && *d ? *d : "[no detail]");
-#else
-    if (len > 40 + (v ? strlen(v) : 0) + (s ? strlen(s) : 0) + (d && *d ? strlen(*d) : 0))
-      sprintf(buf, "%s%d fault: %s [%s]\n\"%s\"\nDetail: %s\n", soap->version ? "SOAP 1." : "Error ", soap->version ? (int)soap->version : soap->error, c, v ? v : "no subcode", s ? s : "[no reason]", d && *d ? *d : "[no detail]");
-    else if (len > 40)
-      sprintf(buf, "%s%d fault: %s\n", soap->version ? "SOAP 1." : "Error ", soap->version ? (int)soap->version : soap->error, c);
-    else
-      buf[0] = '\0';
-#endif
-  }
-  return buf;
-}
-#endif
-#endif
- 
-/******************************************************************************/
-#ifndef PALM_1
-#ifndef WITH_NOSTDLIB
-SOAP_FMAC1
-void
-SOAP_FMAC2
-soap_print_fault_location(struct soap *soap, FILE *fd)
-{ 
-#ifndef WITH_LEAN
-  int i, j, c1, c2;
-  if (soap->error && soap->error != SOAP_STOP && soap->bufidx <= soap->buflen && soap->buflen > 0 && soap->buflen <= SOAP_BUFLEN)
-  { i = (int)soap->bufidx - 1;
-    if (i <= 0)
-      i = 0;
-    c1 = soap->buf[i];
-    soap->buf[i] = '\0';
-    if ((int)soap->buflen >= i + 1024)
-      j = i + 1023;
-    else
-      j = (int)soap->buflen - 1;
-    c2 = soap->buf[j];
-    soap->buf[j] = '\0';
-    fprintf(fd, "%s%c\n<!-- ** HERE ** -->\n", soap->buf, c1);
-    if (soap->bufidx < soap->buflen)
-      fprintf(fd, "%s\n", soap->buf + soap->bufidx);
-    soap->buf[i] = c1;
-    soap->buf[j] = c2;
-  }
-#endif
-}
-#endif
-#endif
- 
-/******************************************************************************/
-#ifndef PALM_1
-SOAP_FMAC1
-int
-SOAP_FMAC2
-soap_register_plugin_arg(struct soap *soap, int (*fcreate)(struct soap*, struct soap_plugin*, void*), void *arg)
-{ register struct soap_plugin *p;
-  register int r;
-  if (!(p = (struct soap_plugin*)SOAP_MALLOC(soap, sizeof(struct soap_plugin))))
-    return soap->error = SOAP_EOM;
-  p->id = NULL;
-  p->data = NULL;
-  p->fcopy = NULL;
-  p->fdelete = NULL;
-  r = fcreate(soap, p, arg);
-  if (!r && p->fdelete)
-  { p->next = soap->plugins;
-    soap->plugins = p;
-    DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Registered '%s' plugin\n", p->id));
-    return SOAP_OK;
-  }
-  DBGLOG(TEST, SOAP_MESSAGE(fdebug, "Could not register plugin '%s': plugin returned error %d (or fdelete callback not set)\n", p->id?p->id:"?", r));
-  SOAP_FREE(soap, p);
-  return r;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_1
-static void *
-fplugin(struct soap *soap, const char *id)
-{ register struct soap_plugin *p;
-  for (p = soap->plugins; p; p = p->next)
-    if (p->id == id || !strcmp(p->id, id))
-      return p->data;
-  return NULL;
-}
-#endif
-
-/******************************************************************************/
-#ifndef PALM_2
-SOAP_FMAC1
-void *
-SOAP_FMAC2
-soap_lookup_plugin(struct soap *soap, const char *id)
-{ return soap->fplugin(soap, id);
-}
-#endif
-
-/******************************************************************************/
-#ifdef __cplusplus
-}
-#endif
-
-/******************************************************************************\
- *
- *	C++ soap struct methods
- *
-\******************************************************************************/
-
-#ifdef __cplusplus
-soap::soap()
-{ soap_init(this);
-}
-#endif
-
-/******************************************************************************/
-#ifdef __cplusplus
-soap::soap(soap_mode m)
-{ soap_init1(this, m);
-}
-#endif
-
-/******************************************************************************/
-#ifdef __cplusplus
-soap::soap(soap_mode im, soap_mode om)
-{ soap_init2(this, im, om);
-}
-#endif
-
-/******************************************************************************/
-#ifdef __cplusplus
-soap::soap(const struct soap& soap)
-{ soap_copy_context(this, &soap);
-}
-#endif
-
-/******************************************************************************/
-#ifdef __cplusplus
-soap::~soap()
-{ soap_destroy(this);
-  soap_end(this);
-  soap_done(this);
-}
-#endif
-
-/******************************************************************************/
--- a/usr/src/lib/libkmsagent/common/SOAP/stdsoap2.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2444 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*
-	stdsoap2.h 2.7.17
-
-	gSOAP runtime engine
-
-gSOAP XML Web services tools
-Copyright (C) 2000-2010, Robert van Engelen, Genivia Inc., All Rights Reserved.
-This part of the software is released under ONE of the following licenses:
-GPL, or the gSOAP public license, or Genivia's license for commercial use.
---------------------------------------------------------------------------------
-Contributors:
-
-Wind River Systems, Inc., for the following additions
-  - vxWorks compatible
---------------------------------------------------------------------------------
-gSOAP public license.
-
-The contents of this file are subject to the gSOAP Public License Version 1.3
-(the "License"); you may not use this file except in compliance with the
-License. You may obtain a copy of the License at
-http://www.cs.fsu.edu/~engelen/soaplicense.html
-Software distributed under the License is distributed on an "AS IS" basis,
-WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-for the specific language governing rights and limitations under the License.
-
-The Initial Developer of the Original Code is Robert A. van Engelen.
-Copyright (C) 2000-2010, Robert van Engelen, Genivia Inc., All Rights Reserved.
---------------------------------------------------------------------------------
-GPL license.
-
-This program is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free Software
-Foundation; either version 2 of the License, or (at your option) any later
-version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with
-this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-Place, Suite 330, Boston, MA 02111-1307 USA
-
-Author contact information:
-engelen@genivia.com / engelen@acm.org
-
-This program is released under the GPL with the additional exemption that
-compiling, linking, and/or using OpenSSL is allowed.
---------------------------------------------------------------------------------
-A commercial use license is available from Genivia, Inc., contact@genivia.com
---------------------------------------------------------------------------------
-*/
-
-#ifdef WITH_SOAPDEFS_H
-# include "soapdefs.h"		/* include user-defined stuff */
-#endif
-
-#ifndef _THREAD_SAFE
-# define _THREAD_SAFE
-#endif
-
-#ifndef OPENSERVER
-# ifndef _REENTRANT
-#  define _REENTRANT
-# endif
-#endif
-
-#ifndef SOAP_FMAC1	/* stdsoap2.h declaration macro */
-# define SOAP_FMAC1
-#endif
-
-#ifndef SOAP_FMAC2	/* stdsoap2.h declaration macro */
-# define SOAP_FMAC2
-#endif
-
-#ifndef SOAP_FMAC3	/* (de)serializer declaration macro */
-# define SOAP_FMAC3
-#endif
-
-#ifndef SOAP_FMAC3S	/* string converter for (de)serializer declaration macro */
-# define SOAP_FMAC3S SOAP_FMAC3
-#endif
-
-#ifndef SOAP_FMAC4	/* (de)serializer declaration macro */
-# define SOAP_FMAC4
-#endif
-
-#ifndef SOAP_FMAC4S	/* string converter for (de)serializer declaration macro */
-# define SOAP_FMAC4S SOAP_FMAC4
-#endif
-
-#ifndef SOAP_FMAC5	/* stub/skeleton declaration macro */
-# define SOAP_FMAC5
-#endif
-
-#ifndef SOAP_FMAC6	/* stub/skeleton declaration macro */
-# define SOAP_FMAC6
-#endif
-
-#ifndef SOAP_CMAC	/* class declaration macro */
-# define SOAP_CMAC
-#endif
-
-#ifndef SOAP_NMAC	/* namespace table declaration macro */
-# define SOAP_NMAC
-#endif
-
-#ifndef SOAP_SOURCE_STAMP
-# define SOAP_SOURCE_STAMP(str)
-#endif
-
-/* gSOAP 2.7.4 and higher: fast look-aside buffering is stable */
-#ifndef WITH_FAST
-# define WITH_FAST
-#endif
-
-/* gSOAP 2.7.15 and higher: always retain CDATA in literal XML, unless WITH_LEAN or WITH_NOCDATA */
-#ifndef WITH_LEAN
-# ifndef WITH_NOCDATA
-#  ifndef WITH_CDATA
-#   define WITH_CDATA
-#  endif
-# endif
-#endif
-
-#ifdef WITH_LEANER
-# ifndef WITH_LEAN
-#  define WITH_LEAN
-# endif
-#endif
-
-#ifdef WITH_LEAN
-# ifdef WITH_COOKIES
-#  error "Cannot build WITH_LEAN code WITH_COOKIES enabled"
-# endif
-#endif
-
-#ifndef STDSOAP_H
-#define STDSOAP_H
-
-#if defined(__vxworks) || defined(__VXWORKS__)
-# ifndef VXWORKS
-#  define VXWORKS
-# endif
-#endif
-
-#ifdef _WIN32
-# ifndef WIN32
-#  define WIN32
-# endif
-#endif
-
-#ifdef _WIN32_WCE
-# ifndef UNDER_CE
-#  define UNDER_CE _WIN32_WCE
-# endif
-#endif
-
-#ifdef UNDER_CE
-# ifndef WIN32
-#  define WIN32
-# endif
-#endif
-
-#ifdef __BORLANDC__
-# ifdef __WIN32__
-#  ifndef WIN32
-#   define WIN32
-#  endif
-# endif
-#endif
-
-#ifdef __CYGWIN__
-# ifndef CYGWIN
-#  define CYGWIN
-# endif
-#endif
-
-#ifdef __SYMBIAN32__ 
-# define SYMBIAN
-# undef WIN32
-#endif
-
-#if defined(__palmos__) || defined(PALM_GCC) || defined(__PALMOS_TRAPS__)
-# ifndef PALM
-#  define PALM
-# endif
-#endif
-
-#if defined(__hpux)
-# ifndef HP_UX
-#  define HP_UX
-# endif
-#endif
-
-#if defined(__digital__) && defined(__unix__)
-# ifndef TRU64
-#  define TRU64 
-# endif
-#endif
-
-#ifdef __MVS__
-# ifndef OS390
-#  define OS390
-# endif
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-# if defined(WITH_OPENSSL)
-#  ifndef HAVE_OPENSSL_SSL_H
-#   undef WITH_OPENSSL
-#  endif
-# endif
-# if defined(WITH_ZLIB) || defined(WITH_GZIP)
-#  ifndef HAVE_ZLIB_H
-#   undef WITH_ZLIB
-#   undef WITH_GZIP
-#  endif
-# endif
-#else
-# if defined(UNDER_CE)
-#  define WITH_LEAN
-#  define HAVE_SSCANF
-# elif defined(WIN32)
-#  define HAVE_SNPRINTF
-#  define HAVE_STRRCHR
-#  define HAVE_STRTOD
-#  define HAVE_SSCANF
-#  define HAVE_STRTOL
-#  define HAVE_STRTOUL
-#  define HAVE_SYS_TIMEB_H
-#  define HAVE_FTIME
-#  define HAVE_GMTIME
-#  define HAVE_WCTOMB
-#  define HAVE_MBTOWC
-#  define SOAP_LONG_FORMAT "%I64d"
-#  define SOAP_ULONG_FORMAT "%I64u"
-# elif defined(CYGWIN)
-#  define HAVE_POLL
-#  define HAVE_SNPRINTF
-#  define HAVE_STRRCHR
-#  define HAVE_STRTOD
-#  define HAVE_SSCANF
-#  define HAVE_STRTOL
-#  define HAVE_STRTOUL
-#  define HAVE_SYS_TIMEB_H
-#  define HAVE_FTIME
-#  define HAVE_RAND_R
-#  define HAVE_GMTIME_R
-#  define HAVE_LOCALTIME_R
-#  define HAVE_WCTOMB
-#  define HAVE_MBTOWC
-# elif defined(__APPLE__)
-#  define HAVE_POLL
-#  define HAVE_SNPRINTF
-#  define HAVE_STRRCHR
-#  define HAVE_STRTOD
-#  define HAVE_SSCANF
-#  define HAVE_STRTOD_L
-#  define HAVE_SSCANF_L
-#  define HAVE_SPRINTF_L
-#  define HAVE_STRTOL
-#  define HAVE_STRTOUL
-#  define HAVE_RAND_R
-#  define HAVE_GMTIME_R
-#  define HAVE_LOCALTIME_R
-#  define HAVE_TIMEGM
-#  define HAVE_WCTOMB
-#  define HAVE_MBTOWC
-# elif defined(_AIX43)
-#  define HAVE_SNPRINTF
-#  define HAVE_STRRCHR
-#  define HAVE_STRTOD
-#  define HAVE_SSCANF
-#  define HAVE_STRTOL
-#  define HAVE_STRTOUL
-#  define HAVE_SYS_TIMEB_H
-#  define HAVE_FTIME
-#  define HAVE_RAND_R
-#  define HAVE_GMTIME_R
-#  define HAVE_LOCALTIME_R
-#  define HAVE_WCTOMB
-#  define HAVE_MBTOWC
-# elif defined(_AIX41)
-#  define HAVE_SNPRINTF
-#  define HAVE_STRRCHR
-#  define HAVE_STRTOD
-#  define HAVE_SSCANF
-#  define HAVE_STRTOL
-#  define HAVE_STRTOUL
-#  define HAVE_SYS_TIMEB_H
-#  define HAVE_WCTOMB
-#  define HAVE_MBTOWC
-# elif defined(HP_UX)
-#  define HAVE_SNPRINTF
-#  define HAVE_STRRCHR
-#  define HAVE_STRTOD
-#  define HAVE_SSCANF
-#  define HAVE_STRTOL
-#  define HAVE_STRTOUL
-#  define HAVE_SYS_TIMEB_H
-#  define HAVE_FTIME
-#  define HAVE_RAND_R
-#  define HAVE_GMTIME_R
-#  define HAVE_LOCALTIME_R
-#  define HAVE_WCTOMB
-#  define HAVE_MBTOWC
-# elif defined(FREEBSD) || defined(__FreeBSD__) || defined(OPENBSD)
-#  define HAVE_POLL
-#  define HAVE_SNPRINTF
-#  define HAVE_STRRCHR
-#  define HAVE_STRTOD
-#  define HAVE_SSCANF
-#  define HAVE_STRTOD_L
-#  define HAVE_SSCANF_L
-#  define HAVE_SPRINTF_L
-#  define HAVE_STRTOL
-#  define HAVE_STRTOUL
-#  define HAVE_STRTOLL
-#  define HAVE_STRTOULL
-#  define HAVE_GETTIMEOFDAY
-#  define HAVE_RAND_R
-#  define HAVE_GMTIME_R
-#  define HAVE_LOCALTIME_R
-#  define HAVE_WCTOMB
-#  define HAVE_MBTOWC
-#  define SOAP_LONG_FORMAT "%qd"
-#  define SOAP_ULONG_FORMAT "%qu"
-# elif defined(__VMS)
-#  define HAVE_SNPRINTF
-#  define HAVE_STRRCHR
-#  define HAVE_STRTOD
-#  define HAVE_SSCANF
-#  define HAVE_STRTOL
-#  define HAVE_STRTOUL
-#  define HAVE_SYS_TIMEB_H
-#  define HAVE_FTIME
-#  define HAVE_RAND_R
-#  define HAVE_GMTIME_R
-#  define HAVE_LOCALTIME_R
-#  define HAVE_WCTOMB
-#  define HAVE_MBTOWC
-# elif defined(__GLIBC__) || defined(__GNU__)
-#  define HAVE_POLL
-#  define HAVE_SNPRINTF
-#  define HAVE_STRRCHR
-#  define HAVE_STRTOD
-#  define HAVE_SSCANF
-#  define HAVE_STRTOD_L
-#  define HAVE_SSCANF_L
-#  define HAVE_SPRINTF_L
-#  define HAVE_STRTOL
-#  define HAVE_STRTOUL
-#  define HAVE_STRTOLL
-#  define HAVE_STRTOULL
-#  define HAVE_SYS_TIMEB_H
-#  define HAVE_FTIME
-#  define HAVE_RAND_R
-#  define HAVE_GMTIME_R
-#  define HAVE_LOCALTIME_R
-#  define HAVE_TIMEGM
-#  define HAVE_WCTOMB
-#  define HAVE_MBTOWC
-#  define HAVE_ISNAN
-# elif defined(TRU64)
-#  define HAVE_SNPRINTF
-#  define HAVE_STRRCHR
-#  define HAVE_STRTOD
-#  define HAVE_SSCANF
-#  define HAVE_STRTOL
-#  define HAVE_STRTOUL
-#  define HAVE_GETTIMEOFDAY
-#  define HAVE_SYS_TIMEB_H
-#  define HAVE_RAND_R
-#  define HAVE_GMTIME_R
-#  define HAVE_LOCALTIME_R
-#  define __USE_STD_IOSTREAM
-#  define HAVE_WCTOMB
-#  define HAVE_MBTOWC
-#  define SOAP_LONG_FORMAT "%ld"
-#  define SOAP_ULONG_FORMAT "%lu"
-# elif defined(MAC_CARBON)
-#  define WITH_NOIO
-#  define HAVE_SNPRINTF
-#  define HAVE_STRRCHR
-#  define HAVE_STRTOD
-#  define HAVE_SSCANF
-#  define HAVE_STRTOD_L
-#  define HAVE_SSCANF_L
-#  define HAVE_SPRINTF_L
-#  define HAVE_STRTOL
-#  define HAVE_STRTOUL
-#  define HAVE_FTIME
-#  define HAVE_RAND_R
-#  define HAVE_GETHOSTBYNAME_R
-#  define HAVE_GMTIME_R
-#  define HAVE_LOCALTIME_R
-#  define HAVE_WCTOMB
-#  define HAVE_MBTOWC
-# elif defined(PALM)
-#  define WITH_LEAN
-#  define HAVE_STRTOD   /* strtod() is defined in palmFunctions.h */
-#  include <stdlib.h>	/* Needs to be included before unix headers */
-#  include <sys_types.h>
-#  define IGNORE_STDIO_STUBS
-#  include <StdIOPalm.h>
-#  define O_NONBLOCK FNONBIO
-#  include <sys_socket.h>
-#  include "palmFunctions.h"
-# elif defined(SYMBIAN)
-#  define WITH_LEAN
-#  define WITH_NONAMESPACES
-#  define HAVE_STRTOD	/* use STRTOD since sscanf doesn't seem to work */
-#  include <e32def.h>
-#  include <sys/ioctl.h>
-# elif defined(VXWORKS)
-#  ifdef _WRS_KERNEL
-#   define _POSIX_THREADS 1
-#  endif
-#  define HAVE_STRRCHR
-#  define HAVE_STRTOD
-#  define HAVE_SSCANF
-#  define HAVE_STRTOL
-#  define HAVE_STRTOUL
-#  define HAVE_GMTIME
-#  define HAVE_LOCALTIME
-#  define HAVE_MKTIME
-# elif defined(OS390)
-#  define HAVE_SNPRINTF
-#  define HAVE_STRRCHR
-#  define HAVE_STRTOD
-#  define HAVE_SSCANF
-#  define HAVE_STRTOL
-#  define HAVE_STRTOUL
-#  define HAVE_SYS_TIMEB_H
-#  define HAVE_FTIME
-#  define HAVE_RAND_R
-#  define HAVE_GMTIME_R
-#  define HAVE_LOCALTIME_R
-#  define HAVE_WCTOMB
-#  define HAVE_MBTOWC
-# elif defined(AS400)
-#  define HAVE_SNPRINTF
-#  define HAVE_STRRCHR
-#  define HAVE_STRTOD
-#  define HAVE_SSCANF
-#  define HAVE_STRTOL
-#  define HAVE_STRTOUL
-#  define HAVE_SYS_TIMEB_H
-#  define HAVE_FTIME
-#  define HAVE_RAND_R
-#  define HAVE_GMTIME_R
-#  define HAVE_LOCALTIME_R
-#  define HAVE_WCTOMB
-#  define HAVE_MBTOWC
-# elif defined(__QNX__) || defined(QNX)
-/* QNX does not have a working version of strtof */
-#  undef HAVE_STRTOF
-#  define HAVE_POLL
-#  define HAVE_SNPRINTF
-#  define HAVE_STRRCHR
-#  define HAVE_STRTOD
-#  define HAVE_SSCANF
-#  define HAVE_STRTOL
-#  define HAVE_STRTOUL
-#  define HAVE_SYS_TIMEB_H
-#  define HAVE_FTIME
-#  define HAVE_RAND_R
-#  define HAVE_GETHOSTBYNAME_R
-#  define HAVE_GMTIME_R
-#  define HAVE_LOCALTIME_R
-#  define HAVE_WCTOMB
-#  define HAVE_MBTOWC
-#  define LONG64 long
-#  define ULONG64 unsigned LONG64
-#  define SOAP_LONG_FORMAT "%ld"
-#  define SOAP_ULONG_FORMAT "%lu"
-# else
-/* Default assumptions for supported functions */
-#  define HAVE_SNPRINTF
-#  define HAVE_STRRCHR
-#  define HAVE_STRTOD
-#  define HAVE_SSCANF
-#  define HAVE_STRTOL
-#  define HAVE_STRTOUL
-#  define HAVE_SYS_TIMEB_H
-#  define HAVE_FTIME
-#  define HAVE_RAND_R
-#  define HAVE_GETHOSTBYNAME_R
-#  define HAVE_GMTIME_R
-#  define HAVE_LOCALTIME_R
-#  ifdef MB_LEN_MAX
-#   define HAVE_WCTOMB
-#   define HAVE_MBTOWC
-#  endif
-# endif
-#endif
-
-/* native Win and HP-UX compilers don't like empty structs */
-#if defined(WIN32) || defined(HP_UX) || defined(_AIX41) || defined(_AIX43) || defined(VXWORKS)
-# define WITH_NOEMPTYSTRUCT
-#endif
-
-#ifdef HP_UX
-# undef HAVE_STRTOLL
-# undef HAVE_STRTOULL
-#endif
-
-/* older OpenVMS TCP/IP stacks cannot handle 65536 bytes */
-#ifdef __VMS
-# ifndef SOAP_BUFLEN
-#  define SOAP_BUFLEN (65535)
-# endif
-#endif
-
-#ifdef WITH_C_LOCALE
-# include <xlocale.h>
-#else
-# undef HAVE_STRTOF_L
-# undef HAVE_STRTOD_L
-# undef HAVE_SSCANF_L
-# undef HAVE_SPRINTF_L
-#endif
-
-#ifndef WITH_NOSTDLIB
-# include <stdlib.h>
-# ifndef PALM
-#  include <stdio.h>
-#  include <string.h>
-# endif
-# include <ctype.h>
-# include <limits.h>
-#endif
-
-#ifdef HAVE_POLL
-# include <poll.h>
-#endif
-
-#if defined(__cplusplus) && !defined(WITH_LEAN) && !defined(WITH_COMPAT)
-# include <string>
-# include <iostream>
-#endif
-
-#ifdef WITH_NOHTTP
-# ifndef WITH_NOIO
-#  define WITH_NOIO
-#  undef WITH_COOKIES
-# endif
-#endif
-
-/* Suggestion when SOAP_FD_EXCEEDED error occurs:
-   Some systems allow increasing FD_SETSIZE before including sys/types.h:
-#define FD_SETSIZE (2048)
-*/
-
-#ifndef UNDER_CE
-# ifndef PALM
-#  ifndef WITH_NOIO
-#   include <errno.h>
-#   include <sys/types.h>
-#  endif
-#  ifndef WITH_LEAN
-#   ifdef HAVE_SYS_TIMEB_H
-#    include <sys/timeb.h>		/* for ftime() */
-#   endif
-#   include <time.h>
-#  endif
-# endif
-#endif
-
-#ifdef OPENSERVER
-# include <sys/socket.h>
-# include <sys/stream.h>
-# include <sys/protosw.h>
-  extern int h_errno;
-#endif
-
-#ifndef WITH_NOIO
-# ifndef WIN32
-#  ifndef PALM
-#   include <sys/socket.h>
-#   ifdef VXWORKS
-#    include <sockLib.h>
-#    include <selectLib.h>
-#    ifndef _WRS_KERNEL
-#     include <strings.h>
-#    endif
-#   else
-#    ifndef SYMBIAN
-#     include <strings.h>
-#    endif
-#   endif
-#   ifdef SUN_OS
-#    include <sys/stream.h>		/* SUN */
-#    include <sys/socketvar.h>		/* SUN < 2.8 (?) */
-#   endif
-#   ifdef VXWORKS
-#    ifdef _WRS_KERNEL
-#     include <sys/times.h>
-#    endif
-#   else
-#    include <sys/time.h>
-#   endif
-#   include <netinet/in.h>
-#   ifdef OS390
-#    include <netinet/tcp_var.h>
-#   else
-#    include <netinet/tcp.h>          /* TCP_NODELAY */
-#   endif
-#   include <arpa/inet.h>
-#  endif
-# endif
-#endif
-
-#ifdef WIN32
-# define SOAP_WINSOCKINT int
-#else
-# define SOAP_WINSOCKINT size_t
-#endif
-
-#ifdef WIN32
-# ifndef UNDER_CE
-#  include <io.h>
-#  include <fcntl.h>
-# endif
-# ifdef WITH_IPV6
-#  include <winsock2.h> /* Visual Studio 2005 users: you must install the Platform SDK (R2) */
-#  include <ws2tcpip.h>
-#  include <wspiapi.h>
-#  define SOAP_GAI_STRERROR gai_strerrorA
-# else
-#  ifndef __BORLANDC__
-#   include <winsock.h> /* Visual Studio 2005 users: you must install the Platform SDK (R2) */
-/* # include <winsock2.h> */ /* Alternative: use winsock2 (not available with eVC), enable this line and comment out the line above */
-#  else
-#   include <winsock2.h> /* Borland C */
-#  endif
-# endif
-#else
-# ifdef VXWORKS
-#  include <hostLib.h>
-#  include <ioctl.h>
-#  include <ioLib.h>
-# endif
-# ifndef WITH_NOIO
-#  ifndef PALM
-#   include <netdb.h>
-#   include <netinet/in.h>
-#   include <unistd.h>
-#   include <fcntl.h>
-#   ifdef _AIX41
-#    include <sys/select.h>
-#   endif
-#  endif
-# endif
-#endif
-
-#ifdef WITH_FASTCGI
-# include <fcgi_stdio.h>
-#endif
-
-#ifdef WITH_OPENSSL
-# define OPENSSL_NO_KRB5
-# include <openssl/bio.h>
-# include <openssl/err.h>
-# include <openssl/rand.h>
-# include <openssl/ssl.h>
-# include <openssl/x509v3.h>
-# ifndef ALLOW_OLD_VERSIONS
-#  if (OPENSSL_VERSION_NUMBER < 0x00905100L)
-#   error "Must use OpenSSL 0.9.6 or later"
-#  endif
-# endif
-#endif
-
-#ifdef WITH_GNUTLS
-# include <gnutls/gnutls.h>
-#endif
-
-#ifdef WITH_GZIP
-# ifndef WITH_ZLIB
-#  define WITH_ZLIB
-# endif
-#endif
-
-#ifdef WITH_CASEINSENSITIVETAGS
-# define SOAP_STRCMP soap_tag_cmp	/* case insensitve XML element/attribute names */
-#else
-# define SOAP_STRCMP strcmp		/* case sensitive XML element/attribute names */
-#endif
-
-#ifdef WITH_ZLIB
-# include <zlib.h>
-#endif
-
-#ifndef WITH_NOSTDLIB
-# ifndef PALM
-#  include <math.h>	/* for isnan() */
-# endif
-#endif
-
-/* #define DEBUG */ /* Uncomment to debug sending (in file SENT.log) receiving (in file RECV.log) and messages (in file TEST.log) */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Portability: define SOAP_SOCKLEN_T */
-#if defined(_AIX)
-# if defined(_AIX43)
-#  define SOAP_SOCKLEN_T socklen_t
-# else
-#  define SOAP_SOCKLEN_T int
-# endif
-#elif defined(SOCKLEN_T)
-# define SOAP_SOCKLEN_T SOCKLEN_T
-#elif defined(__socklen_t_defined) || defined(_SOCKLEN_T) || defined(CYGWIN) || defined(FREEBSD) || defined(__FreeBSD__) || defined(OPENBSD) || defined(__QNX__) || defined(QNX) || defined(OS390) || defined(HP_UX)
-# define SOAP_SOCKLEN_T socklen_t
-#elif defined(IRIX) || defined(WIN32) || defined(__APPLE__) || defined(SUN_OS) || defined(OPENSERVER) || defined(TRU64) || defined(VXWORKS)
-# define SOAP_SOCKLEN_T int
-#else
-# define SOAP_SOCKLEN_T size_t
-#endif
-
-#ifndef SOAP_SOCKET
-# ifdef WIN32
-#  define SOAP_SOCKET SOCKET
-#  define soap_closesocket(n) closesocket(n)
-# else
-#  define SOAP_SOCKET int
-#  define soap_closesocket(n) close(n)
-# endif
-#endif
-
-#define SOAP_INVALID_SOCKET ((SOAP_SOCKET)-1)
-#define soap_valid_socket(n) ((n) != SOAP_INVALID_SOCKET)
-
-#ifndef SOAP_GAI_STRERROR
-# define SOAP_GAI_STRERROR gai_strerror
-#endif
-
-#ifndef FD_SETSIZE
-# define FD_SETSIZE (1024)
-#endif
-
-#if defined(SYMBIAN)
-# define LONG64 long
-# define ULONG64 unsigned LONG64
-#elif !defined(WIN32) || defined(CYGWIN) || defined(__GLIBC__) || defined(__GNU__)
-# ifndef LONG64
-#  if defined(HAVE_STDINT_H)
-#   include <stdint.h>
-#   define LONG64 int64_t
-#   define ULONG64 uint64_t
-#  elif defined(__GLIBC__)
-#   include <bits/wordsize.h>
-#   if (__WORDSIZE == 64)
-#    define LONG64 int64_t
-#    define ULONG64 uint64_t
-#    ifndef SOAP_LONG_FORMAT
-#     define SOAP_LONG_FORMAT "%ld"
-#    endif
-#    ifndef SOAP_ULONG_FORMAT
-#     define SOAP_ULONG_FORMAT "%lu"
-#    endif
-#   else
-#    define LONG64 long long
-#    define ULONG64 unsigned LONG64
-#   endif
-#  else
-#   define LONG64 long long
-#   define ULONG64 unsigned LONG64
-#  endif
-# endif
-#elif defined(UNDER_CE)
-# define LONG64 __int64
-# define ULONG64 unsigned LONG64
-#elif defined(__BORLANDC__)
-# define LONG64 __int64
-# define ULONG64 unsigned LONG64
-#endif
-
-#ifndef SOAP_LONG_FORMAT
-# define SOAP_LONG_FORMAT "%lld"	/* printf format for 64 bit ints */
-#endif
-
-#ifndef SOAP_ULONG_FORMAT
-# define SOAP_ULONG_FORMAT "%llu"	/* printf format for unsigned 64 bit ints */
-#endif
-
-#if defined(WIN32) && !defined(CYGWIN)
-# define soap_int32 __int32
-#elif defined(SYMBIAN)
-# define soap_int32 long
-#elif defined(PALM)
-# define soap_int32 Int32
-#elif defined(_AIX)
-# define SOAP_NEW(type) new type	/* AIX compilers don't like new (t) */
-# if defined(_AIX43)
-#  define soap_int32 int32_t
-# else
-#  define soap_int32 signed int
-# endif
-#else
-# define soap_int32 int32_t
-#endif
-
-#ifdef WIN32
-# define SOAP_ERANGE ERANGE
-# define SOAP_EINTR WSAEINTR
-# define SOAP_EAGAIN WSAEWOULDBLOCK
-# define SOAP_EWOULDBLOCK WSAEWOULDBLOCK
-# define SOAP_EINPROGRESS WSAEINPROGRESS
-# define SOAP_EADDRINUSE WSAEADDRINUSE
-#else
-# define SOAP_ERANGE ERANGE
-# define SOAP_EINTR EINTR
-# define SOAP_EAGAIN EAGAIN
-# define SOAP_EADDRINUSE EADDRINUSE
-# ifdef SYMBIAN
-#  define SOAP_EWOULDBLOCK 9898
-#  define SOAP_EINPROGRESS 9899
-# else
-#  define SOAP_EWOULDBLOCK EWOULDBLOCK
-#  define SOAP_EINPROGRESS EINPROGRESS
-# endif
-#endif
-
-#ifdef WIN32
-# ifdef UNDER_CE
-#  define soap_errno GetLastError()
-#  define soap_socket_errno(s) GetLastError()
-#  define soap_reset_errno SetLastError(0)
-# else
-#  define soap_errno GetLastError()
-#  define soap_socket_errno(s) WSAGetLastError()
-#  define soap_reset_errno SetLastError(0)
-# endif
-#else
-# ifndef WITH_NOIO
-#  define soap_errno errno
-#  define soap_socket_errno(s) errno
-#  define soap_reset_errno (errno = 0)
-# else
-#  define soap_errno 0
-#  define soap_socket_errno(s) 0
-#  define soap_reset_errno
-# endif
-#endif
-
-#ifndef SOAP_BUFLEN
-# if !defined(WITH_LEAN)
-#  define SOAP_BUFLEN (65536) /* buffer length for socket packets, also used by gethostbyname_r and UDP messages, so don't make this too small */
-# else
-#  define SOAP_BUFLEN  (2048) /* lean size */
-# endif
-#endif
-#ifndef SOAP_LABLEN
-# define SOAP_LABLEN     (256) /* initial look-aside buffer length */
-#endif
-#ifndef SOAP_PTRBLK
-# define SOAP_PTRBLK     (32) /* block allocation for pointer hash table chains */
-#endif
-#ifndef SOAP_PTRHASH
-# ifndef WITH_LEAN
-#  define SOAP_PTRHASH (1024) /* size of pointer analysis hash table (must be power of 2) */
-# else
-#  define SOAP_PTRHASH   (32)
-# endif
-#endif
-#ifndef SOAP_IDHASH
-# ifndef WITH_LEAN
-#  define SOAP_IDHASH  (1999) /* prime size of hash table for parsed id/ref */
-# else
-#  define SOAP_IDHASH    (19) /* 19, 199 */
-# endif
-#endif
-#ifndef SOAP_BLKLEN
-# ifndef WITH_LEAN
-#  define SOAP_BLKLEN   (256) /* size of blocks to collect long strings and XML attributes */
-# else
-#  define SOAP_BLKLEN    (32)
-# endif
-#endif
-#ifndef SOAP_TAGLEN
-# ifndef WITH_LEAN
-#  define SOAP_TAGLEN  (1024) /* maximum length of XML element tag/attribute name or host/path name + 1 */
-# else
-#  define SOAP_TAGLEN    (64)
-# endif
-#endif
-#ifndef SOAP_HDRLEN
-# ifndef WITH_LEAN
-#  define SOAP_HDRLEN  (8192) /* maximum length of HTTP header line (must be >4096 to read cookies) */
-# else
-#  define SOAP_HDRLEN  (1024)
-# endif
-#endif
-#ifndef SOAP_MAXDIMS
-# ifndef WITH_LEAN
-#  define SOAP_MAXDIMS	 (16) /* maximum array dimensions (array nestings) must be less than 64 to protect soap->tmpbuf */
-# else
-#  define SOAP_MAXDIMS	  (4)
-# endif
-#endif
-
-#ifndef SOAP_MAXLOGS
-# define SOAP_MAXLOGS	  (3) /* max number of debug logs per struct soap environment */
-# define SOAP_INDEX_RECV  (0)
-# define SOAP_INDEX_SENT  (1)
-# define SOAP_INDEX_TEST  (2)
-#endif
-
-/* Max iterations in soap_serve() to keep server connection alive */
-#ifndef SOAP_MAXKEEPALIVE
-# define SOAP_MAXKEEPALIVE (100)
-#endif
-
-/* Trusted max size of inbound SOAP array for compound array allocation.
-   Increase if necessary to allow larger arrays.
-*/
-#ifndef SOAP_MAXARRAYSIZE
-# define SOAP_MAXARRAYSIZE (1000000)
-#endif
-
-#ifdef VXWORKS
-# ifdef WMW_RPM_IO
-#  include "httpLib.h"
-# endif
-# ifdef __INCmathh 
-#  include <private/mathP.h>
-#  ifndef HAVE_ISNAN
-#   define HAVE_ISNAN
-#  endif
-#  ifndef soap_isnan
-#   define soap_isnan(num) isNan(num)
-#  endif
-# endif
-# ifdef WM_SECURE_KEY_STORAGE
-#  include <ipcom_key_db.h>
-# endif
-#endif
-
-#ifdef WIN32 
-# include <float.h>
-# ifndef HAVE_ISNAN
-#  define HAVE_ISNAN
-# endif
-# define soap_isnan(num) _isnan(num)
-#endif
-
-#ifdef SUN_OS
-# define HAVE_ISNAN
-#endif
-
-#ifdef __APPLE__
-# ifdef __cplusplus
-#  ifndef isnan
-extern "C" int isnan(double);
-#  endif
-# endif
-# define HAVE_ISNAN
-#endif
-
-#if !defined(HAVE_ISNAN) && (defined(_MATH_H) || defined(_MATH_INCLUDED))
-# define HAVE_ISNAN
-#endif
-
-extern const struct soap_double_nan { unsigned int n1, n2; } soap_double_nan;
-
-#ifdef VXWORKS
-# ifndef FLT_MAX
-#  define FLT_MAX _ARCH_FLT_MAX
-# endif
-# ifndef DBL_MAX
-#  define DBL_MAX _ARCH_DBL_MAX
-# endif
-#endif
-
-#ifndef FLT_NAN
-# define FLT_NAN (*(float*)(void*)&soap_double_nan)
-#endif
-
-#ifndef FLT_PINFTY
-# if defined(FLT_MAX)
-#  define FLT_PINFTY FLT_MAX
-# elif defined(HUGE_VALF)
-#  define FLT_PINFTY (float)HUGE_VALF
-# elif defined(HUGE_VAL)
-#  define FLT_PINFTY (float)HUGE_VAL
-# elif defined(FLOAT_MAX)
-#  define FLT_PINFTY FLOAT_MAX
-# else
-#  define FLT_PINFTY (3.40282347e+38F)
-# endif
-#endif
-
-#ifndef FLT_NINFTY
-# define FLT_NINFTY (-FLT_PINFTY)
-#endif
-
-#ifndef DBL_NAN
-# define DBL_NAN (*(double*)(void*)&soap_double_nan)
-#endif
-
-#ifndef DBL_PINFTY
-# if defined(DBL_MAX)
-#  define DBL_PINFTY DBL_MAX
-# elif defined(HUGE_VALF)
-#  define DBL_PINFTY (double)HUGE_VALF
-# elif defined(HUGE_VAL)
-#  define DBL_PINFTY (double)HUGE_VAL
-# elif defined(DOUBLE_MAX)
-#  define DBL_PINFTY DOUBLE_MAX
-# else
-#  define DBL_PINFTY (1.7976931348623157e+308)
-# endif
-#endif
-
-#ifndef DBL_NINFTY
-# define DBL_NINFTY (-DBL_PINFTY)
-#endif
-
-#ifndef soap_isnan
-# ifdef HAVE_ISNAN
-#  define soap_isnan(n) isnan(n)
-# else
-#  define soap_isnan(n) (0)
-# endif
-#endif
-
-#define soap_ispinfd(n) ((n) >= DBL_PINFTY)
-#define soap_ispinff(n) ((n) >= FLT_PINFTY)
-#define soap_isninfd(n) ((n) <= DBL_NINFTY)
-#define soap_isninff(n) ((n) <= FLT_NINFTY)
-
-/* gSOAP error codes */
-
-#define SOAP_EOF			EOF
-#define SOAP_ERR			EOF
-#define SOAP_OK				0
-#define SOAP_CLI_FAULT			1
-#define SOAP_SVR_FAULT			2
-#define SOAP_TAG_MISMATCH		3
-#define SOAP_TYPE			4
-#define SOAP_SYNTAX_ERROR		5
-#define SOAP_NO_TAG			6
-#define SOAP_IOB			7
-#define SOAP_MUSTUNDERSTAND		8
-#define SOAP_NAMESPACE			9
-#define SOAP_USER_ERROR			10
-#define SOAP_FATAL_ERROR		11
-#define SOAP_FAULT			12
-#define SOAP_NO_METHOD			13
-#define SOAP_NO_DATA			14
-#define SOAP_GET_METHOD			15
-#define SOAP_PUT_METHOD			16
-#define SOAP_DEL_METHOD			17
-#define SOAP_HEAD_METHOD		18
-#define SOAP_HTTP_METHOD		19
-#define SOAP_EOM			20
-#define SOAP_MOE			21
-#define SOAP_HDR			22
-#define SOAP_NULL			23
-#define SOAP_DUPLICATE_ID		24
-#define SOAP_MISSING_ID			25
-#define SOAP_HREF			26
-#define SOAP_UDP_ERROR			27
-#define SOAP_TCP_ERROR			28
-#define SOAP_HTTP_ERROR			29
-#define SOAP_SSL_ERROR			30
-#define SOAP_ZLIB_ERROR			31
-#define SOAP_DIME_ERROR			32
-#define SOAP_DIME_HREF			33
-#define SOAP_DIME_MISMATCH		34
-#define SOAP_DIME_END			35
-#define SOAP_MIME_ERROR			36
-#define SOAP_MIME_HREF			37
-#define SOAP_MIME_END			38
-#define SOAP_VERSIONMISMATCH		39
-#define SOAP_PLUGIN_ERROR		40
-#define SOAP_DATAENCODINGUNKNOWN	41
-#define SOAP_REQUIRED			42
-#define SOAP_PROHIBITED			43
-#define SOAP_OCCURS			44
-#define SOAP_LENGTH			45
-#define SOAP_FD_EXCEEDED		46
-
-#define soap_xml_error_check(e) ((e) == SOAP_TAG_MISMATCH || (e) == SOAP_NO_TAG || (e) == SOAP_SYNTAX_ERROR || (e) == SOAP_NAMESPACE || (e) == SOAP_DUPLICATE_ID || (e) == SOAP_MISSING_ID || (e) == SOAP_REQUIRED || (e) == SOAP_PROHIBITED || (e) == SOAP_OCCURS || (e) == SOAP_LENGTH || (e) == SOAP_NULL || (e) == SOAP_HREF)
-#define soap_soap_error_check(e) ((e) == SOAP_CLI_FAULT || (e) == SOAP_SVR_FAULT || (e) == SOAP_VERSIONMISMATCH || (e) == SOAP_MUSTUNDERSTAND || (e) == SOAP_FAULT || (e) == SOAP_NO_METHOD)
-#define soap_tcp_error_check(e) ((e) == SOAP_EOF || (e) == SOAP_TCP_ERROR)
-#define soap_ssl_error_check(e) ((e) == SOAP_SSL_ERROR)
-#define soap_zlib_error_check(e) ((e) == SOAP_ZLIB_ERROR)
-#define soap_http_error_check(e) ((e) == SOAP_HTTP_ERROR || (e) == SOAP_NO_DATA || ((e) >= SOAP_GET_METHOD && (e) <= SOAP_HTTP_METHOD) || ((e) >= 100 && (e) < 600))
-
-/* gSOAP HTTP response status codes 100 to 599 are reserved */
-
-/* Codes 600 to 999 are user definable */
-
-/* Exceptional gSOAP HTTP server response status codes >= 1000 */
-
-#define SOAP_STOP		1000	/* No HTTP response */
-#define SOAP_FORM		1001	/* Form request/response */
-#define SOAP_HTML		1002	/* Custom HTML response */
-#define SOAP_FILE		1003	/* Custom file-based response */
-
-/* gSOAP HTTP method codes (client) */
-
-#define SOAP_POST		2000	/* POST request */
-#define SOAP_POST_FILE		2001	/* Custom file-based POST request */
-#define SOAP_GET		2002	/* GET request */
-
-/* gSOAP DIME */
-
-#define SOAP_DIME_CF		0x01
-#define SOAP_DIME_ME		0x02
-#define SOAP_DIME_MB		0x04
-#define SOAP_DIME_VERSION	0x08 /* DIME version 1 */
-#define SOAP_DIME_MEDIA		0x10
-#define SOAP_DIME_ABSURI	0x20
-
-/* gSOAP ZLIB */
-
-#define SOAP_ZLIB_NONE		0x00
-#define SOAP_ZLIB_DEFLATE	0x01
-#define SOAP_ZLIB_INFLATE	0x02
-#define SOAP_ZLIB_GZIP		0x02
-
-/* gSOAP transport, connection, and content encoding modes */
-
-typedef soap_int32 soap_mode;
-
-#define SOAP_IO			0x00000003	/* IO mask */
-#define SOAP_IO_FLUSH		0x00000000	/* flush output immediately, no buffering */
-#define SOAP_IO_BUFFER		0x00000001	/* buffer output in packets of size SOAP_BUFLEN */
-#define SOAP_IO_STORE		0x00000002	/* store entire output to determine length for transport */
-#define SOAP_IO_CHUNK		0x00000003	/* use HTTP chunked transfer AND buffer packets */
-
-#define SOAP_IO_UDP		0x00000004	/* TCP or UDP */
-#define SOAP_IO_LENGTH		0x00000008	/* calc message length (internal) */
-#define SOAP_IO_KEEPALIVE	0x00000010	/* keep connection alive */
-
-#define SOAP_ENC		0x00000FFF	/* IO and ENC mask */
-#define SOAP_ENC_LATIN		0x00000020	/* in: accept iso-8859-1 */
-#define SOAP_ENC_XML		0x00000040	/* out: plain XML encoding, no HTTP header */
-#define SOAP_ENC_DIME		0x00000080
-#define SOAP_ENC_MIME		0x00000100
-#define SOAP_ENC_MTOM		0x00000200
-#define SOAP_ENC_ZLIB		0x00000400
-#define SOAP_ENC_SSL		0x00000800
-
-#define SOAP_XML_STRICT		0x00001000	/* in: strict validation */
-#define SOAP_XML_INDENT		0x00002000	/* out: emit indented XML */
-#define SOAP_XML_IGNORENS	0x00004000	/* in: ignore namespaces */
-#define SOAP_XML_DEFAULTNS	0x00008000	/* out: emit xmlns="..." */
-#define SOAP_XML_CANONICAL	0x00010000	/* out: excC14N canonical XML */
-#define SOAP_XML_TREE		0x00020000	/* out: XML tree (no id/ref) */
-#define SOAP_XML_GRAPH		0x00040000	/* see DOM manual */
-#define SOAP_XML_NIL		0x00080000	/* out: NULLs as xsi:nil */
-
-#define SOAP_C_NOIOB		0x00100000	/* don't fault on array index out of bounds (just ignore) */
-#define SOAP_C_UTFSTRING	0x00200000	/* (de)serialize strings with UTF8 content */
-#define SOAP_C_MBSTRING		0x00400000	/* (de)serialize strings with multi-byte content */
-#define SOAP_C_NILSTRING	0x00800000	/* serialize empty strings as nil (omitted) */
-
-#define SOAP_XML_DOM		0x01000000
-
-#define SOAP_DOM_TREE		0x02000000
-#define SOAP_DOM_NODE		0x04000000
-#define SOAP_DOM_ASIS		0x08000000
-
-#define SOAP_MIME_POSTCHECK	0x10000000	/* MIME flag (internal) */
-
-#define SOAP_XML_SEC		0x80000000	/* reserved for WS security */
-
-/* WITH_XMLNS backward compatibility: always use XML default namespaces */
-#ifdef WITH_XMLNS
-# define SOAP_IO_DEFAULT		(SOAP_IO_FLUSH | SOAP_XML_DEFAULTNS)
-#else
-# define SOAP_IO_DEFAULT		SOAP_IO_FLUSH
-#endif
-
-/* SSL client/server authentication settings */
-
-#define SOAP_SSL_NO_AUTHENTICATION		0x00	/* for testing purposes */
-#define SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION	0x01	/* client requires server to authenticate */
-#define SOAP_SSL_REQUIRE_CLIENT_AUTHENTICATION	0x02	/* server requires client to authenticate */
-#define SOAP_SSL_SKIP_HOST_CHECK		0x04	/* client does not check the common name of the host in certificate */
-#define SOAP_SSL_ALLOW_EXPIRED_CERTIFICATE	0x08	/* client does not check the expiration date of the host certificate */
-#define SOAP_SSL_NO_DEFAULT_CA_PATH		0x10	/* don't use default_verify_paths */
-#define SOAP_SSL_RSA				0x20	/* use RSA */
-#define SOAP_SSLv3				0x40	/* SSL v3 only */
-#define SOAP_TLSv1				0x80	/* TLS v1 only */
-#define SOAP_SSLv3_TLSv1			0x00	/* SSL v3 and TLS v1 support by default (no SSL v1/v2) */
-
-#define SOAP_SSL_DEFAULT			(SOAP_SSL_REQUIRE_SERVER_AUTHENTICATION | SOAP_SSLv3_TLSv1)
-
-/* state */
-
-#define SOAP_NONE	0
-#define SOAP_INIT	1
-#define SOAP_COPY	2
-
-#define soap_check_state(soap) (!(soap) || ((soap)->state != SOAP_INIT && (soap)->state != SOAP_COPY))
-
-/* part */
-
-#define SOAP_BEGIN		0
-#define SOAP_IN_ENVELOPE	2
-#define SOAP_IN_HEADER		3
-#define SOAP_END_HEADER		4
-#define SOAP_NO_BODY		5
-#define SOAP_IN_BODY		6
-#define SOAP_END_BODY		7
-#define SOAP_END_ENVELOPE	8
-#define SOAP_END		9
-#define SOAP_BEGIN_SECURITY	10
-#define SOAP_IN_SECURITY	11
-#define SOAP_END_SECURITY	12
-
-/* DEBUG macros */
-
-#ifndef WITH_LEAN
-# ifdef DEBUG
-#  ifndef SOAP_DEBUG
-#   define SOAP_DEBUG
-#  endif
-#  ifndef SOAP_MEM_DEBUG
-#   define SOAP_MEM_DEBUG
-#  endif
-# endif
-#endif
-
-#ifdef SOAP_MEM_DEBUG
-# ifndef SOAP_MALLOC
-#  define SOAP_MALLOC(soap, size) soap_track_malloc(soap, __FILE__, __LINE__, size)
-# endif
-# ifndef SOAP_FREE
-#  define SOAP_FREE(soap, ptr) soap_track_free(soap, __FILE__, __LINE__, ptr)
-# endif
-#endif
-
-#ifndef SOAP_MALLOC			/* use libc malloc */
-# define SOAP_MALLOC(soap, size) malloc(size)
-#endif
-
-#ifndef SOAP_FREE			/* use libc free */
-# define SOAP_FREE(soap, ptr) free(ptr)
-#endif
-
-#ifndef SOAP_NEW			/* use C++ new operator */
-# if __GNUC__ < 2
-#  define SOAP_NEW(type) new type	/* old form w/o parenthesis */
-# else
-#  define SOAP_NEW(type) new (type)	/* with parenthesis */
-# endif
-#endif
-
-#ifndef SOAP_NEW_COPY			/* use C++ new operator for ::copy() */
-# define SOAP_NEW_COPY(clas) new clas
-#endif
-
-#ifndef SOAP_DELETE			/* use C++ delete operator */
-# define SOAP_DELETE(obj) delete obj
-#endif
-
-#ifndef SOAP_DELETE_ARRAY		/* use C++ delete[] operator */
-# define SOAP_DELETE_ARRAY(obj) delete[] obj
-#endif
-
-#ifdef SOAP_DEBUG
-# ifndef SOAP_MESSAGE
-#  define SOAP_MESSAGE fprintf
-# endif
-# ifndef DBGLOG
-#  define DBGLOG(DBGFILE, CMD) \
-{ if (soap)\
-  { if (!soap->fdebug[SOAP_INDEX_##DBGFILE])\
-      soap_open_logfile((struct soap*)soap, SOAP_INDEX_##DBGFILE);\
-    if (soap->fdebug[SOAP_INDEX_##DBGFILE])\
-    { FILE *fdebug = soap->fdebug[SOAP_INDEX_##DBGFILE];\
-      CMD;\
-      fflush(fdebug);\
-    }\
-  }\
-}
-# endif
-# ifndef DBGMSG
-#  define DBGMSG(DBGFILE, MSG, LEN) \
-{ if (soap)\
-  { if (!soap->fdebug[SOAP_INDEX_##DBGFILE])\
-      soap_open_logfile((struct soap*)soap, SOAP_INDEX_##DBGFILE);\
-    if (soap->fdebug[SOAP_INDEX_##DBGFILE])\
-    { fwrite((MSG), 1, (LEN), soap->fdebug[SOAP_INDEX_##DBGFILE]);\
-      fflush(soap->fdebug[SOAP_INDEX_##DBGFILE]);\
-    }\
-  }\
-}
-# endif
-# ifndef DBGFUN
-#  define DBGFUN(FNAME) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s()\n", __FILE__, __LINE__, FNAME))
-#  define DBGFUN1(FNAME, FMT, ARG) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s("FMT")\n", __FILE__, __LINE__, FNAME, (ARG)))
-#  define DBGFUN2(FNAME, FMT1, ARG1, FMT2, ARG2) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s("FMT1", "FMT2")\n", __FILE__, __LINE__, FNAME, (ARG1), (ARG2)))
-#  define DBGFUN3(FNAME, FMT1, ARG1, FMT2, ARG2, FMT3, ARG3) DBGLOG(TEST, SOAP_MESSAGE(fdebug, "%s(%d): %s("FMT1", "FMT2", "FMT3")\n", __FILE__, __LINE__, FNAME, (ARG1), (ARG2), (ARG3)))
-# endif
-# ifndef DBGHEX
-#  define DBGHEX(DBGFILE, MSG, LEN) \
-{ if (soap)\
-  { if (!soap->fdebug[SOAP_INDEX_##DBGFILE])\
-      soap_open_logfile(soap, SOAP_INDEX_##DBGFILE);\
-    if (soap->fdebug[SOAP_INDEX_##DBGFILE])\
-    { int i; char *s;\
-      for (s = (char*)(MSG), i = (LEN); i; i--)\
-        fprintf(soap->fdebug[SOAP_INDEX_##DBGFILE], "%2.2X  ", (int)*s++&0xFF);\
-      fflush(soap->fdebug[SOAP_INDEX_##DBGFILE]);\
-    }\
-  }\
-}
-# endif
-#else
-# define DBGLOG(DBGFILE, CMD)
-# define DBGMSG(DBGFILE, MSG, LEN)
-# define DBGFUN(FNAME)
-# define DBGFUN1(FNAME, FMT, ARG)
-# define DBGFUN2(FNAME, FMT1, ARG1, FMT2, ARG2)
-# define DBGFUN3(FNAME, FMT1, ARG1, FMT2, ARG2, FMT3, ARG3)
-# define DBGHEX(DBGFILE, MSG, LEN)
-#endif
-
-/* UCS-4 requires 32 bits (0-7FFFFFFF, the sign bit is used by gSOAP to distinguish XML entities) */
-typedef soap_int32 soap_wchar;
-
-/* namespace table row */
-struct Namespace
-{ const char *id;
-  const char *ns;
-  const char *in;
-  char *out;
-};
-
-/* namespace stack */
-struct soap_nlist
-{ struct soap_nlist *next;
-  unsigned int level; /* nesting depth level */
-  short index; /* corresponding entry in ns mapping table */
-  const char *ns; /* only set when parsed ns URI is not in the ns mapping table */
-  char id[1]; /* the actual string value flows into the allocated region below this struct */
-};
-
-/* block stack for nested block allocations */
-struct soap_blist
-{ struct soap_blist *next;
-  char *ptr;
-  size_t size;
-};
-
-/* array layout */
-struct soap_array
-{ void *__ptr;
-  int __size;
-};
-
-/* pointer serialization management */
-struct soap_plist
-{ struct soap_plist *next;
-  const void *ptr;
-  const struct soap_array *array;
-  int type;
-  int id;
-  char mark1;
-  char mark2;
-};
-
-/* block allocation for pointer serialization management */
-struct soap_pblk
-{ struct soap_pblk *next;
-  struct soap_plist plist[SOAP_PTRBLK];
-};
-
-#ifdef SOAP_MEM_DEBUG
-/* malloc/free tracking for debugging */
-struct soap_mlist
-{ struct soap_mlist *next;
-  const void *ptr;
-  const char *file;
-  int line;
-  short live;
-};
-#endif
-
-/* class allocation list */
-struct soap_clist
-{ struct soap_clist *next;
-  void *ptr;
-  int type;
-  int size;
-  int (*fdelete)(struct soap_clist*);
-};
-
-/* attributes */
-struct soap_attribute
-{ struct soap_attribute *next;
-  short flag;	/* soap_set_attr: 1 = normal, 2 = utf content */
-  char *value;
-  size_t size;
-  char *ns;
-  short visible;
-  char name[1]; /* the actual name string flows into the allocated region below this struct */
-};
-
-#ifndef WITH_LEAN
-struct soap_cookie
-{ struct soap_cookie *next;
-  char *name;
-  char *value;
-  char *domain;
-  char *path;
-  time_t expire;	/* client-side: local time to expire */
-  long maxage;		/* server-side: seconds to expire */
-  unsigned int version;
-  short secure;
-  short session;	/* server-side */
-  short env;		/* server-side: got cookie from client and should not be (re)send */
-  short modified;	/* server-side: client cookie was modified and should be send */
-};
-#endif
-
-SOAP_FMAC1 struct soap_multipart* SOAP_FMAC2 soap_next_multipart(struct soap_multipart*);
-
-#ifdef __cplusplus
-
-class soap_multipart_iterator
-{ public:
-  struct soap_multipart *content;
-  bool operator==(const soap_multipart_iterator& iter) const
-    { return (bool)(content == iter.content); }
-  bool operator!=(const soap_multipart_iterator& iter) const
-    { return (bool)(content != iter.content); }
-  struct soap_multipart &operator*() const
-    { return *content; }
-  soap_multipart_iterator &operator++()
-    { content = soap_next_multipart(content); return *this; }
-  soap_multipart_iterator() : content(NULL)
-    { }
-  soap_multipart_iterator(struct soap_multipart *p) : content(p)
-    { }
-};
-#endif
-
-#ifndef WITH_LEANER
-struct soap_dime
-{ size_t count;
-  size_t size;
-  size_t chunksize;
-  size_t buflen;
-  char flags;
-  char *ptr;
-  const char *id;
-  const char *type;
-  const char *options;
-  struct soap_multipart *list;		/* list of DIME attachments received */
-  struct soap_multipart *first, *last;	/* temporary in/out queue */
-#ifdef __cplusplus
-  soap_multipart_iterator begin()
-    { soap_multipart_iterator iter(list); return iter; };
-  soap_multipart_iterator end()
-    { soap_multipart_iterator iter(NULL); return iter; };
-#endif
-};
-#endif
-
-#ifndef WITH_LEANER
-struct soap_mime
-{ char *boundary;			/* MIME boundary */
-  const char *start;			/* MIME start ID */
-  struct soap_multipart *list;		/* list of MIME attachments received */
-  struct soap_multipart *first, *last;	/* temporary in/out queue */
-#ifdef __cplusplus
-  soap_multipart_iterator begin()
-    { soap_multipart_iterator iter(list); return iter; };
-  soap_multipart_iterator end()
-    { soap_multipart_iterator iter(NULL); return iter; };
-#endif
-};
-#endif
-
-#ifndef WITH_LEANER
-/* RFC2045 MIME content transfer encodings */
-enum soap_mime_encoding
-{ SOAP_MIME_NONE,
-  SOAP_MIME_7BIT,
-  SOAP_MIME_8BIT,
-  SOAP_MIME_BINARY,
-  SOAP_MIME_QUOTED_PRINTABLE,
-  SOAP_MIME_BASE64,
-  SOAP_MIME_IETF_TOKEN,
-  SOAP_MIME_X_TOKEN
-};
-#endif
-
-#ifndef WITH_LEANER
-/* DIME/MIME multipart list */
-struct soap_multipart
-{ struct soap_multipart *next;
-  char *ptr;				/* points to raw data content */
-  size_t size;				/* size of data content */
-  const char *id;			/* DIME/MIME content ID or form data name */
-  const char *type;			/* DIME/MIME type (MIME type format) */
-  const char *options;			/* DIME options */
-  enum soap_mime_encoding encoding;	/* MIME Content-Transfer-Encoding */
-  const char *location;			/* MIME Content-Location (optional) */
-  const char *description;		/* MIME Content-Description (optional) */
-#ifdef __cplusplus
-  typedef soap_multipart_iterator iterator;
-#endif
-};
-#endif
-
-#ifndef WITH_LEANER
-/* attachment DIME and MTOM XOP forwarding */
-struct soap_xlist
-{ struct soap_xlist *next;
-  unsigned char **ptr;
-  int *size;
-  char *id;
-  char **type;
-  char **options;
-};
-#endif
-
-/******************************************************************************/
-
-#ifndef WITH_LEANER
-#ifdef __cplusplus
-class soap_dom_attribute_iterator
-{ public:
-  struct soap_dom_attribute *att;
-  const char *nstr;
-  const char *name;
-  bool operator==(const soap_dom_attribute_iterator&) const;
-  bool operator!=(const soap_dom_attribute_iterator&) const;
-  struct soap_dom_attribute &operator*() const;
-  soap_dom_attribute_iterator &operator++();
-  soap_dom_attribute_iterator();
-  soap_dom_attribute_iterator(struct soap_dom_attribute*);
-  ~soap_dom_attribute_iterator();
-};
-#endif
-#endif
-
-#ifndef WITH_LEANER
-struct soap_dom_attribute
-{ struct soap_dom_attribute *next;
-  const char *nstr;
-  char *name;
-  char *data;
-  wchar_t *wide;
-  struct soap *soap;
-#ifdef __cplusplus
-  typedef soap_dom_attribute_iterator iterator;
-  struct soap_dom_attribute &set(const char *nstr, const char *name);	/* set namespace and name */
-  struct soap_dom_attribute &set(const char *data);		/* set data */
-  soap_dom_attribute_iterator begin();
-  soap_dom_attribute_iterator end();
-  soap_dom_attribute_iterator find(const char *nstr, const char *name);
-  void unlink();
-  soap_dom_attribute();
-  soap_dom_attribute(struct soap *soap);
-  soap_dom_attribute(struct soap *soap, const char *nstr, const char *name, const char *data);
-  ~soap_dom_attribute();
-#endif
-};
-#endif
-
-#ifndef WITH_LEANER
-#ifdef __cplusplus
-class soap_dom_element_iterator
-{ public:
-  struct soap_dom_element *elt;
-  const char *nstr;
-  const char *name;
-  int type;
-  bool operator==(const soap_dom_element_iterator&) const;
-  bool operator!=(const soap_dom_element_iterator&) const;
-  struct soap_dom_element &operator*() const;
-  soap_dom_element_iterator &operator++();
-  soap_dom_element_iterator();
-  soap_dom_element_iterator(struct soap_dom_element*);
-  ~soap_dom_element_iterator();
-};
-#endif
-#endif
-
-#ifndef WITH_LEANER
-struct soap_dom_element
-{ struct soap_dom_element *next;	/* next sibling */
-  struct soap_dom_element *prnt;	/* parent */
-  struct soap_dom_element *elts;	/* list of child elements */
-  struct soap_dom_attribute *atts;	/* list of attributes */
-  const char *nstr;			/* namespace string */
-  char *name;				/* element tag name */
-  char *data;				/* element content data (with SOAP_C_UTFSTRING flag set) */
-  wchar_t *wide;			/* element content data */
-  int type;				/* optional: serialized C/C++ data type */
-  void *node;				/* optional: pointer to serialized C/C++ data */
-  char *head;				/* leading content before start tag */
-  char *tail;				/* leading content before end tag */
-  struct soap *soap;			/* soap context that manages this node */
-#ifdef __cplusplus
-  typedef soap_dom_element_iterator iterator;
-  struct soap_dom_element &set(const char *nstr, const char *name);
-  struct soap_dom_element &set(const char *data);
-  struct soap_dom_element &set(void *node, int type);
-  struct soap_dom_element &add(struct soap_dom_element*);
-  struct soap_dom_element &add(struct soap_dom_element&);
-  struct soap_dom_element &add(struct soap_dom_attribute*);
-  struct soap_dom_element &add(struct soap_dom_attribute&);
-  soap_dom_element_iterator begin();
-  soap_dom_element_iterator end();
-  soap_dom_element_iterator find(const char *nstr, const char *name);
-  soap_dom_element_iterator find(int type);
-  void unlink();
-  soap_dom_element();
-  soap_dom_element(struct soap *soap);
-  soap_dom_element(struct soap *soap, const char *nstr, const char *name);
-  soap_dom_element(struct soap *soap, const char *nstr, const char *name, const char *data);
-  soap_dom_element(struct soap *soap, const char *nstr, const char *name, void *node, int type);
-  ~soap_dom_element();
-#endif
-};
-SOAP_FMAC1 struct soap_dom_element * SOAP_FMAC2 soap_dom_next_element(struct soap_dom_element *elt);
-SOAP_FMAC1 struct soap_dom_attribute * SOAP_FMAC2 soap_dom_next_attribute(struct soap_dom_attribute *att);
-#endif
-
-#if defined(__cplusplus) && !defined(WITH_LEAN) && !defined(WITH_COMPAT)
-}
-extern std::ostream &operator<<(std::ostream&, const struct soap_dom_element&);
-extern std::istream &operator>>(std::istream&, struct soap_dom_element&);
-extern "C" {
-#endif
-
-/******************************************************************************/
-
-#ifdef WIN32
-# ifdef SOAP_STD_EXPORTS
-#  define SOAP_STD_API __declspec(dllexport)
-# else
-#  define SOAP_STD_API
-# endif
-#else
-# define SOAP_STD_API
-#endif
-
-struct SOAP_STD_API soap
-{ short state;			/* 0 = uninitialized, 1 = initialized, 2 = copy of another soap struct */
-  short version;		/* 1 = SOAP1.1 and 2 = SOAP1.2 (set automatically from namespace URI in nsmap table) */
-  soap_mode mode;
-  soap_mode imode;
-  soap_mode omode;
-  const char *float_format;	/* user-definable format string for floats (<1024 chars) */
-  const char *double_format;	/* user-definable format string for doubles (<1024 chars) */
-  const char *dime_id_format;	/* user-definable format string for integer DIME id (<SOAP_TAGLEN chars) */
-  const char *http_version;	/* HTTP version used "1.0" or "1.1" */
-  const char *http_content;	/* optional custom response content type (with SOAP_FILE) */
-  const char *encodingStyle;	/* default = NULL which means that SOAP encoding is used */
-  const char *actor;		/* SOAP-ENV:actor or role attribute value */
-  const char *lang;		/* xml:lang attribute value of SOAP-ENV:Text */
-  int recv_timeout;		/* when > 0, gives socket recv timeout in seconds, < 0 in usec */
-  int send_timeout;		/* when > 0, gives socket send timeout in seconds, < 0 in usec */
-  int connect_timeout;		/* when > 0, gives socket connect() timeout in seconds, < 0 in usec */
-  int accept_timeout;		/* when > 0, gives socket accept() timeout in seconds, < 0 in usec */
-#if defined(WITH_OPENSSL) && defined(KMS_SERVER)
-  /* Sun customization for Ultra 2 KMS Server */
-  int ssl_accept_timeout;  /* default 10s unless overridden by this field, specified in seconds, time in SSL_Accept()  */
-#endif
-  int socket_flags;		/* socket recv() and send() flags, e.g. set to MSG_NOSIGNAL to disable sigpipe */
-  int connect_flags;		/* connect() SOL_SOCKET sockopt flags, e.g. set to SO_DEBUG to debug socket */
-  int bind_flags;		/* bind() SOL_SOCKET sockopt flags, e.g. set to SO_REUSEADDR to enable reuse */
-  int accept_flags;		/* accept() SOL_SOCKET sockopt flags */
-  unsigned short linger_time;	/* linger time for SO_LINGER option */
-  const struct Namespace *namespaces;	/* Pointer to global namespace mapping table */
-  struct Namespace *local_namespaces;	/* Local namespace mapping table */
-  struct soap_nlist *nlist;	/* namespace stack */
-  struct soap_blist *blist;	/* block allocation stack */
-  struct soap_clist *clist;	/* class instance allocation list */
-  void *alist;			/* memory allocation (malloc) list */
-  struct soap_ilist *iht[SOAP_IDHASH];
-  struct soap_plist *pht[SOAP_PTRHASH];
-  struct soap_pblk *pblk;	/* plist block allocation */
-  short pidx;			/* plist block allocation */
-  struct SOAP_ENV__Header *header;
-  struct SOAP_ENV__Fault *fault;
-  int idnum;
-  void *user;			/* to pass user-defined data */
-  struct soap_plugin *plugins;	/* linked list of plug-in data */
-  const char *userid;		/* HTTP Basic authorization userid */
-  const char *passwd;		/* HTTP Basic authorization passwd */
-  int (*fpost)(struct soap*, const char*, const char*, int, const char*, const char*, size_t);
-  int (*fget)(struct soap*);
-  int (*fput)(struct soap*);
-  int (*fdel)(struct soap*);
-  int (*fhead)(struct soap*);
-  int (*fform)(struct soap*);
-  int (*fposthdr)(struct soap*, const char*, const char*);
-  int (*fresponse)(struct soap*, int, size_t);
-  int (*fparse)(struct soap*);
-  int (*fparsehdr)(struct soap*, const char*, const char*);
-  int (*fheader)(struct soap*);
-  int (*fresolve)(struct soap*, const char*, struct in_addr* inaddr);
-  int (*fconnect)(struct soap*, const char*, const char*, int);
-  int (*fdisconnect)(struct soap*);
-  int (*fclosesocket)(struct soap*, SOAP_SOCKET);
-  int (*fshutdownsocket)(struct soap*, SOAP_SOCKET, int);
-  SOAP_SOCKET (*fopen)(struct soap*, const char*, const char*, int);
-  SOAP_SOCKET (*faccept)(struct soap*, SOAP_SOCKET, struct sockaddr*, int *n);
-  int (*fclose)(struct soap*);
-  int (*fsend)(struct soap*, const char*, size_t);
-  size_t (*frecv)(struct soap*, char*, size_t);
-  int (*fpoll)(struct soap*);
-  void (*fseterror)(struct soap*, const char **c, const char **s);
-  int (*fignore)(struct soap*, const char*);
-  int (*fserveloop)(struct soap*);
-  void *(*fplugin)(struct soap*, const char*);
-  void *(*fmalloc)(struct soap*, size_t);
-#ifndef WITH_LEANER
-  int (*fprepareinitsend)(struct soap*);
-  int (*fprepareinitrecv)(struct soap*);
-  int (*fpreparesend)(struct soap*, const char*, size_t);
-  int (*fpreparerecv)(struct soap*, const char*, size_t);
-  int (*fpreparefinalsend)(struct soap*);
-  int (*fpreparefinalrecv)(struct soap*);
-  void *(*fdimereadopen)(struct soap*, void*, const char*, const char*, const char*);
-  void *(*fdimewriteopen)(struct soap*, const char*, const char*, const char*);
-  void (*fdimereadclose)(struct soap*, void*);
-  void (*fdimewriteclose)(struct soap*, void*);
-  size_t (*fdimeread)(struct soap*, void*, char*, size_t);
-  int (*fdimewrite)(struct soap*, void*, const char*, size_t);
-  void *(*fmimereadopen)(struct soap*, void*, const char*, const char*, const char*);
-  void *(*fmimewriteopen)(struct soap*, void*, const char*, const char*, const char*, enum soap_mime_encoding);
-  void (*fmimereadclose)(struct soap*, void*);
-  void (*fmimewriteclose)(struct soap*, void*);
-  size_t (*fmimeread)(struct soap*, void*, char*, size_t);
-  int (*fmimewrite)(struct soap*, void*, const char*, size_t);
-#endif
-  SOAP_SOCKET master;
-  SOAP_SOCKET socket;
-#if defined(__cplusplus) && !defined(WITH_LEAN) && !defined(WITH_COMPAT)
-  std::ostream *os;
-  std::istream *is;
-#else
-  void *os;		/* preserve struct size */
-  void *is;		/* preserve struct size */
-#endif
-#ifndef UNDER_CE
-  int sendfd;
-  int recvfd;
-#else
-  FILE *sendfd;
-  FILE *recvfd;
-#endif
-  size_t bufidx;	/* index in soap.buf[] */
-  size_t buflen;	/* length of soap.buf[] content */
-  soap_wchar ahead;	/* parser lookahead */
-  short cdata;		/* CDATA parser state */
-  short body;		/* parsed XML element has a body or not */
-  unsigned int level;	/* XML nesting level */
-  size_t count;		/* message length counter */
-  size_t length;	/* message length as set by HTTP header */
-  char *labbuf;		/* look-aside buffer */
-  size_t lablen;	/* look-aside buffer allocated length */
-  size_t labidx;	/* look-aside buffer index to available part */
-  char buf[SOAP_BUFLEN];/* send and receive buffer */
-  char msgbuf[1024];	/* in/out buffer for HTTP/MIME headers >=1024 bytes */
-  char tmpbuf[1024];	/* in/out buffer for HTTP/MIME headers, simpleType values, element and attribute tag names, and DIME must be >=1024 bytes */
-  char tag[SOAP_TAGLEN];
-  char id[SOAP_TAGLEN];
-  char href[SOAP_TAGLEN];
-  char type[SOAP_TAGLEN];
-  char arrayType[SOAP_TAGLEN];
-  char arraySize[SOAP_TAGLEN];
-  char arrayOffset[SOAP_TAGLEN];
-  short other;
-  short position;
-  int positions[SOAP_MAXDIMS];
-  short root;
-  struct soap_attribute *attributes;	/* attribute list */
-  short encoding;	/* when set, output encodingStyle */
-  short mustUnderstand;	/* a mustUnderstand element was parsed or is output */
-  short null;		/* parsed XML is xsi:nil */
-  short ns;		/* when not set, output full xmlns bindings */
-  short part;		/* parsing state */
-  short alloced;
-  short peeked;
-  size_t chunksize;
-  size_t chunkbuflen;
-  char endpoint[SOAP_TAGLEN];
-  char path[SOAP_TAGLEN];
-  char host[SOAP_TAGLEN];
-  char *action;
-  char *authrealm;		/* HTTP authentication realm */
-  char *prolog;			/* XML declaration prolog */
-  unsigned long ip;		/* IP number */
-  int port;			/* port number */
-  short keep_alive;		/* connection should be kept open */
-  short tcp_keep_alive;		/* enable SO_KEEPALIVE */
-  unsigned int tcp_keep_idle; 	/* set TCP_KEEPIDLE */
-  unsigned int tcp_keep_intvl; 	/* set TCP_KEEPINTVL */
-  unsigned int tcp_keep_cnt; 	/* set TCP_KEEPCNT */
-  unsigned int max_keep_alive;  /* maximum keep-alive session (default=100) */
-  const char *proxy_http_version;/* HTTP version of proxy "1.0" or "1.1" */
-  const char *proxy_host;	/* Proxy Server host name */
-  int proxy_port;		/* Proxy Server port (default = 8080) */
-  const char *proxy_userid;	/* Proxy Authorization user name */
-  const char *proxy_passwd;	/* Proxy Authorization password */
-  const char *proxy_from;	/* X-Forwarding-For header returned by proxy */
-  int status;			/* -1 when request, else error code to be returned by server */
-  int error;
-  int errmode;
-  int errnum;
-#ifndef WITH_LEANER
-  struct soap_dom_element *dom;
-  struct soap_dime dime;
-  struct soap_mime mime;
-  struct soap_xlist *xlist;
-#endif
-#if !defined(WITH_LEAN) || defined(SOAP_DEBUG)
-  const char *logfile[SOAP_MAXLOGS];
-  FILE *fdebug[SOAP_MAXLOGS];
-  struct soap_mlist *mht[SOAP_PTRHASH];
-#endif
-#ifndef WITH_LEAN
-  const char *wsuid;		/* space-separated string of element tags */
-  const char *c14nexclude;	/* space-separated string of prefixes */
-  struct soap_cookie *cookies;
-  const char *cookie_domain;
-  const char *cookie_path;
-  int cookie_max;
-#endif
-#ifndef WITH_NOIO
-  int ipv6_multicast_if; /* always include this to keep the soap struct size the same in v4 and v6 */
-  char* ipv4_multicast_if; /* always include this to keep the soap struct size the same in v4 and v6 */
-  int ipv4_multicast_ttl; /* multicast scope */
-#ifdef WITH_IPV6
-  struct sockaddr_storage peer;	/* IPv6: set by soap_accept and by UDP recv */
-#else
-  struct sockaddr_in peer;	/* IPv4: set by soap_connect/soap_accept and by UDP recv */
-#endif
-#endif
-  size_t peerlen;
-#if defined(WITH_OPENSSL)	/* OpenSSL */
-  int (*fsslauth)(struct soap*);
-  int (*fsslverify)(int, X509_STORE_CTX*);
-  BIO *bio;
-  SSL *ssl;
-  SSL_CTX *ctx;
-  SSL_SESSION *session;
-#else				/* No SSL/TLS */
-  void *fsslauth;		/* dummy members, to preserve struct size */
-  void *fsslverify;
-  void *bio;
-  void *ssl;
-  void *ctx;
-  void *session;
-#endif
-  unsigned short ssl_flags;
-  const char *keyfile;
-  const char *password;
-  const char *dhfile;
-  const char *cafile;
-  const char *capath;
-  const char *crlfile;
-  const char *randfile;
-  char session_host[SOAP_TAGLEN];
-  int session_port;
-#ifdef WITH_C_LOCALE
-  locale_t c_locale;		/* set to C locale by default */
-#else
-  void *c_locale;
-#endif
-#ifdef WITH_ZLIB
-  z_stream *d_stream;		/* decompression stream */
-  uLong z_crc;			/* internal gzip crc */
-#else
-  void *d_stream;		/* dummy members, to preserve struct size */
-  soap_int32 z_crc;
-#endif
-  const char *z_dict;		/* support for zlib static dictionaries */
-  unsigned int z_dict_len;
-  short zlib_state;		/* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_INFLATE */
-  short zlib_in;		/* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_GZIP */
-  short zlib_out;		/* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_GZIP */
-  char *z_buf;			/* buffer */
-  size_t z_buflen;
-  unsigned short z_level;	/* compression level to be used (0=none, 1=fast to 9=best) */
-  float z_ratio_in;		/* detected compression ratio compressed_length/length of inbound message */
-  float z_ratio_out;		/* detected compression ratio compressed_length/length of outbound message */
-#ifdef WMW_RPM_IO		/* VxWorks */
-  void *rpmreqid;
-#endif
-#ifdef __cplusplus
-  soap();
-  soap(soap_mode);
-  soap(soap_mode, soap_mode);
-  soap(const struct soap&);
-  virtual ~soap();
-#else
-  void (*dummy)();
-#endif
-};
-
-struct soap_code_map
-{ long code;
-  const char *string;
-};
-
-/* forwarding list */
-struct soap_flist
-{ struct soap_flist *next;
-  int type;
-  void *ptr;
-  unsigned int level;
-  size_t len;
-  void (*fcopy)(struct soap*, int, int, void*, size_t, const void*, size_t);
-};
-
-/* id-ref forwarding list */
-struct soap_ilist
-{ struct soap_ilist *next;
-  int type;
-  size_t size;
-  void *link;
-  void *copy;
-  struct soap_flist *flist;
-  void *ptr;
-  unsigned int level;
-  char id[1]; /* the actual id string value flows into the allocated region below this struct */
-};
-
-struct soap_plugin
-{ struct soap_plugin *next;
-  const char *id;
-  void *data;
-  int (*fcopy)(struct soap *soap, struct soap_plugin *dst, struct soap_plugin *src);
-  void (*fdelete)(struct soap *soap, struct soap_plugin *p); /* should delete fields of plugin only and not free(p) */
-};
-
-#ifndef WITH_NONAMESPACES
-extern SOAP_NMAC struct Namespace namespaces[];
-#endif
-
-#ifndef WITH_LEAN
-# define soap_get0(soap) (((soap)->bufidx>=(soap)->buflen && soap_recv(soap)) ? EOF : (unsigned char)(soap)->buf[(soap)->bufidx])
-# define soap_get1(soap) (((soap)->bufidx>=(soap)->buflen && soap_recv(soap)) ? EOF : (unsigned char)(soap)->buf[(soap)->bufidx++])
-#else
-soap_wchar soap_get0(struct soap*);
-soap_wchar soap_get1(struct soap*);
-#endif
-
-#define soap_revget1(soap) ((soap)->bufidx--)
-#define soap_unget(soap, c) ((soap)->ahead = c)
-#define soap_register_plugin(soap, plugin) soap_register_plugin_arg(soap, plugin, NULL)
-#define soap_imode(soap, n) ((soap)->mode = (soap)->imode = (n))
-#define soap_set_imode(soap, n) ((soap)->imode |= (n))
-#define soap_clr_imode(soap, n) ((soap)->imode &= ~(n))
-#define soap_omode(soap, n) ((soap)->mode = (soap)->omode = (n))
-#define soap_set_omode(soap, n) ((soap)->omode |= (n))
-#define soap_clr_omode(soap, n) ((soap)->omode &= ~(n))
-#define soap_set_mode(soap, n) ((soap)->imode |= (n), (soap)->omode |= (n))
-#define soap_clr_mode(soap, n) ((soap)->imode &= ~(n), (soap)->omode &= ~(n))
-#define soap_destroy(soap) soap_delete((soap), NULL)
-
-#ifdef HAVE_STRRCHR
-# define soap_strrchr(s, t) strrchr(s, t)
-#else
- SOAP_FMAC1 char* SOAP_FMAC2 soap_strrchr(const char *s, int t);
-#endif
-
-#ifdef HAVE_STRTOL
-# define soap_strtol(s, t, b) strtol(s, t, b)
-#else
- SOAP_FMAC1 long SOAP_FMAC2 soap_strtol(const char *s, char **t, int b);
-#endif
-
-#ifdef HAVE_STRTOUL
-# define soap_strtoul(s, t, b) strtoul(s, t, b)
-#else
- SOAP_FMAC1 unsigned long SOAP_FMAC2 soap_strtoul(const char *s, char **t, int b);
-#endif
-
-#if defined(WITH_OPENSSL)
-# define soap_random soap_rand()
-SOAP_FMAC1 int SOAP_FMAC2 soap_rand(void);
-#elif defined(HAVE_RANDOM)
-# define soap_random (int)random()
-#else
-# define soap_random rand()
-#endif
-
-#ifdef WITH_NOIDREF
-# define soap_embedded(s, p, t) (0)
-# define soap_id_lookup(s, i, p, t, n, k) (p)
-# define soap_id_forward(s, h, p, len, st, tt, n, k, fc) (p)
-# define soap_reference(s, a, t) (1)
-# define soap_array_reference(s, p, a, n, t) (1)
-# define soap_embed(s, p, a, n, t, pp) (0)
-# define soap_embedded_id(s, i, p, t) (i)
-# define soap_is_embedded(s, p) (0)
-# define soap_is_single(s, p) (1)
-# define soap_lookup_type(s, i) (0)
-# define soap_getindependent(s) (0)
-# define soap_putindependent(s) (0)
-# define soap_getelement(s, n) (n)
-# define soap_putelement(s, p, t, i, n) (0)
-# define soap_markelement(s, p, n) (0)
-#endif
-
-SOAP_FMAC1 void SOAP_FMAC2 soap_header(struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_fault(struct soap*);
-SOAP_FMAC1 const char** SOAP_FMAC2 soap_faultcode(struct soap*);
-SOAP_FMAC1 const char** SOAP_FMAC2 soap_faultsubcode(struct soap*);
-SOAP_FMAC1 const char** SOAP_FMAC2 soap_faultstring(struct soap*);
-SOAP_FMAC1 const char** SOAP_FMAC2 soap_faultdetail(struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_serializeheader(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_putheader(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_getheader(struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_serializefault(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_putfault(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_getfault(struct soap*);
-
-SOAP_FMAC1 void SOAP_FMAC2 soap_ssl_init();
-SOAP_FMAC1 int SOAP_FMAC2 soap_poll(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_connect_command(struct soap*, int, const char*, const char*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_connect(struct soap*, const char*, const char*);
-SOAP_FMAC1 SOAP_SOCKET SOAP_FMAC2 soap_bind(struct soap*, const char*, int, int);
-SOAP_FMAC1 SOAP_SOCKET SOAP_FMAC2 soap_accept(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_accept(struct soap*);
-SOAP_FMAC1 const char * SOAP_FMAC2 soap_ssl_error(struct soap*, int);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_server_context(struct soap*, unsigned short, const char*, const char*, const char*, const char*, const char*, const char*, const char*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_ssl_client_context(struct soap*, unsigned short, const char*, const char*, const char*, const char*, const char*);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_puthttphdr(struct soap*, int status, size_t count);
-
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_get_header_attribute(struct soap*, const char*, const char*);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_decode_key(char*, size_t, const char*);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_decode_val(char*, size_t, const char*);
-
-SOAP_FMAC1 size_t SOAP_FMAC2 soap_hash(const char*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_set_endpoint(struct soap*, const char*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_flush_raw(struct soap*, const char*, size_t);
-SOAP_FMAC1 int SOAP_FMAC2 soap_flush(struct soap*);
-SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_get(struct soap*);
-SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getchar(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_tag_cmp(const char*, const char*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_set_fault(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_sender_fault(struct soap*, const char*, const char*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_sender_fault_subcode(struct soap*, const char*, const char*, const char*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_receiver_fault(struct soap*, const char*, const char*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_receiver_fault_subcode(struct soap*, const char*, const char*, const char*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_set_sender_error(struct soap*, const char*, const char*, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_set_receiver_error(struct soap*, const char*, const char*, int);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_send_raw(struct soap*, const char*, size_t);
-SOAP_FMAC1 int SOAP_FMAC2 soap_recv_raw(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_recv(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_send(struct soap*, const char*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_send2(struct soap*, const char*, const char*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_send3(struct soap*, const char*, const char*, const char*);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_pututf8(struct soap*, unsigned long);
-SOAP_FMAC1 soap_wchar SOAP_FMAC2 soap_getutf8(struct soap*);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_putbase64(struct soap*, const unsigned char*, int);
-SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_getbase64(struct soap*, int*, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_puthex(struct soap*, const unsigned char*, int);
-SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_gethex(struct soap*, int*);
-
-#ifndef WITH_LEANER
-SOAP_FMAC1 int SOAP_FMAC2 soap_xop_forward(struct soap*, unsigned char**, int*, char**, char**, char**);
-SOAP_FMAC1 int SOAP_FMAC2 soap_dime_forward(struct soap*, unsigned char**, int*, char**, char**, char**);
-#endif
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_lookup_id(struct soap*, void *p, int t, struct soap_plist**);
-SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_lookup(struct soap*, const void *p, int t, struct soap_plist**);
-SOAP_FMAC1 int SOAP_FMAC2 soap_pointer_enter(struct soap*, const void *p, const struct soap_array *a, int n, int t, struct soap_plist**);
-SOAP_FMAC1 int SOAP_FMAC2 soap_array_pointer_lookup(struct soap*, const void *p, const struct soap_array *a, int n, int t, struct soap_plist**);
-SOAP_FMAC1 int SOAP_FMAC2 soap_embed(struct soap *soap, const void *p, const struct soap_array *a, int n, const char *tag, int type);
-SOAP_FMAC1 struct soap_ilist* SOAP_FMAC2 soap_lookup(struct soap*, const char*);
-SOAP_FMAC1 struct soap_ilist* SOAP_FMAC2 soap_enter(struct soap*, const char*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_resolve(struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_embedded(struct soap*, const void *p, int t);
-SOAP_FMAC1 int SOAP_FMAC2 soap_reference(struct soap*, const void *p, int t);
-SOAP_FMAC1 int SOAP_FMAC2 soap_array_reference(struct soap*, const void *p, const struct soap_array *a, int n, int t);
-SOAP_FMAC1 int SOAP_FMAC2 soap_embedded_id(struct soap*, int id, const void *p, int t);
-SOAP_FMAC1 int SOAP_FMAC2 soap_is_embedded(struct soap*, struct soap_plist*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_is_single(struct soap*, struct soap_plist*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_set_embedded(struct soap*, struct soap_plist*);
-#endif
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_begin_count(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_end_count(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_begin_send(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_end_send(struct soap*);
-
-SOAP_FMAC1 const struct soap_code_map* SOAP_FMAC2 soap_code(const struct soap_code_map*, const char*);
-SOAP_FMAC1 long SOAP_FMAC2 soap_code_int(const struct soap_code_map*, const char*, long);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_code_str(const struct soap_code_map*, long);
-SOAP_FMAC1 long SOAP_FMAC2 soap_code_bits(const struct soap_code_map*, const char*);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_code_list(struct soap*, const struct soap_code_map*, long);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_getline(struct soap*, char*, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_begin_recv(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_end_recv(struct soap*);
-
-SOAP_FMAC1 void* SOAP_FMAC2 soap_malloc(struct soap*, size_t);
-SOAP_FMAC1 void SOAP_FMAC2 soap_dealloc(struct soap*, void*);
-SOAP_FMAC1 struct soap_clist * SOAP_FMAC2 soap_link(struct soap*, void*, int, int, int (*fdelete)(struct soap_clist*));
-SOAP_FMAC1 void SOAP_FMAC2 soap_unlink(struct soap*, const void*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_free_temp(struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_del(struct soap*);
-
-SOAP_FMAC1 void* SOAP_FMAC2 soap_track_malloc(struct soap*, const char*, int, size_t);
-SOAP_FMAC1 void SOAP_FMAC2 soap_track_free(struct soap*, const char*, int, void*);
-
-#ifndef WITH_NOIDREF
-SOAP_FMAC1 int SOAP_FMAC2 soap_lookup_type(struct soap*, const char *id);
-SOAP_FMAC1 void* SOAP_FMAC2 soap_id_lookup(struct soap*, const char *id, void **p, int t, size_t n, unsigned int k);
-SOAP_FMAC1 void* SOAP_FMAC2 soap_id_forward(struct soap*, const char *id, void *p, size_t len, int st, int tt, size_t n, unsigned int k, void(*fcopy)(struct soap*, int, int, void*, size_t, const void*, size_t));
-#endif
-SOAP_FMAC1 void* SOAP_FMAC2 soap_id_enter(struct soap*, const char *id, void *p, int t, size_t n, unsigned int k, const char *type, const char *arrayType, void *(*finstantiate)(struct soap*, int, const char*, const char*, size_t*));
-SOAP_FMAC1 void SOAP_FMAC2 soap_fcopy(struct soap *soap, int st, int tt, void *p, size_t, const void *q, size_t n);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_size(const int *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_getoffsets(const char *, const int *, int *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_getsize(const char *, const char *, int *);
-SOAP_FMAC1 int SOAP_FMAC2 soap_getsizes(const char *, int *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_getposition(const char *, int *);
-
-SOAP_FMAC1 char* SOAP_FMAC2 soap_putsize(struct soap*, const char *, int);
-SOAP_FMAC1 char* SOAP_FMAC2 soap_putsizesoffsets(struct soap*, const char *, const int *, const int *, int);
-SOAP_FMAC1 char* SOAP_FMAC2 soap_putsizes(struct soap*, const char *, const int *, int);
-SOAP_FMAC1 char* SOAP_FMAC2 soap_putoffset(struct soap*, int);
-SOAP_FMAC1 char* SOAP_FMAC2 soap_putoffsets(struct soap*, const int *, int);
- 
-SOAP_FMAC1 int SOAP_FMAC2 soap_closesock(struct soap*);
-
-SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_new(void);
-SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_new1(soap_mode);
-SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_new2(soap_mode, soap_mode);
-SOAP_FMAC1 void SOAP_FMAC2 soap_free(struct soap*);
-SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_copy(const struct soap*);
-SOAP_FMAC1 struct soap *SOAP_FMAC2 soap_copy_context(struct soap*, const struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_copy_stream(struct soap*, struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_free_stream(struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_init(struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_init1(struct soap*, soap_mode);
-SOAP_FMAC1 void SOAP_FMAC2 soap_init2(struct soap*, soap_mode, soap_mode);
-SOAP_FMAC1 void SOAP_FMAC2 soap_done(struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_cleanup(struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_begin(struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_end(struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_delete(struct soap*, void*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_delegate_deletion(struct soap*, struct soap*);
-
-/* API functions available with DEBUG or SOAP_DEBUG defined: */
-SOAP_FMAC1 void SOAP_FMAC2 soap_set_recv_logfile(struct soap*, const char*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_set_sent_logfile(struct soap*, const char*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_set_test_logfile(struct soap*, const char*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_close_logfiles(struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_open_logfile(struct soap*, int);
-/* */
-
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_value(struct soap*);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_match_tag(struct soap*, const char*, const char *);
-SOAP_FMAC1 int SOAP_FMAC2 soap_match_array(struct soap*, const char*);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_element(struct soap*, const char*, int, const char*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_element_begin_out(struct soap*, const char *tag, int id, const char *type);
-SOAP_FMAC1 int SOAP_FMAC2 soap_array_begin_out(struct soap*, const char *tag, int id, const char *type, const char *offset);
-SOAP_FMAC1 int SOAP_FMAC2 soap_element_ref(struct soap*, const char *tag, int id, int href);
-SOAP_FMAC1 int SOAP_FMAC2 soap_element_href(struct soap*, const char *tag, int id, const char *ref, const char *val);
-SOAP_FMAC1 int SOAP_FMAC2 soap_element_null(struct soap*, const char *tag, int id, const char *type);
-SOAP_FMAC1 int SOAP_FMAC2 soap_element_id(struct soap*, const char *tag, int id, const void *p, const struct soap_array *a, int d, const char *type, int n);
-SOAP_FMAC1 int SOAP_FMAC2 soap_element_result(struct soap*, const char *tag);
-SOAP_FMAC1 void SOAP_FMAC2 soap_check_result(struct soap*, const char *tag);
-SOAP_FMAC1 int SOAP_FMAC2 soap_element_end_out(struct soap*, const char *tag);
-SOAP_FMAC1 int SOAP_FMAC2 soap_element_start_end_out(struct soap*, const char *tag);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_attribute(struct soap*, const char*, const char*);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_element_begin_in(struct soap*, const char *tag, int nillable, const char *type);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_element_end_in(struct soap*, const char *tag);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_peek_element(struct soap*);
-
-SOAP_FMAC1 void SOAP_FMAC2 soap_retry(struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_revert(struct soap*);
-
-SOAP_FMAC1 char* SOAP_FMAC2 soap_strdup(struct soap*, const char*);
-SOAP_FMAC1 wchar_t* SOAP_FMAC2 soap_wstrdup(struct soap*, const wchar_t*);
-SOAP_FMAC1 const char * SOAP_FMAC2 soap_tagsearch(const char *big, const char *little);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_string_out(struct soap*, const char *s, int flag);
-SOAP_FMAC1 char* SOAP_FMAC2 soap_string_in(struct soap*, int, long, long);
-
-#ifndef WITH_LEANER
-SOAP_FMAC1 int SOAP_FMAC2 soap_wstring_out(struct soap*, const wchar_t *s, int flag);
-SOAP_FMAC1 wchar_t* SOAP_FMAC2 soap_wstring_in(struct soap*, int, long, long);
-#endif
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_match_namespace(struct soap*, const char *, const char*, size_t n1, size_t n2);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_set_namespaces(struct soap*, const struct Namespace*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_set_local_namespaces(struct soap*);
-
-SOAP_FMAC1 void SOAP_FMAC2 soap_pop_namespace(struct soap*);
-SOAP_FMAC1 struct soap_nlist* SOAP_FMAC2 soap_push_namespace(struct soap*, const char *,const char *);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_current_namespace(struct soap *soap, const char *tag);
-
-SOAP_FMAC1 struct soap_nlist* SOAP_FMAC2 soap_lookup_ns(struct soap *soap, const char *tag, size_t n);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_store_lab(struct soap*, const char*, size_t);
-SOAP_FMAC1 int SOAP_FMAC2 soap_append_lab(struct soap*, const char*, size_t);
-
-SOAP_FMAC1 struct soap_blist* SOAP_FMAC2 soap_new_block(struct soap*);
-SOAP_FMAC1 void* SOAP_FMAC2 soap_push_block(struct soap*, struct soap_blist*, size_t);
-SOAP_FMAC1 void SOAP_FMAC2 soap_pop_block(struct soap*, struct soap_blist*);
-SOAP_FMAC1 size_t SOAP_FMAC2 soap_size_block(struct soap*, struct soap_blist*, size_t);
-SOAP_FMAC1 char* SOAP_FMAC2 soap_first_block(struct soap*, struct soap_blist*);
-SOAP_FMAC1 char* SOAP_FMAC2 soap_next_block(struct soap*, struct soap_blist*);
-SOAP_FMAC1 size_t SOAP_FMAC2 soap_block_size(struct soap*, struct soap_blist*);
-SOAP_FMAC1 char* SOAP_FMAC2 soap_save_block(struct soap*, struct soap_blist*, char*, int);
-SOAP_FMAC1 void SOAP_FMAC2 soap_end_block(struct soap*, struct soap_blist*);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_out(struct soap*);
-SOAP_FMAC1 int soap_envelope_end_out(struct soap*);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_begin_in(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_envelope_end_in(struct soap*);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_out(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_out(struct soap*);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_body_begin_in(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_body_end_in(struct soap*);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_recv_header(struct soap*);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_response(struct soap*, int);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_send_empty_response(struct soap*, int status);
-SOAP_FMAC1 int SOAP_FMAC2 soap_recv_empty_response(struct soap*);
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_send_fault(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_recv_fault(struct soap*, int check);
-
-#ifndef WITH_NOSTDLIB
-SOAP_FMAC1 void SOAP_FMAC2 soap_print_fault(struct soap*, FILE*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_print_fault_location(struct soap*, FILE*);
-# ifndef WITH_LEAN
-#  ifdef __cplusplus
-SOAP_FMAC1 void SOAP_FMAC2 soap_stream_fault(struct soap*, std::ostream&);
-#  endif
-SOAP_FMAC1 char* SOAP_FMAC2 soap_sprint_fault(struct soap*, char*, size_t);
-# endif
-#endif
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_s2byte(struct soap*, const char*, char*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_s2short(struct soap*, const char*, short*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_s2int(struct soap*, const char*, int*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_s2long(struct soap*, const char*, long*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_s2LONG64(struct soap*, const char*, LONG64*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_s2float(struct soap*, const char*, float*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_s2double(struct soap*, const char*, double*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedByte(struct soap*, const char*, unsigned char*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedShort(struct soap*, const char*, unsigned short*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedInt(struct soap*, const char*, unsigned int*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_s2unsignedLong(struct soap*, const char*, unsigned long*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_s2ULONG64(struct soap*, const char*, ULONG64*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_s2string(struct soap*, const char*, char**, long minlen, long maxlen);
-SOAP_FMAC1 int SOAP_FMAC2 soap_s2QName(struct soap*, const char*, char**, long minlen, long maxlen);
-
-#ifndef WITH_LEAN
-SOAP_FMAC1 int SOAP_FMAC2 soap_s2wchar(struct soap*, const char*, wchar_t**, long minlen, long maxlen);
-SOAP_FMAC1 int SOAP_FMAC2 soap_s2dateTime(struct soap*, const char*, time_t*);
-SOAP_FMAC1 char* SOAP_FMAC2 soap_s2base64(struct soap*, const unsigned char*, char*, int);
-SOAP_FMAC1 char* SOAP_FMAC2 soap_s2hex(struct soap*, const unsigned char*, char*, int);
-#endif
-
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_byte2s(struct soap*, char);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_short2s(struct soap*, short);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_int2s(struct soap*, int);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_long2s(struct soap*, long);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_LONG642s(struct soap*, LONG64);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_float2s(struct soap*, float);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_double2s(struct soap*, double);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedByte2s(struct soap*, unsigned char);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedShort2s(struct soap*, unsigned short);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedInt2s(struct soap*, unsigned int);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_unsignedLong2s(struct soap*, unsigned long);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_ULONG642s(struct soap*, ULONG64);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_QName2s(struct soap*, const char*);
-
-#ifndef WITH_LEAN
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_wchar2s(struct soap*, const wchar_t*);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_dateTime2s(struct soap*, time_t);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_base642s(struct soap*, const char*, char*, size_t, int*);
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_hex2s(struct soap*, const char*, char*, size_t, int*);
-#endif
-
-
-SOAP_FMAC1 int* SOAP_FMAC2 soap_inint(struct soap*, const char *tag, int *p, const char *, int);
-SOAP_FMAC1 char* SOAP_FMAC2 soap_inbyte(struct soap*, const char *tag, char *p, const char *, int);
-SOAP_FMAC1 long* SOAP_FMAC2 soap_inlong(struct soap*, const char *tag, long *p, const char *, int);
-SOAP_FMAC1 LONG64* SOAP_FMAC2 soap_inLONG64(struct soap*, const char *tag, LONG64 *p, const char *, int);
-SOAP_FMAC1 short* SOAP_FMAC2 soap_inshort(struct soap*, const char *tag, short *p, const char *, int);
-SOAP_FMAC1 float* SOAP_FMAC2 soap_infloat(struct soap*, const char *tag, float *p, const char *, int);
-SOAP_FMAC1 double* SOAP_FMAC2 soap_indouble(struct soap*, const char *tag, double *p, const char *, int);
-SOAP_FMAC1 unsigned char* SOAP_FMAC2 soap_inunsignedByte(struct soap*, const char *tag, unsigned char *p, const char *, int);
-SOAP_FMAC1 unsigned short* SOAP_FMAC2 soap_inunsignedShort(struct soap*, const char *tag, unsigned short *p, const char *, int);
-SOAP_FMAC1 unsigned int* SOAP_FMAC2 soap_inunsignedInt(struct soap*, const char *tag, unsigned int *p, const char *, int);
-SOAP_FMAC1 unsigned long* SOAP_FMAC2 soap_inunsignedLong(struct soap*, const char *tag, unsigned long *p, const char *, int);
-SOAP_FMAC1 ULONG64* SOAP_FMAC2 soap_inULONG64(struct soap*, const char *tag, ULONG64 *p, const char *, int);
-SOAP_FMAC1 char** SOAP_FMAC2 soap_instring(struct soap*, const char *tag, char **p, const char *, int, int, long, long);
-SOAP_FMAC1 char** SOAP_FMAC2 soap_inliteral(struct soap*, const char *tag, char **p);
-
-#ifndef WITH_LEAN
-SOAP_FMAC1 time_t* SOAP_FMAC2 soap_indateTime(struct soap*, const char *tag, time_t *p, const char *, int);
-SOAP_FMAC1 time_t SOAP_FMAC2 soap_timegm(struct tm*);
-#endif
-
-#ifndef WITH_LEANER
-SOAP_FMAC1 wchar_t** SOAP_FMAC2 soap_inwstring(struct soap*, const char *tag, wchar_t **p, const char *, int, long, long);
-SOAP_FMAC1 wchar_t** SOAP_FMAC2 soap_inwliteral(struct soap*, const char *tag, wchar_t **p);
-#endif
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_outbyte(struct soap*, const char *tag, int id, const char *p, const char *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_outshort(struct soap*, const char *tag, int id, const short *p, const char *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_outint(struct soap*, const char *tag, int id, const int *p, const char *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_outlong(struct soap*, const char *tag, int id, const long *p, const char *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_outLONG64(struct soap*, const char *tag, int id, const LONG64 *p, const char *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_outfloat(struct soap*, const char *tag, int id, const float *p, const char *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_outdouble(struct soap*, const char *tag, int id, const double *p, const char *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedByte(struct soap*, const char *tag, int id, const unsigned char *p, const char *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedShort(struct soap*, const char *tag, int id, const unsigned short *p, const char *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedInt(struct soap*, const char *tag, int id, const unsigned int *p, const char *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_outunsignedLong(struct soap*, const char *tag, int id, const unsigned long *p, const char *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_outULONG64(struct soap*, const char *tag, int id, const ULONG64 *p, const char *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_outstring(struct soap*, const char *tag, int id, char *const*p, const char *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_outliteral(struct soap*, const char *tag, char *const*p, const char *type);
-
-#ifndef WITH_LEAN
-SOAP_FMAC1 int SOAP_FMAC2 soap_outdateTime(struct soap*, const char *tag, int id, const time_t *p, const char *, int);
-#endif
-
-#ifndef WITH_LEANER
-SOAP_FMAC1 int SOAP_FMAC2 soap_outwstring(struct soap*, const char *tag, int id, wchar_t *const*p, const char *, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_outwliteral(struct soap*, const char *tag, wchar_t *const*p, const char *type);
-#endif
-
-#ifndef WITH_LEANER
-SOAP_FMAC1 int SOAP_FMAC2 soap_attachment(struct soap *, const char*, int, const void*, const struct soap_array*, const char*, const char*, const char*, int, const char*, int);
-SOAP_FMAC1 int SOAP_FMAC2 soap_move(struct soap*, long);
-SOAP_FMAC1 size_t SOAP_FMAC2 soap_tell(struct soap*);
-SOAP_FMAC1 char* SOAP_FMAC2 soap_dime_option(struct soap*, unsigned short, const char*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_getdimehdr(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_getdime(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_putdimehdr(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_putdime(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_getmimehdr(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_getmime(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_putmimehdr(struct soap*, struct soap_multipart*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_putmime(struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_set_dime(struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_set_mime(struct soap*, const char *boundary, const char *start);
-SOAP_FMAC1 void SOAP_FMAC2 soap_clr_dime(struct soap*);
-SOAP_FMAC1 void SOAP_FMAC2 soap_clr_mime(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_set_dime_attachment(struct soap*, char *ptr, size_t size, const char *type, const char *id, unsigned short optype, const char *option);
-SOAP_FMAC1 int SOAP_FMAC2 soap_set_mime_attachment(struct soap*, char *ptr, size_t size, enum soap_mime_encoding encoding, const char *type, const char *id, const char *location, const char *description);
-SOAP_FMAC1 void SOAP_FMAC2 soap_post_check_mime_attachments(struct soap *soap);
-SOAP_FMAC1 int SOAP_FMAC2 soap_check_mime_attachments(struct soap *soap);
-SOAP_FMAC1 struct soap_multipart* SOAP_FMAC2 soap_get_mime_attachment(struct soap *soap, void *handle);
-SOAP_FMAC1 int SOAP_FMAC2 soap_match_cid(struct soap*, const char*, const char*);
-#endif
-
-SOAP_FMAC1 int SOAP_FMAC2 soap_register_plugin_arg(struct soap*, int (*fcreate)(struct soap*, struct soap_plugin*, void*), void*);
-SOAP_FMAC1 void* SOAP_FMAC2 soap_lookup_plugin(struct soap*, const char*);
-
-SOAP_FMAC1 const char* SOAP_FMAC2 soap_attr_value(struct soap *soap, const char *name, int flag);
-SOAP_FMAC1 int SOAP_FMAC2 soap_set_attr(struct soap *soap, const char *name, const char *value, int flag);
-SOAP_FMAC1 void SOAP_FMAC2 soap_clr_attr(struct soap *soap);
-
-#ifdef WITH_COOKIES
-SOAP_FMAC1 void SOAP_FMAC2 soap_getcookies(struct soap *soap, const char *val);
-SOAP_FMAC1 size_t SOAP_FMAC2 soap_encode_cookie(const char*, char*, size_t);
-SOAP_FMAC1 extern struct soap_cookie* SOAP_FMAC2 soap_set_cookie(struct soap*, const char*, const char*, const char*, const char*);
-SOAP_FMAC1 extern struct soap_cookie* SOAP_FMAC2 soap_cookie(struct soap*, const char*, const char*, const char*);
-SOAP_FMAC1 extern char* SOAP_FMAC2 soap_cookie_value(struct soap*, const char*, const char*, const char*);
-SOAP_FMAC1 extern char* SOAP_FMAC2 soap_env_cookie_value(struct soap*, const char*, const char*, const char*);
-SOAP_FMAC1 extern time_t SOAP_FMAC2 soap_cookie_expire(struct soap*, const char*, const char*, const char*);
-SOAP_FMAC1 extern int SOAP_FMAC2 soap_set_cookie_expire(struct soap*, const char*, long, const char*, const char*);
-SOAP_FMAC1 extern int SOAP_FMAC2 soap_set_cookie_session(struct soap*, const char*, const char*, const char*);
-SOAP_FMAC1 extern int SOAP_FMAC2 soap_clr_cookie_session(struct soap*, const char*, const char*, const char*);
-SOAP_FMAC1 extern void SOAP_FMAC2 soap_clr_cookie(struct soap*, const char*, const char*, const char*);
-SOAP_FMAC1 extern int SOAP_FMAC2 soap_getenv_cookies(struct soap*);
-SOAP_FMAC1 extern struct soap_cookie* SOAP_FMAC2 soap_copy_cookies(struct soap*, const struct soap*);
-SOAP_FMAC1 extern void SOAP_FMAC2 soap_free_cookies(struct soap*);
-SOAP_FMAC1 int SOAP_FMAC2 soap_putsetcookies(struct soap *soap);
-SOAP_FMAC1 int SOAP_FMAC2 soap_putcookies(struct soap *soap, const char *domain, const char *path, int secure);
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* STDSOAP_H */
--- a/usr/src/lib/libkmsagent/common/SYSCommon.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2307 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*---------------------------------------------------------------------------
- * Module:            SYSCommon.c
- *-------------------------------------------------------------------------*/
-
-#include <stdio.h>
-#include "SYSCommon.h"
-#include <time.h>
-#include <errno.h>
-#include <sys/stat.h> 
-#include <sys/types.h>
-#include <signal.h>
-
-#ifndef WIN32
-#include <unistd.h>
-#endif
-
-#ifdef WIN32
-#include <io.h>
-#include <stdlib.h>   /* for malloc, calloc, and free */
-#elif defined K_LINUX_PLATFORM
-#include <unistd.h>   /* it includes usleep(us) */
-#include <sys/time.h>
-#include <fts.h>
-#else
-/*
- * Directory traversal code is not yet available for Solaris.
- * If such code will need to be written, then it will probably use ftw.h.
- */
-#endif
-
-#ifdef K_SOLARIS_PLATFORM
-/* For K_AdjustLocalClock */
-#include <unistd.h>
-/* For K_SetRootPassword */
-#define    __EXTENSIONS__    /* to expose flockfile and friends in stdio.h */ 
-#include <errno.h>
-#include <libgen.h>
-#include <malloc.h>
-#include <signal.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <strings.h>
-#include <stropts.h>
-#include <unistd.h>
-#include <termio.h>
-#include <security/pam_appl.h>
-#include <widec.h>
-#endif
-
-#ifdef K_LINUX_PLATFORM
-extern int pthread_mutexattr_settype __P ((pthread_mutexattr_t *__attr,
-                       int __kind));
-#endif
-
-#ifdef K_HPUX_PLATFORM
-int64 atoll(const char *str)
-{
-    int64 tmp = 0;
-    sscanf(str, "%lld", &tmp);
-    return tmp;
-}
-
-#endif
-
-
-/*---------------------------------------------------------------------------
- * Function: K_CreateThread
- *
- * Description:
- *  Thread creation function "CreateThread" takes a thread function
- *  and its parameter to create a thread. It also has a Boolean
- *  parameter to indicate if the thread is detached or joinable.
- *  A new thread's handle is returned through the output parameter.
- *
- * Input
- * -----
- *    i_pFunc         Function pointer of the thread function
- *    i_pvData        The point of the parameter passed to the thread function
- *    i_bIsDetached   The thread is detached or not
- *                    (Note: It is not supported on Win32)
- *
- * Output
- * ------
- *    o_pNewThread    The Thread handle
- *
- * Return value       Error code
- *
- *--------------------------------------------------------------------------*/
-
-int K_CreateThread(K_ThreadFunc i_pFunc,
-                  void *i_pvData,
-                  int i_bIsDetached,
-                  K_THREAD_HANDLE *o_pNewThread)
-{
-    int iOK = K_SYS_OK;
-    int iReturn = 0;
-
-#ifdef WIN32
-
-    {
-       unsigned id;
-
-        *o_pNewThread = (HANDLE)_beginthreadex(NULL,
-                                        0,
-                                        (int (_stdcall *) (void *vpData))i_pFunc,
-                                        i_pvData,
-                                        0,
-                                        &id);
-
-
-        if(*o_pNewThread == 0)
-        {
-#ifdef SYS_DEBUG
-            printf(" (%s, %d): error creating pthread, error = %d\n",
-                __FILE__, __LINE__, iReturn);
-#endif
-            return K_SYS_ERR_CREATE_THREAD;
-        }
-
-        return K_SYS_OK;
-    }
-
-#else
-    pthread_attr_t attr;
-    
-    iReturn = pthread_attr_init(&attr);
-
-    if ( iReturn == 0 )
-    {
-        iReturn = pthread_attr_setdetachstate(&attr, (i_bIsDetached) ?
-                    PTHREAD_CREATE_DETACHED :
-                    PTHREAD_CREATE_JOINABLE);
-    }
-    
-#ifdef UNIX
-    if ( iReturn == 0 )
-    {
-        iReturn = pthread_attr_setstacksize(&attr, 1024*1024);
-    }
-#endif
-
-    if ( iReturn == 0 )
-    {
-        iReturn = pthread_create(o_pNewThread, &attr, (void *(*)(void *)) i_pFunc, i_pvData);
-    }
-
-    if ( iReturn == 0 )
-    {
-        iReturn = pthread_attr_destroy(&attr);
-    }
-
-    // TODO: Log error?
-    if ( iReturn )
-    {
-#ifdef SYS_DEBUG
-        printf(" (%s, %d): error creating pthread, error = %d\n",
-                __FILE__, __LINE__, iReturn);
-#endif
-
-        iOK = K_SYS_ERR_CREATE_THREAD;
-    }
-
-    return iOK;
-#endif
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_JoinThread
- *
- * Description:
- *  Thread joining function is called when the current thread
- *  waits another thread to terminate.
- *
- * Input
- * -----
- *    i_hThread        The thread handle of the to-be-joined thread
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        Error code
- *
- *--------------------------------------------------------------------------*/
-
-int  K_JoinThread(K_THREAD_HANDLE i_hThread)
-{
-    int iOK = K_SYS_OK;
-#ifdef WIN32
-
-    WaitForSingleObject(i_hThread, INFINITE);
-
-#else
-    {
-        int iReturn;
-        iReturn = pthread_join(i_hThread, NULL);
-
-        if ( iReturn )
-        {
-
-#ifdef SYS_DEBUG
-            printf(" (%s, %d): error creating pthread, error = %d\n",
-                    __FILE__, __LINE__, iReturn);
-#endif
-            iOK = K_SYS_ERR_JOIN_THREAD;
-        }
-    }
-
-#endif
-    return iOK;
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_GetCurrentThreadId
- *
- * Description:
- *  Returns the thread ID of the current thread.
- *
- * Input
- * -----
- *    (none)
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        The thread ID
- *
- *--------------------------------------------------------------------------*/
-
-int K_GetCurrentThreadId()
-{
-#ifdef WIN32
-    return GetCurrentThreadId();
-#else
-    return pthread_self();
-#endif
-
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_CreateMutex
- *
- * Description:
- *  The mutex creation function creates a mutex according to the given
- *  mutex type, and returns the mutex handle to the output parameter.
- *
- * Input
- * -----
- *    i_bIsRecursive   Indication whether the mutex can be entered recursively
- *
- * Output
- * ------
- *    o_phandle        the handle pointer to the mutex
- *
- * Return value        Error Code
- *
- *--------------------------------------------------------------------------*/
-
-int K_CreateMutex( K_MUTEX_HANDLE *o_phandle )
-{
-    int iOK = K_SYS_OK;
-    BOOL bIsRecursive = 1;  // this used to be an input -- but why do we want this to be optional?
-
-#ifdef WIN32
-    {
-        *o_phandle = (WIN32Mutex *)malloc(sizeof(WIN32Mutex));
-        if(*o_phandle == NULL)
-        {
-            return K_SYS_ERR_NO_MEMORY;
-        }
-        (*o_phandle)->m_bIsRecursive = bIsRecursive;
-        if(bIsRecursive)
-        {
-                InitializeCriticalSection(&((*o_phandle)->m_stCriticalSection));
-        }
-        else
-        {
-            (*o_phandle)->m_handle = CreateMutex(NULL, FALSE, NULL);
-        }
-
-    }
-#else
-    {
-        int iType;
-        pthread_mutexattr_t attr;
-        
-        if ( pthread_mutexattr_init(&attr) )
-        {
-            return K_SYS_ERR_COND;
-        }
-
-        if(bIsRecursive)
-        {
-            iType =
-#ifdef K_LINUX_PLATFORM
-            PTHREAD_MUTEX_RECURSIVE_NP;
-#else
-            PTHREAD_MUTEX_RECURSIVE;
-#endif
-            
-            if ( pthread_mutexattr_settype(&attr, iType) )
-            {
-                return K_SYS_ERR_COND;
-            }
-        }
-        
-        *o_phandle = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
-        if(*o_phandle == NULL)
-        {
-            return K_SYS_ERR_NO_MEMORY;
-        }
-        
-        if ( pthread_mutex_init(*o_phandle, &attr) )
-        {
-            return K_SYS_ERR_COND;
-        }
-
-        if ( pthread_mutexattr_destroy(&attr) )
-        {
-            return K_SYS_ERR_COND;
-        }
-    }
-#endif
-
-    return iOK;
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_LockMutex
- *
- * Description:
- *  K_LockMutex is used to lock the mutex, and K_UnlockMutex is
- *  used to unlock it.
- *
- * Input
- * -----
- *    i_handle        the mutex handle
- *
- * Output
- * ------
- *    (none)
- *
- * Return value       Error Code
- *
- *--------------------------------------------------------------------------*/
-
-int K_LockMutex(K_MUTEX_HANDLE i_handle)
-{
-    int iOK = K_SYS_OK;
-#ifdef WIN32
-    
-    if(i_handle->m_bIsRecursive)
-    {
-        EnterCriticalSection(&(i_handle->m_stCriticalSection));
-    }
-    else
-    {
-        WaitForSingleObject(i_handle->m_handle, INFINITE);
-    }
-
-#else
-
-    if ( pthread_mutex_lock(i_handle) )
-    {
-        return K_SYS_ERR_COND;
-    }
-
-#endif
-    return iOK; // TODO: better error handling
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_UnlockMutex
- *
- * Description:
- *  K_UnlockMutex is used to unlock the lock.
- *
- * Input
- * -----
- *    i_handle        the mutex handle
- *
- * Output
- * ------
- *    (none)
- *
- * Return value       Error Code
- *
- *--------------------------------------------------------------------------*/
-
-int K_UnlockMutex(K_MUTEX_HANDLE i_handle)
-{
-    int iOK = K_SYS_OK;
-
-#ifdef WIN32
-    if(i_handle->m_bIsRecursive)
-    {
-        LeaveCriticalSection(&(i_handle->m_stCriticalSection));
-    }
-    else
-    {
-        ReleaseMutex(i_handle->m_handle);
-    }
-
-#else
-
-    if ( pthread_mutex_unlock(i_handle) )
-    {
-        return K_SYS_ERR_COND;
-    }
-#endif
-
-    return iOK; // TODO: better error handling
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_DestroyMutex
- *
- * Description:
- *  When a mutex is no longer needed, K_DestroyMutex must be called
- *  to destroy it.
- *
- * Input
- * -----
- *    i_handle        the mutex handle
- * Output
- * ------
- *    (none)
- *
- * Return value       Error Code
- *
- *--------------------------------------------------------------------------*/
-
-int K_DestroyMutex(K_MUTEX_HANDLE i_handle)
-{
-
-    int iOK = K_SYS_OK;
-
-#ifdef WIN32
-
-    if(i_handle->m_bIsRecursive)
-    {
-        DeleteCriticalSection(&(i_handle->m_stCriticalSection));
-    }
-    else
-    {
-        CloseHandle(i_handle->m_handle);
-    }
-    free(i_handle);
-
-#else
-    pthread_mutex_destroy(i_handle);
-    free(i_handle);
-#endif
-    return iOK; // TODO: better error handling
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_InitConditionalVariable
- *
- * Description:
- *  This function initializes a conditional variable.  Upon successful
- *  completion, the new condition variable is returned via the condition
- *  parameter, and 0 is returned.  Otherwise, an error code is returned.
- *
- * Input
- * -----
- *    i_pCond         the pointer to the conditional variable which is to be
- *                    initialized
- *
- * Output
- * ------
- *    (none)
- *
- * Return value       Error Code
- *
- *--------------------------------------------------------------------------*/
-
-int K_InitConditionalVariable (K_ConditionalVariable * i_pCond)
-{
-    int iOK = K_SYS_OK;
-#ifdef WIN32
-
-    i_pCond->m_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
-    i_pCond->m_hMutex = CreateMutex(NULL, FALSE, NULL);
-    i_pCond->m_iSignalAll = 0;
-    i_pCond->m_iNumWaiting = 0;    
-
-#else
-    
-    if ( pthread_cond_init(i_pCond, NULL) )
-    {
-        return K_SYS_ERR_COND;
-    }
-    
-#endif
-
-    return iOK;
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_DestroyConditionalVariable
- *
- * Description:
- *  This function destroys a conditional variable.  Upon successful
- *  completion, the condition variable is destroyed, and 0 is returned.
- *  Otherwise, an error code is returned.
- *  After deletion of the condition variable, the condition parameter
- *  is not valid until it is initialized again by a call to the
- *  K_InitConditionalVariable subroutine.
- *
- * Input
- * -----
- *    i_pCond        the pointer to the conditional variable which is to be
- *                   destroyed
- * Output
- * ------
- *    (none)
- *
- * Return value      Error Code
- *
- *--------------------------------------------------------------------------*/
-
-int K_DestroyConditionalVariable(K_ConditionalVariable * i_pCond)
-{
-    int iOK = K_SYS_OK;
-#ifdef WIN32
-    CloseHandle(i_pCond->m_hMutex);
-    CloseHandle(i_pCond->m_hEvent);
-#else
-    
-    if ( pthread_cond_destroy(i_pCond) )
-    {
-        return K_SYS_ERR_COND;
-    }
-
-#endif
-    return iOK;
-
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_WaitConditionalVariable
- *
- * Description:
- *  This function is used to block on a condition variable.
- *  They are called with mutex locked by the calling thread or undefined
- *  behaviour will result.
- *
- * Input
- * -----
- *    i_pCond        the pointer to the conditional variable
- *    i_handle       the companion mutex handle
- *
- * Output
- * ------
- *    (none)
- *
- * Return value      Error Code
- *
- *--------------------------------------------------------------------------*/
-
-int  K_WaitConditionalVariable(K_ConditionalVariable * i_pCond,
-                               K_MUTEX_HANDLE i_handle)
-{
-
-    int iOK = K_SYS_OK;
-#ifdef WIN32
-    DWORD res;
-
-    while (1) 
-    {
-        iOK = WaitForSingleObject(i_pCond->m_hMutex, INFINITE);
-        if (iOK != WAIT_OBJECT_0) 
-        {
-            return K_SYS_ERR_COND;
-        }
-        i_pCond->m_iNumWaiting++;
-        ReleaseMutex(i_pCond->m_hMutex);
-
-        K_UnlockMutex(i_handle);
-        res = WaitForSingleObject(i_pCond->m_hEvent, INFINITE);
-        i_pCond->m_iNumWaiting--;
-        
-        if (res != WAIT_OBJECT_0) 
-        {
-            ReleaseMutex(i_pCond->m_hMutex);
-            return K_SYS_ERR_COND;
-        }
-        
-        if (i_pCond->m_iSignalAll) 
-        {
-            if (i_pCond->m_iNumWaiting == 0) 
-            {
-                ResetEvent(i_pCond->m_hEvent);
-            }
-            break;
-        }
-        
-        if (i_pCond->m_iSignalled) 
-        {
-            i_pCond->m_iSignalled = 0;
-            ResetEvent(i_pCond->m_hEvent);
-            break;
-        }
-        ReleaseMutex(i_pCond->m_hMutex);
-    }
-
-    K_LockMutex(i_handle);
-
-    return K_SYS_OK;
-#else
-    
-    if ( pthread_cond_wait(i_pCond, i_handle) )
-    {
-        return K_SYS_ERR_COND;
-    }
-
-#endif
-    return iOK; // TODO: better error handling
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_SignalConditionalVariable
- *
- * Description:
- *  This function is used to restart one of the threads that are waiting on
- *  the condition variable.  If no threads are waiting on it, nothing happens.
- *  If several threads are waiting on it, exactly one is restarted.
- *
- * Input
- * -----
- *    i_pCond        the pointer to the conditional variable
- *
- * Output
- * ------
- *    (none)
- *
- * Return value      Error Code
- *
- *--------------------------------------------------------------------------*/
-
-int K_SignalConditionalVariable(K_ConditionalVariable * i_pCond)
-{
-    int iOK = K_SYS_OK;
-#ifdef WIN32
-
-    int iReturn;
-
-    iReturn = WaitForSingleObject(i_pCond->m_hMutex, INFINITE);
-    if (iReturn != WAIT_OBJECT_0) 
-    {
-        return K_SYS_ERR_COND;
-    }
-
-    i_pCond->m_iSignalled = 1;
-
-    iReturn = SetEvent(i_pCond->m_hEvent);
-    if (iReturn == 0) 
-    {
-        iOK = K_SYS_ERR_COND;
-    }
-    ReleaseMutex(i_pCond->m_hMutex);
-
-    return iOK;
-#else
-    
-    if ( pthread_cond_signal(i_pCond) )
-    {
-        return K_SYS_ERR_COND;
-    }
-
-#endif
-    return iOK; 
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_BroadcastConditionalVariable
- *
- * Description:
- *  This function is used to restart all threads that are waiting on
- *  the condition variable.
- *
- * Input
- * -----
- *    i_pCond        the pointer to the conditional variable
- *
- * Output
- * ------
- *    (none)
- *
- * Return value      Error Code
- *
- *--------------------------------------------------------------------------*/
-
-int K_BroadcastConditionalVariable(K_ConditionalVariable * i_pCond)
-{
-
-    int iOK = K_SYS_OK;
-
-#ifdef WIN32
-
-    int iReturn;
-
-    iReturn = WaitForSingleObject(i_pCond->m_hMutex, INFINITE);
-    if (iReturn != WAIT_OBJECT_0) 
-    {
-        return K_SYS_ERR_COND;
-    }
-    i_pCond->m_iSignalled = 1;
-    i_pCond->m_iSignalAll = 1;
-
-    iReturn = SetEvent(i_pCond->m_hEvent);
-
-    if (iReturn == 0) 
-    {
-        iOK = K_SYS_ERR_COND;
-    }
-
-    ReleaseMutex(i_pCond->m_hMutex);
-
-    return iOK;
-
-#else
-    
-    if ( pthread_cond_broadcast(i_pCond) )
-    {
-        return K_SYS_ERR_COND;
-    }
-
-#endif
-    return iOK; 
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_Sleep
- *
- * Description:
- *  Sleep for a given period in given milliseconds.
- *
- * Input
- * -----
- *    i_ms        milliseconds
- *
- * Output
- * ------
- *    (none)
- *
- * Return value   (none)
- *
- *--------------------------------------------------------------------------*/
-
-void K_Sleep(int i_ms)
-{
-#ifdef WIN32
-    Sleep(i_ms);
-#else
-    usleep(i_ms * 1000);
-#endif
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_GetTickCount
- *
- * Description:
- *  The K_GetTickCount function retrieves the number of
- *  milliseconds that have elapsed since the system was started.
- *
- * Input
- * -----
- *    (none)
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        the elasped milliseconds since the system was started
- *
- *--------------------------------------------------------------------------*/
-
-unsigned int K_GetTickCount()
-{
-#ifdef WIN32
-    return (unsigned int)GetTickCount();
-#else
-    {
-        struct timeval tv;
-        gettimeofday( &tv, NULL );
-        /* this will rollover ~ every 49.7 days
-           dont surprise when it returns negative values, since we are only interested
-          in using  sth like "tickCount2 - tickCount1" to get the time interval
-        */
-        return ( tv.tv_sec * 1000 ) + ( tv.tv_usec / 1000 );
-    }
-#endif
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_AdjustClock
- *
- * Description:
- *  The K_AdjustClock function immediately adjusts the system clock by
- *  the given number of seconds.  A positive number adjusts the system
- *  clock forward; a negative number adjusts the system clock backward.
- *
- * Input
- * -----
- *    i_iAdjustmentInSeconds   Number of seconds by which to adjust the
- *                             system clock
- * Output
- * ------
- *    (none)
- *
- * Return value        1 if successful, 0 on error
- *
- *--------------------------------------------------------------------------*/
-
-int K_AdjustClock( long i_iAdjustmentInSeconds )
-{
-#ifndef WIN32
-    struct timeval stDateTime;
-    if ( 0 != gettimeofday(&stDateTime, NULL) )
-    {
-        return FALSE;
-    }
-
-    stDateTime.tv_sec += i_iAdjustmentInSeconds;
-
-    if ( 0 != settimeofday(&stDateTime, NULL) )
-    {
-        return FALSE;
-    }
-#else
-    // TODO: implement for Windows
-    return FALSE;
-#endif
-
-    return TRUE;
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_IsLittleEndian
- *
- * Description:
- *  Checks to see whether this platform uses little endian integer
- *  representation.
- *
- * Input
- * -----
- *    (none)
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        1 for little endian
- *
- *--------------------------------------------------------------------------*/
-
-int K_IsLittleEndian()
-{
-    short iWord = 0x4321;
-    return ((*(unsigned char*)&iWord) == 0x21);
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_FileLength32
- *
- * Description:
- *  Gets the size in bytes of the file associated with the given FILE pointer.
- *
- * Input
- * -----
- *    i_fpFile         File handle
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        File size in bytes, or -1L on error
- *
- *--------------------------------------------------------------------------*/
-
-long K_FileLength32( FILE* i_fpFile )
-{
-#ifdef WIN32
-    int iFileDescriptor = _fileno( i_fpFile );
-    struct _stat stStat;
-    
-    if ( _fstat(iFileDescriptor, &stStat) != 0)
-    {
-        // error
-        return -1L;
-    }
-
-#else
-    int iFileDescriptor = fileno( i_fpFile );
-    struct stat stStat;
-    
-    if ( fstat(iFileDescriptor, &stStat) != 0)
-    {
-        // error
-        return -1L;
-    }
-
-#endif
-
-    return stStat.st_size;
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_StringCompareNoCase
- *
- * Description:
- *  Compares the two given strings insensitive to case.
- *
- * Input
- * -----
- *    i_sString1       First string
- *    i_sString2       Second string
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        0 if identical, -1 if first string is less than second
- *                     string, or 1 if first string is greater than second
- *
- *--------------------------------------------------------------------------*/
-
-int K_StringCompareNoCase( const char* i_sString1, const char* i_sString2 )
-{
-#ifdef WIN32
-    return _stricmp( i_sString1, i_sString2 );
-#else
-    return strcasecmp( i_sString1, i_sString2 );
-#endif
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_StringCompareNoCaseWide
- *
- * Description:
- *  Compares the two given wide strings insensitive to case.
- *
- * Input
- * -----
- *    i_wsString1      First wide string
- *    i_wsString2      Second wide string
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        0 if identical, -1 if first string is less than second
- *                     string, or 1 if first string is greater than second
- *
- *--------------------------------------------------------------------------*/
-
-int K_StringCompareNoCaseWide( const wchar_t* i_wsString1, const wchar_t* i_wsString2 )
-{
-#ifdef WIN32
-    return _wcsicmp( i_wsString1, i_wsString2 );
-#elif defined K_SOLARIS_PLATFORM
-    return wscasecmp( i_wsString1, i_wsString2 );
-#else
-    return wcscasecmp( i_wsString1, i_wsString2 );
-#endif
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_CreateDirectory
- *
- * Description:
- *  Creates a directory with the given path name.
- *
- * Input
- * -----
- *    i_sDirectoryName  Directory name
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        0 on success, -1 on failure
- *
- *--------------------------------------------------------------------------*/
-
-int K_CreateDirectory( const char* i_sDirectoryName )
-{
-    // TODO: make this build all parent directories as well.
-
-#ifdef WIN32
-    if ( CreateDirectoryA( i_sDirectoryName, NULL ) )
-    {
-        return 0;
-    }
-    else
-    {
-        DWORD dwError = GetLastError();
-        return ( dwError == ERROR_ALREADY_EXISTS ) ? 0 : (dwError ? dwError : -1);
-    }
-#else
-    if ( mkdir( i_sDirectoryName, S_IRWXU ) == 0 )
-    {
-        return 0;
-    }
-    else
-    {
-        return ( errno == EEXIST ) ? 0 : (errno ? errno : -1);
-    }
-#endif
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_DeleteFile
- *
- * Description:
- *  Deletes the given file.
- *
- * Input
- * -----
- *    i_sFilename      Name of file to delete
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        0 on success, errno on failure
- *
- *--------------------------------------------------------------------------*/
-
-int K_DeleteFile( const char* i_sFilename )
-{
-    int bSuccess = 0;
-
-    bSuccess = 
-#ifdef WIN32
-        _unlink( 
-#else
-        unlink( 
-#endif
-            i_sFilename ) == 0;
-
-    return bSuccess ? 0 : errno;
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_ReadFile
- *
- * Description:
- *  Reads from the given file and passes the bytes read back to the output
- *  parameter.  The caller must deallocate o_ppFileData using free().
- *
- * Input
- * -----
- *    i_sFilename      Name of file from which to read
- *
- * Output
- * ------
- *    o_ppFileData     Pointer to bytes read
- *
- * Return value        Number of bytes read on success, -1 on failure
- *
- *--------------------------------------------------------------------------*/
-
-int K_ReadFile( const char* i_sFilename, unsigned char** o_ppFileData )
-{
-    FILE* pFile = 0;
-    long iFileSize = 0;
-
-    if ( !i_sFilename || (strlen(i_sFilename) <= 0) || !o_ppFileData )
-    {
-        return -1;
-    }
-
-    *o_ppFileData = 0;
-
-    // Open the file
-
-    pFile = fopen( i_sFilename, "rb" );
-    if ( !pFile )
-    {
-        return -1;
-    }
-
-    // Determine the file size
-
-    if ( fseek( pFile, 0, SEEK_END ) )
-    {
-        (void) fclose( pFile );
-        return -1;
-    }
-
-    iFileSize = ftell( pFile );
-    if ( iFileSize < 0 )
-    {
-        (void) fclose( pFile );
-        return -1;
-    }
-    else if ( iFileSize == 0 )
-    {
-        (void) fclose( pFile );
-        return 0;
-    }
-
-    if ( fseek( pFile, 0, SEEK_SET ) )
-    {
-        (void) fclose( pFile );
-        return -1;
-    }
-
-    *o_ppFileData = (unsigned char*)malloc( iFileSize );
-    if ( !*o_ppFileData )
-    {
-        // Out of memory.
-        (void) fclose( pFile );
-        return -1;
-    }
-
-    if ( iFileSize != (long)fread( *o_ppFileData, 1, iFileSize, pFile ) )
-    {
-        free( *o_ppFileData );
-        *o_ppFileData = 0;
-        (void) fclose( pFile );
-        return -1;
-    }
-
-    (void) fclose( pFile );
-
-    return iFileSize;
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_ReadFileString
- *
- * Description:
- *  Reads from the given file and passes the bytes read back to the output
- *  parameter, appending these bytes with a null terminator.  There is no
- *  guarantee that there are no non-text characters in the returned "string".
- *  The caller must deallocate o_ppFileData using free().
- *
- * Input
- * -----
- *    i_sFilename      Name of file from which to read
- *
- * Output
- * ------
- *    o_psFileDataString     Pointer to bytes read
- *
- * Return value        Number of bytes read (including null terminator) on
- *                     success (0 if file is empty), -1 on failure
- *
- *--------------------------------------------------------------------------*/
-
-int K_ReadFileString( const char* i_sFilename, char** o_psFileDataString )
-{
-    unsigned char* pFileData = 0;
-    int iFileSize = 0;
-
-    *o_psFileDataString = 0;
-
-    iFileSize = K_ReadFile( i_sFilename, &pFileData );
-
-    if ( iFileSize <= 0 )
-    {
-        return iFileSize;
-    }    
-
-    *o_psFileDataString = (char*)malloc( iFileSize+1 );
-
-    if ( !*o_psFileDataString )
-    {
-        // Out of memory.
-        if ( pFileData )
-        {
-            free( pFileData );
-        }
-        return -1;
-    }
-
-    memcpy( *o_psFileDataString, pFileData, iFileSize );
-
-    (*o_psFileDataString)[iFileSize] = '\0';
-
-    if ( pFileData )
-    {
-        free( pFileData );
-    }
-
-    return iFileSize+1;
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_WriteFile
- *
- * Description:
- *  Writes the given bytes to the given file.
- *
- * Input
- * -----
- *    i_sFilename      Name of file to which to write
- *    i_pFileData      Bytes to write
- *    i_iFileDataSize  Number of bytes to write
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        0 on success, errno or -1 (generic error) on failure
- *
- *--------------------------------------------------------------------------*/
-
-int K_WriteFile( const char* i_sFilename, const unsigned char* i_pFileData, int i_iFileDataSize )
-{
-    FILE* pFile = 0;
-
-    if ( !i_sFilename || (strlen(i_sFilename) <= 0) || (!i_pFileData && (i_iFileDataSize > 0)) || (i_iFileDataSize < 0) )
-    {
-        return -1;
-    }
-
-    pFile = fopen( i_sFilename, "wb" );
-    if ( !pFile )
-    {
-        int iError = errno;
-        return (iError != 0) ? iError : -1;
-    }
-
-    if ( i_iFileDataSize > 0 )
-    {
-        if ( i_iFileDataSize != (int)fwrite( i_pFileData, 1, i_iFileDataSize, pFile ) )
-        {
-            int iError = ferror( pFile );
-            (void) fclose( pFile );
-            return (iError != 0) ? iError : -1;
-        }
-    }
-
-    (void) fclose( pFile );
-
-    return 0;
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_WriteFileString
- *
- * Description:
- *  Writes the given null-terminated bytes to the given file.  The null
- *  terminator itself is not written to the file.
- *
- * Input
- * -----
- *    i_sFilename      Name of file to which to write
- *    i_sFileData      Bytes to write
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        0 on success, errno or -1 (generic error) on failure
- *
- *--------------------------------------------------------------------------*/
-
-int K_WriteFileString( const char* i_sFilename, const char* i_sFileData )
-{
-    if ( !i_sFilename || (strlen(i_sFilename) <= 0) || !i_sFileData || (strlen(i_sFileData) <= 0) )
-    {
-        return -1;
-    }
-
-    return K_WriteFile( i_sFilename, (const unsigned char*)i_sFileData, strlen(i_sFileData) );
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_FileExists
- *
- * Description:
- *  Checks to see whehter the given file exists.
- *
- * Input
- * -----
- *    i_sFilename      Name of file to check
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        1 if file exists, 0 if not, -1 on failure
- *
- *--------------------------------------------------------------------------*/
-
-int K_FileExists( const char* i_sFilename )
-{
-    FILE* pFile = 0;
-
-    if ( !i_sFilename || (strlen(i_sFilename) <= 0) )
-    {
-        return -1;
-    }
-
-    pFile = fopen( i_sFilename, "r+" );
-
-    if ( !pFile )
-    {
-        if ( errno == ENOENT )
-        {
-            return 0;
-        }
-
-        return -1;
-    }
-
-    (void) fclose( pFile );
-
-    return 1;
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_CopyFile
- *
- * Description:
- *  Reads from the given source file and writes these bytes to the given
- *  destination file.
- *
- * Input
- * -----
- *    i_sSrcFilename   Name of file from which to read
- *    i_sDestFilename  Name of file to which to write
- *
- * Output
- * ------
- *    o_pbFileExists   Non-zero if the destination file already exists
- *
- * Return value        0 on success, errno or -1 (generic error) on failure
- *
- *--------------------------------------------------------------------------*/
-
-int K_CopyFile( const char* i_sSrcFilename, const char* i_sDestFilename, int* o_pbFileExists )
-{
-    unsigned char* pFileData = 0;
-    int iFileSize = 0;
-    int iError, iFileExists;
-
-    if ( !i_sSrcFilename || (strlen(i_sSrcFilename) <= 0) 
-         || !i_sDestFilename || (strlen(i_sDestFilename) <= 0) 
-         || !o_pbFileExists )
-    {
-        return -1;
-    }
-
-    *o_pbFileExists = 0;
-
-    iFileExists = K_FileExists( i_sDestFilename );
-
-    if ( iFileExists < 0 )
-    {
-        iError = errno;
-        return (iError == 0) ? -1 : iError;
-    }
-    else if ( iFileExists > 0 )
-    {
-        *o_pbFileExists = 1;
-        return -1;
-    }
-
-    iFileSize = K_ReadFile( i_sSrcFilename, &pFileData );
-    if ( iFileSize < 0 )
-    {
-        iError = errno;
-        return (iError == 0) ? -1 : iError;
-    }
-
-    iError = K_WriteFile( i_sDestFilename, pFileData, iFileSize );
-
-    if ( pFileData )
-    {
-        free( pFileData );
-    }
-
-    return iError;
-}
-
-
-#ifdef K_LINUX_PLATFORM
-static int fts_compare( const FTSENT** i_ppF1, const FTSENT** i_ppF2 )
-{
-    return strcmp( (*i_ppF1)->fts_name, (*i_ppF2)->fts_name );
-}
-#else
-/*
- * Directory traversal code is not yet available for Solaris.
- * If such code will need to be written, then it will probably use ftw.h.
- */
-#endif
-
-
-/*
- *  TODO:  Set up functions for platform-specific find-file operations to
- *  help clean up the code below.
- */
-
-typedef struct K_FindInfo
-{
-#ifdef WIN32
-    struct _finddata_t m_stFindData;
-    long m_hFile;
-#elif defined K_LINUX_PLATFORM
-    FTS* m_pFTS;
-    FTSENT* m_pFTSENT;
-#else
-/*
- * Directory traversal code is not yet available for Solaris.
- * If such code will need to be written, then it will probably use ftw.h.
- */
-    int unused;
-#endif
-} K_FindInfo;
-
-// Memory for filename is held in i_pFindInfo.
-const char* K_GetFilenameFromInfo( const K_FindInfo* i_pFindInfo )
-{
-    if( !i_pFindInfo )
-    {
-        return 0;
-    }
-
-#ifdef WIN32
-    return i_pFindInfo->m_stFindData.name;
-#elif defined K_LINUX_PLATFORM
-    return i_pFindInfo->m_pFTSENT->fts_name;
-#else
-/*
- * Directory traversal code is not yet available for Solaris.
- * If such code will need to be written, then it will probably use ftw.h.
- */
-    FATAL_ASSERT( 0 );
-    return 0;
-#endif
-}
-
-// Forward declarations
-int K_FindFileNext( K_FindInfo* io_pFindInfo );
-void K_FindFileClose( K_FindInfo* io_pFindInfo );
-
-// Returns 0 if successful, 1 if not found, -1 if error.
-// If not error, K_FindFileClose must be called.
-// o_pFindInfo must not be null.
-int K_FindFileFirst( const char* i_sDirectoryName, K_FindInfo* o_pFindInfo )
-{
-#ifdef WIN32
-    char* sSearchString = 0;
-    int iSearchStringIndex = 0;
-#endif
-
-    if ( !i_sDirectoryName || (strlen(i_sDirectoryName) <= 0) || !o_pFindInfo )
-    {
-        return -1;
-    }
-
-#ifdef WIN32
-    memset( o_pFindInfo, 0, sizeof(K_FindInfo) );
-
-    iSearchStringIndex = strlen(i_sDirectoryName);
-    if ( i_sDirectoryName[iSearchStringIndex-1] == PATH_SEPARATOR )
-    {
-        iSearchStringIndex += 2;
-    }
-    else
-    {
-        iSearchStringIndex += 3;
-    }
-
-    sSearchString = (char*)calloc( iSearchStringIndex, 1 );
-    if ( !sSearchString )
-    {
-        return -1;
-    }
-
-    strcpy( sSearchString, i_sDirectoryName );
-    iSearchStringIndex--;
-    sSearchString[iSearchStringIndex] = '\0';
-    iSearchStringIndex--;
-    sSearchString[iSearchStringIndex] = '*';
-    iSearchStringIndex--;
-    sSearchString[iSearchStringIndex] = PATH_SEPARATOR;
-
-    o_pFindInfo->m_hFile = _findfirst( sSearchString, &o_pFindInfo->m_stFindData );
-    free( sSearchString );
-    if ( o_pFindInfo->m_hFile == -1 )
-    {
-        if ( errno == ENOENT )
-        {
-            return 1;
-        }
-        else
-        {
-            return -1;
-        }
-    }
-#elif defined K_LINUX_PLATFORM
-    memset( o_pFindInfo, 0, sizeof(K_FindInfo) );
-
-    o_pFindInfo->m_pFTS = fts_open( aPath, FTS_PHYSICAL | FTS_NOSTAT, fts_compare );
-    if ( !o_pFindInfo->m_pFTS )
-    {
-        return -1;
-    }
-
-    o_pFindInfo->m_pFTSENT = fts_read( o_pFindInfo->m_pFTS );
-    if ( !o_pFindInfo->m_pFTSENT )
-    {
-        if ( errno == 0 )
-        {
-            return 1;
-        }
-        else
-        {
-            fts_close( o_pFindInfo->m_pFTS );
-            return -1;
-        }
-    }
-#else
-/*
- * Directory traversal code is not yet available for Solaris.
- * If such code will need to be written, then it will probably use ftw.h.
- */
-#endif
-
-    // If what we found is not actually a file, get the next hit.
-#ifdef WIN32
-    if ( (o_pFindInfo->m_stFindData.attrib & _A_SUBDIR) )
-#elif defined K_LINUX_PLATFORM
-    if ( !(o_pFindInfo->m_pFTSENT->fts_info & FTS_F) )
-#else
-/*
- * Directory traversal code is not yet available for Solaris.
- * If such code will need to be written, then it will probably use ftw.h.
- */
-#endif
-    {
-        int iNextReturn = K_FindFileNext( o_pFindInfo );
-        if ( iNextReturn < 0 )
-        {
-            K_FindFileClose( o_pFindInfo );
-            return -1;
-        }
-        else
-        {
-            return iNextReturn;
-        }
-    }
-
-#if defined(WIN32) || defined(K_LINUX_PLATFORM)
-    return 0;
-#endif
-}
-
-// Returns 0 if successful, 1 if not found, -1 if error.
-int K_FindFileNext( K_FindInfo* io_pFindInfo )
-{
-    if ( !io_pFindInfo )
-    {
-        return -1;
-    }
-
-#ifdef WIN32
-    if ( _findnext( io_pFindInfo->m_hFile, &io_pFindInfo->m_stFindData ) != 0 )
-    {
-        return (errno == ENOENT) ? 1 : -1;
-    }
-#elif defined K_LINUX_PLATFORM
-    io_pFindInfo->m_pFTSENT = fts_read( io_pFindInfo->m_pFTS );
-    if ( !io_pFindInfo->m_pFTSENT )
-    {
-        return (errno == 0) ? 1 : -1;
-    }
-#else
-/*
- * Directory traversal code is not yet available for Solaris.
- * If such code will need to be written, then it will probably use ftw.h.
- */
-#endif
-
-    // If what we found is not actually a file, get the next hit.
-#ifdef WIN32
-    if ( (io_pFindInfo->m_stFindData.attrib & _A_SUBDIR) )
-#elif defined K_LINUX_PLATFORM
-    if ( !(io_pFindInfo->m_pFTSENT->fts_info & FTS_F) )
-#else
-/*
- * Directory traversal code is not yet available for Solaris.
- * If such code will need to be written, then it will probably use ftw.h.
- */
-#endif
-    {
-        return K_FindFileNext( io_pFindInfo );
-    }
-
-#if defined(WIN32) || defined(K_LINUX_PLATFORM)
-    return 0;
-#endif
-}
-
-void K_FindFileClose( K_FindInfo* io_pFindInfo )
-{
-    if ( !io_pFindInfo )
-    {
-        return;
-    }
-
-#ifdef WIN32
-    _findclose( io_pFindInfo->m_hFile );
-#elif defined K_LINUX_PLATFORM
-    fts_close( io_pFindInfo->m_pFTS );
-#else
-/*
- * Directory traversal code is not yet available for Solaris.
- * If such code will need to be written, then it will probably use ftw.h.
- */
-#endif
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_GetFilenamesInDirectoryCount
- *
- * Description:
- *  Reads the given directory and returns the number of files that it contains.
- *
- * Input
- * -----
- *    i_sDirectoryName  Name of directory
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        Number of files on success, -1 on failure
- *
- *--------------------------------------------------------------------------*/
-
-int K_GetFilenamesInDirectoryCount( const char* i_sDirectoryName )
-{
-    K_FindInfo stFindInfo;
-    int iCurrentFile = 0;
-    int iError = 0;
-
-    if ( !i_sDirectoryName || (strlen(i_sDirectoryName) <= 0) )
-    {
-        return -1;
-    }
-
-    iError = K_FindFileFirst( i_sDirectoryName, &stFindInfo );
-    if ( iError < 0 )
-    {
-        // error
-        return -1;
-    }
-    else if ( iError > 0 )
-    {
-        // no files found
-        K_FindFileClose( &stFindInfo );
-        return 0;
-    }
-
-    while ( 1 )
-    {
-        iCurrentFile++;
-
-        iError = K_FindFileNext( &stFindInfo );
-        if ( iError < 0 )
-        {
-            // error
-            K_FindFileClose( &stFindInfo );
-            return -1;
-        }
-        else if ( iError > 0 )
-        {
-            // no more files found
-            break;
-        }
-    }
-
-    K_FindFileClose( &stFindInfo );
-
-    return iCurrentFile;
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_GetFilenamesInDirectory
- *
- * Description:
- *  Reads the given directory and returns an array of names of files that it
- *  contains.  A null pointer appears at the last item in the array.  The
- *  caller must deallocate o_pasFilenames by using K_FreeFilenames or by
- *  calling free() for each file name and then calling free() on the array
- *  itself.
- *
- * Input
- * -----
- *    i_sDirectoryName  Name of directory
- *
- * Output
- * ------
- *    o_pasFilenames   Array of names of files found in this directory
- *
- * Return value        Number of files on success, -1 on failure
- *
- *--------------------------------------------------------------------------*/
-
-int K_GetFilenamesInDirectory( 
-        const char* i_sDirectoryName,
-        char*** o_pasFilenames )
-{
-    // Note that we iterate through the filenames twice -- once to get the count
-    // (K_GetFilenamesInDirectoryCount) and then once to get all the names. But 
-    // it may happen that the count changes between these calls.  So we'll retrieve
-    // at most the number of files that's returned in the first pass.
-
-    K_FindInfo stFindInfo;
-    int iFilenameCount = 0, iCurrentFile = 0;
-    int iError = 0;
-
-    if ( !i_sDirectoryName || (strlen(i_sDirectoryName) <= 0) || !o_pasFilenames )
-    {
-        return -1;
-    }
-
-    *o_pasFilenames = 0;
-
-    iFilenameCount = K_GetFilenamesInDirectoryCount( i_sDirectoryName );
-
-    if ( iFilenameCount < 0 )
-    {
-        return -1;
-    }
-
-    iError = K_FindFileFirst( i_sDirectoryName, &stFindInfo );
-    if ( iError < 0 )
-    {
-        // error
-        return -1;
-    }
-    else if ( iError > 0 )
-    {
-        // No files found
-        K_FindFileClose( &stFindInfo );
-        return 0;
-    }
-
-    *o_pasFilenames = (char**)calloc( (iFilenameCount+1), sizeof(char*) );    // +1 for the null last one
-    if ( !*o_pasFilenames )
-    {
-        // Out of memory
-        K_FindFileClose( &stFindInfo );
-        return -1;
-    }
-
-    while ( 1 )
-    {
-        const char* sFilename = K_GetFilenameFromInfo( &stFindInfo );
-
-        size_t iFilenameLength = sFilename ? strlen( sFilename ) : 0;
-
-        if ( iFilenameLength <= 0 )
-        {
-            K_FreeFilenames( *o_pasFilenames );
-            K_FindFileClose( &stFindInfo );
-            return -1;
-        }
-
-        (*o_pasFilenames)[iCurrentFile] = (char*)calloc( (iFilenameLength+1), sizeof(char) );
-        if ( !(*o_pasFilenames)[iCurrentFile] )
-        {
-            K_FreeFilenames( *o_pasFilenames );
-            K_FindFileClose( &stFindInfo );
-            return -1;
-        }
-
-        strncpy( (*o_pasFilenames)[iCurrentFile], sFilename, iFilenameLength );
-        (*o_pasFilenames)[iCurrentFile][iFilenameLength] = '\0';
-
-        iCurrentFile++;
-
-        if ( iCurrentFile >= iFilenameCount )
-        {
-            break;
-        }
-
-        iError = K_FindFileNext( &stFindInfo );
-        if ( iError < 0 )
-        {
-            // error
-            K_FindFileClose( &stFindInfo );
-            return -1;
-        }
-        else if ( iError > 0 )
-        {
-            // no more files found
-            break;
-        }
-    }
-
-    K_FindFileClose( &stFindInfo );
-
-    return iCurrentFile;
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_FreeFilenames
- *
- * Description:
- *  Deallocates the memory allocated in a successful call to
- *  K_GetFilenamesInDirectory.
- *
- * Input
- * -----
- *    i_asFilenames    Array of names of files
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        (none)
- *
- *--------------------------------------------------------------------------*/
-
-void K_FreeFilenames( char** i_asFilenames )
-{
-    int i;
-
-    if ( !i_asFilenames )
-    {
-        return;
-    }
-
-    for ( i = 0; (i_asFilenames[i] != 0); i++ )
-    {
-        free( i_asFilenames[i] );
-        i_asFilenames[i] = 0;
-    }
-
-    free( i_asFilenames );
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_AdjustLocalClock
- *
- * Description:
- *  The K_AdjustLocalClock function gradually adjusts the system clock by
- *  the given number of seconds.  A positive number adjusts the system
- *  clock forward; a negative number adjusts the system clock backward.
- *
- * Input
- * -----
- *    i_iAdjustmentInSeconds   Number of seconds by which to adjust the
- *                             system clock
- * Output
- * ------
- *    (none)
- *
- * Return value        1 if successful, 0 on error
- *
- *--------------------------------------------------------------------------*/
-
-int K_AdjustLocalClock( int i_iNumberOfSeconds )
-{
-    struct timeval delta, lastchange;
-
-#ifndef K_SOLARIS_PLATFORM
-    /* Only supported/tested on Solaris at the moment */
-
-    return -1;
-#else
-    /* WARNING: uses standard C time functions with Year 2038 limitations */
-    time_t now;
-
-    if ( (now = time(NULL)) == ((time_t)-1) )
-    {
-        return -1;
-    }
-
-    delta.tv_sec = i_iNumberOfSeconds;
-    delta.tv_usec = 0;
-
-    return adjtime(&delta, &lastchange);
-#endif
-}
-
-
-#ifdef K_SOLARIS_PLATFORM
-static int pam_tty_conv(
-    int num_msg,
-    struct pam_message** mess,
-    struct pam_response** resp,
-    void* my_data)
-{
-    // Following code implements a console-based PAM "conversation" function
-    // (based sample code from Solaris 10 Software Developer Collection >>
-    // Solaris Security for Developers Guide >>
-    // 3.  Writing PAM Applications and Services)
-
-    struct pam_message* m = *mess;
-    struct pam_response* r;
-    int i, j;
-    const char* sPassword = (const char*)my_data;
-    int error = PAM_CONV_ERR;
-
-    if (num_msg <= 0 || num_msg >= PAM_MAX_NUM_MSG)
-    {
-        (void) fprintf(stderr, "PAM error: bad number of messages");
-        *resp = NULL;
-        return (PAM_CONV_ERR);
-    }
-
-    if ((*resp = r = calloc(num_msg, sizeof (struct pam_response))) == NULL)
-    {
-        return (PAM_BUF_ERR);
-    }
-
-    // Loop through messages
-    for (i = 0; i < num_msg; i++) {
-
-        // bad message from service module
-        if (m->msg == NULL)
-        {
-            (void) fprintf(stderr, "PAM error: bad message");
-            goto err;
-        }
-
-        // fix up final newline: removed for prompts, added back for messages
-        if (m->msg[strlen(m->msg)] == '\n')
-        {
-            m->msg[strlen(m->msg)] = '\0';
-        }
-
-        // Since the KMA has its own password prompts and enforces its own rule checks, we already have the
-        // new password in memory.  So instead of displaying PAM prompts and collecting user responses, we
-        // "automate" by assuming that the prompts correspond to the standard sequence of "New password:"
-        // followed by "Confirm password:" and so in each case we immediately return the password we already
-        // have in memory.  This violates the PAM "conversation" function instructions (which say, basically,
-        // not to assume any particular sequence of prompts since there could be any number of underlying
-        // password managers), but since the KMA is running on an appliance with a fixed password manager,
-        // our assumptions should hold.
-
-        r->resp = NULL;
-        r->resp_retcode = 0;
-        switch (m->msg_style)
-        {
-        case PAM_PROMPT_ECHO_OFF:
-        case PAM_PROMPT_ECHO_ON:
-            // Assume the prompt asked for New/Confirm password, so return password.
-            if ( (r->resp = strdup(sPassword)) == NULL )
-            {
-                error = PAM_BUF_ERR;
-                goto err;
-            }
-            break;
-
-        case PAM_ERROR_MSG:
-            // Assuming the system is configured properly and the KMA password prompts enforce password strength rules,
-            // there should not be errors because of weak passwords, etc.  Still, print errors so users/support can
-            // diagnose problems.
-            (void) fputs(m->msg, stderr);
-            (void) fputc('\n', stderr);
-            break;
-
-        case PAM_TEXT_INFO:
-            // Supress prompts (again, making assumptions).
-            break;
-
-        default:
-            (void) fprintf(stderr, "PAM error: unknown message");
-            goto err;
-        }
-        if (errno == EINTR)
-        {
-            goto err;
-        }
-
-        // next message/response
-        m++;
-        r++;
-    }
-    return (PAM_SUCCESS);
-
-err:
-    // Service modules do not clean up responses if an error is returned.
-    // Free responses here.
-    for (j = 0; j < i; j++, r++)
-    {
-        if (r->resp)
-        {
-            // clear before freeing -- may be a password
-            bzero(r->resp, strlen(r->resp));
-            free(r->resp);
-            r->resp = NULL;
-        }
-    }
-    free(r);
-    *resp = NULL;
-    return error;
-}
-#endif
-
-
-/*---------------------------------------------------------------------------
- * Function: K_SetRootPassword
- *
- * Description:
- *  The K_SetRootPassword function sets the password for the root user via
- *  Pluggable Authentication Module (PAM).  This function is interactive.
- *
- * Input
- * -----
- *    i_sPassword      Password to set
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        0 if successful, -1 on error
- *
- *--------------------------------------------------------------------------*/
-
-int K_SetRootPassword( const char* i_sPassword )
-{
-    // Only supported/tested on Solaris at the moment
-#ifndef K_SOLARIS_PLATFORM
-    return -1;
-#else
-    // Based on sample code from Solaris 10 Software Developer Collection >>
-    // Solaris Security for Developers Guide >>
-    // 3. Writing PAM Applications and Services
-
-    // TODO: Return PAM error codes (to be logged) instead of emitting
-    // messages to screen?
-
-    struct pam_conv conv;
-    pam_handle_t *pamh;
-    int err;
-
-    conv.conv = pam_tty_conv;
-    conv.appdata_ptr = (void*)i_sPassword;
-
-    // Initialize PAM framework
-    err = pam_start("KeyMgr", "root", &conv, &pamh);
-    if (err != PAM_SUCCESS)
-    {
-        fprintf(stderr, "PAM error: %s\n", pam_strerror(pamh, err));
-        return -1;
-    }
-
-    // Change password
-    err = pam_chauthtok(pamh, 0);
-    if (err != PAM_SUCCESS)
-    {
-        fprintf(stderr, "PAM error: %s\n", pam_strerror(pamh, err));
-        // fall through to cleanup
-    }
-
-    // Cleanup session
-    pam_end(pamh, 0);
-
-    return (err == PAM_SUCCESS) ? 0 : -1;
-#endif
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_Alarm
- *
- * Description:
- *  Calls alarm(2) on Unix in order to cause the operating system to generate
- *  a SIGALRM signal for this process after the given number of real-time
- *  seconds.  Does nothing on Windows.
- *
- * Input
- * -----
- *    i_iSeconds       Number of seconds after which to generate a SIGALRM
- *                     signal
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        If a previous alarm request is pending, then it returns
- *                     the number of seconds until this previous request would
- *                     have generated a SIGALRM signal.  Otherwise, returns 0.
- *
- *--------------------------------------------------------------------------*/
-
-unsigned int K_Alarm( unsigned int i_iSeconds )
-{
-#ifndef WIN32
-    return alarm( i_iSeconds );
-#else
-    return 0;
-#endif
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_GetExtendedVersionFromBase
- *
- * Description:
- *  This KMS-specific function prepends the timestamp value to the specified
- *  base replication schema version and returns this value as an extended
- *  replication schema version.
- *
- * Input
- * -----
- *    i_iBaseSchemaVersion  Base replication schema version
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        Extended replication schema version
- *
- *--------------------------------------------------------------------------*/
-
-unsigned int K_GetExtendedVersionFromBase( unsigned int i_iBaseSchemaVersion )
-{
-    // seconds since 1970, force to 32-bit
-#ifdef WIN32
-    INT32 iTimeStamp = (INT32) time(NULL);
-#else
-    int32_t iTimeStamp = (int32_t) time(NULL);
-#endif
-    // minutes since 1970
-    iTimeStamp = iTimeStamp / 60;
-    // minutes since 2000 (approximately)
-    iTimeStamp -= (30*365*24*60);
-    // shift 8 bits to clear out room for schema version #
-    iTimeStamp = iTimeStamp << 8;
-    // add schema version # to lower end
-    iTimeStamp |= i_iBaseSchemaVersion;
-
-    return (unsigned int) iTimeStamp;
-
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_ParseTimestampFromExtendedVersion
- *
- * Description:
- *  This KMS-specific function parses the timestamp value from the given
- *  extended replication schema version and returns this timestamp value.
- *
- * Input
- * -----
- *    i_iExtendedSchemaVersion  Extended replication schema version
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        Timestamp value
- *
- *--------------------------------------------------------------------------*/
-
-unsigned int K_ParseTimestampFromExtendedVersion(
-    unsigned int i_iExtendedSchemaVersion )
-{
-    unsigned int iTimeStamp = i_iExtendedSchemaVersion >> 8;
-
-    return iTimeStamp;
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_ParseBaseFromExtendedVersion
- *
- * Description:
- *  This KMS-specific function parses the base replication schema value from
- *  the given extended replication schema version and returns this base value.
- *
- * Input
- * -----
- *    i_iExtendedSchemaVersion  Extended replication schema version
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        Base replication schema value
- *
- *--------------------------------------------------------------------------*/
-
-unsigned int K_ParseBaseFromExtendedVersion(
-    unsigned int i_iExtendedSchemaVersion )
-{
-    unsigned int iBaseSchemaVersion = i_iExtendedSchemaVersion & 0x000000FF;
-
-    return iBaseSchemaVersion;
-}
-
-
-/*---------------------------------------------------------------------------
- * Function: K_System
- *
- * Description:
- *  This function is a thread-safe replacement for the unsafe system(3C) call.
- *  See the popen(3C) man page for more information.
- *
- * Input
- * -----
- *    i_sCmd           Command to execute
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        Termination status of the command language interpreter
- *                     if successful, -1 on failure
- *
- *--------------------------------------------------------------------------*/
-
-int K_System( const char *i_sCmd )
-{
-#ifndef WIN32
-        FILE *p;
-        int rc;
-        struct sigaction sOldAction;
-
-        // Save signal handler
-        sigaction( SIGCHLD, NULL, &sOldAction );
-
-        // Use default child signal handler
-        sigset( SIGCHLD, SIG_DFL );
-
-        p = popen( i_sCmd, "w" );
-        if ( p == NULL )
-        {
-            rc = -1;
-        }
-        else
-        {
-            rc = pclose( p );
-        }
-
-        // Reset signal handler
-        sigset( SIGCHLD, sOldAction.sa_handler );
-
-        return rc;
-#else
-        return system( i_sCmd );
-#endif
-}
-
--- a/usr/src/lib/libkmsagent/common/SYSCommon.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1168 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*---------------------------------------------------------------------------
- * Module:            System Abstraction Layer
- *
- * Description:
- * The system layer provides an abstract layer for the most commonly 
- * used system calls for multi-platforms including Windows and most 
- * Unix variants.
- *
- * All the functions defined in this layer fall into 4 categories:
- *     Threading related functions
- *     Mutexes
- *     Conditional variables
- *     Other Utilities
- *--------------------------------------------------------------------------*/
-
-#ifndef SYS_COMMON_H
-#define SYS_COMMON_H
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*---------------------------------------------------------------------------
- * ERROR code
- *--------------------------------------------------------------------------*/
-
-#define K_SYS_OK                    0
-#define K_SYS_ERR_NO_MEMORY         1
-#define K_SYS_ERR_CREATE_THREAD     2
-#define K_SYS_ERR_JOIN_THREAD       3
-#define K_SYS_ERR_COND              4
-
-/*---------------------------------------------------------------------------
- *  Header files
- *--------------------------------------------------------------------------*/
-
-#ifdef WIN32
-    #include <windows.h>
-    #include <process.h>
-#else
-    #include <pthread.h>
-
-    /* UNIX : added by STG */
-    #include <stdlib.h>
-    #include <string.h>
-#ifndef METAWARE
-    #include <wchar.h>
-#endif
-    #include <sys/types.h>
-    #include <sys/stat.h>
-    #include <stdarg.h>
-
-    /*
-     * These functions are not needed, since the Agent API hides them
-     * enum KeystoneAgent_SortOrder {};
-     * enum KeystoneAgent_FilterOperator {};
-     */
-    
-#endif
-
-/*---------------------------------------------------------------------------
- * MACRO definitions
- *--------------------------------------------------------------------------*/
-
-#ifdef WIN32
-#define PATH_SEPARATOR '\\'
-#define PATH_SEPARATOR_WSTR L"\\"
-#ifndef PATH_MAX
-#define PATH_MAX MAX_PATH
-#endif
-#else
-#define PATH_SEPARATOR '/'
-#define PATH_SEPARATOR_WSTR L"/"
-#endif
-
-#ifndef BOOL
-#define BOOL int
-#endif
-#ifndef TRUE
-#define TRUE 1
-#define FALSE 0
-#endif
-
-#ifdef     K_LINUX_PLATFORM
-    #ifndef UNIX
-    #define UNIX
-    #endif
-#endif
-
-#ifdef     K_AIX_PLATFORM
-    #ifndef UNIX
-    #define UNIX
-    #endif
-#endif
-
-#ifdef     K_SOLARIS_PLATFORM
-    #ifndef UNIX
-    #define UNIX
-    #endif
-#endif
-
-#ifdef     K_HPUX_PLATFORM
-    #ifndef UNIX
-    #define UNIX
-    #endif
-#endif
-
-/*---------------------------------------------------------------------------
- * Fatal error definitions
- *--------------------------------------------------------------------------*/
-
-#ifndef __FUNCTION__
-#define __FUNCTION__ "(Unknown)"
-#endif
-
-#ifndef FATAL_APPLICATION_STATE
-
-#ifdef DEBUG
-
-#ifdef WIN32
-#include "crtdbg.h"
-#define DEBUG_BREAK() { _CrtDbgBreak(); }
-#else /* WIN32 */
-#ifdef METAWARE 
-#define DEBUG_BREAK() (void *) 0x00000000;    /* dummy operation */
-#else
-#if !defined(__i386)
-#define DEBUG_BREAK()
-#else
-#ifdef __GNUC__
-#define DEBUG_BREAK() { __asm__ ( "int3" ); } /* NOTE: This only works for x86 platforms */
-#else
-#define DEBUG_BREAK()
-#endif
-#endif /* __i386 */
-#endif /* METAWARE */
-#endif /* WIN32 */
-
-#define FATAL_APPLICATION_STATE() \
-do { \
-    DEBUG_BREAK(); \
-    process_fatal_application_state(__FILE__,__FUNCTION__,__LINE__,0); \
-} while(0)
-
-#define FATAL_APPLICATION_STATE1(additional_text) \
-do { \
-    DEBUG_BREAK(); \
-    process_fatal_application_state(__FILE__,__FUNCTION__,__LINE__,additional_text); \
-} while(0)
-
-#else //DEBUG
-
-#define DEBUG_BREAK()
-
-#define FATAL_APPLICATION_STATE() \
-do { \
-    process_fatal_application_state(__FILE__,__FUNCTION__,__LINE__,0); \
-} while(0)
-
-#define FATAL_APPLICATION_STATE1(additional_text) \
-do { \
-    process_fatal_application_state(__FILE__,__FUNCTION__,__LINE__,additional_text); \
-} while(0)
-
-#endif //DEBUG
-
-#define FATAL_ASSERT(expression) do { if(!(expression)) {FATAL_APPLICATION_STATE();} } while(0)
-#define FATAL_ASSERT1(expression,additional_text) do { if(!(expression)) {FATAL_APPLICATION_STATE1(additional_text);} } while(0)
-
-/* MS Visual Studio compiler does not support __attribute__() */
-#ifndef __GNUC__
-#define __attribute__(x)
-#endif
-
-void process_fatal_application_state(const char* sFile, const char* sFunction, int iLine, const char* sAdditionalText) __attribute__((noreturn));
-
-void generate_stack_trace(const char* i_sFile, const wchar_t* i_wsErrMsg);
-
-#endif /* FATAL_APPLICATION_STATE */
-
-/*---------------------------------------------------------------------------
- * Primitive type definitions 
- *--------------------------------------------------------------------------*/
-
-#ifdef WIN32
-typedef __int64 int64;
-#else
-#ifndef K_AIX_PLATFORM
-typedef signed long long int64;
-#endif
-#endif
-
-
-#ifdef K_HPUX_PLATFORM
-wchar_t* wcsstr (const wchar_t* haystack, const wchar_t* needle);
-int wprintf (const wchar_t* format, ...);
-int swprintf (wchar_t* s, size_t maxlen, const wchar_t* format, ...);
-int vswprintf (wchar_t* s, size_t maxlen, const wchar_t* format, va_list args);
-int swscanf(const wchar_t *s, const wchar_t *format, ...);
-int64 atoll(const char *str);
-#endif
-
-/*---------------------------------------------------------------------------
- * Thread type definitions
- *--------------------------------------------------------------------------*/
-
-#ifdef WIN32
-typedef  HANDLE  K_THREAD_HANDLE;
-#else
-typedef  pthread_t  K_THREAD_HANDLE;
-#endif
-
-/*---------------------------------------------------------------------------
- * Mutex type definitions
- *--------------------------------------------------------------------------*/
-
-#ifdef WIN32
-
-typedef struct {
-    HANDLE m_handle; /* mutex handle */
-
-    CRITICAL_SECTION m_stCriticalSection; /* criticalSection */
-
-    int    m_bIsRecursive;
-}  WIN32Mutex;
-
-typedef WIN32Mutex* K_MUTEX_HANDLE;
-
-#else
-typedef pthread_mutex_t* K_MUTEX_HANDLE;
-#endif
-
-/*---------------------------------------------------------------------------
- * Conditional variable type definitions
- *--------------------------------------------------------------------------*/
-
-#ifdef WIN32
-    struct K_CondStruct
-    {
-            HANDLE m_hEvent;
-            HANDLE m_hMutex;
-            int m_iSignalAll;
-            int m_iNumWaiting;
-            int m_iSignalled;
-     };
-    typedef struct K_CondStruct K_ConditionalVariable;
-
-#else
-    typedef pthread_cond_t K_ConditionalVariable;
-#endif
-
-/*---------------------------------------------------------------------------
- * Thread function type definitions
- *--------------------------------------------------------------------------*/
-
-    /*
-     * Having the function return int breaks compatibility between Windows
-     * and Unix; the function has to return void
-     */
-/*#ifdef WIN32
- *   typedef int (_stdcall *K_ThreadFunc) (void *vpData);
- *#else
- */
-    typedef void (*K_ThreadFunc) (void *vpData);
-/*
- *#endif
- */
-
-
-/*---------------------------------------------------------------------------
- * Function: K_CreateThread
- *
- * Description:
- *  This thread creation function takes a thread function
- *  and its parameter to create a thread. It also has a Boolean
- *  parameter to indicate if the thread is detached or joinable.
- *  A new thread's handle is returned through the output parameter.
- *
- * Input
- * -----
- *    i_pFunc         Function pointer of the thread function
- *    i_pvData        The point of the parameter passed to the thread function
- *    i_bIsDetached   The thread is detached or not. If detached, then it is
- *                    not joinable. (Note: It is not supported on Win32)
- *
- * Output
- * ------
- *    o_pNewThread    The Thread handle
- *
- * Return value       Error code
- *
- *--------------------------------------------------------------------------*/
-int K_CreateThread(K_ThreadFunc i_pFunc,
-                  void *i_pvData,
-                  int i_bIsDetached,
-                  K_THREAD_HANDLE *o_pNewThread);
-
-
-/*---------------------------------------------------------------------------
- * Function: K_JoinThread
- *
- * Description:
- *  This thread joining function is called when the current thread
- *  waits another thread to terminate.
- *
- * Input
- * -----
- *    i_hThread        The thread handle of the to-be-joined thread
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        Error code
- *
- *--------------------------------------------------------------------------*/
-int  K_JoinThread(K_THREAD_HANDLE i_hThread);
-
-
-/*---------------------------------------------------------------------------
- * Function: K_GetCurrentThreadId
- *
- * Description:
- *  Returns the thread ID of the current thread.
- *
- * Input
- * -----
- *    (none)
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        The thread ID
- *
- *--------------------------------------------------------------------------*/
-
-int K_GetCurrentThreadId();
-
-
-/*---------------------------------------------------------------------------
- * Function: K_CreateMutex
- *
- * Description:
- *  The mutex creation function creates a mutex according to the given
- *  mutex type, and returns the mutex handle to the output parameter.
- *
- * Input
- * -----
- *    (none)
- *    
- * Output
- * ------
- *    o_phandle        the handle pointer to the mutex
- *
- * Return value        Error Code
- *
- *--------------------------------------------------------------------------*/
-
-int K_CreateMutex( K_MUTEX_HANDLE *o_phandle );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_LockMutex
- *
- * Description:
- *  K_LockMutex is used to lock the mutex, and K_UnlockMutex is
- *  used to unlock it.
- *
- * Input
- * -----
- *    i_handle        the mutex handle
- *
- * Output
- * ------
- *   (none)
- *
- * return value       Error Code
- *
- *--------------------------------------------------------------------------*/
-int K_LockMutex(K_MUTEX_HANDLE i_handle);
-
-
-/*---------------------------------------------------------------------------
- * Function: K_UnlockMutex
- *
- * Description:
- *  K_UnlockMutex is used to unlock the lock.
- *
- * Input
- * -----
- *    i_handle        the mutex handle
- *
- * Output
- * ------
- *    (none)
- *
- * Return value       Error Code
- *
- *--------------------------------------------------------------------------*/
-int K_UnlockMutex(K_MUTEX_HANDLE i_handle);
-
-
-/*---------------------------------------------------------------------------
- * Function: K_DestroyMutex
- *
- * Description:
- *  When a mutex is no longer needed, K_DestroyMutex must be called
- *  to destroy it.
- *
- * Input
- * -----
- *    i_handle        the mutex handle
- *
- * Output
- * ------
- *    (none)
- *
- * Return value       Error Code
- *
- *--------------------------------------------------------------------------*/
-
-int K_DestroyMutex(K_MUTEX_HANDLE i_handle);
-
-
-/*---------------------------------------------------------------------------
- *
- *  The following section defines Conditional Variable
- *
- * Conditional Variable implements similar functionalities defined
- * in POSIX thread library. But it only supports conditional variables
- * inside one process and doesn't support pthread_cond_timedwait().
-*--------------------------------------------------------------------------*/
-
-
-/*---------------------------------------------------------------------------
- * Function: K_InitConditionalVariable
- *
- * Description:
- *  This function initializes a conditional variable; Upon successful
- *  completion, the new condition variable is returned via the condition
- *  parameter, and 0 is returned. Otherwise, an error code is returned.
- *
- * Input
- * -----
- *    i_pCond     the pointer to the conditional variable which is to be
- *                initialized
- *
- * Output
- * ------
- *    (none)
- *
- * Return value   Error Code
- *
- *--------------------------------------------------------------------------*/
-int K_InitConditionalVariable (K_ConditionalVariable * i_pCond);
-
-
-
-/*---------------------------------------------------------------------------
- * Function: K_DestroyConditionalVariable
- *
- * Description:
- *  This function destroys a conditional variable.  Upon successful
- *  completion, the condition variable is destroyed, and 0 is returned.
- *  Otherwise, an error code is returned.
- *  After deletion of the condition variable, the condition parameter
- *  is not valid until it is initialized again by a call to the
- *  K_InitConditionalVariable subroutine.
- *
- * Input
- * -----
- *    i_pCond     the pointer to the conditional variable which is to be
- *                destroyed
- *
- * Output
- * ------
- *    (none)
- *
- * Return value   Error Code
- *
- *--------------------------------------------------------------------------*/
-
-int K_DestroyConditionalVariable(K_ConditionalVariable * i_pCond);
-
-
-/*---------------------------------------------------------------------------
- * Function: K_WaitConditionalVariable
- *
- * Description:
- *  This function is used to block on a condition variable.
- *  They are called with mutex locked by the calling thread or undefined
- *  behaviour will result.
- *
- * Input
- * -----
- *    i_pCond     the pointer to the conditional variable
- *    i_handle    the companion mutex handle
- *
- * Output
- * ------
- *    (none)
- *
- * Return value   Error Code
- *
- *--------------------------------------------------------------------------*/
-int  K_WaitConditionalVariable(K_ConditionalVariable * i_pCond,
-                               K_MUTEX_HANDLE i_handle);
-
-
-/*---------------------------------------------------------------------------
- * Function: K_SignalConditionalVariable
- *
- * Description:
- *  This function is used to restart one of the threads that are waiting on
- *  the condition variable.  If no threads are waiting on it, nothing happens.
- *  If several threads are waiting on it, exactly one is restarted.
- *
- * Input
- * -----
- *    i_pCond        the pointer to the conditional variable
- *
- * Output
- * ------
- *    (none)
- *
- * Return value      Error Code
- *
- *--------------------------------------------------------------------------*/
-int K_SignalConditionalVariable(K_ConditionalVariable * i_pCond);
-
-
-/*---------------------------------------------------------------------------
- * Function: K_BroadcastConditionalVariable
- *
- * Description:
- *  This function is used to restart all threads that are waiting on
- *  the condition variable.
- *
- * Input
- * -----
- *    i_pCond        the pointer to the conditional variable
- *
- * Output
- * ------
- *    (none)
- *
- * Return value      Error Code
- *
- *--------------------------------------------------------------------------*/
-int K_BroadcastConditionalVariable(K_ConditionalVariable * i_pCond);
-
-
-/*---------------------------------------------------------------------------
- * Function: K_Sleep
- *
- * Description:
- *  Sleep for a given period in the given milliseconds.
- *
- * Input
- * -----
- *    i_ms        milliseconds
- *
- * Output
- * ------
- *    (none)
- *
- * Return value   (none)
- *
- *--------------------------------------------------------------------------*/
-void K_Sleep(int i_ms);
-
-
-/*---------------------------------------------------------------------------
- * Function: K_GetTickCount
- *
- * Description:
- *  The K_GetTickCount function retrieves the number of
- *  milliseconds that have elapsed since the system was started.
- *
- * Input
- * -----
- *    (none)
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        the elasped milliseconds since the system was started
- *
- *--------------------------------------------------------------------------*/
-unsigned int K_GetTickCount();
-
-
-/*---------------------------------------------------------------------------
- * Function: K_AdjustClock
- *
- * Description:
- *  The K_AdjustClock function immediately adjusts the system clock by
- *  the given number of seconds.  A positive number adjusts the system
- *  clock forward; a negative number adjusts the system clock backward.
- *
- * Input
- * -----
- *    i_iAdjustmentInSeconds   Number of seconds by which to adjust the
- *                             system clock
- * Output
- * ------
- *    (none)
- *
- * Return value      1 if successful, 0 on error
- *
- *--------------------------------------------------------------------------*/
-int K_AdjustClock( long i_iAdjustmentInSeconds );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_IsLittleEndian
- *
- * Description:
- *  Checks to see whether this platform uses little endian integer
- *  representation.
- *
- * Input
- * -----
- *    (none)
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        1 for little endian
- *
- *--------------------------------------------------------------------------*/
-int K_IsLittleEndian();
-
-
-/*---------------------------------------------------------------------------
- * Function: K_FileLength32
- *
- * Description:
- *  Gets the size in bytes of the file associated with the given FILE pointer.
- *
- * Input
- * -----
- *    i_fpFile         File handle
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        File size in bytes, or -1L on error
- *
- *--------------------------------------------------------------------------*/
-long K_FileLength32( FILE* i_fpFile );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_StringCompareNoCase
- *
- * Description:
- *  Compares the two given strings insensitive to case.
- *
- * Input
- * -----
- *    i_sString1       First string
- *    i_sString2       Second string
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        0 if identical, -1 if first string is less than second
- *                     string, or 1 if first string is greater than second 
- *
- *--------------------------------------------------------------------------*/
-int K_StringCompareNoCase( const char* i_sString1, const char* i_sString2 );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_StringCompareNoCaseWide
- *
- * Description:
- *  Compares the two given wide strings insensitive to case.
- *
- * Input
- * -----
- *    i_wsString1      First wide string
- *    i_wsString2      Second wide string
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        0 if identical, -1 if first string is less than second
- *                     string, or 1 if first string is greater than second 
- *
- *--------------------------------------------------------------------------*/
-int K_StringCompareNoCaseWide( const wchar_t* i_wsString1, const wchar_t* i_wsString2 );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_snprintf
- *
- * Description:
- *  See the snprintf(3C) man page.
- *
- *--------------------------------------------------------------------------*/
-#ifdef WIN32
-#define K_snprintf  _snprintf
-#else
-#define K_snprintf  snprintf
-#endif
-
-
-/*---------------------------------------------------------------------------
- * Function: K_snwprintf
- *
- * Description:
- *  See the swprintf(3C) man page.
- *
- *--------------------------------------------------------------------------*/
-#ifdef WIN32
-#define K_snwprintf  _snwprintf
-#else
-#define K_snwprintf  swprintf
-#endif
-
-#ifdef WIN32
-#define K_fseek fseek
-#define K_ftell ftell
-#else
-#define K_fseek fseeko
-#define K_ftell ftello
-#endif
-
-
-/*---------------------------------------------------------------------------
- * Function: K_CreateDirectory
- *
- * Description:
- *  Creates a directory with the given path name.
- *
- * Input
- * -----
- *    i_sDirectoryName  Directory name
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        0 on success, -1 on failure
- *
- *--------------------------------------------------------------------------*/
-int K_CreateDirectory( const char* i_sDirectoryName );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_DeleteFile
- *
- * Description:
- *  Deletes the given file.
- *
- * Input
- * -----
- *    i_sFilename      Name of file to delete
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        0 on success, errno on failure
- *
- *--------------------------------------------------------------------------*/
-int K_DeleteFile( const char* i_sFilename );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_ReadFile
- *
- * Description:
- *  Reads from the given file and passes the bytes read back to the output
- *  parameter.  The caller must deallocate o_ppFileData using free().
- *
- * Input
- * -----
- *    i_sFilename      Name of file from which to read
- *
- * Output
- * ------
- *    o_ppFileData     Pointer to bytes read
- *
- * Return value        Number of bytes read on success, -1 on failure
- *
- *--------------------------------------------------------------------------*/
-int K_ReadFile( const char* i_sFilename, unsigned char** o_ppFileData );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_ReadFileString
- *
- * Description:
- *  Reads from the given file and passes the bytes read back to the output
- *  parameter, appending these bytes with a null terminator.  There is no
- *  guarantee that there are no non-text characters in the returned "string".
- *  The caller must deallocate o_ppFileData using free().
- *
- * Input
- * -----
- *    i_sFilename      Name of file from which to read
- *
- * Output
- * ------
- *    o_psFileDataString     Pointer to bytes read
- *
- * Return value        Number of bytes read (including null terminator) on
- *                     success (0 if file is empty), -1 on failure
- *
- *--------------------------------------------------------------------------*/
-int K_ReadFileString( const char* i_sFilename, char** o_psFileDataString );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_WriteFile
- *
- * Description:
- *  Writes the given bytes to the given file.
- *
- * Input
- * -----
- *    i_sFilename      Name of file to which to write
- *    i_pFileData      Bytes to write
- *    i_iFileDataSize  Number of bytes to write
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        0 on success, errno or -1 (generic error) on failure
- *
- *--------------------------------------------------------------------------*/
-int K_WriteFile( const char* i_sFilename, const unsigned char* i_pFileData, int i_iFileDataSize );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_WriteFileString
- *
- * Description:
- *  Writes the given null-terminated bytes to the given file.  The null
- *  terminator itself is not written to the file.
- *
- * Input
- * -----
- *    i_sFilename      Name of file to which to write
- *    i_sFileData      Bytes to write
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        0 on success, errno or -1 (generic error) on failure
- *
- *--------------------------------------------------------------------------*/
-int K_WriteFileString( const char* i_sFilename, const char* i_sFileData );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_FileExists
- *
- * Description:
- *  Checks to see whehter the given file exists.
- *
- * Input
- * -----
- *    i_sFilename      Name of file to check
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        1 if file exists, 0 if not, -1 on failure
- *
- *--------------------------------------------------------------------------*/
-int K_FileExists( const char* i_sFilename );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_CopyFile
- *
- * Description:
- *  Reads from the given source file and writes these bytes to the given
- *  destination file.
- *
- * Input
- * -----
- *    i_sSrcFilename   Name of file from which to read
- *    i_sDestFilename  Name of file to which to write
- *
- * Output
- * ------
- *    o_pbFileExists   Non-zero if the destination file already exists
- *
- * Return value        0 on success, errno or -1 (generic error) on failure
- *
- *--------------------------------------------------------------------------*/
-int K_CopyFile(
-        const char* i_sSrcFilename,
-        const char* i_sDestFilename,
-        int* o_pbFileExists );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_GetFilenamesInDirectoryCount
- *
- * Description:
- *  Reads the given directory and returns the number of files that it contains.
- *
- * Input
- * -----
- *    i_sDirectoryName  Name of directory
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        Number of files on success, -1 on failure
- *
- *--------------------------------------------------------------------------*/
-int K_GetFilenamesInDirectoryCount( const char* i_sDirectoryName );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_GetFilenamesInDirectory
- *
- * Description:
- *  Reads the given directory and returns an array of names of files that it
- *  contains.  A null pointer appears at the last item in the array.  The
- *  caller must deallocate o_pasFilenames by using K_FreeFilenames or by
- *  calling free() for each file name and then calling free() on the array
- *  itself.
- *
- * Input
- * -----
- *    i_sDirectoryName  Name of directory
- *
- * Output
- * ------
- *    o_pasFilenames   Array of names of files found in this directory
- *
- * Return value        Number of files on success, -1 on failure
- *
- *--------------------------------------------------------------------------*/
-int K_GetFilenamesInDirectory(
-        const char* i_sDirectoryName,
-        char*** o_pasFilenames );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_FreeFilenames
- *
- * Description:
- *  Deallocates the memory allocated in a successful call to
- *  K_GetFilenamesInDirectory.
- *
- * Input
- * -----
- *    i_asFilenames    Array of names of files
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        (none)
- *
- *--------------------------------------------------------------------------*/
-void K_FreeFilenames( char** i_asFilenames );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_AdjustLocalClock
- *
- * Description:
- *  The K_AdjustLocalClock function gradually adjusts the system clock by
- *  the given number of seconds.  A positive number adjusts the system
- *  clock forward; a negative number adjusts the system clock backward.
- *
- * Input
- * -----
- *    i_iAdjustmentInSeconds   Number of seconds by which to adjust the
- *                             system clock
- * Output
- * ------
- *    (none)
- *
- * Return value        1 if successful, 0 on error
- *
- *--------------------------------------------------------------------------*/
-int K_AdjustLocalClock( int i_iNumberOfSeconds );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_SetRootPassword
- *
- * Description:
- *  The K_SetRootPassword function sets the password for the root user via
- *  Pluggable Authentication Module (PAM).  This function is interactive.
- *
- * Input
- * -----
- *    i_sPassword      Password to set
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        0 if successful, -1 on error
- *
- *--------------------------------------------------------------------------*/
-int K_SetRootPassword( const char* i_sPassword );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_Alarm
- *
- * Description:
- *  Calls alarm(2) on Unix in order to cause the operating system to generate
- *  a SIGALRM signal for this process after the given number of real-time
- *  seconds.  Does nothing on Windows.
- *
- * Input
- * -----
- *    i_iSeconds       Number of seconds after which to generate a SIGALRM
- *                     signal
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        If a previous alarm request is pending, then it returns
- *                     the number of seconds until this previous request would
- *                     have generated a SIGALRM signal.  Otherwise, returns 0.
- *
- *--------------------------------------------------------------------------*/
-unsigned int K_Alarm( unsigned int i_iSeconds );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_GetExtendedVersionFromBase
- *
- * Description:
- *  This KMS-specific function prepends the timestamp value to the specified
- *  base replication schema version and returns this value as an extended
- *  replication schema version.
- *
- * Input
- * -----
- *    i_iBaseSchemaVersion  Base replication schema version
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        Extended replication schema version
- *
- *--------------------------------------------------------------------------*/
-unsigned int K_GetExtendedVersionFromBase( unsigned int i_iBaseSchemaVersion );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_ParseTimestampFromExtendedVersion
- *
- * Description:
- *  This KMS-specific function parses the timestamp value from the given
- *  extended replication schema version and returns this timestamp value.
- *
- * Input
- * -----
- *    i_iExtendedSchemaVersion  Extended replication schema version
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        Timestamp value
- *
- *--------------------------------------------------------------------------*/
-unsigned int K_ParseTimestampFromExtendedVersion(
-    unsigned int i_iExtendedSchemaVersion );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_ParseBaseFromExtendedVersion
- *
- * Description:
- *  This KMS-specific function parses the base replication schema value from
- *  the given extended replication schema version and returns this base value.
- *
- * Input
- * -----
- *    i_iExtendedSchemaVersion  Extended replication schema version
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        Base replication schema value
- *
- *--------------------------------------------------------------------------*/
-
-unsigned int K_ParseBaseFromExtendedVersion(
-    unsigned int i_iExtendedSchemaVersion );
-
-
-/*---------------------------------------------------------------------------
- * Function: K_System
- *
- * Description:
- *  This function is a thread-safe replacement for the unsafe system(3C) call.
- *  See the popen(3C) man page for more information.
- *
- * Input
- * -----
- *    i_sCmd           Command to execute
- *
- * Output
- * ------
- *    (none)
- *
- * Return value        Termination status of the command language interpreter
- *                     if successful, -1 on failure
- *
- *--------------------------------------------------------------------------*/
-
-int K_System( const char *i_sCmd );
-
-#define K_system  K_System
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
--- a/usr/src/lib/libkmsagent/common/ieee80211_crypto.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,201 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#if !defined(K_SOLARIS_PLATFORM) || defined(SOLARIS10)
-#include "rijndael.h"
-#else
-#include <stdlib.h>
-#include <aes_impl.h>
-#endif 
-
-#ifdef METAWARE
-#include "sizet.h"
-typedef unsigned char		uint8_t;
-typedef unsigned short		uint16_t;
-typedef unsigned int		uint32_t;
-typedef unsigned long long	uint64_t;
-#include <string.h>
-#else
-#ifndef WIN32
-#include <strings.h>
-#endif
-#endif
-
-#include "KMSAgentAESKeyWrap.h"
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#ifdef WIN32
-#define ovbcopy(x, y, z) memmove(y, x, z);
-#else
-#define ovbcopy(x, y, z) bcopy(x, y, z);
-#endif
-
-#ifndef K_SOLARIS_PLATFORM
-/* similar to iovec except that it accepts const pointers */
-struct vector {
-	const void	*base;
-	size_t		len;
-};
-
-#ifdef METAWARE
-#define bcopy(s1, s2, n)  memcpy(s2, s1, n)
-#endif
-
-/*
- * AES Key Wrap (see RFC 3394).
- */
-#endif /* K_SOLARIS_PLATFORM */
-
-static const uint8_t aes_key_wrap_iv[8] =
-	{ 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa6 };
-
-void aes_key_wrap (const uint8_t *kek,
-                   size_t kek_len,
-                   const uint8_t *pt,
-                   size_t len,
-                   uint8_t *ct)
-{
-#if !defined(K_SOLARIS_PLATFORM) || defined(SOLARIS10)
-	rijndael_ctx ctx;
-#else
-	void *ks;
-	size_t ks_size;
-#endif
-	uint8_t *a, *r, ar[16], t, b[16];
-	size_t i;
-	int j;
-
-	/*
-	 * Only allow lengths for 't' values that fit within a byte.  This 
-	 * covers all reasonable uses of AES Key Wrap
-	 */
-	if (len > (255 / 6)) {
-		return;
-	}
-
-	/* allow ciphertext and plaintext to overlap (ct == pt) */
-	ovbcopy(pt, ct + 8, len * 8);
-
-	a = ct;
-	memcpy(a, aes_key_wrap_iv, 8);	/* default IV */
-
-#if !defined(K_SOLARIS_PLATFORM) || defined(SOLARIS10)
-	rijndael_set_key_enc_only(&ctx, (uint8_t *)kek, kek_len * 8);
-#else
-	ks = aes_alloc_keysched(&ks_size, 0);
-	if (ks == NULL)
-		return;
-	aes_init_keysched(kek, kek_len * 8, ks);
-#endif
-
-	for (j = 0, t = 1; j < 6; j++) {
-		r = ct + 8;
-		for (i = 0; i < len; i++, t++) {
-			memcpy(ar, a, 8);
-			memcpy(ar + 8, r, 8);
-#if !defined(K_SOLARIS_PLATFORM) || defined(SOLARIS10)
-			rijndael_encrypt(&ctx, ar, b);
-#else
-			(void) aes_encrypt_block(ks, ar, b);
-#endif
-
-			b[7] ^= t;
-			memcpy(a, &b[0], 8);
-			memcpy(r, &b[8], 8);
-
-			r += 8;
-		}
-	}
-#if defined(K_SOLARIS_PLATFORM) && !defined(SOLARIS10)
-	free(ks);
-#endif
-}
-
-int aes_key_unwrap (const uint8_t *kek,
-                    size_t kek_len,
-                    const uint8_t *ct,
-                    uint8_t *pt,
-                    size_t len)
-{
-#if !defined(K_SOLARIS_PLATFORM) || defined(SOLARIS10)
-	rijndael_ctx ctx;
-#else
-	void *ks;
-	size_t ks_size;
-#endif
-	uint8_t a[8], *r, b[16], t, ar[16];
-	size_t i;
-	int j;
-
-	/*
-	 * Only allow lengths for 't' values that fit within a byte.  This
-	 * covers all reasonable uses of AES Key Wrap
-	 */
-	if (len > (255 / 6)) {
-		return (-1);
-	}
-
-	memcpy(a, ct, 8);
-	/* allow ciphertext and plaintext to overlap (ct == pt) */
-	ovbcopy(ct + 8, pt, len * 8);
-
-#if !defined(K_SOLARIS_PLATFORM) || defined(SOLARIS10)
-	rijndael_set_key(&ctx, (uint8_t *)kek, kek_len * 8);
-#else
-	ks = aes_alloc_keysched(&ks_size, 0);
-	if (ks == NULL)
-		return (-1);
-	aes_init_keysched(kek, kek_len * 8, ks);
-#endif
-
-	for (j = 0, t = 6 * len; j < 6; j++) {
-		r = pt + (len - 1) * 8;
-		for (i = 0; i < len; i++, t--) {
-			memcpy(&ar[0], a, 8);
-			ar[7] ^= t;
-			memcpy(&ar[8], r, 8);
-#if !defined(K_SOLARIS_PLATFORM) || defined(SOLARIS10)
-			rijndael_decrypt(&ctx, ar, b);
-#else
-			(void) aes_decrypt_block(ks, ar, b);
-#endif
-			memcpy(a, b, 8);
-			memcpy(r, b + 8, 8);
-			r -= 8;
-		}
-	}
-#if defined(K_SOLARIS_PLATFORM) && !defined(SOLARIS10)
-	free(ks);
-#endif
-
-	return memcmp(a, aes_key_wrap_iv, 8) != 0;
-}
--- a/usr/src/lib/libkmsagent/common/k_setupssl.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,223 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*---------------------------------------------------------------------------
- * Module:            k_setupssl.c
- * Operating System:  Linux, Win32
- *
- * Description:
- * This is the C Implementation file for setting up OpenSSL muti-threading environment
- *
- *-------------------------------------------------------------------------*/
-
-#ifndef WIN32
-#include <signal.h>
-#include <openssl/evp.h>	/* UNIX */
-#include <openssl/engine.h>
-#endif
-
-#include "k_setupssl.h"
-#include "stdsoap2.h"
-#include <openssl/crypto.h>
-
-#if defined(WIN32)
-
-#include <windows.h>
-#define MUTEX_TYPE              HANDLE
-#define MUTEX_SETUP(x)          (x) = CreateMutex(NULL, FALSE, NULL)
-#define MUTEX_CLEANUP(x)        CloseHandle(x)
-#define MUTEX_LOCK(x)           WaitForSingleObject((x), INFINITE)
-#define MUTEX_UNLOCK(x)         ReleaseMutex(x)
-#define THREAD_ID               GetCurrentThreadId()
-
-#else
-
-#include <pthread.h>
-
-# define MUTEX_TYPE             pthread_mutex_t
-# define MUTEX_SETUP(x)         pthread_mutex_init(&(x), NULL)
-# define MUTEX_CLEANUP(x)       pthread_mutex_destroy(&(x))
-# define MUTEX_LOCK(x)          pthread_mutex_lock(&(x))
-# define MUTEX_UNLOCK(x)        pthread_mutex_unlock(&(x))
-# define THREAD_ID              pthread_self()
-
-#ifdef K_SOLARIS_PLATFORM
-MUTEX_TYPE	init_ssl_mutex = PTHREAD_MUTEX_INITIALIZER;
-static		int	ssl_initialized = 0;
-#endif
-#endif
-
-struct CRYPTO_dynlock_value
-{ MUTEX_TYPE mutex;
-};
-
-void sigpipe_handle(int x)
-{
-}
-
-static MUTEX_TYPE *mutex_buf;
-
-static struct CRYPTO_dynlock_value *dyn_create_function(const char *file, int line)
-{ struct CRYPTO_dynlock_value *value;
-  value = (struct CRYPTO_dynlock_value*)malloc(sizeof(struct CRYPTO_dynlock_value));
-  if (value)
-    MUTEX_SETUP(value->mutex);
-  return value;
-}
-
-static void dyn_lock_function(int mode, struct CRYPTO_dynlock_value *l, const char *file, int line)
-{ if (mode & CRYPTO_LOCK)
-    MUTEX_LOCK(l->mutex);
-  else
-    MUTEX_UNLOCK(l->mutex);
-}
-
-static void dyn_destroy_function(struct CRYPTO_dynlock_value *l, const char *file, int line)
-{ MUTEX_CLEANUP(l->mutex);
-  free(l);
-}
-
-void kms_locking_function(int mode, int n, const char *file, int line)
-{ if (mode & CRYPTO_LOCK)
-    MUTEX_LOCK(mutex_buf[n]);
-  else
-    MUTEX_UNLOCK(mutex_buf[n]);
-}
-
-
-unsigned long id_function(void )
-{ return (unsigned long)THREAD_ID;
-}
-
-#ifdef WIN32
-void OpenSSL_add_all_ciphers(void);	// UNIX
-void OpenSSL_add_all_digests(void);
-#endif
-
-#ifdef K_HPUX_PLATFORM
-extern void allow_unaligned_data_access();
-#endif
-
-// gSOAP 2.7e:
-//   The function ssl_init is defined in stdsoap2.cpp and is not exported by
-//   default by gSOAP.
-// gSOAP 2.7.12:
-//   The function soap_ssl_init is defined in stdsoap2.cpp.  It replaces
-//   ssl_init and is exported by gSOAP.  gSOAP 2.7.13 also supports a new
-//   SOAP_SSL_SKIP_HOST_CHECK flag.
-#ifndef SOAP_SSL_SKIP_HOST_CHECK
-extern int ssl_init();
-#endif
-
-int K_SetupSSL()
-{ int i;
-#ifdef K_SOLARIS_PLATFORM
-	if (ssl_initialized)
-		return 1;
-	MUTEX_LOCK(init_ssl_mutex);
-#endif
-  mutex_buf = (MUTEX_TYPE*)OPENSSL_malloc(CRYPTO_num_locks() * sizeof(MUTEX_TYPE));
-  if (!mutex_buf) {
-#ifdef K_SOLARIS_PLATFORM
-	MUTEX_UNLOCK(init_ssl_mutex);
-#endif
-    return 0;
-  }
-  for (i = 0; i < CRYPTO_num_locks(); i++)
-    MUTEX_SETUP(mutex_buf[i]);
-  if (CRYPTO_get_id_callback() == NULL)
-	CRYPTO_set_id_callback(id_function);
-  if (CRYPTO_get_locking_callback() == NULL)
-	CRYPTO_set_locking_callback(kms_locking_function);
-
-  CRYPTO_set_dynlock_create_callback(dyn_create_function);
-  CRYPTO_set_dynlock_lock_callback(dyn_lock_function);
-  CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function);
-
-#ifndef WIN32
-  /* Need SIGPIPE handler on Unix/Linux systems to catch broken pipes: */
-  signal(SIGPIPE, sigpipe_handle);
-#endif
-#ifdef K_HPUX_PLATFORM
-//  signal(SIGBUS, sigpipe_handle);
-    allow_unaligned_data_access();
-#endif
-  OpenSSL_add_all_ciphers();
-  OpenSSL_add_all_digests();
-
-  // call gSOAP's OpenSSL initialization, which initializes SSL algorithms and seeds RAND
-
-  // gSOAP 2.7e:
-  //   The function ssl_init is defined in stdsoap2.cpp and is not exported by
-  //   default by gSOAP.
-  // gSOAP 2.7.13:
-  //   The function soap_ssl_init is defined in stdsoap2.cpp.  It replaces
-  //   ssl_init and is exported by gSOAP.  gSOAP 2.7.13 also supports a new
-  //   SOAP_SSL_SKIP_HOST_CHECK flag.
-#ifdef SOAP_SSL_SKIP_HOST_CHECK
-  soap_ssl_init();
-#else
-  ssl_init();
-#endif
-
-#ifdef K_SOLARIS_PLATFORM
-	ssl_initialized = 1;
-	MUTEX_UNLOCK(init_ssl_mutex);
-#endif
-
-  return 1;
-}
-
-void K_CleanupSSL()
-{ int i;
-  if (!mutex_buf)
-    return;
-#ifdef K_SOLARIS_PLATFORM
-  {
-	unsigned long (*id_func)();
-
-	if ((id_func = CRYPTO_get_id_callback()) == id_function) {
-  		ENGINE_cleanup();
-		/* EVP_cleanup(); */
-		ERR_free_strings();
-		CRYPTO_set_id_callback(NULL);
-		CRYPTO_set_locking_callback(NULL);
-	}
-  }
-#endif
-  CRYPTO_set_dynlock_create_callback(NULL);
-  CRYPTO_set_dynlock_lock_callback(NULL);
-  CRYPTO_set_dynlock_destroy_callback(NULL);
-  for (i = 0; i < CRYPTO_num_locks(); i++)
-    MUTEX_CLEANUP(mutex_buf[i]);
-  OPENSSL_free(mutex_buf);
-  mutex_buf = NULL;
-}
-
-// TODO: what should 'struct soap' really be?
-int K_SetupCallbacks( struct soap *i_pSoap )
-{
-    return 1;
-}
--- a/usr/src/lib/libkmsagent/common/k_setupssl.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-/*---------------------------------------------------------------------------
- * Module:            k_setupssl.h
- * Operating System:  Linux, Win32
- *
- * Description:
- * This is the header file of setting up OpenSSL
- */
-
-#ifndef _K_SETUP_SSL_H
-#define _K_SETUP_SSL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef METAWARE
-#include "stdsoap2.h"
-/**
- *  set up gSoap I/O callback functions for environments that need to customize
- *  the I/O functions, e.g. embedded agents.
- */
-int K_SetupCallbacks( struct soap *i_pSoap );
-
-int K_ssl_client_context(struct soap *i_pSoap,
-                            int flags,
-                            const char *keyfile,  /* NULL - SERVER */
-                            const char *password, /* NULL - SERVER */
-                            const char *cafile,
-                            const char *capath,   /* ALWAYS NULL */
-                            const char *randfile);
-#endif
-
-
-int K_SetupSSL();
-void K_CleanupSSL();
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
--- a/usr/src/lib/libkmsagent/common/mapfile-vers	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-#
-
-$mapfile_version 2
-
-SYMBOL_VERSION SUNWprivate {
-    global:
-	KMSAgent_CreateDataUnit;
-	KMSAgent_CreateKey;
-	KMSAgent_DisassociateDataUnitKeys;
-	KMSAgent_FinalizeLibrary;
-	KMSAgent_FreeArrayOfKeys;
-    	KMSAgent_InitializeLibrary;
-	KMSAgent_LoadProfile;
-	KMSAgent_RetrieveDataUnit;
-	KMSAgent_RetrieveDataUnitByExternalUniqueID;
-	KMSAgent_RetrieveDataUnitKeys;
-	KMSAgent_UnloadProfile;
-	KMSAgent_ChangeLocalPWD;
-	KMSAgent_GetProfileStatus;
-    local:
-	*;
-};
--- a/usr/src/lib/libkmsagent/i386/Makefile	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-#
-
-
-include ../Makefile.com
-
-install: all $(ROOTLIBS) $(ROOTLINKS)
--- a/usr/src/lib/libkmsagent/sparc/Makefile	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-#
-
-
-include ../Makefile.com
-sparc_C_PICFLAGS = -KPIC
-sparc_CC_PICFLAGS = -KPIC
-
-install: all $(ROOTLIBS) $(ROOTLINKS)
--- a/usr/src/lib/libkmsagent/sparcv9/Makefile	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-#
-
-
-include ../Makefile.com
-include $(SRC)/lib/Makefile.lib.64
-
-#
-# CCNEEDED must be modified for 64-bit because the default only includes
-# -lCrun
-#
-CCNEEDED = -lCstd -lCrun
-
-#
-# If linking with gcc, we must fix the CCNEEDED and LDLIBS64
-# to get a clean link without duplicates.
-#
-$(__GNUC)CCNEEDED       = -L$(SFWLIBDIR) -R$(SFWLIBDIR) -lstdc++ -lgcc_s
-$(__GNUC)LDLIBS64 += $(CCNEEDED)
-
-install: all $(ROOTLIBS64) $(ROOTLINKS64)
--- a/usr/src/lib/pkcs11/Makefile	Sun Mar 11 22:00:47 2012 -0700
+++ b/usr/src/lib/pkcs11/Makefile	Thu Feb 02 20:16:51 2012 +1100
@@ -36,7 +36,6 @@
 	libsoftcrypto   \
 	libkcfd		\
 	pkcs11_kernel	\
-	pkcs11_kms	\
 	pkcs11_softtoken \
 	pkcs11_tpm
 
--- a/usr/src/lib/pkcs11/pkcs11_kms/Makefile	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-#
-
-include		$(SRC)/lib/Makefile.lib
-
-SUBDIRS =	$(MACH)
-$(BUILD64)SUBDIRS +=	$(MACH64)
-
-all :=		TARGET= all
-check :=	TARGET= check
-clean :=	TARGET= clean
-clobber :=	TARGET= clobber
-install :=	TARGET= install
-lint :=		TARGET= lint
-
-.KEEP_STATE:
-
-all clean clobber install lint: $(SUBDIRS)
-
-$(SUBDIRS): FRC
-	@cd $@; pwd; $(MAKE) $(TARGET)
-
-FRC:
--- a/usr/src/lib/pkcs11/pkcs11_kms/Makefile.com	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,99 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-# Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
-#
-
-LIBRARY= pkcs11_kms.a
-VERS= .1
-
-CORE_OBJECTS= \
-	kmsAESCrypt.o		\
-	kmsAttributeUtil.o	\
-	kmsDecrypt.o		\
-	kmsDigest.o	 	\
-	kmsDualCrypt.o		\
-	kmsEncrypt.o		\
-	kmsGeneral.o		\
-	kmsKeys.o 		\
-	kmsKeystoreUtil.o	\
-	kmsObject.o 		\
-	kmsObjectUtil.o		\
-	kmsRand.o		\
-	kmsSession.o		\
-	kmsSessionUtil.o	\
-	kmsSign.o 		\
-	kmsSlottable.o		\
-	kmsSlotToken.o		\
-	kmsVerify.o
-
-OBJECTS= $(CORE_OBJECTS)	
-
-AESDIR=	$(SRC)/common/crypto/aes
-KMSAGENTDIR= $(SRC)/lib/libkmsagent/common
-
-include $(SRC)/lib/Makefile.lib
-
-#	set signing mode
-POST_PROCESS_SO	+=	; $(ELFSIGN_CRYPTO)
-
-SRCDIR=		../common
-CORESRCS =	$(CORE_OBJECTS:%.o=$(SRCDIR)/%.c)
-
-LIBS	=	$(DYNLIB)
-LDLIBS  +=      -lc -lcryptoutil -lsoftcrypto -lmd -lavl -lkmsagent
-
-CFLAGS  +=      $(CCVERBOSE)
-
-CPPFLAGS +=	-DUSESOLARIS_AES -DKMSUSERPKCS12
-
-ROOTLIBDIR=     $(ROOT)/usr/lib/security
-ROOTLIBDIR64=   $(ROOT)/usr/lib/security/$(MACH64)
-
-lint \
-pics/kmsAESCrypt.o \
-pics/kmsEncrypt.o \
-pics/kmsDecrypt.o \
-pics/kmsSlotToken.o \
-pics/kmsKeystoreUtil.o \
-pics/kmsAttributeUtil.o := CPPFLAGS += -I$(AESDIR) -I$(SRC)/common/crypto
-
-CPPFLAGS += -I$(KMSAGENTDIR)
-
-.KEEP_STATE:
-
-all:	$(LIBS)
-
-#
-# -lkmsagent is not here because it is C++ and we don't lint C++ code.
-#
-LINTLDLIBS =  -lc -lcryptoutil -lavl -lmd -lsoftcrypto
-
-LINTFLAGS64 += -errchk=longptr64 -errtags=yes
-
-lintcheck := SRCS = $(CORESRCS)
-lintcheck := LDLIBS = -L$(ROOT)/lib -L$(ROOT)/usr/lib $(LINTLDLIBS)
-
-lintother: $$(OSRCS)
-	$(LINT.c) $(LINTCHECKFLAGS) $(OSRCS) $(LINTLDLIBS)
-
-lint: lintcheck
-
-include $(SRC)/lib/Makefile.targ
--- a/usr/src/lib/pkcs11/pkcs11_kms/amd64/Makefile	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-#
-
-
-include ../Makefile.com
-include ../../../Makefile.lib.64
-
-LINTCHECKFLAGS += -erroff=E_INCONS_ARG_DECL2 \
-		-erroff=E_INCONS_ARG_USED2 \
-		-erroff=E_INCONS_VAL_TYPE_DECL2 \
-		-erroff=E_INCONS_VAL_TYPE_USED2 \
-		-erroff=E_FUNC_DECL_VAR_ARG2
-
-install: all $(ROOTLIBS64) $(ROOTLINKS64)
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsAESCrypt.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1046 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include <pthread.h>
-#include <stdlib.h>
-#include <string.h>
-#include <strings.h>
-#include <sys/types.h>
-#include <security/cryptoki.h>
-#include <aes_impl.h>
-
-#include "kmsSession.h"
-#include "kmsObject.h"
-#include "kmsCrypt.h"
-
-/*
- * Add padding bytes with the value of length of padding.
- */
-static void
-kms_add_pkcs7_padding(CK_BYTE *buf, int block_size, CK_ULONG data_len)
-{
-
-	ulong_t i, pad_len;
-	CK_BYTE pad_value;
-
-	pad_len = block_size - (data_len % block_size);
-	pad_value = (CK_BYTE)pad_len;
-
-	for (i = 0; i < pad_len; i++)
-		buf[i] = pad_value;
-}
-
-/*
- * Remove padding bytes.
- */
-static CK_RV
-kms_remove_pkcs7_padding(CK_BYTE *pData, CK_ULONG padded_len,
-    CK_ULONG *pulDataLen, int block_size)
-{
-
-	CK_BYTE  pad_value;
-	ulong_t i;
-
-	pad_value = pData[padded_len - 1];
-
-
-	/* Make sure there is a valid padding value. */
-	if ((pad_value == 0) || (pad_value > block_size))
-		return (CKR_ENCRYPTED_DATA_INVALID);
-
-	for (i = padded_len - pad_value; i < padded_len; i++)
-		if (pad_value != pData[i])
-			return (CKR_ENCRYPTED_DATA_INVALID);
-
-	*pulDataLen = padded_len - pad_value;
-	return (CKR_OK);
-}
-
-/*
- * Allocate context for the active encryption or decryption operation, and
- * generate AES key schedule to speed up the operation.
- */
-CK_RV
-kms_aes_crypt_init_common(kms_session_t *session_p,
-    CK_MECHANISM_PTR pMechanism, kms_object_t *key_p,
-    boolean_t encrypt)
-{
-	size_t size;
-	kms_aes_ctx_t *kms_aes_ctx;
-
-	kms_aes_ctx = calloc(1, sizeof (kms_aes_ctx_t));
-	if (kms_aes_ctx == NULL) {
-		return (CKR_HOST_MEMORY);
-	}
-
-	kms_aes_ctx->key_sched = aes_alloc_keysched(&size, 0);
-
-	if (kms_aes_ctx->key_sched == NULL) {
-		free(kms_aes_ctx);
-		return (CKR_HOST_MEMORY);
-	}
-
-	kms_aes_ctx->keysched_len = size;
-
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	if (encrypt) {
-		/* Called by C_EncryptInit. */
-		session_p->encrypt.context = kms_aes_ctx;
-		session_p->encrypt.mech.mechanism = pMechanism->mechanism;
-	} else {
-		/* Called by C_DecryptInit. */
-		session_p->decrypt.context = kms_aes_ctx;
-		session_p->decrypt.mech.mechanism = pMechanism->mechanism;
-	}
-	(void) pthread_mutex_unlock(&session_p->session_mutex);
-
-	/*
-	 * If this is a non-sensitive key and it does NOT have
-	 * a key schedule yet, then allocate one and expand it.
-	 * Otherwise, if it's a non-sensitive key, and it DOES have
-	 * a key schedule already attached to it, just copy the
-	 * pre-expanded schedule to the context and avoid the
-	 * extra key schedule expansion operation.
-	 */
-	if (!(key_p->bool_attr_mask & SENSITIVE_BOOL_ON)) {
-		if (OBJ_KEY_SCHED(key_p) == NULL) {
-			void *ks;
-
-			(void) pthread_mutex_lock(&key_p->object_mutex);
-			if (OBJ_KEY_SCHED(key_p) == NULL) {
-				ks = aes_alloc_keysched(&size, 0);
-				if (ks == NULL) {
-					(void) pthread_mutex_unlock(
-					    &key_p->object_mutex);
-					free(kms_aes_ctx);
-					return (CKR_HOST_MEMORY);
-				}
-#ifdef	__sparcv9
-				/* LINTED */
-				aes_init_keysched(OBJ_SEC_VALUE(key_p), (uint_t)
-				    (OBJ_SEC_VALUE_LEN(key_p) * 8), ks);
-#else	/* !__sparcv9 */
-				aes_init_keysched(OBJ_SEC_VALUE(key_p),
-				    (OBJ_SEC_VALUE_LEN(key_p) * 8), ks);
-#endif	/* __sparcv9 */
-				OBJ_KEY_SCHED_LEN(key_p) = size;
-				OBJ_KEY_SCHED(key_p) = ks;
-			}
-			(void) pthread_mutex_unlock(&key_p->object_mutex);
-		}
-		(void) memcpy(kms_aes_ctx->key_sched, OBJ_KEY_SCHED(key_p),
-		    OBJ_KEY_SCHED_LEN(key_p));
-		kms_aes_ctx->keysched_len = OBJ_KEY_SCHED_LEN(key_p);
-	} else {
-		/*
-		 * Initialize key schedule for AES. aes_init_keysched()
-		 * requires key length in bits.
-		 */
-#ifdef	__sparcv9
-		/* LINTED */
-		aes_init_keysched(OBJ_SEC_VALUE(key_p), (uint_t)
-		    (OBJ_SEC_VALUE_LEN(key_p) * 8), kms_aes_ctx->key_sched);
-#else	/* !__sparcv9 */
-		aes_init_keysched(OBJ_SEC_VALUE(key_p),
-		    (OBJ_SEC_VALUE_LEN(key_p) * 8), kms_aes_ctx->key_sched);
-#endif	/* __sparcv9 */
-	}
-	return (CKR_OK);
-}
-
-/*
- * kms_aes_encrypt_common()
- *
- * Arguments:
- *      session_p:	pointer to kms_session_t struct
- *	pData:		pointer to the input data to be encrypted
- *	ulDataLen:	length of the input data
- *	pEncrypted:	pointer to the output data after encryption
- *	pulEncryptedLen: pointer to the length of the output data
- *	update:		boolean flag indicates caller is kms_encrypt
- *			or kms_encrypt_update
- *
- * Description:
- *      This function calls the corresponding encrypt routine based
- *	on the mechanism.
- *
- * Returns:
- *      CKR_OK: success
- *      CKR_BUFFER_TOO_SMALL: the output buffer provided by application
- *			      is too small
- *	CKR_FUNCTION_FAILED: encrypt function failed
- *	CKR_DATA_LEN_RANGE: the input data is not a multiple of blocksize
- */
-CK_RV
-kms_aes_encrypt_common(kms_session_t *session_p, CK_BYTE_PTR pData,
-    CK_ULONG ulDataLen, CK_BYTE_PTR pEncrypted,
-    CK_ULONG_PTR pulEncryptedLen, boolean_t update)
-{
-
-	int rc = 0;
-	CK_RV rv = CKR_OK;
-	kms_aes_ctx_t *kms_aes_ctx =
-	    (kms_aes_ctx_t *)session_p->encrypt.context;
-	aes_ctx_t *aes_ctx;
-	CK_MECHANISM_TYPE mechanism = session_p->encrypt.mech.mechanism;
-	CK_BYTE *in_buf = NULL;
-	CK_BYTE *out_buf = NULL;
-	CK_ULONG out_len;
-	CK_ULONG total_len;
-	CK_ULONG remain;
-
-	if (mechanism == CKM_AES_CTR)
-		goto do_encryption;
-
-	/*
-	 * AES only takes input length that is a multiple of blocksize
-	 * for C_Encrypt function with the mechanism CKM_AES_ECB or
-	 * CKM_AES_CBC.
-	 *
-	 * AES allows any input length for C_Encrypt function with the
-	 * mechanism CKM_AES_CBC_PAD and for C_EncryptUpdate function.
-	 */
-	if ((!update) && (mechanism != CKM_AES_CBC_PAD)) {
-		if ((ulDataLen % AES_BLOCK_LEN) != 0) {
-			rv = CKR_DATA_LEN_RANGE;
-			goto cleanup;
-		}
-	}
-
-	if (!update) {
-		/*
-		 * Called by C_Encrypt
-		 */
-		if (mechanism == CKM_AES_CBC_PAD) {
-			/*
-			 * For CKM_AES_CBC_PAD, compute output length to
-			 * count for the padding. If the length of input
-			 * data is a multiple of blocksize, then make output
-			 * length to be the sum of the input length and
-			 * one blocksize. Otherwise, output length will
-			 * be rounded up to the next multiple of blocksize.
-			 */
-			out_len = AES_BLOCK_LEN *
-			    (ulDataLen / AES_BLOCK_LEN + 1);
-		} else {
-			/*
-			 * For non-padding mode, the output length will
-			 * be same as the input length.
-			 */
-			out_len = ulDataLen;
-		}
-
-		/*
-		 * If application asks for the length of the output buffer
-		 * to hold the ciphertext?
-		 */
-		if (pEncrypted == NULL) {
-			*pulEncryptedLen = out_len;
-			return (CKR_OK);
-		}
-
-		/* Is the application-supplied buffer large enough? */
-		if (*pulEncryptedLen < out_len) {
-			*pulEncryptedLen = out_len;
-			return (CKR_BUFFER_TOO_SMALL);
-		}
-
-		/* Encrypt pad bytes in a separate operation */
-		if (mechanism == CKM_AES_CBC_PAD) {
-			out_len -= AES_BLOCK_LEN;
-		}
-
-		in_buf = pData;
-		out_buf = pEncrypted;
-	} else {
-		/*
-		 * Called by C_EncryptUpdate
-		 *
-		 * Add the lengths of last remaining data and current
-		 * plaintext together to get the total input length.
-		 */
-		total_len = kms_aes_ctx->remain_len + ulDataLen;
-
-		/*
-		 * If the total input length is less than one blocksize,
-		 * or if the total input length is just one blocksize and
-		 * the mechanism is CKM_AES_CBC_PAD, we will need to delay
-		 * encryption until when more data comes in next
-		 * C_EncryptUpdate or when C_EncryptFinal is called.
-		 */
-		if ((total_len < AES_BLOCK_LEN) ||
-		    ((mechanism == CKM_AES_CBC_PAD) &&
-		    (total_len == AES_BLOCK_LEN))) {
-			if (pEncrypted != NULL) {
-				/*
-				 * Save input data and its length in
-				 * the remaining buffer of AES context.
-				 */
-				(void) memcpy(kms_aes_ctx->data +
-				    kms_aes_ctx->remain_len, pData, ulDataLen);
-				kms_aes_ctx->remain_len += ulDataLen;
-			}
-
-			/* Set encrypted data length to 0. */
-			*pulEncryptedLen = 0;
-			return (CKR_OK);
-		}
-
-		/* Compute the length of remaing data. */
-		remain = total_len % AES_BLOCK_LEN;
-
-		/*
-		 * Make sure that the output length is a multiple of
-		 * blocksize.
-		 */
-		out_len = total_len - remain;
-
-		/*
-		 * If application asks for the length of the output buffer
-		 * to hold the ciphertext?
-		 */
-		if (pEncrypted == NULL) {
-			*pulEncryptedLen = out_len;
-			return (CKR_OK);
-		}
-
-		/* Is the application-supplied buffer large enough? */
-		if (*pulEncryptedLen < out_len) {
-			*pulEncryptedLen = out_len;
-			return (CKR_BUFFER_TOO_SMALL);
-		}
-
-		if (kms_aes_ctx->remain_len != 0) {
-			/*
-			 * Copy last remaining data and current input data
-			 * to the output buffer.
-			 */
-			(void) memmove(pEncrypted + kms_aes_ctx->remain_len,
-			    pData, out_len - kms_aes_ctx->remain_len);
-			(void) memcpy(pEncrypted, kms_aes_ctx->data,
-			    kms_aes_ctx->remain_len);
-			bzero(kms_aes_ctx->data, kms_aes_ctx->remain_len);
-
-			in_buf = pEncrypted;
-		} else {
-			in_buf = pData;
-		}
-		out_buf = pEncrypted;
-	}
-
-do_encryption:
-	/*
-	 * Begin Encryption now.
-	 */
-	switch (mechanism) {
-
-	case CKM_AES_CBC:
-	case CKM_AES_CBC_PAD:
-	{
-		crypto_data_t out;
-
-		out.cd_format = CRYPTO_DATA_RAW;
-		out.cd_offset = 0;
-		out.cd_length = out_len;
-		out.cd_raw.iov_base = (char *)out_buf;
-		out.cd_raw.iov_len = out_len;
-
-		/* Encrypt multiple blocks of data. */
-		rc = aes_encrypt_contiguous_blocks(
-		    (aes_ctx_t *)kms_aes_ctx->aes_cbc,
-		    (char *)in_buf, out_len, &out);
-
-		if (rc != 0)
-			goto encrypt_failed;
-
-		if (update) {
-			/*
-			 * For encrypt update, if there is remaining data,
-			 * save it and its length in the context.
-			 */
-			if (remain != 0)
-				(void) memcpy(kms_aes_ctx->data, pData +
-				    (ulDataLen - remain), remain);
-			kms_aes_ctx->remain_len = remain;
-		} else if (mechanism == CKM_AES_CBC_PAD) {
-			/*
-			 * Save the remainder of the input
-			 * block in a temporary block because
-			 * we dont want to overrun the buffer
-			 * by tacking on pad bytes.
-			 */
-			CK_BYTE tmpblock[AES_BLOCK_LEN];
-			(void) memcpy(tmpblock, in_buf + out_len,
-			    ulDataLen - out_len);
-			kms_add_pkcs7_padding(tmpblock +
-			    (ulDataLen - out_len),
-			    AES_BLOCK_LEN, ulDataLen - out_len);
-
-			out.cd_offset = out_len;
-			out.cd_length = AES_BLOCK_LEN;
-			out.cd_raw.iov_base = (char *)out_buf;
-			out.cd_raw.iov_len = out_len + AES_BLOCK_LEN;
-
-			/* Encrypt last block containing pad bytes. */
-			rc = aes_encrypt_contiguous_blocks(
-			    (aes_ctx_t *)kms_aes_ctx->aes_cbc,
-			    (char *)tmpblock, AES_BLOCK_LEN, &out);
-
-			out_len += AES_BLOCK_LEN;
-		}
-
-		if (rc == 0) {
-			*pulEncryptedLen = out_len;
-			break;
-		}
-encrypt_failed:
-		*pulEncryptedLen = 0;
-		rv = CKR_FUNCTION_FAILED;
-		goto cleanup;
-	}
-	default:
-		rv = CKR_MECHANISM_INVALID;
-		goto cleanup;
-	} /* end switch */
-
-	if (update)
-		return (CKR_OK);
-
-	/*
-	 * The following code will be executed if the caller is
-	 * kms_encrypt() or an error occurred. The encryption
-	 * operation will be terminated so we need to do some cleanup.
-	 */
-cleanup:
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	aes_ctx = (aes_ctx_t *)kms_aes_ctx->aes_cbc;
-	if (aes_ctx != NULL) {
-		bzero(aes_ctx->ac_keysched, aes_ctx->ac_keysched_len);
-		free(kms_aes_ctx->aes_cbc);
-	}
-
-	bzero(kms_aes_ctx->key_sched, kms_aes_ctx->keysched_len);
-	free(kms_aes_ctx->key_sched);
-	free(session_p->encrypt.context);
-	session_p->encrypt.context = NULL;
-	(void) pthread_mutex_unlock(&session_p->session_mutex);
-
-	return (rv);
-}
-
-
-/*
- * kms_aes_decrypt_common()
- *
- * Arguments:
- *      session_p:	pointer to kms_session_t struct
- *	pEncrypted:	pointer to the input data to be decrypted
- *	ulEncryptedLen:	length of the input data
- *	pData:		pointer to the output data
- *	pulDataLen:	pointer to the length of the output data
- *	Update:		boolean flag indicates caller is kms_decrypt
- *			or kms_decrypt_update
- *
- * Description:
- *      This function calls the corresponding decrypt routine based
- *	on the mechanism.
- *
- * Returns:
- *      CKR_OK: success
- *      CKR_BUFFER_TOO_SMALL: the output buffer provided by application
- *			      is too small
- *	CKR_ENCRYPTED_DATA_LEN_RANGE: the input data is not a multiple
- *				      of blocksize
- *	CKR_FUNCTION_FAILED: decrypt function failed
- */
-CK_RV
-kms_aes_decrypt_common(kms_session_t *session_p, CK_BYTE_PTR pEncrypted,
-    CK_ULONG ulEncryptedLen, CK_BYTE_PTR pData,
-    CK_ULONG_PTR pulDataLen, boolean_t update)
-{
-
-	int rc = 0;
-	CK_RV rv = CKR_OK;
-	kms_aes_ctx_t *kms_aes_ctx =
-	    (kms_aes_ctx_t *)session_p->decrypt.context;
-	aes_ctx_t *aes_ctx;
-	CK_MECHANISM_TYPE mechanism = session_p->decrypt.mech.mechanism;
-	CK_BYTE *in_buf = NULL;
-	CK_BYTE *out_buf = NULL;
-	CK_ULONG out_len;
-	CK_ULONG total_len;
-	CK_ULONG remain;
-
-	if (mechanism == CKM_AES_CTR)
-		goto do_decryption;
-
-	/*
-	 * AES only takes input length that is a multiple of 16 bytes
-	 * for C_Decrypt function with the mechanism CKM_AES_ECB,
-	 * CKM_AES_CBC or CKM_AES_CBC_PAD.
-	 *
-	 * AES allows any input length for C_DecryptUpdate function.
-	 */
-	if (!update) {
-		/*
-		 * Called by C_Decrypt
-		 */
-		if ((ulEncryptedLen % AES_BLOCK_LEN) != 0) {
-			rv = CKR_ENCRYPTED_DATA_LEN_RANGE;
-			goto cleanup;
-		}
-
-		/*
-		 * If application asks for the length of the output buffer
-		 * to hold the plaintext?
-		 */
-		if (pData == NULL) {
-			*pulDataLen = ulEncryptedLen;
-			return (CKR_OK);
-		}
-
-		/* Is the application-supplied buffer large enough? */
-		if (mechanism != CKM_AES_CBC_PAD) {
-			if (*pulDataLen < ulEncryptedLen) {
-				*pulDataLen = ulEncryptedLen;
-				return (CKR_BUFFER_TOO_SMALL);
-			}
-			out_len = ulEncryptedLen;
-		} else {
-			/*
-			 * For CKM_AES_CBC_PAD, we don't know how
-			 * many bytes for padding at this time, so
-			 * we'd assume one block was padded.
-			 */
-			if (*pulDataLen < (ulEncryptedLen - AES_BLOCK_LEN)) {
-				*pulDataLen = ulEncryptedLen - AES_BLOCK_LEN;
-				return (CKR_BUFFER_TOO_SMALL);
-			}
-			out_len = ulEncryptedLen - AES_BLOCK_LEN;
-		}
-		in_buf = pEncrypted;
-		out_buf = pData;
-	} else {
-		/*
-		 *  Called by C_DecryptUpdate
-		 *
-		 * Add the lengths of last remaining data and current
-		 * input data together to get the total input length.
-		 */
-		total_len = kms_aes_ctx->remain_len + ulEncryptedLen;
-
-		/*
-		 * If the total input length is less than one blocksize,
-		 * or if the total input length is just one blocksize and
-		 * the mechanism is CKM_AES_CBC_PAD, we will need to delay
-		 * decryption until when more data comes in next
-		 * C_DecryptUpdate or when C_DecryptFinal is called.
-		 */
-		if ((total_len < AES_BLOCK_LEN) ||
-		    ((mechanism == CKM_AES_CBC_PAD) &&
-		    (total_len == AES_BLOCK_LEN))) {
-			if (pData != NULL) {
-				/*
-				 * Save input data and its length in
-				 * the remaining buffer of AES context.
-				 */
-				(void) memcpy(kms_aes_ctx->data +
-				    kms_aes_ctx->remain_len,
-				    pEncrypted, ulEncryptedLen);
-				kms_aes_ctx->remain_len += ulEncryptedLen;
-			}
-
-			/* Set output data length to 0. */
-			*pulDataLen = 0;
-			return (CKR_OK);
-		}
-
-		/* Compute the length of remaing data. */
-		remain = total_len % AES_BLOCK_LEN;
-
-		/*
-		 * Make sure that the output length is a multiple of
-		 * blocksize.
-		 */
-		out_len = total_len - remain;
-
-		if (mechanism == CKM_AES_CBC_PAD) {
-			/*
-			 * If the input data length is a multiple of
-			 * blocksize, then save the last block of input
-			 * data in the remaining buffer. C_DecryptFinal
-			 * will handle this last block of data.
-			 */
-			if (remain == 0) {
-				remain = AES_BLOCK_LEN;
-				out_len -= AES_BLOCK_LEN;
-			}
-		}
-
-		/*
-		 * If application asks for the length of the output buffer
-		 * to hold the plaintext?
-		 */
-		if (pData == NULL) {
-			*pulDataLen = out_len;
-			return (CKR_OK);
-		}
-
-		/*
-		 * Is the application-supplied buffer large enough?
-		 */
-		if (*pulDataLen < out_len) {
-			*pulDataLen = out_len;
-			return (CKR_BUFFER_TOO_SMALL);
-		}
-
-		if (kms_aes_ctx->remain_len != 0) {
-			/*
-			 * Copy last remaining data and current input data
-			 * to the output buffer.
-			 */
-			(void) memmove(pData + kms_aes_ctx->remain_len,
-			    pEncrypted, out_len - kms_aes_ctx->remain_len);
-			(void) memcpy(pData, kms_aes_ctx->data,
-			    kms_aes_ctx->remain_len);
-			bzero(kms_aes_ctx->data, kms_aes_ctx->remain_len);
-
-			in_buf = pData;
-		} else {
-			in_buf = pEncrypted;
-		}
-		out_buf = pData;
-	}
-
-do_decryption:
-	/*
-	 * Begin Decryption.
-	 */
-	switch (mechanism) {
-	case CKM_AES_CBC:
-	case CKM_AES_CBC_PAD:
-	{
-		crypto_data_t out;
-		CK_ULONG rem_len;
-		uint8_t last_block[AES_BLOCK_LEN];
-
-		out.cd_format = CRYPTO_DATA_RAW;
-		out.cd_offset = 0;
-		out.cd_length = out_len;
-		out.cd_raw.iov_base = (char *)out_buf;
-		out.cd_raw.iov_len = out_len;
-
-		/* Decrypt multiple blocks of data. */
-		rc = aes_decrypt_contiguous_blocks(
-		    (aes_ctx_t *)kms_aes_ctx->aes_cbc,
-		    (char *)in_buf, out_len, &out);
-
-		if (rc != 0)
-			goto decrypt_failed;
-
-		if ((mechanism == CKM_AES_CBC_PAD) && (!update)) {
-			/* Decrypt last block containing pad bytes. */
-			out.cd_offset = 0;
-			out.cd_length = AES_BLOCK_LEN;
-			out.cd_raw.iov_base = (char *)last_block;
-			out.cd_raw.iov_len = AES_BLOCK_LEN;
-
-			/* Decrypt last block containing pad bytes. */
-			rc = aes_decrypt_contiguous_blocks(
-			    (aes_ctx_t *)kms_aes_ctx->aes_cbc,
-			    (char *)in_buf + out_len, AES_BLOCK_LEN, &out);
-
-			if (rc != 0)
-				goto decrypt_failed;
-
-			/*
-			 * Remove padding bytes after decryption of
-			 * ciphertext block to produce the original
-			 * plaintext.
-			 */
-			rv = kms_remove_pkcs7_padding(last_block,
-			    AES_BLOCK_LEN, &rem_len, AES_BLOCK_LEN);
-			if (rv == CKR_OK) {
-				if (rem_len != 0)
-					(void) memcpy(out_buf + out_len,
-					    last_block, rem_len);
-				*pulDataLen = out_len + rem_len;
-			} else {
-				*pulDataLen = 0;
-				goto cleanup;
-			}
-		} else {
-			*pulDataLen = out_len;
-		}
-
-		if (update) {
-			/*
-			 * For decrypt update, if there is remaining data,
-			 * save it and its length in the context.
-			 */
-			if (remain != 0)
-				(void) memcpy(kms_aes_ctx->data, pEncrypted +
-				    (ulEncryptedLen - remain), remain);
-			kms_aes_ctx->remain_len = remain;
-		}
-
-		if (rc == 0)
-			break;
-decrypt_failed:
-		*pulDataLen = 0;
-		rv = CKR_FUNCTION_FAILED;
-		goto cleanup;
-	}
-	default:
-		rv = CKR_MECHANISM_INVALID;
-		goto cleanup;
-	} /* end switch */
-
-	if (update)
-		return (CKR_OK);
-
-	/*
-	 * The following code will be executed if the caller is
-	 * kms_decrypt() or an error occurred. The decryption
-	 * operation will be terminated so we need to do some cleanup.
-	 */
-cleanup:
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	aes_ctx = (aes_ctx_t *)kms_aes_ctx->aes_cbc;
-	if (aes_ctx != NULL) {
-		bzero(aes_ctx->ac_keysched, aes_ctx->ac_keysched_len);
-		free(kms_aes_ctx->aes_cbc);
-	}
-
-	bzero(kms_aes_ctx->key_sched, kms_aes_ctx->keysched_len);
-	free(kms_aes_ctx->key_sched);
-	free(session_p->decrypt.context);
-	session_p->decrypt.context = NULL;
-	(void) pthread_mutex_unlock(&session_p->session_mutex);
-
-	return (rv);
-}
-
-
-/*
- * Allocate and initialize a context for AES CBC mode of operation.
- */
-void *
-aes_cbc_ctx_init(void *key_sched, size_t size, uint8_t *ivec)
-{
-	aes_ctx_t *aes_ctx;
-
-	if ((aes_ctx = calloc(1, sizeof (aes_ctx_t))) == NULL)
-		return (NULL);
-
-	aes_ctx->ac_keysched = key_sched;
-
-	(void) memcpy(&aes_ctx->ac_iv[0], ivec, AES_BLOCK_LEN);
-
-	aes_ctx->ac_lastp = (uint8_t *)aes_ctx->ac_iv;
-	aes_ctx->ac_keysched_len = size;
-	aes_ctx->ac_flags |= CBC_MODE;
-
-	return ((void *)aes_ctx);
-}
-
-/*
- * kms_encrypt_final()
- *
- * Arguments:
- *      session_p:		pointer to kms_session_t struct
- *      pLastEncryptedPart:	pointer to the last encrypted data part
- *      pulLastEncryptedPartLen: pointer to the length of the last
- *				encrypted data part
- *
- * Description:
- *      called by C_EncryptFinal().
- *
- * Returns:
- *	CKR_OK: success
- *	CKR_FUNCTION_FAILED: encrypt final function failed
- *	CKR_DATA_LEN_RANGE: remaining buffer contains bad length
- */
-CK_RV
-kms_aes_encrypt_final(kms_session_t *session_p, CK_BYTE_PTR pLastEncryptedPart,
-	CK_ULONG_PTR pulLastEncryptedPartLen)
-{
-
-	CK_MECHANISM_TYPE mechanism = session_p->encrypt.mech.mechanism;
-	CK_ULONG out_len;
-	CK_RV rv = CKR_OK;
-	int rc;
-
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-
-	if (session_p->encrypt.context == NULL) {
-		rv = CKR_OPERATION_NOT_INITIALIZED;
-		*pulLastEncryptedPartLen = 0;
-
-	}
-	if (mechanism == CKM_AES_CBC_PAD) {
-		kms_aes_ctx_t *aes_ctx;
-
-		aes_ctx = (kms_aes_ctx_t *)session_p->encrypt.context;
-		/*
-		 * For CKM_AES_CBC_PAD, compute output length with
-		 * padding. If the remaining buffer has one block
-		 * of data, then output length will be two blocksize of
-		 * ciphertext. If the remaining buffer has less than
-		 * one block of data, then output length will be
-		 * one blocksize.
-		 */
-		if (aes_ctx->remain_len == AES_BLOCK_LEN)
-			out_len = 2 * AES_BLOCK_LEN;
-		else
-			out_len = AES_BLOCK_LEN;
-
-		if (pLastEncryptedPart == NULL) {
-			/*
-			 * Application asks for the length of the output
-			 * buffer to hold the ciphertext.
-			 */
-			*pulLastEncryptedPartLen = out_len;
-			goto clean1;
-		} else {
-			crypto_data_t out;
-
-			/* Copy remaining data to the output buffer. */
-			(void) memcpy(pLastEncryptedPart, aes_ctx->data,
-			    aes_ctx->remain_len);
-
-			/*
-			 * Add padding bytes prior to encrypt final.
-			 */
-			kms_add_pkcs7_padding(pLastEncryptedPart +
-			    aes_ctx->remain_len, AES_BLOCK_LEN,
-			    aes_ctx->remain_len);
-
-			out.cd_format = CRYPTO_DATA_RAW;
-			out.cd_offset = 0;
-			out.cd_length = out_len;
-			out.cd_raw.iov_base = (char *)pLastEncryptedPart;
-			out.cd_raw.iov_len = out_len;
-
-			/* Encrypt multiple blocks of data. */
-			rc = aes_encrypt_contiguous_blocks(
-			    (aes_ctx_t *)aes_ctx->aes_cbc,
-			    (char *)pLastEncryptedPart, out_len, &out);
-
-			if (rc == 0) {
-				*pulLastEncryptedPartLen = out_len;
-			} else {
-				*pulLastEncryptedPartLen = 0;
-				rv = CKR_FUNCTION_FAILED;
-			}
-
-			/* Cleanup memory space. */
-			free(aes_ctx->aes_cbc);
-			bzero(aes_ctx->key_sched,
-			    aes_ctx->keysched_len);
-			free(aes_ctx->key_sched);
-		}
-	} else if (mechanism == CKM_AES_CBC) {
-		kms_aes_ctx_t *aes_ctx;
-
-		aes_ctx = (kms_aes_ctx_t *)session_p->encrypt.context;
-		/*
-		 * CKM_AES_CBC and CKM_AES_ECB does not do any padding,
-		 * so when the final is called, the remaining buffer
-		 * should not contain any more data.
-		 */
-		*pulLastEncryptedPartLen = 0;
-		if (aes_ctx->remain_len != 0) {
-			rv = CKR_DATA_LEN_RANGE;
-		} else {
-			if (pLastEncryptedPart == NULL)
-				goto clean1;
-		}
-
-		/* Cleanup memory space. */
-		free(aes_ctx->aes_cbc);
-		bzero(aes_ctx->key_sched, aes_ctx->keysched_len);
-		free(aes_ctx->key_sched);
-	} else {
-		rv = CKR_MECHANISM_INVALID;
-	}
-
-	free(session_p->encrypt.context);
-	session_p->encrypt.context = NULL;
-clean1:
-	(void) pthread_mutex_unlock(&session_p->session_mutex);
-	return (rv);
-}
-
-/*
- * kms_decrypt_final()
- *
- * Arguments:
- *      session_p:	pointer to kms_session_t struct
- *      pLastPart:	pointer to the last recovered data part
- *      pulLastPartLen:	pointer to the length of the last recovered data part
- *
- * Description:
- *      called by C_DecryptFinal().
- *
- * Returns:
- *	CKR_OK: success
- *	CKR_FUNCTION_FAILED: decrypt final function failed
- *	CKR_ENCRYPTED_DATA_LEN_RANGE: remaining buffer contains bad length
- */
-CK_RV
-kms_aes_decrypt_final(kms_session_t *session_p, CK_BYTE_PTR pLastPart,
-	CK_ULONG_PTR pulLastPartLen)
-{
-
-	CK_MECHANISM_TYPE mechanism = session_p->decrypt.mech.mechanism;
-	CK_ULONG out_len;
-	CK_RV rv = CKR_OK;
-	int rc;
-
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-
-	if (session_p->decrypt.context == NULL) {
-		rv = CKR_OPERATION_NOT_INITIALIZED;
-		*pulLastPartLen = 0;
-		goto clean2;
-	}
-	switch (mechanism) {
-
-	case CKM_AES_CBC_PAD:
-	{
-		kms_aes_ctx_t *kms_aes_ctx;
-		kms_aes_ctx = (kms_aes_ctx_t *)session_p->decrypt.context;
-
-		/*
-		 * We should have only one block of data left in the
-		 * remaining buffer.
-		 */
-		if (kms_aes_ctx->remain_len != AES_BLOCK_LEN) {
-			*pulLastPartLen = 0;
-			rv = CKR_ENCRYPTED_DATA_LEN_RANGE;
-			/* Cleanup memory space. */
-			free(kms_aes_ctx->aes_cbc);
-			bzero(kms_aes_ctx->key_sched,
-			    kms_aes_ctx->keysched_len);
-			free(kms_aes_ctx->key_sched);
-
-			goto clean1;
-		}
-
-		out_len = AES_BLOCK_LEN;
-
-		/*
-		 * If application asks for the length of the output buffer
-		 * to hold the plaintext?
-		 */
-		if (pLastPart == NULL) {
-			*pulLastPartLen = out_len;
-			rv = CKR_OK;
-			goto clean2;
-		} else {
-			crypto_data_t out;
-
-			/* Copy remaining data to the output buffer. */
-			(void) memcpy(pLastPart, kms_aes_ctx->data,
-			    AES_BLOCK_LEN);
-
-			out.cd_format = CRYPTO_DATA_RAW;
-			out.cd_offset = 0;
-			out.cd_length = AES_BLOCK_LEN;
-			out.cd_raw.iov_base = (char *)pLastPart;
-			out.cd_raw.iov_len = AES_BLOCK_LEN;
-
-			/* Decrypt final block of data. */
-			rc = aes_decrypt_contiguous_blocks(
-			    (aes_ctx_t *)kms_aes_ctx->aes_cbc,
-			    (char *)pLastPart, AES_BLOCK_LEN, &out);
-
-			if (rc == 0) {
-				/*
-				 * Remove padding bytes after decryption of
-				 * ciphertext block to produce the original
-				 * plaintext.
-				 */
-				rv = kms_remove_pkcs7_padding(pLastPart,
-				    AES_BLOCK_LEN, &out_len, AES_BLOCK_LEN);
-				if (rv != CKR_OK)
-					*pulLastPartLen = 0;
-				else
-					*pulLastPartLen = out_len;
-			} else {
-				*pulLastPartLen = 0;
-				rv = CKR_FUNCTION_FAILED;
-			}
-
-			/* Cleanup memory space. */
-			free(kms_aes_ctx->aes_cbc);
-			bzero(kms_aes_ctx->key_sched,
-			    kms_aes_ctx->keysched_len);
-			free(kms_aes_ctx->key_sched);
-
-		}
-
-		break;
-	}
-
-	case CKM_AES_CBC:
-	{
-		kms_aes_ctx_t *kms_aes_ctx;
-
-		kms_aes_ctx = (kms_aes_ctx_t *)session_p->decrypt.context;
-		/*
-		 * CKM_AES_CBC and CKM_AES_ECB does not do any padding,
-		 * so when the final is called, the remaining buffer
-		 * should not contain any more data.
-		 */
-		*pulLastPartLen = 0;
-		if (kms_aes_ctx->remain_len != 0) {
-			rv = CKR_ENCRYPTED_DATA_LEN_RANGE;
-		} else {
-			if (pLastPart == NULL)
-				goto clean2;
-		}
-
-		/* Cleanup memory space. */
-		free(kms_aes_ctx->aes_cbc);
-		bzero(kms_aes_ctx->key_sched, kms_aes_ctx->keysched_len);
-		free(kms_aes_ctx->key_sched);
-
-		break;
-	}
-	default:
-		/* PKCS11: The mechanism only supports single-part operation. */
-		rv = CKR_MECHANISM_INVALID;
-		break;
-	}
-
-clean1:
-	free(session_p->decrypt.context);
-	session_p->decrypt.context = NULL;
-
-clean2:
-	(void) pthread_mutex_unlock(&session_p->session_mutex);
-
-	return (rv);
-
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsAttributeUtil.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1726 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2012 Milan Jurik. All rights reserved.
- */
-#include <stdlib.h>
-#include <string.h>
-#include <security/cryptoki.h>
-#include <sys/crypto/common.h>
-#include <aes_impl.h>
-#include "kmsGlobal.h"
-#include "kmsObject.h"
-#include "kmsSession.h"
-#include "kmsSlot.h"
-
-/*
- * This attribute table is used by the kms_lookup_attr()
- * to validate the attributes.
- */
-CK_ATTRIBUTE_TYPE attr_map[] = {
-	CKA_PRIVATE,
-	CKA_LABEL,
-	CKA_APPLICATION,
-	CKA_OBJECT_ID,
-	CKA_CERTIFICATE_TYPE,
-	CKA_ISSUER,
-	CKA_SERIAL_NUMBER,
-	CKA_AC_ISSUER,
-	CKA_OWNER,
-	CKA_ATTR_TYPES,
-	CKA_SUBJECT,
-	CKA_ID,
-	CKA_SENSITIVE,
-	CKA_START_DATE,
-	CKA_END_DATE,
-	CKA_MODULUS,
-	CKA_MODULUS_BITS,
-	CKA_PUBLIC_EXPONENT,
-	CKA_PRIVATE_EXPONENT,
-	CKA_PRIME_1,
-	CKA_PRIME_2,
-	CKA_EXPONENT_1,
-	CKA_EXPONENT_2,
-	CKA_COEFFICIENT,
-	CKA_PRIME,
-	CKA_SUBPRIME,
-	CKA_BASE,
-	CKA_EXTRACTABLE,
-	CKA_LOCAL,
-	CKA_NEVER_EXTRACTABLE,
-	CKA_ALWAYS_SENSITIVE,
-	CKA_MODIFIABLE,
-	CKA_ECDSA_PARAMS,
-	CKA_EC_POINT,
-	CKA_SECONDARY_AUTH,
-	CKA_AUTH_PIN_FLAGS,
-	CKA_HW_FEATURE_TYPE,
-	CKA_RESET_ON_INIT,
-	CKA_HAS_RESET
-};
-
-/*
- * attributes that exists only in secret key objects
- * Note: some attributes may also exist in one or two
- *       other object classes, but they are also listed
- *       because not all object have them.
- */
-CK_ATTRIBUTE_TYPE SECRET_KEY_ATTRS[] =
-{
-	CKA_VALUE_LEN,
-	CKA_ENCRYPT,
-	CKA_DECRYPT,
-	CKA_WRAP,
-	CKA_UNWRAP,
-	CKA_SIGN,
-	CKA_VERIFY,
-	CKA_SENSITIVE,
-	CKA_EXTRACTABLE,
-	CKA_NEVER_EXTRACTABLE,
-	CKA_ALWAYS_SENSITIVE
-};
-
-/*
- * Validate the attribute by using binary search algorithm.
- */
-CK_RV
-kms_lookup_attr(CK_ATTRIBUTE_TYPE type)
-{
-	size_t lower, middle, upper;
-
-	lower = 0;
-	upper = (sizeof (attr_map) / sizeof (CK_ATTRIBUTE_TYPE)) - 1;
-
-	while (lower <= upper) {
-		/* Always starts from middle. */
-		middle = (lower + upper) / 2;
-
-		if (type > attr_map[middle]) {
-			/* Adjust the lower bound to upper half. */
-			lower = middle + 1;
-			continue;
-		}
-
-		if (type == attr_map[middle]) {
-			/* Found it. */
-			return (CKR_OK);
-		}
-
-		if (type < attr_map[middle]) {
-			/* Adjust the upper bound to lower half. */
-			upper = middle - 1;
-			continue;
-		}
-	}
-
-	/* Failed to find the matching attribute from the attribute table. */
-	return (CKR_ATTRIBUTE_TYPE_INVALID);
-}
-
-
-/*
- * Validate the attribute by using the following search algorithm:
- *
- * 1) Search for the most frequently used attributes first.
- * 2) If not found, search for the usage-purpose attributes - these
- *    attributes have dense set of values, therefore compiler will
- *    optimize it with a branch table and branch to the appropriate
- *    case.
- * 3) If still not found, use binary search for the rest of the
- *    attributes in the attr_map[] table.
- */
-CK_RV
-kms_validate_attr(CK_ATTRIBUTE_PTR template, CK_ULONG ulAttrNum,
-	CK_OBJECT_CLASS *class)
-{
-
-	CK_ULONG i;
-	CK_RV rv = CKR_OK;
-
-	for (i = 0; i < ulAttrNum; i++) {
-		/* First tier search */
-		switch (template[i].type) {
-		case CKA_CLASS:
-			*class = *((CK_OBJECT_CLASS*)template[i].pValue);
-			break;
-		case CKA_TOKEN:
-			break;
-		case CKA_KEY_TYPE:
-			break;
-		case CKA_VALUE:
-			break;
-		case CKA_VALUE_LEN:
-			break;
-		case CKA_VALUE_BITS:
-			break;
-		default:
-			/* Second tier search */
-			switch (template[i].type) {
-			case CKA_ENCRYPT:
-				break;
-			case CKA_DECRYPT:
-				break;
-			case CKA_WRAP:
-				break;
-			case CKA_UNWRAP:
-				break;
-			case CKA_SIGN:
-				break;
-			case CKA_SIGN_RECOVER:
-				break;
-			case CKA_VERIFY:
-				break;
-			case CKA_VERIFY_RECOVER:
-				break;
-			case CKA_DERIVE:
-				break;
-			default:
-				/* Third tier search */
-				rv = kms_lookup_attr(template[i].type);
-				if (rv != CKR_OK)
-					return (rv);
-				break;
-			}
-			break;
-		}
-	}
-	return (rv);
-}
-
-
-/*
- * Clean up and release all the storage in the extra attribute list
- * of an object.
- */
-void
-kms_cleanup_extra_attr(kms_object_t *object_p)
-{
-
-	CK_ATTRIBUTE_INFO_PTR extra_attr;
-	CK_ATTRIBUTE_INFO_PTR tmp;
-
-	if (object_p == NULL)
-		return;
-
-	extra_attr = object_p->extra_attrlistp;
-	while (extra_attr) {
-		tmp = extra_attr->next;
-		if (extra_attr->attr.pValue)
-			/*
-			 * All extra attributes in the extra attribute
-			 * list have pValue points to the value of the
-			 * attribute (with simple byte array type).
-			 * Free the storage for the value of the attribute.
-			 */
-			free(extra_attr->attr.pValue);
-
-		/* Free the storage for the attribute_info struct. */
-		free(extra_attr);
-		extra_attr = tmp;
-	}
-
-	object_p->extra_attrlistp = NULL;
-}
-
-/*
- * Create the attribute_info struct to hold the object's attribute,
- * and add it to the extra attribute list of an object.
- */
-CK_RV
-kms_add_extra_attr(CK_ATTRIBUTE_PTR template, kms_object_t *object_p)
-{
-
-	CK_ATTRIBUTE_INFO_PTR attrp;
-
-	/* Allocate the storage for the attribute_info struct. */
-	attrp = calloc(1, sizeof (attribute_info_t));
-	if (attrp == NULL) {
-		return (CKR_HOST_MEMORY);
-	}
-
-	/* Set up attribute_info struct. */
-	attrp->attr.type = template->type;
-	attrp->attr.ulValueLen = template->ulValueLen;
-
-	if ((template->pValue != NULL) &&
-	    (template->ulValueLen > 0)) {
-		/* Allocate storage for the value of the attribute. */
-		attrp->attr.pValue = malloc(template->ulValueLen);
-		if (attrp->attr.pValue == NULL) {
-			free(attrp);
-			return (CKR_HOST_MEMORY);
-		}
-
-		(void) memcpy(attrp->attr.pValue, template->pValue,
-		    template->ulValueLen);
-	} else {
-		attrp->attr.pValue = NULL;
-	}
-
-	/* Insert the new attribute in front of extra attribute list. */
-	if (object_p->extra_attrlistp == NULL) {
-		object_p->extra_attrlistp = attrp;
-		attrp->next = NULL;
-	} else {
-		attrp->next = object_p->extra_attrlistp;
-		object_p->extra_attrlistp = attrp;
-	}
-
-	return (CKR_OK);
-}
-
-/*
- * Copy the attribute_info struct from the old object to a new attribute_info
- * struct, and add that new struct to the extra attribute list of the new
- * object.
- */
-CK_RV
-kms_copy_extra_attr(CK_ATTRIBUTE_INFO_PTR old_attrp,
-    kms_object_t *object_p)
-{
-	CK_ATTRIBUTE_INFO_PTR attrp;
-
-	/* Allocate attribute_info struct. */
-	attrp = calloc(1, sizeof (attribute_info_t));
-	if (attrp == NULL) {
-		return (CKR_HOST_MEMORY);
-	}
-
-	attrp->attr.type = old_attrp->attr.type;
-	attrp->attr.ulValueLen = old_attrp->attr.ulValueLen;
-
-	if ((old_attrp->attr.pValue != NULL) &&
-	    (old_attrp->attr.ulValueLen > 0)) {
-		attrp->attr.pValue = malloc(old_attrp->attr.ulValueLen);
-		if (attrp->attr.pValue == NULL) {
-			free(attrp);
-			return (CKR_HOST_MEMORY);
-		}
-
-		(void) memcpy(attrp->attr.pValue, old_attrp->attr.pValue,
-		    old_attrp->attr.ulValueLen);
-	} else {
-		attrp->attr.pValue = NULL;
-	}
-
-	/* Insert the new attribute in front of extra attribute list */
-	if (object_p->extra_attrlistp == NULL) {
-		object_p->extra_attrlistp = attrp;
-		attrp->next = NULL;
-	} else {
-		attrp->next = object_p->extra_attrlistp;
-		object_p->extra_attrlistp = attrp;
-	}
-
-	return (CKR_OK);
-}
-
-/*
- * Get the attribute triple from the extra attribute list in the object
- * (if the specified attribute type is found), and copy it to a template.
- * Note the type of the attribute to be copied is specified by the template,
- * and the storage is pre-allocated for the atrribute value in the template
- * for doing the copy.
- */
-CK_RV
-get_extra_attr_from_object(kms_object_t *object_p, CK_ATTRIBUTE_PTR template)
-{
-	CK_ATTRIBUTE_INFO_PTR extra_attr;
-	CK_ATTRIBUTE_TYPE type = template->type;
-
-	extra_attr = object_p->extra_attrlistp;
-
-	while (extra_attr) {
-		if (type == extra_attr->attr.type) {
-			/* Found it. */
-			break;
-		} else {
-			/* Does not match, try next one. */
-			extra_attr = extra_attr->next;
-		}
-	}
-
-	if (extra_attr == NULL) {
-		/* A valid but un-initialized attribute. */
-		template->ulValueLen = 0;
-		return (CKR_OK);
-	}
-
-	/*
-	 * We found the attribute in the extra attribute list.
-	 */
-	if (template->pValue == NULL) {
-		template->ulValueLen = extra_attr->attr.ulValueLen;
-		return (CKR_OK);
-	}
-
-	if (template->ulValueLen >= extra_attr->attr.ulValueLen) {
-		/*
-		 * The buffer provided by the application is large
-		 * enough to hold the value of the attribute.
-		 */
-		(void) memcpy(template->pValue, extra_attr->attr.pValue,
-		    extra_attr->attr.ulValueLen);
-		template->ulValueLen = extra_attr->attr.ulValueLen;
-		return (CKR_OK);
-	} else {
-		/*
-		 * The buffer provided by the application does
-		 * not have enough space to hold the value.
-		 */
-		template->ulValueLen = (CK_ULONG)-1;
-		return (CKR_BUFFER_TOO_SMALL);
-	}
-}
-
-/*
- * Modify the attribute triple in the extra attribute list of the object
- * if the specified attribute type is found. Otherwise, just add it to
- * list.
- */
-CK_RV
-set_extra_attr_to_object(kms_object_t *object_p, CK_ATTRIBUTE_TYPE type,
-	CK_ATTRIBUTE_PTR template)
-{
-	CK_ATTRIBUTE_INFO_PTR extra_attr;
-
-	extra_attr = object_p->extra_attrlistp;
-
-	while (extra_attr) {
-		if (type == extra_attr->attr.type) {
-			/* Found it. */
-			break;
-		} else {
-			/* Does not match, try next one. */
-			extra_attr = extra_attr->next;
-		}
-	}
-
-	if (extra_attr == NULL) {
-		/*
-		 * This attribute is a new one, go ahead adding it to
-		 * the extra attribute list.
-		 */
-		return (kms_add_extra_attr(template, object_p));
-	}
-
-	/* We found the attribute in the extra attribute list. */
-	if ((template->pValue != NULL) &&
-	    (template->ulValueLen > 0)) {
-		if (template->ulValueLen > extra_attr->attr.ulValueLen) {
-			/* The old buffer is too small to hold the new value. */
-			if (extra_attr->attr.pValue != NULL)
-				/* Free storage for the old attribute value. */
-				free(extra_attr->attr.pValue);
-
-			/* Allocate storage for the new attribute value. */
-			extra_attr->attr.pValue = malloc(template->ulValueLen);
-			if (extra_attr->attr.pValue == NULL) {
-				return (CKR_HOST_MEMORY);
-			}
-		}
-
-		/* Replace the attribute with new value. */
-		extra_attr->attr.ulValueLen = template->ulValueLen;
-		(void) memcpy(extra_attr->attr.pValue, template->pValue,
-		    template->ulValueLen);
-	} else {
-		extra_attr->attr.pValue = NULL;
-	}
-
-	return (CKR_OK);
-}
-
-/*
- * Copy the boolean data type attribute value from an object for the
- * specified attribute to the template.
- */
-CK_RV
-get_bool_attr_from_object(kms_object_t *object_p, CK_ULONG bool_flag,
-	CK_ATTRIBUTE_PTR template)
-{
-
-	if (template->pValue == NULL) {
-		template->ulValueLen = sizeof (CK_BBOOL);
-		return (CKR_OK);
-	}
-
-	if (template->ulValueLen >= sizeof (CK_BBOOL)) {
-		/*
-		 * The buffer provided by the application is large
-		 * enough to hold the value of the attribute.
-		 */
-		if (object_p->bool_attr_mask & bool_flag) {
-			*((CK_BBOOL *)template->pValue) = B_TRUE;
-		} else {
-			*((CK_BBOOL *)template->pValue) = B_FALSE;
-		}
-
-		template->ulValueLen = sizeof (CK_BBOOL);
-		return (CKR_OK);
-	} else {
-		/*
-		 * The buffer provided by the application does
-		 * not have enough space to hold the value.
-		 */
-		template->ulValueLen = (CK_ULONG)-1;
-		return (CKR_BUFFER_TOO_SMALL);
-	}
-}
-
-/*
- * Set the boolean data type attribute value in the object.
- */
-CK_RV
-set_bool_attr_to_object(kms_object_t *object_p, CK_ULONG bool_flag,
-	CK_ATTRIBUTE_PTR template)
-{
-
-	if (*(CK_BBOOL *)template->pValue)
-		object_p->bool_attr_mask |= bool_flag;
-	else
-		object_p->bool_attr_mask &= ~bool_flag;
-
-	return (CKR_OK);
-}
-
-
-/*
- * Copy the CK_ULONG data type attribute value from an object to the
- * template.
- */
-CK_RV
-get_ulong_attr_from_object(CK_ULONG value, CK_ATTRIBUTE_PTR template)
-{
-
-	if (template->pValue == NULL) {
-		template->ulValueLen = sizeof (CK_ULONG);
-		return (CKR_OK);
-	}
-
-	if (template->ulValueLen >= sizeof (CK_ULONG)) {
-		/*
-		 * The buffer provided by the application is large
-		 * enough to hold the value of the attribute.
-		 */
-		*(CK_ULONG_PTR)template->pValue = value;
-		template->ulValueLen = sizeof (CK_ULONG);
-		return (CKR_OK);
-	} else {
-		/*
-		 * The buffer provided by the application does
-		 * not have enough space to hold the value.
-		 */
-		template->ulValueLen = (CK_ULONG)-1;
-		return (CKR_BUFFER_TOO_SMALL);
-	}
-}
-
-CK_RV
-get_string_from_template(CK_ATTRIBUTE_PTR dest, CK_ATTRIBUTE_PTR src)
-{
-	if ((src->pValue != NULL) &&
-	    (src->ulValueLen > 0)) {
-		/* Allocate storage for the value of the attribute. */
-		dest->pValue = malloc(src->ulValueLen);
-		if (dest->pValue == NULL) {
-			return (CKR_HOST_MEMORY);
-		}
-
-		(void) memcpy(dest->pValue, src->pValue,
-		    src->ulValueLen);
-		dest->ulValueLen = src->ulValueLen;
-		dest->type = src->type;
-	} else {
-		dest->pValue = NULL;
-		dest->ulValueLen = 0;
-		dest->type = src->type;
-	}
-
-	return (CKR_OK);
-
-}
-
-void
-string_attr_cleanup(CK_ATTRIBUTE_PTR template)
-{
-
-	if (template->pValue) {
-		free(template->pValue);
-		template->pValue = NULL;
-		template->ulValueLen = 0;
-	}
-}
-
-/*
- * Parse the common attributes. Return to caller with appropriate return
- * value to indicate if the supplied template specifies a valid attribute
- * with a valid value.
- */
-static CK_RV
-kms_parse_common_attrs(CK_ATTRIBUTE_PTR template, uint64_t *attr_mask_p)
-{
-	CK_RV rv = CKR_OK;
-	kms_slot_t *pslot = get_slotinfo();
-
-	switch (template->type) {
-	case CKA_CLASS:
-		break;
-	case CKA_TOKEN:
-		if ((*(CK_BBOOL *)template->pValue) == TRUE)
-			*attr_mask_p |= TOKEN_BOOL_ON;
-		break;
-
-	case CKA_PRIVATE:
-		if ((*(CK_BBOOL *)template->pValue) == TRUE) {
-			/*
-			 * Cannot create a private object if the token
-			 * has a keystore and the user isn't logged in.
-			 */
-			if (pslot->sl_state != CKU_USER) {
-				rv = CKR_ATTRIBUTE_VALUE_INVALID;
-			} else {
-				*attr_mask_p |= PRIVATE_BOOL_ON;
-			}
-		}
-		break;
-
-	case CKA_MODIFIABLE:
-		if ((*(CK_BBOOL *)template->pValue) == FALSE) {
-			*attr_mask_p &= ~MODIFIABLE_BOOL_ON;
-		}
-		break;
-
-	case CKA_LABEL:
-		break;
-
-	default:
-		rv = CKR_TEMPLATE_INCONSISTENT;
-	}
-
-	return (rv);
-}
-
-/*
- * Build a Secret Key Object.
- *
- * - Parse the object's template, and when an error is detected such as
- *   invalid attribute type, invalid attribute value, etc., return
- *   with appropriate return value.
- * - Set up attribute mask field in the object for the supplied common
- *   attributes that have boolean type.
- * - Build the attribute_info struct to hold the value of each supplied
- *   attribute that has byte array type. Link attribute_info structs
- *   together to form the extra attribute list of the object.
- * - Allocate storage for the Secret Key object.
- * - Build the Secret Key object. Allocate storage to hold the big integer
- *   value for the attribute CKA_VALUE that is required for all the key
- *   types supported by secret key object.
- *
- */
-CK_RV
-kms_build_secret_key_object(CK_ATTRIBUTE_PTR template,
-    CK_ULONG ulAttrNum,	kms_object_t *new_object)
-{
-	int		i;
-	CK_KEY_TYPE	keytype = (CK_KEY_TYPE)~0UL;
-	uint64_t	attr_mask;
-	CK_RV 		rv = CKR_OK;
-	int		isLabel = 0;
-	/* Must not set flags */
-	int		isValueLen = 0;
-	CK_ATTRIBUTE	string_tmp;
-	secret_key_obj_t  *sck;
-
-	string_tmp.pValue = NULL;
-
-	/*
-	 * If the object was pulled from the KMS, the
-	 * attributes are encoded in the object record
-	 * before this function is called, we don't
-	 * want to overwrite them unless the attribute
-	 * template says differently.
-	 */
-	if (new_object->bool_attr_mask != 0)
-		attr_mask = new_object->bool_attr_mask;
-	else
-		attr_mask = SECRET_KEY_DEFAULT;
-
-	/* Allocate storage for Secret Key Object. */
-	sck = calloc(1, sizeof (secret_key_obj_t));
-	if (sck == NULL) {
-		rv = CKR_HOST_MEMORY;
-		goto fail_cleanup;
-	}
-
-	new_object->object_class_u.secret_key = sck;
-	new_object->class = CKO_SECRET_KEY;
-
-	for (i = 0; i < ulAttrNum; i++) {
-
-		/* Secret Key Object Attributes */
-		switch (template[i].type) {
-
-		/* common key attributes */
-		case CKA_KEY_TYPE:
-		keytype = *((CK_KEY_TYPE*)template[i].pValue);
-			break;
-
-		case CKA_ID:
-		case CKA_START_DATE:
-		case CKA_END_DATE:
-			/*
-			 * Allocate storage to hold the attribute
-			 * value with byte array type, and add it to
-			 * the extra attribute list of the object.
-			 */
-			rv = kms_add_extra_attr(&template[i],
-			    new_object);
-			if (rv != CKR_OK) {
-				goto fail_cleanup;
-			}
-			break;
-
-		/*
-		 * The following key related attribute types must
-		 * not be specified by C_CreateObject.
-		 */
-		case CKA_LOCAL:
-		case CKA_KEY_GEN_MECHANISM:
-		case CKA_ALWAYS_SENSITIVE:
-		case CKA_NEVER_EXTRACTABLE:
-			rv = CKR_TEMPLATE_INCONSISTENT;
-			goto fail_cleanup;
-
-		/* Key related boolean attributes */
-		case CKA_DERIVE:
-			if (*(CK_BBOOL *)template[i].pValue)
-				attr_mask |= DERIVE_BOOL_ON;
-			break;
-
-		case CKA_SENSITIVE:
-			if (*(CK_BBOOL *)template[i].pValue)
-				attr_mask |= SENSITIVE_BOOL_ON;
-			break;
-
-		case CKA_ENCRYPT:
-			if (*(CK_BBOOL *)template[i].pValue)
-				attr_mask |= ENCRYPT_BOOL_ON;
-			else
-				attr_mask &= ~ENCRYPT_BOOL_ON;
-			break;
-
-		case CKA_DECRYPT:
-			if (*(CK_BBOOL *)template[i].pValue)
-				attr_mask |= DECRYPT_BOOL_ON;
-			else
-				attr_mask &= ~DECRYPT_BOOL_ON;
-			break;
-
-		case CKA_SIGN:
-			if (*(CK_BBOOL *)template[i].pValue)
-				attr_mask |= SIGN_BOOL_ON;
-			else
-				attr_mask &= ~SIGN_BOOL_ON;
-			break;
-
-		case CKA_VERIFY:
-			if (*(CK_BBOOL *)template[i].pValue)
-				attr_mask |= VERIFY_BOOL_ON;
-			else
-				attr_mask &= ~VERIFY_BOOL_ON;
-			break;
-
-		case CKA_WRAP:
-			if (*(CK_BBOOL *)template[i].pValue)
-				attr_mask |= WRAP_BOOL_ON;
-			break;
-
-		case CKA_UNWRAP:
-			if (*(CK_BBOOL *)template[i].pValue)
-				attr_mask |= UNWRAP_BOOL_ON;
-			break;
-
-		case CKA_EXTRACTABLE:
-			if (*(CK_BBOOL *)template[i].pValue)
-				attr_mask |= EXTRACTABLE_BOOL_ON;
-			else
-				attr_mask &= ~EXTRACTABLE_BOOL_ON;
-			break;
-
-		case CKA_VALUE:
-			if ((template[i].ulValueLen == 0) ||
-			    (template[i].pValue == NULL)) {
-				rv = CKR_ATTRIBUTE_VALUE_INVALID;
-				goto fail_cleanup;
-			}
-			/*
-			 * Copyin attribute from template
-			 * to a local variable.
-			 */
-			sck->sk_value = malloc(template[i].ulValueLen);
-			if (sck->sk_value == NULL) {
-				rv = CKR_HOST_MEMORY;
-				goto fail_cleanup;
-			}
-			(void) memcpy(sck->sk_value, template[i].pValue,
-			    template[i].ulValueLen);
-			sck->sk_value_len = template[i].ulValueLen;
-			break;
-
-		case CKA_VALUE_LEN:
-			isValueLen = 1;
-			if (template[i].pValue != NULL)
-				sck->sk_value_len =
-				    *(CK_ULONG_PTR)template[i].pValue;
-			else
-				sck->sk_value_len = 0;
-			break;
-
-		case CKA_LABEL:
-			isLabel = 1;
-			rv = get_string_from_template(&string_tmp,
-			    &template[i]);
-			if (rv != CKR_OK)
-				goto fail_cleanup;
-			break;
-
-		default:
-			rv = kms_parse_common_attrs(&template[i], &attr_mask);
-			if (rv != CKR_OK)
-				goto fail_cleanup;
-			break;
-
-		}
-	} /* For */
-
-	if (keytype == (CK_KEY_TYPE)~0UL) {
-		rv = CKR_TEMPLATE_INCOMPLETE;
-		goto fail_cleanup;
-	}
-
-	new_object->key_type = keytype;
-
-	/* Supported key types of the Secret Key Object */
-	switch (keytype) {
-
-	case CKK_AES:
-		if (!isValueLen) {
-			rv = CKR_TEMPLATE_INCOMPLETE;
-			goto fail_cleanup;
-		}
-		if (sck->sk_value_len != AES_MIN_KEY_BYTES &&
-		    sck->sk_value_len != AES_192_KEY_BYTES &&
-		    sck->sk_value_len != AES_MAX_KEY_BYTES) {
-			rv = CKR_ATTRIBUTE_VALUE_INVALID;
-			goto fail_cleanup;
-		}
-		break;
-
-	case CKK_RC4:
-	case CKK_GENERIC_SECRET:
-	case CKK_BLOWFISH:
-	case CKK_DES:
-	case CKK_DES2:
-	case CKK_DES3:
-	default:
-		rv = CKR_TEMPLATE_INCONSISTENT;
-		goto fail_cleanup;
-	}
-
-	/* Set up object. */
-	new_object->bool_attr_mask = attr_mask;
-	if (isLabel) {
-		rv = kms_add_extra_attr(&string_tmp, new_object);
-		if (rv != CKR_OK)
-			goto fail_cleanup;
-		string_attr_cleanup(&string_tmp);
-	}
-
-	return (rv);
-
-fail_cleanup:
-	/*
-	 * cleanup the storage allocated to the local variables.
-	 */
-	string_attr_cleanup(&string_tmp);
-
-	/*
-	 * cleanup the storage allocated inside the object itself.
-	 */
-	kms_cleanup_object(new_object);
-
-	return (rv);
-}
-
-/*
- * Validate the attribute types in the object's template. Then,
- * call the appropriate build function according to the class of
- * the object specified in the template.
- *
- * Note: The following classes of objects are supported:
- * - CKO_SECRET_KEY
- */
-CK_RV
-kms_build_object(CK_ATTRIBUTE_PTR template, CK_ULONG ulAttrNum,
-    kms_object_t *new_object)
-{
-	CK_OBJECT_CLASS class = (CK_OBJECT_CLASS)~0UL;
-	CK_RV 		rv = CKR_OK;
-
-	if (template == NULL) {
-		return (CKR_ARGUMENTS_BAD);
-	}
-
-	/* Validate the attribute type in the template. */
-	rv = kms_validate_attr(template, ulAttrNum, &class);
-	if (rv != CKR_OK)
-		return (rv);
-
-	if (class == (CK_OBJECT_CLASS)~0UL)
-		return (CKR_TEMPLATE_INCOMPLETE);
-
-	/*
-	 * Call the appropriate function based on the supported class
-	 * of the object.
-	 */
-	switch (class) {
-
-	case CKO_SECRET_KEY:
-		rv = kms_build_secret_key_object(template, ulAttrNum,
-		    new_object);
-		break;
-
-	case CKO_DOMAIN_PARAMETERS:
-	case CKO_DATA:
-	case CKO_CERTIFICATE:
-	case CKO_HW_FEATURE:
-	case CKO_VENDOR_DEFINED:
-	case CKO_PUBLIC_KEY:
-	case CKO_PRIVATE_KEY:
-	default:
-		return (CKR_ATTRIBUTE_VALUE_INVALID);
-	}
-
-	return (rv);
-}
-
-
-/*
- * Get the value of a requested attribute that is common to all supported
- * classes (i.e. public key, private key, secret key classes).
- */
-CK_RV
-kms_get_common_attrs(kms_object_t *object_p, CK_ATTRIBUTE_PTR template)
-{
-
-	CK_RV rv = CKR_OK;
-
-	switch (template->type) {
-
-	case CKA_CLASS:
-		return (get_ulong_attr_from_object(object_p->class,
-		    template));
-
-	/* default boolean attributes */
-	case CKA_TOKEN:
-		template->ulValueLen = sizeof (CK_BBOOL);
-		if (template->pValue == NULL) {
-			return (CKR_OK);
-		}
-
-		*((CK_BBOOL *)template->pValue) = B_FALSE;
-		break;
-
-	case CKA_PRIVATE:
-
-		template->ulValueLen = sizeof (CK_BBOOL);
-		if (template->pValue == NULL) {
-			return (CKR_OK);
-		}
-		if (object_p->bool_attr_mask & PRIVATE_BOOL_ON) {
-			*((CK_BBOOL *)template->pValue) = B_TRUE;
-		} else {
-			*((CK_BBOOL *)template->pValue) = B_FALSE;
-		}
-		break;
-
-	case CKA_MODIFIABLE:
-		template->ulValueLen = sizeof (CK_BBOOL);
-		if (template->pValue == NULL) {
-			return (CKR_OK);
-		}
-		if ((object_p->bool_attr_mask) & MODIFIABLE_BOOL_ON)
-			*((CK_BBOOL *)template->pValue) = B_TRUE;
-		else
-			*((CK_BBOOL *)template->pValue) = B_FALSE;
-		break;
-
-	case CKA_LABEL:
-		return (get_extra_attr_from_object(object_p,
-		    template));
-
-	default:
-		/*
-		 * The specified attribute for the object is invalid.
-		 * (the object does not possess such an attribute.)
-		 */
-		template->ulValueLen = (CK_ULONG)-1;
-		return (CKR_ATTRIBUTE_TYPE_INVALID);
-	}
-
-	return (rv);
-}
-
-/*
- * Get the value of a requested attribute that is common to all key objects
- * (i.e. public key, private key and secret key).
- */
-CK_RV
-kms_get_common_key_attrs(kms_object_t *object_p,
-    CK_ATTRIBUTE_PTR template)
-{
-
-	switch (template->type) {
-
-	case CKA_KEY_TYPE:
-		return (get_ulong_attr_from_object(object_p->key_type,
-		    template));
-
-	case CKA_ID:
-	case CKA_START_DATE:
-	case CKA_END_DATE:
-		/*
-		 * The above extra attributes have byte array type.
-		 */
-		return (get_extra_attr_from_object(object_p,
-		    template));
-
-	/* Key related boolean attributes */
-	case CKA_LOCAL:
-		return (get_bool_attr_from_object(object_p,
-		    LOCAL_BOOL_ON, template));
-
-	case CKA_DERIVE:
-		return (get_bool_attr_from_object(object_p,
-		    DERIVE_BOOL_ON, template));
-
-	case CKA_KEY_GEN_MECHANISM:
-		return (get_ulong_attr_from_object(object_p->mechanism,
-		    template));
-
-	default:
-		return (CKR_ATTRIBUTE_TYPE_INVALID);
-	}
-}
-
-/*
- * Get the value of a requested attribute of a Secret Key Object.
- *
- * Rule: All the attributes in the secret key object can be revealed
- *       except those marked with footnote number "7" when the object
- *       has its CKA_SENSITIVE attribute set to TRUE or its
- *       CKA_EXTRACTABLE attribute set to FALSE.
- */
-CK_RV
-kms_get_secret_key_attribute(kms_object_t *object_p,
-    CK_ATTRIBUTE_PTR template)
-{
-
-	CK_RV		rv = CKR_OK;
-	CK_KEY_TYPE	keytype = object_p->key_type;
-
-	switch (template->type) {
-
-	/* Key related boolean attributes */
-	case CKA_SENSITIVE:
-		return (get_bool_attr_from_object(object_p,
-		    SENSITIVE_BOOL_ON, template));
-
-	case CKA_ENCRYPT:
-		return (get_bool_attr_from_object(object_p,
-		    ENCRYPT_BOOL_ON, template));
-
-	case CKA_DECRYPT:
-		return (get_bool_attr_from_object(object_p,
-		    DECRYPT_BOOL_ON, template));
-
-	case CKA_SIGN:
-		return (get_bool_attr_from_object(object_p,
-		    SIGN_BOOL_ON, template));
-
-	case CKA_VERIFY:
-		return (get_bool_attr_from_object(object_p,
-		    VERIFY_BOOL_ON, template));
-
-	case CKA_WRAP:
-		return (get_bool_attr_from_object(object_p,
-		    WRAP_BOOL_ON, template));
-
-	case CKA_UNWRAP:
-		return (get_bool_attr_from_object(object_p,
-		    UNWRAP_BOOL_ON, template));
-
-	case CKA_EXTRACTABLE:
-		return (get_bool_attr_from_object(object_p,
-		    EXTRACTABLE_BOOL_ON, template));
-
-	case CKA_ALWAYS_SENSITIVE:
-		return (get_bool_attr_from_object(object_p,
-		    ALWAYS_SENSITIVE_BOOL_ON, template));
-
-	case CKA_NEVER_EXTRACTABLE:
-		return (get_bool_attr_from_object(object_p,
-		    NEVER_EXTRACTABLE_BOOL_ON, template));
-
-	case CKA_VALUE:
-		/*
-		 * If the specified attribute for the secret key object
-		 * cannot be revealed because the object is sensitive
-		 * or unextractable, then the ulValueLen is set to -1.
-		 */
-		if ((object_p->bool_attr_mask & SENSITIVE_BOOL_ON) ||
-		    !(object_p->bool_attr_mask & EXTRACTABLE_BOOL_ON)) {
-			template->ulValueLen = (CK_ULONG)-1;
-			return (CKR_ATTRIBUTE_SENSITIVE);
-		}
-
-		switch (keytype) {
-		case CKK_AES:
-			/*
-			 * Copy secret key object attributes to template.
-			 */
-			if (template->pValue == NULL) {
-				template->ulValueLen =
-				    OBJ_SEC_VALUE_LEN(object_p);
-				return (CKR_OK);
-			}
-
-			if (OBJ_SEC_VALUE(object_p) == NULL) {
-				template->ulValueLen = 0;
-				return (CKR_OK);
-			}
-
-			if (template->ulValueLen >=
-			    OBJ_SEC_VALUE_LEN(object_p)) {
-				(void) memcpy(template->pValue,
-				    OBJ_SEC_VALUE(object_p),
-				    OBJ_SEC_VALUE_LEN(object_p));
-				template->ulValueLen =
-				    OBJ_SEC_VALUE_LEN(object_p);
-				return (CKR_OK);
-			} else {
-				template->ulValueLen = (CK_ULONG)-1;
-				return (CKR_BUFFER_TOO_SMALL);
-			}
-
-		case CKK_RC4:
-		case CKK_GENERIC_SECRET:
-		case CKK_RC5:
-		case CKK_DES:
-		case CKK_DES2:
-		case CKK_DES3:
-		case CKK_CDMF:
-		case CKK_BLOWFISH:
-		default:
-			template->ulValueLen = (CK_ULONG)-1;
-			rv = CKR_ATTRIBUTE_TYPE_INVALID;
-			break;
-		}
-		break;
-
-	case CKA_VALUE_LEN:
-		return (get_ulong_attr_from_object(OBJ_SEC_VALUE_LEN(object_p),
-		    template));
-
-	default:
-		/*
-		 * First, get the value of the request attribute defined
-		 * in the list of common key attributes. If the request
-		 * attribute is not found in that list, then get the
-		 * attribute from the list of common attributes.
-		 */
-		rv = kms_get_common_key_attrs(object_p, template);
-		if (rv == CKR_ATTRIBUTE_TYPE_INVALID) {
-			rv = kms_get_common_attrs(object_p, template);
-		}
-		break;
-	}
-
-	return (rv);
-
-}
-
-/*
- * Call the appropriate get attribute function according to the class
- * of object.
- *
- * The caller of this function holds the lock on the object.
- */
-CK_RV
-kms_get_attribute(kms_object_t *object_p, CK_ATTRIBUTE_PTR template)
-{
-
-	CK_RV		rv = CKR_OK;
-	CK_OBJECT_CLASS class = object_p->class;
-
-	switch (class) {
-	case CKO_SECRET_KEY:
-		rv = kms_get_secret_key_attribute(object_p, template);
-		break;
-
-	case CKO_PRIVATE_KEY:
-	case CKO_PUBLIC_KEY:
-	default:
-		/*
-		 * If the specified attribute for the object is invalid
-		 * (the object does not possess such as attribute), then
-		 * the ulValueLen is modified to hold the value -1.
-		 */
-		template->ulValueLen = (CK_ULONG)-1;
-		return (CKR_ATTRIBUTE_TYPE_INVALID);
-	}
-
-	return (rv);
-
-}
-
-/*
- * Set the value of an attribute that is common to all key objects
- * (i.e. public key, private key and secret key).
- */
-static CK_RV
-kms_set_common_key_attribute(kms_object_t *object_p,
-    CK_ATTRIBUTE_PTR template, boolean_t copy)
-{
-
-	kms_slot_t *pslot = get_slotinfo();
-	CK_RV rv = CKR_OK;
-
-	switch (template->type) {
-
-	case CKA_LABEL:
-		/*
-		 * Only the LABEL can be modified in the common storage
-		 * object attributes after the object is created.
-		 */
-		return (set_extra_attr_to_object(object_p,
-		    CKA_LABEL, template));
-
-	case CKA_ID:
-		return (set_extra_attr_to_object(object_p,
-		    CKA_ID, template));
-
-	case CKA_START_DATE:
-		return (set_extra_attr_to_object(object_p,
-		    CKA_START_DATE, template));
-
-	case CKA_END_DATE:
-		return (set_extra_attr_to_object(object_p,
-		    CKA_END_DATE, template));
-
-	case CKA_DERIVE:
-		return (set_bool_attr_to_object(object_p,
-		    DERIVE_BOOL_ON, template));
-
-	case CKA_CLASS:
-	case CKA_KEY_TYPE:
-	case CKA_LOCAL:
-		return (CKR_ATTRIBUTE_READ_ONLY);
-
-	case CKA_PRIVATE:
-		if (!copy) {
-			/* called from C_SetAttributeValue() */
-			return (CKR_ATTRIBUTE_READ_ONLY);
-		}
-
-		/* called from C_CopyObject() */
-		if ((*(CK_BBOOL *)template->pValue) != B_TRUE) {
-			return (CKR_OK);
-		}
-
-		(void) pthread_mutex_lock(&pslot->sl_mutex);
-		/*
-		 * Cannot create a private object if the token
-		 * has a keystore and the user isn't logged in.
-		 */
-		if (pslot->sl_state != CKU_USER) {
-			rv = CKR_USER_NOT_LOGGED_IN;
-		} else {
-			rv = set_bool_attr_to_object(object_p,
-			    PRIVATE_BOOL_ON, template);
-		}
-		(void) pthread_mutex_unlock(&pslot->sl_mutex);
-		return (rv);
-
-	case CKA_MODIFIABLE:
-		if (copy) {
-			rv = set_bool_attr_to_object(object_p,
-			    MODIFIABLE_BOOL_ON, template);
-		} else {
-			rv = CKR_ATTRIBUTE_READ_ONLY;
-		}
-		return (rv);
-
-	default:
-		return (CKR_TEMPLATE_INCONSISTENT);
-	}
-
-}
-
-/*
- * Set the value of an attribute of a Secret Key Object.
- *
- * Rule: The attributes marked with footnote number "8" in the PKCS11
- *       spec may be modified (p.88 in PKCS11 spec.).
- */
-static CK_RV
-kms_set_secret_key_attribute(kms_object_t *object_p,
-    CK_ATTRIBUTE_PTR template, boolean_t copy)
-{
-	CK_KEY_TYPE	keytype = object_p->key_type;
-
-	switch (template->type) {
-
-	case CKA_SENSITIVE:
-		/*
-		 * Cannot set SENSITIVE to FALSE if it is already ON.
-		 */
-		if (((*(CK_BBOOL *)template->pValue) == B_FALSE) &&
-		    (object_p->bool_attr_mask & SENSITIVE_BOOL_ON)) {
-			return (CKR_ATTRIBUTE_READ_ONLY);
-		}
-
-		if (*(CK_BBOOL *)template->pValue)
-			object_p->bool_attr_mask |= SENSITIVE_BOOL_ON;
-		return (CKR_OK);
-
-	case CKA_ENCRYPT:
-		return (set_bool_attr_to_object(object_p,
-		    ENCRYPT_BOOL_ON, template));
-
-	case CKA_DECRYPT:
-		return (set_bool_attr_to_object(object_p,
-		    DECRYPT_BOOL_ON, template));
-
-	case CKA_SIGN:
-		return (set_bool_attr_to_object(object_p,
-		    SIGN_BOOL_ON, template));
-
-	case CKA_VERIFY:
-		return (set_bool_attr_to_object(object_p,
-		    VERIFY_BOOL_ON, template));
-
-	case CKA_WRAP:
-		return (set_bool_attr_to_object(object_p,
-		    WRAP_BOOL_ON, template));
-
-	case CKA_UNWRAP:
-		return (set_bool_attr_to_object(object_p,
-		    UNWRAP_BOOL_ON, template));
-
-	case CKA_EXTRACTABLE:
-		/*
-		 * Cannot set EXTRACTABLE to TRUE if it is already OFF.
-		 */
-		if ((*(CK_BBOOL *)template->pValue) &&
-		    !(object_p->bool_attr_mask & EXTRACTABLE_BOOL_ON)) {
-			return (CKR_ATTRIBUTE_READ_ONLY);
-		}
-
-		if ((*(CK_BBOOL *)template->pValue) == B_FALSE)
-			object_p->bool_attr_mask &= ~EXTRACTABLE_BOOL_ON;
-		return (CKR_OK);
-
-	case CKA_VALUE:
-		return (CKR_ATTRIBUTE_READ_ONLY);
-
-	case CKA_VALUE_LEN:
-		if ((keytype == CKK_RC4) ||
-		    (keytype == CKK_GENERIC_SECRET) ||
-		    (keytype == CKK_AES) ||
-		    (keytype == CKK_BLOWFISH))
-			return (CKR_ATTRIBUTE_READ_ONLY);
-		break;
-
-	default:
-		/*
-		 * Set the value of a common key attribute.
-		 */
-		return (kms_set_common_key_attribute(object_p,
-		    template, copy));
-	}
-
-	/*
-	 * If we got this far, then the combination of key type
-	 * and requested attribute is invalid.
-	 */
-	return (CKR_ATTRIBUTE_TYPE_INVALID);
-}
-
-/*
- * Call the appropriate set attribute function according to the class
- * of object.
- *
- * The caller of this function does not hold the lock on the original
- * object, since this function is setting the attribute on the new object
- * that is being modified.
- *
- */
-CK_RV
-kms_set_attribute(kms_object_t *object_p, CK_ATTRIBUTE_PTR template,
-    boolean_t copy)
-{
-
-	CK_RV		rv = CKR_OK;
-	CK_OBJECT_CLASS	class = object_p->class;
-
-	switch (class) {
-
-	case CKO_SECRET_KEY:
-		rv = kms_set_secret_key_attribute(object_p, template,
-		    copy);
-		break;
-
-	case CKO_PUBLIC_KEY:
-	case CKO_PRIVATE_KEY:
-	default:
-		/*
-		 * If the template specifies a value of an attribute
-		 * which is incompatible with other existing attributes
-		 * of the object, then fails with return code
-		 * CKR_TEMPLATE_INCONSISTENT.
-		 */
-		rv = CKR_TEMPLATE_INCONSISTENT;
-		break;
-	}
-
-	return (rv);
-}
-
-CK_RV
-kms_copy_secret_key_attr(secret_key_obj_t *old_secret_key_obj_p,
-    secret_key_obj_t **new_secret_key_obj_p)
-{
-	secret_key_obj_t *sk;
-
-	sk = malloc(sizeof (secret_key_obj_t));
-	if (sk == NULL) {
-		return (CKR_HOST_MEMORY);
-	}
-	(void) memcpy(sk, old_secret_key_obj_p, sizeof (secret_key_obj_t));
-
-	/* copy the secret key value */
-	sk->sk_value = malloc((sizeof (CK_BYTE) * sk->sk_value_len));
-	if (sk->sk_value == NULL) {
-		free(sk);
-		return (CKR_HOST_MEMORY);
-	}
-	(void) memcpy(sk->sk_value, old_secret_key_obj_p->sk_value,
-	    (sizeof (CK_BYTE) * sk->sk_value_len));
-
-	*new_secret_key_obj_p = sk;
-
-	return (CKR_OK);
-}
-
-
-
-/*
- * If CKA_CLASS not given, guess CKA_CLASS using
- * attributes on template.
- *
- * Some attributes are specific to an object class.  If one or more
- * of these attributes are in the template, make a list of classes
- * that can have these attributes.  This would speed up the search later,
- * because we can immediately skip an object if the class of that
- * object can not possibly contain one of the attributes.
- *
- */
-void
-kms_process_find_attr(CK_OBJECT_CLASS *pclasses,
-    CK_ULONG *num_result_pclasses, CK_ATTRIBUTE_PTR pTemplate,
-    CK_ULONG ulCount)
-{
-	ulong_t i;
-	int j;
-	boolean_t secret_found = B_FALSE;
-	int num_secret_key_attrs;
-	int num_pclasses = 0;
-
-	for (i = 0; i < ulCount; i++) {
-		if (pTemplate[i].type == CKA_CLASS) {
-			/*
-			 * don't need to guess the class, it is specified.
-			 * Just record the class, and return.
-			 */
-			pclasses[0] =
-			    (*((CK_OBJECT_CLASS *)pTemplate[i].pValue));
-			*num_result_pclasses = 1;
-			return;
-		}
-	}
-
-	num_secret_key_attrs =
-	    sizeof (SECRET_KEY_ATTRS) / sizeof (CK_ATTRIBUTE_TYPE);
-
-	/*
-	 * Get the list of objects class that might contain
-	 * some attributes.
-	 */
-	for (i = 0; i < ulCount; i++) {
-		if (!secret_found) {
-			for (j = 0; j < num_secret_key_attrs; j++) {
-				if (pTemplate[i].type == SECRET_KEY_ATTRS[j]) {
-					secret_found = B_TRUE;
-					pclasses[num_pclasses++] =
-					    CKO_SECRET_KEY;
-					break;
-				}
-			}
-		}
-	}
-	*num_result_pclasses = num_pclasses;
-}
-
-
-boolean_t
-kms_find_match_attrs(kms_object_t *obj, CK_OBJECT_CLASS *pclasses,
-    CK_ULONG num_pclasses, CK_ATTRIBUTE *template, CK_ULONG num_attr)
-{
-	ulong_t i;
-	CK_ATTRIBUTE *tmpl_attr, *obj_attr;
-	uint64_t attr_mask;
-	boolean_t compare_attr, compare_boolean;
-
-	/*
-	 * Check if the class of this object match with any
-	 * of object classes that can possibly contain the
-	 * requested attributes.
-	 */
-	if (num_pclasses > 0) {
-		for (i = 0; i < num_pclasses; i++) {
-			if (obj->class == pclasses[i]) {
-				break;
-			}
-		}
-		if (i == num_pclasses) {
-			/*
-			 * this object can't possibly contain one or
-			 * more attributes, don't need to check this object
-			 */
-			return (B_FALSE);
-		}
-	}
-
-	/* need to examine everything */
-	for (i = 0; i < num_attr; i++) {
-		tmpl_attr = &(template[i]);
-		compare_attr = B_FALSE;
-		compare_boolean = B_FALSE;
-		switch (tmpl_attr->type) {
-		/* First, check the most common attributes */
-		case CKA_CLASS:
-			if (*((CK_OBJECT_CLASS *)tmpl_attr->pValue) !=
-			    obj->class) {
-				return (B_FALSE);
-			}
-			break;
-		case CKA_KEY_TYPE:
-			if (*((CK_KEY_TYPE *)tmpl_attr->pValue) !=
-			    obj->key_type) {
-				return (B_FALSE);
-			}
-			break;
-		case CKA_ENCRYPT:
-			attr_mask = (obj->bool_attr_mask) & ENCRYPT_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_DECRYPT:
-			attr_mask = (obj->bool_attr_mask) & DECRYPT_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_WRAP:
-			attr_mask = (obj->bool_attr_mask) & WRAP_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_UNWRAP:
-			attr_mask = (obj->bool_attr_mask) & UNWRAP_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_SIGN:
-			attr_mask = (obj->bool_attr_mask) & SIGN_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_SIGN_RECOVER:
-			attr_mask = (obj->bool_attr_mask) &
-			    SIGN_RECOVER_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_VERIFY:
-			attr_mask = (obj->bool_attr_mask) & VERIFY_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_VERIFY_RECOVER:
-			attr_mask = (obj->bool_attr_mask) &
-			    VERIFY_RECOVER_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_DERIVE:
-			attr_mask = (obj->bool_attr_mask) & DERIVE_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_LOCAL:
-			attr_mask = (obj->bool_attr_mask) & LOCAL_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_SENSITIVE:
-			attr_mask = (obj->bool_attr_mask) & SENSITIVE_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_SECONDARY_AUTH:
-			attr_mask = (obj->bool_attr_mask) &
-			    SECONDARY_AUTH_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_TRUSTED:
-			attr_mask = (obj->bool_attr_mask) & TRUSTED_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_EXTRACTABLE:
-			attr_mask = (obj->bool_attr_mask) &
-			    EXTRACTABLE_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_ALWAYS_SENSITIVE:
-			attr_mask = (obj->bool_attr_mask) &
-			    ALWAYS_SENSITIVE_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_NEVER_EXTRACTABLE:
-			attr_mask = (obj->bool_attr_mask) &
-			    NEVER_EXTRACTABLE_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_TOKEN:
-			attr_mask = (obj->bool_attr_mask) & TOKEN_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_PRIVATE:
-			attr_mask = (obj->bool_attr_mask) & PRIVATE_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_MODIFIABLE:
-			attr_mask = (obj->bool_attr_mask) & MODIFIABLE_BOOL_ON;
-			compare_boolean = B_TRUE;
-			break;
-		case CKA_SUBJECT:
-		case CKA_ID:
-		case CKA_START_DATE:
-		case CKA_END_DATE:
-		case CKA_KEY_GEN_MECHANISM:
-		case CKA_LABEL:
-			/* find these attributes from extra_attrlistp */
-			obj_attr = get_extra_attr(tmpl_attr->type, obj);
-			compare_attr = B_TRUE;
-			break;
-		case CKA_VALUE_LEN:
-			/* only secret key has this attribute */
-			if (obj->class == CKO_SECRET_KEY) {
-				if (*((CK_ULONG *)tmpl_attr->pValue) !=
-				    OBJ_SEC_VALUE_LEN(obj)) {
-					return (B_FALSE);
-				}
-			} else {
-				return (B_FALSE);
-			}
-			break;
-		case CKA_VALUE:
-			switch (obj->class) {
-			case CKO_SECRET_KEY:
-				break;
-			default:
-				return (B_FALSE);
-			}
-			break;
-		case CKA_VALUE_BITS:
-		case CKA_PRIME_BITS:
-		case CKA_SUBPRIME_BITS:
-		default:
-			/*
-			 * any other attributes are currently not supported.
-			 * so, it's not possible for them to be in the
-			 * object
-			 */
-			return (B_FALSE);
-		}
-		if (compare_boolean) {
-			CK_BBOOL bval;
-
-			if (attr_mask) {
-				bval = TRUE;
-			} else {
-				bval = FALSE;
-			}
-			if (bval != *((CK_BBOOL *)tmpl_attr->pValue)) {
-				return (B_FALSE);
-			}
-		} else if (compare_attr) {
-			if (obj_attr == NULL) {
-				/*
-				 * The attribute type is valid, and its value
-				 * has not been initialized in the object. In
-				 * this case, it only matches the template's
-				 * attribute if the template's value length
-				 * is 0.
-				 */
-				if (tmpl_attr->ulValueLen != 0)
-					return (B_FALSE);
-			} else {
-				if (tmpl_attr->ulValueLen !=
-				    obj_attr->ulValueLen) {
-					return (B_FALSE);
-				}
-				if (memcmp(tmpl_attr->pValue, obj_attr->pValue,
-				    tmpl_attr->ulValueLen) != 0) {
-					return (B_FALSE);
-				}
-			}
-		}
-	}
-	return (B_TRUE);
-}
-
-CK_ATTRIBUTE_PTR
-get_extra_attr(CK_ATTRIBUTE_TYPE type, kms_object_t *obj)
-{
-	CK_ATTRIBUTE_INFO_PTR tmp;
-
-	tmp = obj->extra_attrlistp;
-	while (tmp != NULL) {
-		if (tmp->attr.type == type) {
-			return (&(tmp->attr));
-		}
-		tmp = tmp->next;
-	}
-	/* if get there, the specified attribute is not found */
-	return (NULL);
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsCrypt.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#ifndef _KMSCRYPT_H
-#define	_KMSCRYPT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <sys/types.h>
-#include <security/pkcs11t.h>
-#ifdef USESOLARIS_AES
-#include <modes/modes.h>
-#else
-#include <aes_cbc_crypt.h>
-#define	CBC_MODE AES_CBC_MODE
-#endif
-#include <aes_impl.h>
-#include "kmsObject.h"
-#include "kmsSession.h"
-
-typedef struct kms_aes_ctx {
-	void *key_sched;		/* pointer to key schedule */
-	size_t keysched_len;		/* Length of the key schedule */
-	uint8_t ivec[AES_BLOCK_LEN];	/* initialization vector */
-	uint8_t data[AES_BLOCK_LEN];	/* for use by update */
-	size_t remain_len;			/* for use by update */
-	void *aes_cbc;			/* to be used by CBC mode */
-} kms_aes_ctx_t;
-
-/*
- * Function Prototypes.
- */
-void *aes_cbc_ctx_init(void *, size_t, uint8_t *);
-
-CK_RV kms_aes_crypt_init_common(kms_session_t *, CK_MECHANISM_PTR,
-	kms_object_t *, boolean_t);
-
-CK_RV kms_aes_encrypt_common(kms_session_t *, CK_BYTE_PTR, CK_ULONG,
-	CK_BYTE_PTR, CK_ULONG_PTR, boolean_t);
-
-CK_RV kms_aes_decrypt_common(kms_session_t *, CK_BYTE_PTR, CK_ULONG,
-	CK_BYTE_PTR, CK_ULONG_PTR, boolean_t);
-
-CK_RV kms_aes_encrypt_final(kms_session_t *, CK_BYTE_PTR, CK_ULONG_PTR);
-CK_RV kms_aes_decrypt_final(kms_session_t *, CK_BYTE_PTR, CK_ULONG_PTR);
-
-void kms_crypt_cleanup(kms_session_t *, boolean_t, boolean_t);
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif /* _KMSCRYPT_H */
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsDecrypt.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,405 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include <string.h>
-#include <strings.h>
-#include <security/cryptoki.h>
-#include "kmsGlobal.h"
-#include "kmsCrypt.h"
-
-
-/*
- * kms_decrypt_init()
- *
- * Arguments:
- *	session_p:	pointer to kms_session_t struct
- *	pMechanism:	pointer to CK_MECHANISM struct provided by application
- *	key_p:		pointer to key kms_object_t struct
- *
- * Description:
- *	called by C_DecryptInit(). This function calls the corresponding
- *	decrypt init routine based on the mechanism.
- *
- * Returns:
- *	CKR_OK: success
- *	CKR_HOST_MEMORY: run out of system memory
- *	CKR_MECHANISM_PARAM_INVALID: invalid parameters in mechanism
- *	CKR_MECHANISM_INVALID: invalid mechanism type
- *	CKR_KEY_TYPE_INCONSISTENT: incorrect type of key to use
- *				   with the specified mechanism
- */
-CK_RV
-kms_decrypt_init(kms_session_t *session_p, CK_MECHANISM_PTR pMechanism,
-    kms_object_t *key_p)
-{
-
-	CK_RV rv;
-
-	switch (pMechanism->mechanism) {
-	case CKM_AES_CBC:
-	case CKM_AES_CBC_PAD:
-	{
-		kms_aes_ctx_t *kms_aes_ctx;
-
-		if (key_p->key_type != CKK_AES) {
-			return (CKR_KEY_TYPE_INCONSISTENT);
-		}
-
-		if ((pMechanism->pParameter == NULL) ||
-		    (pMechanism->ulParameterLen != AES_BLOCK_LEN)) {
-			return (CKR_MECHANISM_PARAM_INVALID);
-		}
-
-		rv = kms_aes_crypt_init_common(session_p, pMechanism,
-		    key_p, B_FALSE);
-
-		if (rv != CKR_OK)
-			return (rv);
-
-		(void) pthread_mutex_lock(&session_p->session_mutex);
-
-		kms_aes_ctx = (kms_aes_ctx_t *)session_p->decrypt.context;
-
-		/* Save Initialization Vector (IV) in the context. */
-		(void) memcpy(kms_aes_ctx->ivec, pMechanism->pParameter,
-		    AES_BLOCK_LEN);
-
-		/* Allocate a context for AES cipher-block chaining. */
-		kms_aes_ctx->aes_cbc = (void *)aes_cbc_ctx_init(
-		    kms_aes_ctx->key_sched, kms_aes_ctx->keysched_len,
-		    kms_aes_ctx->ivec);
-
-		if (kms_aes_ctx->aes_cbc == NULL) {
-			bzero(kms_aes_ctx->key_sched,
-			    kms_aes_ctx->keysched_len);
-			free(kms_aes_ctx->key_sched);
-			free(session_p->decrypt.context);
-			session_p->decrypt.context = NULL;
-			(void) pthread_mutex_unlock(&session_p->session_mutex);
-			return (CKR_HOST_MEMORY);
-		}
-
-		(void) pthread_mutex_unlock(&session_p->session_mutex);
-
-		return (rv);
-	}
-	default:
-		return (CKR_MECHANISM_INVALID);
-	}
-}
-
-CK_RV
-C_DecryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
-    CK_OBJECT_HANDLE hKey)
-{
-	CK_RV		rv;
-	kms_session_t	*session_p;
-	kms_object_t	*key_p;
-	boolean_t	lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/* Obtain the session pointer. */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	if (pMechanism == NULL) {
-		rv = CKR_ARGUMENTS_BAD;
-		goto clean_exit;
-	}
-
-	/* Obtain the object pointer. */
-	HANDLE2OBJECT(hKey, key_p, rv);
-	if (rv != CKR_OK)
-		goto clean_exit;
-
-	/* Check to see if key object allows for decryption. */
-	if (!(key_p->bool_attr_mask & DECRYPT_BOOL_ON)) {
-		rv = CKR_KEY_FUNCTION_NOT_PERMITTED;
-		goto clean_exit1;
-	}
-
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	lock_held = B_TRUE;
-
-	/* Check to see if decrypt operation is already active. */
-	if (session_p->decrypt.flags & CRYPTO_OPERATION_ACTIVE) {
-		/* free the memory to avoid memory leak */
-		kms_crypt_cleanup(session_p, B_FALSE, lock_held);
-	}
-
-	/*
-	 * This active flag will remain ON until application calls either
-	 * C_Decrypt or C_DecryptFinal to actually obtain the final piece
-	 * of plaintext.
-	 */
-	session_p->decrypt.flags = CRYPTO_OPERATION_ACTIVE;
-
-	(void) pthread_mutex_unlock(&session_p->session_mutex);
-	lock_held = B_FALSE;
-
-	rv = kms_decrypt_init(session_p, pMechanism, key_p);
-
-	if (rv != CKR_OK) {
-		(void) pthread_mutex_lock(&session_p->session_mutex);
-		session_p->decrypt.flags &= ~CRYPTO_OPERATION_ACTIVE;
-		lock_held = B_TRUE;
-	}
-
-clean_exit1:
-	OBJ_REFRELE(key_p);
-clean_exit:
-	REFRELE(session_p, lock_held);
-	return (rv);
-}
-
-CK_RV
-C_Decrypt(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedData,
-    CK_ULONG ulEncryptedData, CK_BYTE_PTR pData, CK_ULONG_PTR pulDataLen)
-{
-	CK_RV		rv;
-	kms_session_t	*session_p;
-	boolean_t	lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/* Obatin the session pointer. */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/*
-	 * Only check if input buffer is null.  How to handle zero input
-	 * length depents on the mechanism in use.  For secret key mechanisms,
-	 * unpadded ones yield zero length output, but padded ones always
-	 * result in smaller than original, possibly zero, length output.
-	 */
-	if (pEncryptedData == NULL) {
-		rv = CKR_ARGUMENTS_BAD;
-		goto clean_exit;
-	}
-
-	/*
-	 * No need to check pData because application might
-	 * just want to know the length of decrypted data.
-	 */
-	if (pulDataLen == NULL) {
-		rv = CKR_ARGUMENTS_BAD;
-		goto clean_exit;
-	}
-
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	lock_held = B_TRUE;
-
-	/* Application must call C_DecryptInit before calling C_Decrypt. */
-	if (!(session_p->decrypt.flags & CRYPTO_OPERATION_ACTIVE)) {
-		REFRELE(session_p, lock_held);
-		return (CKR_OPERATION_NOT_INITIALIZED);
-	}
-
-	/*
-	 * C_Decrypt must be called without intervening C_DecryptUpdate
-	 * calls.
-	 */
-	if (session_p->decrypt.flags & CRYPTO_OPERATION_UPDATE) {
-		/*
-		 * C_Decrypt can not be used to terminate a multi-part
-		 * operation, so we'll leave the active decrypt operation
-		 * flag on and let the application continue with the
-		 * decrypt update operation.
-		 */
-		REFRELE(session_p, lock_held);
-		return (CKR_FUNCTION_FAILED);
-	}
-
-	(void) pthread_mutex_unlock(&session_p->session_mutex);
-	lock_held = B_FALSE;
-
-	rv = kms_aes_decrypt_common(session_p, pEncryptedData,
-	    ulEncryptedData, pData, pulDataLen, FALSE);
-
-	if ((rv == CKR_BUFFER_TOO_SMALL) ||
-	    (pData == NULL && rv == CKR_OK)) {
-		/*
-		 * We will not terminate the active decrypt operation flag,
-		 * when the application-supplied buffer is too small, or
-		 * the application asks for the length of buffer to hold
-		 * the plaintext.
-		 */
-		REFRELE(session_p, lock_held);
-		return (rv);
-	}
-
-clean_exit:
-	/* Clear context, free key, and release session counter */
-	kms_crypt_cleanup(session_p, B_FALSE, B_FALSE);
-
-	return (rv);
-}
-
-CK_RV
-C_DecryptUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedPart,
-    CK_ULONG ulEncryptedPartLen, CK_BYTE_PTR pPart,
-    CK_ULONG_PTR pulPartLen)
-{
-
-	CK_RV		rv;
-	kms_session_t	*session_p;
-	boolean_t	lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/* Obtain the session pointer. */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/*
-	 * Only check if input buffer is null.  How to handle zero input
-	 * length depents on the mechanism in use.  For secret key mechanisms,
-	 * unpadded ones yeild zero length output, but padded ones always
-	 * result in smaller than original, possibly zero, length output.
-	 */
-	if (pEncryptedPart == NULL) {
-		rv = CKR_ARGUMENTS_BAD;
-		goto clean_exit;
-	}
-
-	/*
-	 * Only check if pulPartLen is NULL.
-	 * No need to check if pPart is NULL because application
-	 * might just ask for the length of buffer to hold the
-	 * recovered data.
-	 */
-	if (pulPartLen == NULL) {
-		rv = CKR_ARGUMENTS_BAD;
-		goto clean_exit;
-	}
-
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	lock_held = B_TRUE;
-
-	/*
-	 * Application must call C_DecryptInit before calling
-	 * C_DecryptUpdate.
-	 */
-	if (!(session_p->decrypt.flags & CRYPTO_OPERATION_ACTIVE)) {
-		REFRELE(session_p, lock_held);
-		return (CKR_OPERATION_NOT_INITIALIZED);
-	}
-
-	session_p->decrypt.flags |= CRYPTO_OPERATION_UPDATE;
-
-	(void) pthread_mutex_unlock(&session_p->session_mutex);
-	lock_held = B_FALSE;
-
-	rv = kms_aes_decrypt_common(session_p, pEncryptedPart,
-	    ulEncryptedPartLen, pPart, pulPartLen, B_TRUE);
-
-	/*
-	 * If CKR_OK or CKR_BUFFER_TOO_SMALL, don't terminate the
-	 * current decryption operation.
-	 */
-	if ((rv == CKR_OK) || (rv == CKR_BUFFER_TOO_SMALL)) {
-		REFRELE(session_p, lock_held);
-		return (rv);
-	}
-
-clean_exit:
-	/*
-	 * After an error occurred, terminate the current decrypt
-	 * operation by resetting the active and update flags.
-	 */
-	kms_crypt_cleanup(session_p, B_FALSE, lock_held);
-
-	return (rv);
-}
-
-CK_RV
-C_DecryptFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pLastPart,
-    CK_ULONG_PTR pulLastPartLen)
-{
-
-	CK_RV		rv;
-	kms_session_t	*session_p;
-	boolean_t	lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/* Obtain the session pointer. */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	if (pulLastPartLen == NULL) {
-		rv = CKR_ARGUMENTS_BAD;
-		goto clean_exit;
-	}
-
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	lock_held = B_TRUE;
-
-	/*
-	 * Application must call C_DecryptInit before calling
-	 * C_DecryptFinal.
-	 */
-	if (!(session_p->decrypt.flags & CRYPTO_OPERATION_ACTIVE)) {
-		REFRELE(session_p, lock_held);
-		return (CKR_OPERATION_NOT_INITIALIZED);
-	}
-
-	(void) pthread_mutex_unlock(&session_p->session_mutex);
-	lock_held = B_FALSE;
-
-	rv = kms_aes_decrypt_final(session_p, pLastPart, pulLastPartLen);
-
-	if ((rv == CKR_BUFFER_TOO_SMALL) ||
-	    (pLastPart == NULL && rv == CKR_OK)) {
-		/*
-		 * We will not terminate the active decrypt operation flag,
-		 * when the application-supplied buffer is too small, or
-		 * the application asks for the length of buffer to hold
-		 * the plaintext.
-		 */
-		REFRELE(session_p, lock_held);
-		return (rv);
-	}
-
-	/* Terminates the active encrypt operation. */
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	session_p->decrypt.flags = 0;
-	lock_held = B_TRUE;
-	REFRELE(session_p, lock_held);
-	return (rv);
-
-clean_exit:
-	/* Terminates the active decrypt operation */
-	kms_crypt_cleanup(session_p, B_FALSE, lock_held);
-
-	return (rv);
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsDigest.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include <security/cryptoki.h>
-#include "kmsGlobal.h"
-
-/*ARGSUSED*/
-CK_RV
-C_DigestInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_Digest(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen,
-    CK_BYTE_PTR pDigest, CK_ULONG_PTR pulDigestLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_DigestUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
-    CK_ULONG ulPartLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_DigestKey(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hKey)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_DigestFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pDigest,
-    CK_ULONG_PTR pulDigestLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsDualCrypt.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,74 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-
-#include <security/cryptoki.h>
-#include "kmsGlobal.h"
-
-/*ARGSUSED*/
-CK_RV
-C_DigestEncryptUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
-    CK_ULONG ulPartLen, CK_BYTE_PTR pEncryptedPart,
-    CK_ULONG_PTR pulEncryptedPartLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_DecryptDigestUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedPart,
-    CK_ULONG ulEncryptedPartLen, CK_BYTE_PTR pPart, CK_ULONG_PTR pulPartLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_SignEncryptUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
-    CK_ULONG ulPartLen, CK_BYTE_PTR pEncryptedPart,
-    CK_ULONG_PTR pulEncryptedPartLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_DecryptVerifyUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pEncryptedPart,
-    CK_ULONG ulEncryptedPartLen, CK_BYTE_PTR pPart, CK_ULONG_PTR pulPartLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsEncrypt.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,424 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include <string.h>
-#include <strings.h>
-#include <security/cryptoki.h>
-#include "kmsGlobal.h"
-#include "kmsCrypt.h"
-
-static CK_RV
-kms_encrypt_init(kms_session_t *session_p, CK_MECHANISM_PTR pMechanism,
-    kms_object_t *key_p)
-{
-	CK_RV rv = CKR_OK;
-	kms_aes_ctx_t *kms_aes_ctx;
-
-	if (pMechanism->mechanism != CKM_AES_CBC &&
-	    pMechanism->mechanism != CKM_AES_CBC_PAD)
-		return (CKR_MECHANISM_INVALID);
-
-	if (key_p->key_type != CKK_AES) {
-		return (CKR_KEY_TYPE_INCONSISTENT);
-	}
-
-	if ((pMechanism->pParameter == NULL) ||
-	    (pMechanism->ulParameterLen != AES_BLOCK_LEN)) {
-		return (CKR_MECHANISM_PARAM_INVALID);
-	}
-
-	rv = kms_aes_crypt_init_common(session_p, pMechanism,
-	    key_p, B_TRUE);
-
-	if (rv != CKR_OK)
-		return (rv);
-
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-
-	kms_aes_ctx = (kms_aes_ctx_t *)session_p->encrypt.context;
-	/* Copy Initialization Vector (IV) into the context. */
-
-	(void) memcpy(kms_aes_ctx->ivec, pMechanism->pParameter,
-	    AES_BLOCK_LEN);
-
-	/* Allocate a context for AES cipher-block chaining. */
-	kms_aes_ctx->aes_cbc = (void *)aes_cbc_ctx_init(
-	    kms_aes_ctx->key_sched, kms_aes_ctx->keysched_len,
-	    kms_aes_ctx->ivec);
-
-	if (kms_aes_ctx->aes_cbc == NULL) {
-		bzero(kms_aes_ctx->key_sched,
-		    kms_aes_ctx->keysched_len);
-		free(kms_aes_ctx->key_sched);
-		free(session_p->encrypt.context);
-		session_p->encrypt.context = NULL;
-		rv = CKR_HOST_MEMORY;
-	}
-
-	(void) pthread_mutex_unlock(&session_p->session_mutex);
-
-	return (rv);
-}
-
-void
-kms_crypt_cleanup(kms_session_t *session_p, boolean_t encrypt,
-	boolean_t lock_held)
-{
-	kms_active_op_t *active_op;
-	boolean_t lock_true = B_TRUE;
-	kms_aes_ctx_t *kms_aes_ctx;
-	aes_ctx_t *aes_ctx;
-
-	if (!lock_held)
-		(void) pthread_mutex_lock(&session_p->session_mutex);
-
-	active_op = (encrypt) ? &(session_p->encrypt) : &(session_p->decrypt);
-	if (active_op->mech.mechanism != CKM_AES_CBC &&
-	    active_op->mech.mechanism != CKM_AES_CBC_PAD)
-		return;
-
-	kms_aes_ctx = (kms_aes_ctx_t *)active_op->context;
-
-	if (kms_aes_ctx != NULL) {
-		aes_ctx = (aes_ctx_t *)kms_aes_ctx->aes_cbc;
-		if (aes_ctx != NULL) {
-			bzero(aes_ctx->ac_keysched, aes_ctx->ac_keysched_len);
-			free(kms_aes_ctx->aes_cbc);
-			bzero(kms_aes_ctx->key_sched,
-			    kms_aes_ctx->keysched_len);
-			free(kms_aes_ctx->key_sched);
-		}
-	}
-	if (active_op->context != NULL) {
-		free(active_op->context);
-		active_op->context = NULL;
-	}
-	active_op->flags = 0;
-	if (!lock_held)
-		REFRELE(session_p, lock_true);
-}
-
-CK_RV
-C_EncryptInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
-    CK_OBJECT_HANDLE hKey)
-{
-	CK_RV		rv;
-	kms_session_t	*session_p;
-	kms_object_t	*key_p;
-	boolean_t	lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/* Obtain the session pointer. */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	if (pMechanism == NULL) {
-		rv = CKR_ARGUMENTS_BAD;
-		goto clean_exit;
-	}
-
-	if (pMechanism->mechanism != CKM_AES_CBC &&
-	    pMechanism->mechanism != CKM_AES_CBC_PAD)
-		return (CKR_MECHANISM_INVALID);
-
-	/* Obtain the object pointer. */
-	HANDLE2OBJECT(hKey, key_p, rv);
-	if (rv != CKR_OK)
-		goto clean_exit;
-
-	/* Check to see if key object allows for encryption. */
-	if (!(key_p->bool_attr_mask & ENCRYPT_BOOL_ON)) {
-		rv = CKR_KEY_FUNCTION_NOT_PERMITTED;
-		goto clean_exit1;
-	}
-
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	lock_held = B_TRUE;
-
-	/* Check to see if encrypt operation is already active. */
-	if (session_p->encrypt.flags & CRYPTO_OPERATION_ACTIVE) {
-		/* free the memory to avoid memory leak */
-		kms_crypt_cleanup(session_p, B_TRUE, lock_held);
-	}
-
-	/*
-	 * This active flag will remain ON until application calls either
-	 * C_Encrypt or C_EncryptFinal to actually obtain the final piece
-	 * of ciphertext.
-	 */
-	session_p->encrypt.flags = CRYPTO_OPERATION_ACTIVE;
-
-	(void) pthread_mutex_unlock(&session_p->session_mutex);
-	lock_held = B_FALSE;
-
-	rv = kms_encrypt_init(session_p, pMechanism, key_p);
-
-	if (rv != CKR_OK) {
-		(void) pthread_mutex_lock(&session_p->session_mutex);
-		session_p->encrypt.flags &= ~CRYPTO_OPERATION_ACTIVE;
-		lock_held = B_TRUE;
-	}
-
-clean_exit1:
-	OBJ_REFRELE(key_p);
-clean_exit:
-	REFRELE(session_p, lock_held);
-	return (rv);
-}
-
-
-CK_RV
-C_Encrypt(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen,
-    CK_BYTE_PTR pEncryptedData, CK_ULONG_PTR pulEncryptedDataLen)
-{
-	CK_RV		rv;
-	kms_session_t	*session_p;
-	boolean_t	lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/* Obtain the session pointer. */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/*
-	 * Only check if input buffer is null.  How to handle zero input
-	 * length depends on the mechanism in use.  For secret key mechanisms,
-	 * unpadded ones yield zero length output, but padded ones always
-	 * result in greater than zero length output.
-	 */
-	if (pData == NULL) {
-		rv = CKR_ARGUMENTS_BAD;
-		goto clean_exit;
-	}
-
-	/*
-	 * Only check if pulEncryptedDataLen is NULL.
-	 * No need to check if pEncryptedData is NULL because
-	 * application might just ask for the length of buffer to hold
-	 * the ciphertext.
-	 */
-	if (pulEncryptedDataLen == NULL) {
-		rv = CKR_ARGUMENTS_BAD;
-		goto clean_exit;
-	}
-
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	lock_held = B_TRUE;
-
-	/* Application must call C_EncryptInit before calling C_Encrypt. */
-	if (!(session_p->encrypt.flags & CRYPTO_OPERATION_ACTIVE)) {
-		REFRELE(session_p, lock_held);
-		return (CKR_OPERATION_NOT_INITIALIZED);
-	}
-
-	/*
-	 * C_Encrypt must be called without intervening C_EncryptUpdate
-	 * calls.
-	 */
-	if (session_p->encrypt.flags & CRYPTO_OPERATION_UPDATE) {
-		/*
-		 * C_Encrypt can not be used to terminate a multi-part
-		 * operation, so we'll leave the active encrypt operation
-		 * flag on and let the application continue with the
-		 * encrypt update operation.
-		 */
-		REFRELE(session_p, lock_held);
-		return (CKR_FUNCTION_FAILED);
-	}
-
-	(void) pthread_mutex_unlock(&session_p->session_mutex);
-	lock_held = B_FALSE;
-
-	rv = kms_aes_encrypt_common(session_p, pData, ulDataLen, pEncryptedData,
-	    pulEncryptedDataLen, 0);
-
-	if ((rv == CKR_BUFFER_TOO_SMALL) ||
-	    (pEncryptedData == NULL && rv == CKR_OK)) {
-		/*
-		 * We will not terminate the active encrypt operation flag,
-		 * when the application-supplied buffer is too small, or
-		 * the application asks for the length of buffer to hold
-		 * the ciphertext.
-		 */
-		REFRELE(session_p, lock_held);
-		return (rv);
-	}
-
-clean_exit:
-	/* Clear context, free key, and release session counter */
-	kms_crypt_cleanup(session_p, B_TRUE, B_FALSE);
-	return (rv);
-}
-
-CK_RV
-C_EncryptUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
-    CK_ULONG ulPartLen, CK_BYTE_PTR pEncryptedPart,
-    CK_ULONG_PTR pulEncryptedPartLen)
-{
-
-	CK_RV		rv;
-	kms_session_t	*session_p;
-	boolean_t	lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/* Obtain the session pointer. */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/*
-	 * Only check if input buffer is null.  How to handle zero input
-	 * length depends on the mechanism in use.  For secret key mechanisms,
-	 * unpadded ones yeild zero length output, but padded ones always
-	 * result in greater than zero length output.
-	 */
-	if (pPart == NULL) {
-		rv = CKR_ARGUMENTS_BAD;
-		goto clean_exit;
-	}
-
-	/*
-	 * Only check if pulEncryptedPartLen is NULL.
-	 * No need to check if pEncryptedPart is NULL because
-	 * application might just ask for the length of buffer to hold
-	 * the ciphertext.
-	 */
-	if (pulEncryptedPartLen == NULL) {
-		rv = CKR_ARGUMENTS_BAD;
-		goto clean_exit;
-	}
-
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	lock_held = B_TRUE;
-
-	/*
-	 * Application must call C_EncryptInit before calling
-	 * C_EncryptUpdate.
-	 */
-	if (!(session_p->encrypt.flags & CRYPTO_OPERATION_ACTIVE)) {
-		REFRELE(session_p, lock_held);
-		return (CKR_OPERATION_NOT_INITIALIZED);
-	}
-
-	session_p->encrypt.flags |= CRYPTO_OPERATION_UPDATE;
-
-	(void) pthread_mutex_unlock(&session_p->session_mutex);
-	lock_held = B_FALSE;
-
-	rv = kms_aes_encrypt_common(session_p, pPart, ulPartLen,
-	    pEncryptedPart, pulEncryptedPartLen, B_TRUE);
-
-	/*
-	 * If CKR_OK or CKR_BUFFER_TOO_SMALL, don't terminate the
-	 * current encryption operation.
-	 */
-	if ((rv == CKR_OK) || (rv == CKR_BUFFER_TOO_SMALL)) {
-		REFRELE(session_p, lock_held);
-		return (rv);
-	}
-
-clean_exit:
-	/*
-	 * After an error occurred, terminate the current encrypt
-	 * operation by resetting the active and update flags.
-	 */
-	kms_crypt_cleanup(session_p, B_TRUE, lock_held);
-
-	return (rv);
-}
-
-
-CK_RV
-C_EncryptFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pLastEncryptedPart,
-    CK_ULONG_PTR pulLastEncryptedPartLen)
-{
-
-	CK_RV		rv;
-	kms_session_t	*session_p;
-	boolean_t	lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/* Obtain the session pointer. */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	if (pulLastEncryptedPartLen == NULL) {
-		rv = CKR_ARGUMENTS_BAD;
-		goto clean_exit;
-	}
-
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	lock_held = B_TRUE;
-
-	/*
-	 * Application must call C_EncryptInit before calling
-	 * C_EncryptFinal.
-	 */
-	if (!(session_p->encrypt.flags & CRYPTO_OPERATION_ACTIVE)) {
-		REFRELE(session_p, lock_held);
-		return (CKR_OPERATION_NOT_INITIALIZED);
-	}
-
-	(void) pthread_mutex_unlock(&session_p->session_mutex);
-	lock_held = B_FALSE;
-
-	rv = kms_aes_encrypt_final(session_p, pLastEncryptedPart,
-	    pulLastEncryptedPartLen);
-
-	if ((rv == CKR_BUFFER_TOO_SMALL) ||
-	    (pLastEncryptedPart == NULL && rv == CKR_OK)) {
-		/*
-		 * We will not terminate the active encrypt operation flag,
-		 * when the application-supplied buffer is too small, or
-		 * the application asks for the length of buffer to hold
-		 * the ciphertext.
-		 */
-		REFRELE(session_p, lock_held);
-		return (rv);
-	}
-
-	/* Terminates the active encrypt operation. */
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	session_p->encrypt.flags = 0;
-	lock_held = B_TRUE;
-	REFRELE(session_p, lock_held);
-
-	return (rv);
-
-clean_exit:
-	/* Terminates the active encrypt operation. */
-	kms_crypt_cleanup(session_p, B_TRUE, lock_held);
-
-	return (rv);
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsGeneral.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,548 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include <fcntl.h>
-#include <pthread.h>
-#include <strings.h>
-#include <unistd.h> /* for pid */
-#include <errno.h>
-#include <security/cryptoki.h>
-
-#include "kmsKeystoreUtil.h"
-#include "kmsGlobal.h"
-#include "kmsSession.h"
-#include "kmsSlot.h"
-
-/*
- * PKCS#11 KMS Crypto provider module.
- *
- * This module provides access to a Key Management System (v 2.0)
- * through the Solaris Cryptographic Framework interfaces  (PKCS#11).
- *
- * PREREQUISITES
- * =============
- * 1. You must have access to a KMS on the network and you must
- * know the IP address and name of the "Agent" assigned to
- * you and the passphrase needed to access the Agent information.
- *
- * 2. The token configuration must be completed prior
- * to using this provider using the kmscfg(1m) utility.
- *
- * This provider provides support for 3 AES mechanisms:
- * CKM_AES_KEY_GEN (for 256 bit keys only)
- * CKM_AES_CBC (encrypt/decrypt)
- * CKM_AES_CBC_PAD (encrypt/decrypt)
- *
- * DETAILS
- * =======
- * Each user has their own local configuration for the KMS.
- * The local configuration information is typically located
- * in a private token directory - /var/tmp/kms/$USERNAME
- * The location may be overridden using an environment variable
- * $KMSTOKEN_DIR.  The user's private token namespace is configured
- * using kmscfg(1M) which establishes the directory and populates
- * it with a simple configuration file that this module later uses
- * to access the KMS.
- *
- * INITIALIZING
- * ============
- * Once the token configuration is established, C_InitToken
- * is used to initialize the first contact with the KMS.  This
- * will cause the provider to contact the KMS and download
- * the profile configuration data, a server certificate, and a
- * private entity key and certificate (in a PKCS#12 file).
- * Once the above data is collected it is stored under $KMSTOKEN_DIR.
- * The user may then proceed with normal PKCS#11 activity.
- *
- * LOGIN
- * =====
- * The concept of a "Login" is established when the user provides
- * a PIN that will successfully unwrap the private data in the
- * PKCS#12 file downloaded earlier when C_InitToken was called.
- * If the PKCS#12 file is successfully opened, then the user
- * is considered "logged in" and may use the private key and
- * certificate to initiate secure communications with the KMS.
- *
- * CHANGE PIN
- * ==========
- * The C_SetPIN interface may be used to change the passphrase
- * on the PKCS#12 file and thus effectively change the passphrase
- * for the token itself (even though the wrapped private key and
- * certificate do not change).
- *
- * KEY STORAGE
- * ===========
- * Keys generated in the KMS are always kept securely in the KMS.
- * The local token area contains only a list of CKA_LABEL values
- * for all successfully created keys, no sensitive key data
- * is stored on the client system.  When a key is "destroyed", the
- * local references to that key's label is removed and it is no
- * longer visible to the token provider.
- *
- * NOTE: The KMS itself does not have an interface for destroying
- * keys, it only allows for the keys to be disassociated from
- * a particular "DataUnit". Key labels should not be re-used.
- */
-#pragma init(kms_init)
-#pragma fini(kms_fini)
-
-static struct CK_FUNCTION_LIST functionList = {
-	{ 2, 20 },	/* version */
-	C_Initialize,
-	C_Finalize,
-	C_GetInfo,
-	C_GetFunctionList,
-	C_GetSlotList,
-	C_GetSlotInfo,
-	C_GetTokenInfo,
-	C_GetMechanismList,
-	C_GetMechanismInfo,
-	C_InitToken,
-	C_InitPIN,
-	C_SetPIN,
-	C_OpenSession,
-	C_CloseSession,
-	C_CloseAllSessions,
-	C_GetSessionInfo,
-	C_GetOperationState,
-	C_SetOperationState,
-	C_Login,
-	C_Logout,
-	C_CreateObject,
-	C_CopyObject,
-	C_DestroyObject,
-	C_GetObjectSize,
-	C_GetAttributeValue,
-	C_SetAttributeValue,
-	C_FindObjectsInit,
-	C_FindObjects,
-	C_FindObjectsFinal,
-	C_EncryptInit,
-	C_Encrypt,
-	C_EncryptUpdate,
-	C_EncryptFinal,
-	C_DecryptInit,
-	C_Decrypt,
-	C_DecryptUpdate,
-	C_DecryptFinal,
-	C_DigestInit,
-	C_Digest,
-	C_DigestUpdate,
-	C_DigestKey,
-	C_DigestFinal,
-	C_SignInit,
-	C_Sign,
-	C_SignUpdate,
-	C_SignFinal,
-	C_SignRecoverInit,
-	C_SignRecover,
-	C_VerifyInit,
-	C_Verify,
-	C_VerifyUpdate,
-	C_VerifyFinal,
-	C_VerifyRecoverInit,
-	C_VerifyRecover,
-	C_DigestEncryptUpdate,
-	C_DecryptDigestUpdate,
-	C_SignEncryptUpdate,
-	C_DecryptVerifyUpdate,
-	C_GenerateKey,
-	C_GenerateKeyPair,
-	C_WrapKey,
-	C_UnwrapKey,
-	C_DeriveKey,
-	C_SeedRandom,
-	C_GenerateRandom,
-	C_GetFunctionStatus,
-	C_CancelFunction,
-	C_WaitForSlotEvent
-};
-
-boolean_t kms_initialized = B_FALSE;
-static pid_t kms_pid = 0;
-
-
-/* protects kms_initialized and entrance to C_Initialize/Finalize */
-static pthread_mutex_t globalmutex = PTHREAD_MUTEX_INITIALIZER;
-
-ses_to_be_freed_list_t ses_delay_freed;
-object_to_be_freed_list_t obj_delay_freed;
-kms_elem_t **kms_mechhash;	/* Hash table for kCF mech numbers */
-
-static void kms_finalize_common();
-static void kms_cleanup_library();
-static void kms_init();
-static void kms_fini();
-static void kms_fork_prepare();
-static void kms_fork_after();
-
-CK_RV
-C_Initialize(CK_VOID_PTR pInitArgs)
-{
-	int initialize_pid;
-	boolean_t supplied_ok;
-	CK_RV rv = CKR_OK;
-
-	/*
-	 * Grab lock to insure that only one thread enters this
-	 * function at a time.
-	 */
-	(void) pthread_mutex_lock(&globalmutex);
-	initialize_pid = getpid();
-
-	if (kms_initialized) {
-		if (initialize_pid == kms_pid) {
-			/*
-			 * This process has called C_Initialize already
-			 */
-			(void) pthread_mutex_unlock(&globalmutex);
-			return (CKR_CRYPTOKI_ALREADY_INITIALIZED);
-		} else {
-			/*
-			 * A fork has happened and the child is
-			 * reinitializing.  Do a kms_cleanup_library to close
-			 * out any state from the parent, and then
-			 * continue on.
-			 */
-			kms_cleanup_library();
-		}
-	}
-
-	if (pInitArgs != NULL) {
-		CK_C_INITIALIZE_ARGS *initargs1 =
-		    (CK_C_INITIALIZE_ARGS *) pInitArgs;
-
-		/* pReserved must be NULL */
-		if (initargs1->pReserved != NULL) {
-			(void) pthread_mutex_unlock(&globalmutex);
-			return (CKR_ARGUMENTS_BAD);
-		}
-
-		/*
-		 * ALL supplied function pointers need to have the value
-		 * either NULL or non-NULL.
-		 */
-		supplied_ok = (initargs1->CreateMutex == NULL &&
-		    initargs1->DestroyMutex == NULL &&
-		    initargs1->LockMutex == NULL &&
-		    initargs1->UnlockMutex == NULL) ||
-		    (initargs1->CreateMutex != NULL &&
-		    initargs1->DestroyMutex != NULL &&
-		    initargs1->LockMutex != NULL &&
-		    initargs1->UnlockMutex != NULL);
-
-		if (!supplied_ok) {
-			(void) pthread_mutex_unlock(&globalmutex);
-			return (CKR_ARGUMENTS_BAD);
-		}
-
-		/*
-		 * When the CKF_OS_LOCKING_OK flag isn't set and mutex
-		 * function pointers are supplied by an application,
-		 * return an error.  We must be able to use our own locks.
-		 */
-		if (!(initargs1->flags & CKF_OS_LOCKING_OK) &&
-		    (initargs1->CreateMutex != NULL)) {
-			(void) pthread_mutex_unlock(&globalmutex);
-			return (CKR_CANT_LOCK);
-		}
-	}
-
-	/* Create the hash table */
-	kms_mechhash = calloc(KMECH_HASHTABLE_SIZE, sizeof (void *));
-	if (kms_mechhash == NULL) {
-		(void) pthread_mutex_unlock(&globalmutex);
-		return (CKR_HOST_MEMORY);
-	}
-
-	/* Initialize the slot table */
-	rv = kms_slottable_init();
-	if (rv != CKR_OK) {
-		free(kms_mechhash);
-		goto end;
-	}
-
-	/* Initialize the object_to_be_freed list */
-	(void) pthread_mutex_init(&obj_delay_freed.obj_to_be_free_mutex, NULL);
-	obj_delay_freed.count = 0;
-	obj_delay_freed.first = NULL;
-	obj_delay_freed.last = NULL;
-
-	/* Initialize the session_to_be_freed list */
-	(void) pthread_mutex_init(&ses_delay_freed.ses_to_be_free_mutex, NULL);
-	ses_delay_freed.count = 0;
-	ses_delay_freed.first = NULL;
-	ses_delay_freed.last = NULL;
-
-	rv = KMS_Initialize();
-	if (rv != CKR_OK) {
-		free(kms_mechhash);
-		goto end;
-	}
-
-	kms_initialized = B_TRUE;
-	kms_pid = initialize_pid;
-
-end:
-	(void) pthread_mutex_unlock(&globalmutex);
-
-	return (CKR_OK);
-}
-
-/*
- * C_Finalize is a wrapper around kms_finalize_common. The
- * globalmutex should be locked by C_Finalize().
- */
-CK_RV
-C_Finalize(CK_VOID_PTR pReserved)
-{
-	(void) pthread_mutex_lock(&globalmutex);
-
-	if (!kms_initialized) {
-		(void) pthread_mutex_unlock(&globalmutex);
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-	}
-
-	/* Check to see if pReseved is NULL */
-	if (pReserved != NULL) {
-		(void) pthread_mutex_unlock(&globalmutex);
-		return (CKR_ARGUMENTS_BAD);
-	}
-
-	/*
-	 * Delete all the sessions for each slot and release the allocated
-	 * resources
-	 */
-	kms_delete_all_sessions(B_FALSE);
-
-	kms_finalize_common();
-
-	(void) pthread_mutex_unlock(&globalmutex);
-
-	return (CKR_OK);
-}
-
-/*
- * kms_finalize_common() does the work for C_Finalize.  globalmutex
- * must be held before calling this function.
- */
-static void
-kms_finalize_common() {
-
-	int i;
-	kms_elem_t *elem, *next;
-	kms_object_t *delay_free_obj, *tmpo;
-	kms_session_t *delay_free_ses, *tmps;
-
-	cleanup_slottable();
-	/* Walk the hash table and free all entries */
-	for (i = 0; i < KMECH_HASHTABLE_SIZE; i++) {
-		elem = kms_mechhash[i];
-		while (elem != NULL) {
-			next = elem->knext;
-			free(elem);
-			elem = next;
-		}
-	}
-
-	free(kms_mechhash);
-
-	kms_mechhash = NULL;
-	kms_initialized = B_FALSE;
-	kms_pid = 0;
-
-	/*
-	 * free all entries in the delay_freed list
-	 */
-	delay_free_obj = obj_delay_freed.first;
-	while (delay_free_obj != NULL) {
-		tmpo = delay_free_obj->next;
-		free(delay_free_obj);
-		delay_free_obj = tmpo;
-	}
-	obj_delay_freed.count = 0;
-	obj_delay_freed.first = NULL;
-	obj_delay_freed.last = NULL;
-	(void) pthread_mutex_destroy(&obj_delay_freed.obj_to_be_free_mutex);
-
-	delay_free_ses = ses_delay_freed.first;
-	while (delay_free_ses != NULL) {
-		tmps = delay_free_ses->next;
-		free(delay_free_ses);
-		delay_free_ses = tmps;
-	}
-	ses_delay_freed.count = 0;
-	ses_delay_freed.first = NULL;
-	ses_delay_freed.last = NULL;
-	(void) pthread_mutex_destroy(&ses_delay_freed.ses_to_be_free_mutex);
-}
-
-/*
- * This function cleans up all the resources in the library (user space only)
- */
-static void
-kms_cleanup_library()
-{
-	kms_slot_t *pslot = get_slotinfo();
-
-	if (pslot)
-		kms_cleanup_pri_objects_in_slot(pslot, NULL);
-
-	/*
-	 * Delete all the sessions for each slot and release the allocated
-	 * resources from the library.  The boolean argument TRUE indicates
-	 * that we only wants to clean up the resource in the library only.
-	 * We don't want to clean up the corresponding kernel part of
-	 * resources, because they are used by the parent process still.
-	 */
-	kms_delete_all_sessions(B_TRUE);
-
-	kms_finalize_common();
-}
-
-static void
-kms_init()
-{
-	(void) pthread_atfork(kms_fork_prepare, kms_fork_after,
-	    kms_fork_after);
-}
-
-/*
- * kms_fini() function required to make sure complete cleanup
- * is done if pkcs11_kms is ever unloaded without
- * a C_Finalize() call.
- */
-static void
-kms_fini()
-{
-	(void) pthread_mutex_lock(&globalmutex);
-
-	(void) KMS_Finalize();
-
-	/* if we're not initilized, do not attempt to finalize */
-	if (!kms_initialized) {
-		(void) pthread_mutex_unlock(&globalmutex);
-		return;
-	}
-
-	kms_cleanup_library();
-
-	(void) pthread_mutex_unlock(&globalmutex);
-}
-
-CK_RV
-C_GetInfo(CK_INFO_PTR pInfo)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	if (pInfo == NULL) {
-		return (CKR_ARGUMENTS_BAD);
-	}
-
-	/* Check if the cryptoki was initialized */
-	pInfo->cryptokiVersion.major = CRYPTOKI_VERSION_MAJOR;
-	pInfo->cryptokiVersion.minor = CRYPTOKI_VERSION_MINOR;
-	(void) strncpy((char *)pInfo->manufacturerID,
-	    MANUFACTURER_ID, 32);
-	pInfo->flags = 0;
-	(void) strncpy((char *)pInfo->libraryDescription,
-	    LIBRARY_DESCRIPTION, 32);
-	pInfo->libraryVersion.major = LIBRARY_VERSION_MAJOR;
-	pInfo->libraryVersion.minor = LIBRARY_VERSION_MINOR;
-
-	return (CKR_OK);
-}
-
-CK_RV
-C_GetFunctionList(CK_FUNCTION_LIST_PTR_PTR ppFunctionList)
-{
-	if (ppFunctionList == NULL) {
-		return (CKR_ARGUMENTS_BAD);
-	}
-
-	*ppFunctionList = &functionList;
-
-	return (CKR_OK);
-}
-
-/*
- * PKCS#11 states that C_GetFunctionStatus should always return
- * CKR_FUNCTION_NOT_PARALLEL
- */
-/*ARGSUSED*/
-CK_RV
-C_GetFunctionStatus(CK_SESSION_HANDLE hSession)
-{
-	return (CKR_FUNCTION_NOT_PARALLEL);
-}
-
-/*
- * Take out all mutexes before fork.
- * Order:
- * 1. globalmutex
- * 2. all slots mutexes (and all their sessions) via
- *    kms_acquire_all_slots_mutexes()
- * 3. obj_delay_freed.obj_to_be_free_mutex;
- * 4. ses_delay_freed.ses_to_be_free_mutex
- */
-void
-kms_fork_prepare()
-{
-	(void) pthread_mutex_lock(&globalmutex);
-	if (kms_initialized) {
-		kms_acquire_all_slots_mutexes();
-		(void) pthread_mutex_lock(
-		    &obj_delay_freed.obj_to_be_free_mutex);
-		(void) pthread_mutex_lock(
-		    &ses_delay_freed.ses_to_be_free_mutex);
-	}
-}
-
-/*
- * Release in opposite order to kms_fork_prepare().
- * Function is used for parent and child.
- */
-void
-kms_fork_after()
-{
-	if (kms_initialized) {
-		(void) pthread_mutex_unlock(
-		    &ses_delay_freed.ses_to_be_free_mutex);
-		(void) pthread_mutex_unlock(
-		    &obj_delay_freed.obj_to_be_free_mutex);
-		kms_release_all_slots_mutexes();
-	}
-	(void) pthread_mutex_unlock(&globalmutex);
-}
-
-/*
- * PKCS#11 states that C_CancelFunction should always return
- * CKR_FUNCTION_NOT_PARALLEL
- */
-/*ARGSUSED*/
-CK_RV
-C_CancelFunction(CK_SESSION_HANDLE hSession)
-{
-	return (CKR_FUNCTION_NOT_PARALLEL);
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsGlobal.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#ifndef _KMSGLOBAL_H
-#define	_KMSGLOBAL_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <sys/crypto/common.h>
-#include <security/cryptoki.h>
-#include <security/pkcs11t.h>
-#include "kmsObject.h"
-
-typedef struct kms_elem {
-	CK_MECHANISM_TYPE type;
-	struct kms_elem *knext;		/* Next in hash chain */
-} kms_elem_t;
-
-extern kms_elem_t **kms_mechhash;
-extern boolean_t kms_initialized;
-
-#define	KMECH_HASHTABLE_SIZE	67
-
-/* CK_INFO: Information about cryptoki */
-#define	CRYPTOKI_VERSION_MAJOR	2
-#define	CRYPTOKI_VERSION_MINOR	20
-#define	MANUFACTURER_ID		"Oracle Corporation     "
-#define	LIBRARY_DESCRIPTION	"Oracle Key Management System    "
-#define	LIBRARY_VERSION_MAJOR	1
-#define	LIBRARY_VERSION_MINOR	0
-
-/* CK_SLOT_INFO: Information about our slot */
-#define	SLOT_DESCRIPTION	"Oracle Key Management System    " \
-				"                                "
-#define	KMS_TOKEN_LABEL		"KMS                             "
-#define	KMS_TOKEN_MODEL		"                "
-#define	KMS_TOKEN_SERIAL	"                "
-#define	KMS_TOKEN_FLAGS		CKF_LOGIN_REQUIRED
-#define	MAX_PIN_LEN		256
-#define	MIN_PIN_LEN		1
-#define	HARDWARE_VERSION_MAJOR	0
-#define	HARDWARE_VERSION_MINOR	0
-#define	FIRMWARE_VERSION_MAJOR	0
-#define	FIRMWARE_VERSION_MINOR	0
-
-CK_RV crypto2pkcs11_error_number(uint_t);
-CK_RV kms_mech(CK_MECHANISM_TYPE);
-unsigned char *get_symmetric_key_value(kms_object_t *);
-void free_key_attributes();
-
-CK_RV process_object_attributes(CK_ATTRIBUTE_PTR, CK_ULONG, caddr_t *,
-    CK_BBOOL *);
-CK_RV get_object_attributes(CK_ATTRIBUTE_PTR, CK_ULONG, caddr_t);
-void free_object_attributes(caddr_t, CK_ULONG);
-CK_RV process_found_objects(kms_session_t *, CK_OBJECT_HANDLE *,
-    CK_ULONG *);
-CK_RV get_mechanism_info(kms_slot_t *, CK_MECHANISM_TYPE,
-    CK_MECHANISM_INFO_PTR, uint32_t *);
-CK_RV kms_add_extra_attr(CK_ATTRIBUTE_PTR, kms_object_t *);
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif /* _KMSGLOBAL_H */
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsKeys.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,179 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2012 Milan Jurik. All rights reserved.
- */
-
-#include <strings.h>
-#include <errno.h>
-#include <security/cryptoki.h>
-#include <cryptoutil.h>
-#include "kmsGlobal.h"
-#include "kmsSession.h"
-#include "kmsObject.h"
-#include "kmsKeystoreUtil.h"
-
-static CK_RV
-kms_generate_softkey(kms_object_t *keyp)
-{
-	if ((OBJ_SEC_VALUE(keyp) = malloc(OBJ_SEC_VALUE_LEN(keyp))) == NULL)
-		return (CKR_HOST_MEMORY);
-
-	if (pkcs11_get_urandom(OBJ_SEC_VALUE(keyp),
-	    OBJ_SEC_VALUE_LEN(keyp)) < 0)
-		return (CKR_DEVICE_ERROR);
-
-	return (CKR_OK);
-}
-
-CK_RV
-C_GenerateKey(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
-    CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount, CK_OBJECT_HANDLE_PTR phKey)
-{
-	CK_RV			rv = CKR_OK;
-	kms_session_t		*session_p;
-	kms_object_t		*new_objp = NULL;
-	kms_slot_t		*pslot;
-	boolean_t		ses_lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/* Obtain the session pointer */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	if ((pMechanism == NULL) || (phKey == NULL)) {
-		rv = CKR_ARGUMENTS_BAD;
-		goto failed_exit;
-	}
-
-	if ((pTemplate == NULL) && (ulCount != 0)) {
-		rv = CKR_ARGUMENTS_BAD;
-		goto failed_exit;
-	}
-
-	switch (pMechanism->mechanism) {
-		case CKM_AES_KEY_GEN:
-			break;
-		default:
-			rv = CKR_MECHANISM_INVALID;
-			goto failed_exit;
-	}
-
-	/* Create an object record */
-	new_objp = kms_new_object();
-	if (new_objp == NULL)
-		return (CKR_HOST_MEMORY);
-
-	new_objp->mechanism = pMechanism->mechanism;
-	rv = kms_build_object(pTemplate, ulCount, new_objp);
-	if (rv != CKR_OK)
-		goto failed_exit;
-
-	/*
-	 * Generate the KMS key.
-	 *
-	 * This will put the AES key value from the KMS key into the
-	 * key object record.
-	 */
-	if (new_objp->bool_attr_mask & TOKEN_BOOL_ON)
-		rv = KMS_GenerateKey(session_p, new_objp);
-	else
-		rv = kms_generate_softkey(new_objp);
-
-	if (rv != CKR_OK)
-		goto failed_exit;
-
-	if (new_objp->bool_attr_mask & TOKEN_BOOL_ON) {
-		pslot = get_slotinfo();
-		if (pslot == NULL) {
-			rv = CKR_GENERAL_ERROR;
-			goto failed_exit;
-		}
-		kms_add_token_object_to_slot(new_objp, pslot);
-	} else {
-		kms_add_object_to_session(new_objp, session_p);
-	}
-
-	*phKey = (CK_OBJECT_HANDLE)new_objp;
-	REFRELE(session_p, ses_lock_held);
-	return (rv);
-
-failed_exit:
-	if (new_objp != NULL)
-		(void) free(new_objp);
-
-	REFRELE(session_p, ses_lock_held);
-	return (rv);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_GenerateKeyPair(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
-    CK_ATTRIBUTE_PTR pPublicKeyTemplate, CK_ULONG ulPublicKeyAttributeCount,
-    CK_ATTRIBUTE_PTR pPrivateKeyTemplate, CK_ULONG ulPrivateKeyAttributeCount,
-    CK_OBJECT_HANDLE_PTR phPublicKey, CK_OBJECT_HANDLE_PTR phPrivateKey)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_WrapKey(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
-    CK_OBJECT_HANDLE hWrappingKey, CK_OBJECT_HANDLE hKey,
-    CK_BYTE_PTR pWrappedKey, CK_ULONG_PTR pulWrappedKeyLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_UnwrapKey(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
-    CK_OBJECT_HANDLE hUnwrappingKey, CK_BYTE_PTR pWrappedKey,
-    CK_ULONG ulWrappedKeyLen, CK_ATTRIBUTE_PTR pTemplate,
-    CK_ULONG ulAttributeCount, CK_OBJECT_HANDLE_PTR phKey)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_DeriveKey(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
-    CK_OBJECT_HANDLE hBaseKey, CK_ATTRIBUTE_PTR pTemplate,
-    CK_ULONG ulAttributeCount, CK_OBJECT_HANDLE_PTR phKey)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsKeystoreUtil.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1227 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include <stdio.h>
-#include <malloc.h>
-#include <memory.h>
-#include <strings.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <ctype.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <cryptoutil.h>
-#include <unistd.h>
-#include <utmpx.h>
-#include <pthread.h>
-#include <pwd.h>
-#include <sha2.h>
-#include <security/cryptoki.h>
-#include <aes_impl.h>
-#include <sys/avl.h>
-
-#include "kmsSession.h"
-#include "kmsGlobal.h"
-#include "kmsObject.h"
-
-static CK_RV
-GetPKCS11StatusFromAgentStatus(KMS_AGENT_STATUS status);
-
-static char		keystore_path[BUFSIZ];
-static boolean_t	keystore_path_initialized = B_FALSE;
-static time_t		last_objlist_mtime = 0;
-pthread_mutex_t		objlist_mutex = PTHREAD_MUTEX_INITIALIZER;
-pthread_mutex_t		flock_mutex = PTHREAD_MUTEX_INITIALIZER;
-
-static struct flock fl = {
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	{0, 0, 0, 0}
-};
-
-#define	KEYSTORE_PATH			"/var/kms"
-#define	ALTERNATE_KEYSTORE_PATH		"KMSTOKEN_DIR"
-#define	KMS_PROFILE_FILENAME		"profile.cfg"
-#define	KMS_DATAUNIT_DESCRIPTION	"Oracle PKCS11/KMS"
-#define	KMS_ATTR_DESC_PFX		"PKCS#11v2.20: "
-#define	KMSTOKEN_CONFIG_FILENAME	"kmstoken.cfg"
-#define	KMSTOKEN_LABELLIST_FILENAME	"objlabels.lst"
-
-static void
-kms_hash_string(char *label, uchar_t *hash)
-{
-	SHA2_CTX ctx;
-
-	SHA2Init(SHA256, &ctx);
-	SHA2Update(&ctx, label, strlen(label));
-	SHA2Final(hash, &ctx);
-}
-
-static char *
-get_username(char *username, int len)
-{
-	struct passwd pwd, *user_info;
-	long buflen;
-	char *pwdbuf = NULL;
-
-	bzero(username, len);
-
-	buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
-	if (buflen == -1)
-		return (username); /* should not happen */
-
-	pwdbuf = calloc(1, buflen);
-	if (pwdbuf == NULL)
-		return (username); /* zero-ed earlier */
-
-	user_info = getpwuid_r(getuid(), &pwd, pwdbuf, buflen);
-
-	if (user_info != NULL)
-		(void) strlcpy(username, user_info->pw_name, len);
-
-	free(pwdbuf);
-	return (username);
-}
-
-static char *
-kms_get_keystore_path()
-{
-	char *env_val;
-	char username[sizeof (((struct utmpx *)0)->ut_user)];
-
-	if (!keystore_path_initialized) {
-		env_val = getenv(ALTERNATE_KEYSTORE_PATH);
-		bzero(keystore_path, sizeof (keystore_path));
-		/*
-		 * If it isn't set or is set to the empty string use the
-		 * default location.  We need to check for the empty string
-		 * because some users "unset" environment variables by giving
-		 * them no value, this isn't the same thing as removing it
-		 * from the environment.
-		 */
-		if ((env_val == NULL) || (strcmp(env_val, "") == 0)) {
-			/* alternate path not specified, use /var/kms/$USER */
-			(void) snprintf(keystore_path,
-			    sizeof (keystore_path), "%s/%s",
-			    KEYSTORE_PATH,
-			    get_username(username, sizeof (username)));
-		} else {
-			(void) strlcpy(keystore_path, env_val,
-			    sizeof (keystore_path));
-		}
-		keystore_path_initialized = B_TRUE;
-	}
-	return (keystore_path);
-}
-
-static char *
-get_non_comment_line(char *cfgbuf, size_t cfglen, char *buf, size_t buflen)
-{
-	char *s = cfgbuf;
-	char *end = cfgbuf + cfglen;
-	char *f;
-
-	/* Skip over blank lines CR/LF */
-	while (s < end && (*s == '#' || *s == '\n' || *s == '\r')) {
-		/* check for comment sign */
-		if (*s == '#') {
-			/* skip the rest of the line */
-			while ((*s != '\n' || *s == '\r') && s < end)
-				s++;
-		}
-		if ((s < end) && (*s == '\n' || *s == '\r'))
-			s++;
-	}
-
-	if (s < end) {
-		char save, *e;
-		f = s; /* mark the beginning. */
-		/* Find the end of the line and null terminate it. */
-		while (*s != '\n' && *s != '\r' && *s != '#' && s < end) s++;
-		save = *s;
-		*s = 0x00;
-		(void) strncpy(buf, f, buflen);
-		*s = save;
-
-		/* Strip trailing whitespace */
-		f = buf;
-		e = f + strlen(buf) - 1;
-		while (e >= f && isspace(*e)) {
-			*e = 0x00;
-			e--;
-		}
-
-	} else {
-		/* If we reached the end, return NULL */
-		s = NULL;
-	}
-done:
-	return (s);
-}
-
-static int
-flock_fd(int fd, int cmd, pthread_mutex_t *mutex)
-{
-	int ret = 0;
-
-	(void) pthread_mutex_lock(mutex);
-
-	fl.l_type = cmd;
-
-	while ((ret = fcntl(fd, F_SETLKW, &fl)) == -1) {
-		if (errno != EINTR)
-			break;
-	}
-	(void) pthread_mutex_unlock(mutex);
-	return (ret);
-}
-
-/*
- * Open the keystore description file in the specified mode.
- * If the keystore doesn't exist, the "do_create_keystore"
- * argument determines if the keystore should be created
- */
-static int
-open_and_lock_file(char *filename, int cmd, mode_t mode,
-    pthread_mutex_t *mutex)
-{
-	int fd;
-
-	fd = open_nointr(filename, mode|O_NONBLOCK);
-	if (fd < 0)
-		return (fd);
-
-	if (flock_fd(fd, cmd, mutex)) {
-		if (fd > 0)
-			(void) close(fd);
-		return (-1);
-	}
-
-	return (fd);
-}
-
-static int
-kms_slurp_file(char *file, char *buf, size_t buflen)
-{
-	int n, fd, total = 0;
-
-	fd = open_and_lock_file(file, F_RDLCK, O_RDONLY, &flock_mutex);
-	if (fd == -1)
-		return (-1);
-
-	do {
-		n = readn_nointr(fd, &buf[total], buflen - total);
-		if (n != (buflen - total))
-			break;
-		else
-			total += n;
-	} while (total < buflen);
-
-	if (flock_fd(fd, F_UNLCK, &flock_mutex))
-		total = -1;
-
-	(void) close(fd);
-
-	return (total);
-}
-
-/*
- * The KMS token is considered "initialized" if the file with the token
- * configuration information is present.
- */
-CK_BBOOL
-kms_is_initialized()
-{
-	CK_BBOOL rv;
-	char *ksdir;
-	char cfgfile_path[BUFSIZ];
-	struct stat statp;
-
-	ksdir = kms_get_keystore_path();
-	if (ksdir == NULL)
-		return (CKR_FUNCTION_FAILED);
-
-	(void) snprintf(cfgfile_path, sizeof (cfgfile_path),
-	    "%s/%s", ksdir, KMSTOKEN_CONFIG_FILENAME);
-
-	if (stat(cfgfile_path, &statp))
-		rv = FALSE;
-	else
-		rv = TRUE;
-
-	return (rv);
-}
-
-static CK_RV
-kms_read_config_data(char *path, kms_cfg_info_t *cfginfo)
-{
-	CK_RV rv = CKR_OK;
-	char	*cfgbuf = NULL;
-	char	*ptr;
-	char	buf[BUFSIZ];
-	size_t	buflen = 0, remain;
-	struct	stat statp;
-
-	if (path == NULL || cfginfo == NULL)
-		return (CKR_ARGUMENTS_BAD);
-
-	if (stat(path, &statp) == -1) {
-		return (CKR_FUNCTION_FAILED);
-	}
-
-	cfgbuf = calloc(1, statp.st_size);
-	if (cfgbuf == NULL)
-		return (CKR_HOST_MEMORY);
-
-	buflen = kms_slurp_file(path, cfgbuf, statp.st_size);
-	if (buflen != statp.st_size) {
-		free(cfgbuf);
-		return (CKR_FUNCTION_FAILED);
-	}
-
-	remain = buflen;
-	ptr = cfgbuf;
-	ptr = get_non_comment_line(ptr, remain,
-	    cfginfo->name, sizeof (cfginfo->name));
-	if (ptr == NULL) {
-		rv = CKR_FUNCTION_FAILED;
-		goto done;
-	}
-	remain = buflen - (ptr - cfgbuf);
-	ptr = get_non_comment_line(ptr, remain,
-	    cfginfo->agentId, sizeof (cfginfo->agentId));
-	if (ptr == 0) {
-		rv = CKR_FUNCTION_FAILED;
-		goto done;
-	}
-	remain = buflen - (ptr - cfgbuf);
-	ptr = get_non_comment_line(ptr, remain,
-	    cfginfo->agentAddr, sizeof (cfginfo->agentAddr));
-	if (ptr == 0) {
-		rv = CKR_FUNCTION_FAILED;
-		goto done;
-	}
-	remain = buflen - (ptr - cfgbuf);
-	ptr = get_non_comment_line(ptr, remain, buf, sizeof (buf));
-	if (ptr == 0) {
-		rv = CKR_FUNCTION_FAILED;
-		goto done;
-	}
-	cfginfo->transTimeout = atoi(buf);
-
-	remain = buflen - (ptr - cfgbuf);
-	ptr = get_non_comment_line(ptr, remain, buf, sizeof (buf));
-	if (ptr == 0) {
-		rv = CKR_FUNCTION_FAILED;
-		goto done;
-	}
-	cfginfo->failoverLimit = atoi(buf);
-
-	remain = buflen - (ptr - cfgbuf);
-	ptr = get_non_comment_line(ptr, remain, buf, sizeof (buf));
-	if (ptr == 0) {
-		rv = CKR_FUNCTION_FAILED;
-		goto done;
-	}
-	cfginfo->discoveryFreq = atoi(buf);
-
-	remain = buflen - (ptr - cfgbuf);
-	ptr = get_non_comment_line(ptr, remain, buf, sizeof (buf));
-	if (ptr == 0) {
-		rv = CKR_FUNCTION_FAILED;
-		goto done;
-	}
-	cfginfo->securityMode = atoi(buf);
-done:
-	if (cfgbuf != NULL)
-		free(cfgbuf);
-	return (rv);
-}
-
-CK_BBOOL
-kms_is_pin_set()
-{
-	CK_BBOOL rv = TRUE;
-	kms_cfg_info_t kmscfg;
-	struct stat statp;
-	char *ksdir;
-	char filepath[BUFSIZ];
-
-	ksdir = kms_get_keystore_path();
-	if (ksdir == NULL)
-		return (FALSE);
-
-	(void) snprintf(filepath, sizeof (filepath),
-	    "%s/%s", ksdir, KMSTOKEN_CONFIG_FILENAME);
-
-	if ((rv = kms_read_config_data(filepath, &kmscfg)))
-		return (FALSE);
-
-	/*
-	 * The PK12 file is only established once the user has enrolled
-	 * and is thus considered having a PIN set.
-	 */
-	(void) snprintf(filepath, sizeof (filepath),
-	    "%s/%s/%s", ksdir, kmscfg.agentId, CLIENT_PK12_FILE);
-
-	if (stat(filepath, &statp))
-		rv = FALSE; /* file doesn't exist. */
-	else
-		rv = TRUE; /* File exists, PIN is set */
-
-	return (rv);
-}
-
-void
-kms_clear_label_list(avl_tree_t *tree)
-{
-	void *cookie = NULL;
-	objlabel_t *node;
-
-	while ((node = avl_destroy_nodes(tree, &cookie)) != NULL) {
-		free(node->label);
-		free(node);
-	}
-}
-
-static void
-add_label_node(avl_tree_t *tree, char *label)
-{
-	avl_index_t where;
-	objlabel_t  *node;
-	objlabel_t *newnode;
-	int i;
-
-	if (tree == NULL || label == NULL)
-		return;
-
-	/* Remove trailing CR */
-	i = strlen(label) - 1;
-	while (i > 0 && label[i] == '\n')
-		label[i--] = 0x00;
-
-	newnode = calloc(1, sizeof (objlabel_t));
-	newnode->label = (char *)strdup(label);
-	if (newnode->label == NULL) {
-		free(newnode);
-		return;
-	}
-	/* see if this entry already exists */
-	node = avl_find(tree, newnode, &where);
-	if (node == NULL) {
-		avl_insert(tree, newnode, where);
-	} else {
-		/* It's a dup, don't add it */
-		free(newnode->label);
-		free(newnode);
-	}
-}
-
-CK_RV
-kms_reload_labels(kms_session_t *sp)
-{
-	CK_RV rv = CKR_OK;
-	char *cfgbuf = NULL, *ptr, buffer[BUFSIZ];
-	size_t buflen, remain;
-	struct stat statp;
-	char *ksdir;
-	char labelfile[BUFSIZ];
-
-	ksdir = kms_get_keystore_path();
-	if (ksdir == NULL)
-		return (CKR_GENERAL_ERROR);
-
-	(void) snprintf(labelfile, sizeof (labelfile),
-	    "%s/%s", ksdir, KMSTOKEN_LABELLIST_FILENAME);
-
-	bzero(&statp, sizeof (statp));
-	if (stat(labelfile, &statp) == -1) {
-		if (errno == ENOENT) {
-			FILE *fp;
-			/* Create it */
-			fp = fopen(labelfile, "w");
-			if (fp == NULL)
-				return (CKR_GENERAL_ERROR);
-			(void) fclose(fp);
-		}
-	}
-
-	if (statp.st_size == 0) {
-		return (CKR_OK);
-	}
-
-	cfgbuf = calloc(1, statp.st_size);
-	if (cfgbuf == NULL)
-		return (CKR_HOST_MEMORY);
-
-	buflen = kms_slurp_file(labelfile, cfgbuf, statp.st_size);
-	if (buflen != statp.st_size) {
-		free(cfgbuf);
-		return (CKR_FUNCTION_FAILED);
-	}
-
-	if (statp.st_mtime == last_objlist_mtime) {
-		/* No change */
-		goto end;
-	}
-
-	/* If we got here, we need to refresh the entire list */
-	kms_clear_label_list(&sp->objlabel_tree);
-
-	/*
-	 * Read each line and add it as a label node.
-	 */
-	remain = buflen;
-	ptr = cfgbuf;
-	while (remain > 0) {
-		ptr = get_non_comment_line(ptr, remain,
-		    buffer, sizeof (buffer));
-		if (ptr == NULL) {
-			goto end;
-		}
-		add_label_node(&sp->objlabel_tree, buffer);
-		remain = buflen - (ptr - cfgbuf);
-	}
-end:
-	if (cfgbuf)
-		free(cfgbuf);
-
-	return (rv);
-}
-
-static CK_RV
-kms_get_object_label(kms_object_t *obj, char *label, int len)
-{
-	CK_RV rv = CKR_OK;
-	CK_ATTRIBUTE stLabel;
-
-	bzero(label, len);
-
-	stLabel.type = CKA_LABEL;
-	stLabel.pValue = label;
-	stLabel.ulValueLen = len;
-
-	/*
-	 * The caller MUST provide a CKA_LABEL when deleting.
-	 */
-	rv = kms_get_attribute(obj, &stLabel);
-
-	return (rv);
-}
-
-/*
- * Retrieve a data unit associated with the label.
- */
-static CK_RV
-kms_get_data_unit(kms_session_t *session, char *label,
-    KMSAgent_DataUnit *pDataUnit)
-{
-	KMS_AGENT_STATUS status;
-	const utf8cstr pDescription = KMS_DATAUNIT_DESCRIPTION;
-	uchar_t	externalUniqueId[SHA256_DIGEST_LENGTH];
-
-	/* Find the data unit that holds the key */
-	kms_hash_string(label, externalUniqueId);
-
-	status = KMSAgent_RetrieveDataUnitByExternalUniqueID(
-	    &session->kmsProfile,
-	    (const unsigned char *)externalUniqueId,
-	    sizeof (externalUniqueId),
-	    label,
-	    pDescription,
-	    pDataUnit);
-
-	if (status != KMS_AGENT_STATUS_OK) {
-		return (GetPKCS11StatusFromAgentStatus(status));
-	}
-
-	return (CKR_OK);
-}
-
-static CK_RV
-kms_decode_description(char *description, kms_object_t *pKey)
-{
-	CK_RV rv = CKR_OK;
-	char *ptr;
-	uint32_t keylen;
-	u_longlong_t boolattrs;
-
-	/* If it doesn't start with the expected prefix, return */
-	if (strncmp(description, KMS_ATTR_DESC_PFX,
-	    strlen(KMS_ATTR_DESC_PFX)))
-		return (rv);
-
-	ptr = description + strlen(KMS_ATTR_DESC_PFX);
-
-	/*
-	 * Decode as follows:
-	 * CK_OBJECT_CLASS (2 bytes)
-	 * CK_KEY_TYPE (2 bytes)
-	 * CKA_VALUE_LEN (4 bytes)
-	 * CK_CERTIFICATE_TYPE (2 bytes - not used)
-	 * CK_MECHANISM_TYPE (4 bytes)
-	 * boolean attributes (3 bytes)
-	 * extra attributes (1 byte)
-	 * non-boolean attributes
-	 */
-	if (sscanf(ptr,
-	    "%02lx%02lx%02x00%04lx%06llx00",
-	    &pKey->class,
-	    &pKey->key_type,
-	    &keylen,
-	    &pKey->mechanism,
-	    &boolattrs) != 5)
-		/* We didn't get the full set of attributes */
-		rv = CKR_ATTRIBUTE_TYPE_INVALID;
-	pKey->bool_attr_mask = boolattrs;
-
-	return (rv);
-}
-
-/*
- * Create a new PKCS#11 object record for the KMSAgent_Key.
- */
-static CK_RV
-kms_new_key_object(
-	char *label,
-	KMSAgent_DataUnit *dataUnit,
-	KMSAgent_Key *pKey,
-	kms_object_t **pObj)
-{
-	CK_RV rv = CKR_OK;
-	CK_BBOOL bTrue = B_TRUE;
-	CK_KEY_TYPE keytype = CKK_AES;
-	CK_OBJECT_CLASS class = CKO_SECRET_KEY;
-	CK_ULONG	keylen;
-	kms_object_t *newObj;
-
-	CK_ATTRIBUTE template[] = {
-		{CKA_TOKEN, NULL, sizeof (bTrue)},
-		{CKA_LABEL, NULL, 0},
-		{CKA_KEY_TYPE, NULL, sizeof (keytype)},
-		{CKA_CLASS, NULL, sizeof (class)},
-		{CKA_VALUE, NULL, NULL},
-		{CKA_VALUE_LEN, NULL, NULL},
-		{CKA_PRIVATE, NULL, sizeof (bTrue)},
-	};
-
-	keylen = (CK_ULONG)pKey->m_iKeyLength;
-
-	template[0].pValue = &bTrue;
-	template[1].pValue = label;
-	template[1].ulValueLen = strlen(label);
-	template[2].pValue = &keytype;
-	template[3].pValue = &class;
-	template[4].pValue = pKey->m_acKey;
-	template[4].ulValueLen = pKey->m_iKeyLength;
-	template[5].pValue = &keylen;
-	template[5].ulValueLen = sizeof (keylen);
-	template[6].pValue = &bTrue;
-
-	newObj = kms_new_object();
-	if (newObj == NULL)
-		return (CKR_HOST_MEMORY);
-
-	/*
-	 * Decode the DataUnit description field to find various
-	 * object attributes.
-	 */
-	rv = kms_decode_description(dataUnit->m_acDescription, newObj);
-	if (rv) {
-		free(newObj);
-		return (rv);
-	}
-	/*
-	 * Set the template keytype and class according to the
-	 * data parsed from the description.
-	 */
-	if (newObj->key_type)
-		keytype = newObj->key_type;
-	if (newObj->class)
-		class = newObj->class;
-
-	rv = kms_build_object(template, 7, newObj);
-	if (rv) {
-		free(newObj);
-		return (rv);
-	}
-
-	newObj->bool_attr_mask |= TOKEN_BOOL_ON;
-
-	*pObj = newObj;
-	return (rv);
-}
-
-static CK_RV
-kms_get_data_unit_keys(kms_session_t *sp, KMSAgent_DataUnit *dataUnit,
-	KMSAgent_ArrayOfKeys **keylist, int *numkeys)
-{
-	CK_RV rv = CKR_OK;
-	KMSAgent_ArrayOfKeys *kmskeys = NULL;
-	KMS_AGENT_STATUS status;
-	int keysLeft = 0;
-
-	status = KMSAgent_RetrieveDataUnitKeys(
-	    &sp->kmsProfile, dataUnit,
-	    KMS_MAX_PAGE_SIZE, 0,
-	    (int * const)&keysLeft,
-	    NULL, /* KeyID */
-	    &kmskeys);
-
-	if (status != KMS_AGENT_STATUS_OK) {
-		return (GetPKCS11StatusFromAgentStatus(status));
-	}
-
-	if (keylist != NULL && kmskeys != NULL)
-		*keylist = kmskeys;
-
-	if (numkeys != NULL && kmskeys != NULL)
-		*numkeys = kmskeys->m_iSize;
-
-	if (keylist == NULL && kmskeys != NULL)
-		KMSAgent_FreeArrayOfKeys(kmskeys);
-
-	return (rv);
-}
-
-
-/*
- * Retrieve a key from KMS.  We can't use "RetrieveKey" because
- * we don't know the key id.  Instead get all keys associated
- * with our data unit (there should be only 1.
- */
-CK_RV
-KMS_RetrieveKeyObj(kms_session_t *sp, char *label, kms_object_t **pobj)
-{
-	CK_RV rv = CKR_OK;
-	KMSAgent_DataUnit dataUnit;
-	KMSAgent_ArrayOfKeys *kmsKeys = NULL;
-	KMSAgent_Key *pKey;
-
-	rv = kms_get_data_unit(sp, label, &dataUnit);
-	if (rv != CKR_OK)
-		return (rv);
-
-	rv = kms_get_data_unit_keys(sp, &dataUnit, &kmsKeys, NULL);
-
-	if (rv != CKR_OK || kmsKeys == NULL || kmsKeys->m_iSize == 0)
-		return (CKR_GENERAL_ERROR);
-
-	pKey = &kmsKeys->m_pKeys[0];
-
-	rv = kms_new_key_object(label, &dataUnit, pKey, pobj);
-
-	KMSAgent_FreeArrayOfKeys(kmsKeys);
-	return (rv);
-}
-
-CK_RV
-KMS_RefreshObjectList(kms_session_t *sp, kms_slot_t *pslot)
-{
-	kms_object_t *pObj;
-	char label[BUFSIZ];
-	CK_RV rv;
-	objlabel_t  *node;
-
-	rv = kms_reload_labels(sp);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/*
-	 * If an object is not in the list, reload it from KMS.
-	 */
-	node = avl_first(&sp->objlabel_tree);
-	while (node != NULL) {
-		boolean_t found = FALSE;
-		/* Search object list for matching object */
-		pObj = pslot->sl_tobj_list;
-		while (pObj != NULL && !found) {
-			(void) pthread_mutex_lock(&pObj->object_mutex);
-			if ((rv = kms_get_object_label(pObj, label,
-			    sizeof (label))) != CKR_OK) {
-				(void) pthread_mutex_unlock(
-				    &pObj->object_mutex);
-				return (rv);
-			}
-			(void) pthread_mutex_unlock(&pObj->object_mutex);
-			found = (strcmp(label, node->label) == 0);
-			pObj = pObj->next;
-		}
-		if (!found) {
-			/*
-			 * Fetch KMS key and prepend it to the
-			 * token object list for the slot.
-			 */
-			rv = KMS_RetrieveKeyObj(sp, node->label, &pObj);
-			if (rv == CKR_OK) {
-				if (pslot->sl_tobj_list == NULL) {
-					pslot->sl_tobj_list = pObj;
-					pObj->prev = NULL;
-					pObj->next = NULL;
-				} else {
-					pObj->next = pslot->sl_tobj_list;
-					pObj->prev = NULL;
-					pslot->sl_tobj_list = pObj;
-				}
-			}
-		}
-		node = AVL_NEXT(&sp->objlabel_tree, node);
-	}
-	return (rv);
-}
-
-CK_RV
-KMS_Initialize(void)
-{
-	char *ksdir;
-	struct stat fn_stat;
-	KMS_AGENT_STATUS kmsrv;
-
-	ksdir = kms_get_keystore_path();
-	if (ksdir == NULL)
-		return (CKR_GENERAL_ERROR);
-
-	/*
-	 * If the keystore directory doesn't exist, create it.
-	 */
-	if ((stat(ksdir, &fn_stat) != 0) && (errno == ENOENT)) {
-		if (mkdir(ksdir, S_IRUSR|S_IWUSR|S_IXUSR) < 0) {
-			if (errno != EEXIST)
-				return (CKR_GENERAL_ERROR);
-		}
-	}
-
-	if ((kmsrv = KMSAgent_InitializeLibrary(ksdir, FALSE)) !=
-	    KMS_AGENT_STATUS_OK) {
-		return (GetPKCS11StatusFromAgentStatus(kmsrv));
-	}
-
-	return (CKR_OK);
-}
-
-CK_RV
-KMS_Finalize()
-{
-	last_objlist_mtime = 0;
-
-	return (KMSAgent_FinalizeLibrary() == KMS_AGENT_STATUS_OK) ?
-	    CKR_OK : CKR_FUNCTION_FAILED;
-}
-
-CK_RV
-KMS_ChangeLocalPWD(kms_session_t *session,
-	const char *pOldPassword,
-	const char *pNewPassword)
-{
-	KMS_AGENT_STATUS status;
-
-	status = KMSAgent_ChangeLocalPWD(
-	    &session->kmsProfile,
-	    (char * const)pOldPassword,
-	    (char * const)pNewPassword);
-
-	return (GetPKCS11StatusFromAgentStatus(status));
-}
-
-CK_RV
-KMS_GetConfigInfo(kms_cfg_info_t *cfginfo)
-{
-	CK_RV rv = CKR_OK;
-	char cfgfile_path[BUFSIZ];
-	char *ksdir = kms_get_keystore_path();
-
-	if (ksdir == NULL)
-		return (CKR_GENERAL_ERROR);
-
-	(void) snprintf(cfgfile_path, sizeof (cfgfile_path),
-	    "%s/%s", ksdir, KMSTOKEN_CONFIG_FILENAME);
-
-	rv = kms_read_config_data(cfgfile_path, cfginfo);
-
-	return (rv);
-}
-
-CK_RV
-KMS_LoadProfile(KMSClientProfile *profile,
-	kms_cfg_info_t *kmscfg,
-	const char *pPassword,
-	size_t iPasswordLength)
-{
-	KMS_AGENT_STATUS status;
-	CK_RV rv;
-	char *sPassword;
-	char cfgfile_path[BUFSIZ];
-	char *ksdir;
-
-	sPassword = calloc(1, iPasswordLength + 1);
-	if (sPassword == NULL)
-		return (CKR_FUNCTION_FAILED);
-
-	(void) memcpy(sPassword, pPassword, iPasswordLength);
-
-	ksdir = kms_get_keystore_path();
-	if (ksdir == NULL)
-		return (CKR_GENERAL_ERROR);
-
-	(void) snprintf(cfgfile_path, sizeof (cfgfile_path),
-	    "%s/%s", ksdir, KMSTOKEN_CONFIG_FILENAME);
-
-	if ((rv = kms_read_config_data(cfgfile_path, kmscfg))) {
-		free(sPassword);
-		return (rv);
-	}
-
-	/* First, try to load existing profile */
-	status = KMSAgent_LoadProfile(
-	    profile,
-	    kmscfg->name,
-	    kmscfg->agentId,
-	    sPassword,
-	    kmscfg->agentAddr,
-	    kmscfg->transTimeout,
-	    kmscfg->failoverLimit,
-	    kmscfg->discoveryFreq,
-	    kmscfg->securityMode);
-
-	free(sPassword);
-	return (GetPKCS11StatusFromAgentStatus(status));
-}
-
-static CK_RV
-GetPKCS11StatusFromAgentStatus(KMS_AGENT_STATUS status)
-{
-	switch (status) {
-		case KMS_AGENT_STATUS_OK:
-		return (CKR_OK);
-
-		case KMS_AGENT_STATUS_GENERIC_ERROR:
-		return (CKR_GENERAL_ERROR);
-
-		case KMS_AGENT_STATUS_NO_MEMORY:
-		return (CKR_HOST_MEMORY);
-
-		case KMS_AGENT_STATUS_INVALID_PARAMETER:
-		return (CKR_ARGUMENTS_BAD);
-
-		case KMS_AGENT_STATUS_PROFILE_NOT_LOADED:
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-		case KMS_AGENT_STATUS_KMS_UNAVAILABLE:
-		case KMS_AGENT_STATUS_KMS_NO_READY_KEYS:
-		return (CKR_DEVICE_MEMORY);
-
-		case KMS_AGENT_STATUS_NO_FIPS_KMAS_AVAILABLE:
-		return (CKR_GENERAL_ERROR);
-
-		case KMS_AGENT_STATUS_PROFILE_ALREADY_LOADED:
-		return (CKR_USER_ANOTHER_ALREADY_LOGGED_IN);
-
-		case KMS_AGENT_STATUS_FIPS_KAT_AES_KEYWRAP_ERROR:
-		case KMS_AGENT_STATUS_FIPS_KAT_AES_ECB_ERROR:
-		case KMS_AGENT_STATUS_FIPS_KAT_HMAC_SHA1_ERROR:
-		return (CKR_DEVICE_ERROR);
-
-		case KMS_AGENT_STATUS_ACCESS_DENIED:
-		case KMS_AGENT_LOCAL_AUTH_FAILURE:
-		return (CKR_PIN_INCORRECT);
-
-		case KMS_AGENT_STATUS_SERVER_BUSY:
-		case KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS:
-		case KMS_AGENT_STATUS_DATA_UNIT_ID_NOT_FOUND_EXTERNAL_ID_EXISTS:
-		case KMS_AGENT_STATUS_KEY_DOES_NOT_EXIST:
-		case KMS_AGENT_STATUS_KEY_DESTROYED:
-		case KMS_AGENT_AES_KEY_UNWRAP_ERROR:
-		case KMS_AGENT_AES_KEY_WRAP_SETUP_ERROR:
-		case KMS_AGENT_STATUS_KEY_CALLOUT_FAILURE:
-		default:
-		return (CKR_GENERAL_ERROR);
-	}
-}
-
-void
-KMS_UnloadProfile(KMSClientProfile *kmsProfile)
-{
-	(void) KMSAgent_UnloadProfile(kmsProfile);
-}
-
-/*
- * kms_update_label_file
- *
- * KMS doesn't provide an API to allow one to query for available
- * data units (which map 1-1 to keys).  To allow for PKCS11 to
- * query for a list of available objects, we keep a local list
- * and update it when an object is added or deleted.
- */
-static CK_RV
-kms_update_label_file(kms_session_t *sp)
-{
-	CK_RV rv = CKR_OK;
-	objlabel_t *node;
-	char *ksdir, *tmpfile, labelfile[BUFSIZ];
-	FILE *fp;
-	int fd;
-	struct stat statp;
-
-	ksdir = kms_get_keystore_path();
-	if (ksdir == NULL)
-		return (CKR_GENERAL_ERROR);
-
-	(void) snprintf(labelfile, sizeof (labelfile),
-	    "%s/%s", ksdir, KMSTOKEN_LABELLIST_FILENAME);
-
-	tmpfile = tempnam(ksdir, "kmspk11");
-	if (tmpfile == NULL)
-		return (CKR_HOST_MEMORY);
-
-	fp = fopen(tmpfile, "w");
-	if (fp == NULL) {
-		free(tmpfile);
-		return (CKR_GENERAL_ERROR);
-	}
-
-	/* Lock it even though its a temporary file */
-	fd = fileno(fp);
-	if ((rv = flock_fd(fd, F_WRLCK, &objlist_mutex))) {
-		(void) fclose(fp);
-		free(tmpfile);
-		return (rv);
-	}
-
-	node = avl_first(&sp->objlabel_tree);
-	while (node != NULL) {
-		if (node->label != NULL)
-			(void) fprintf(fp, "%s\n", node->label);
-		node = AVL_NEXT(&sp->objlabel_tree, node);
-	}
-
-	/* Update the last mtime */
-	if (fstat(fd, &statp) == 0) {
-		last_objlist_mtime = statp.st_mtime;
-	}
-
-	(void) flock_fd(fd, F_UNLCK, &objlist_mutex);
-	(void) fclose(fp);
-
-	(void) unlink(labelfile);
-	if (rename(tmpfile, labelfile))
-		rv = CKR_GENERAL_ERROR;
-
-	free(tmpfile);
-	return (rv);
-}
-
-/*
- * Destroy a key in the KMS by disassociating an entire data unit.
- * The KMSAgent API does not have an interface for destroying an
- * individual key.
- */
-CK_RV
-KMS_DestroyKey(kms_session_t *session, kms_object_t *i_oKey)
-{
-	CK_RV rv;
-	KMSAgent_DataUnit oDataUnit;
-	KMS_AGENT_STATUS status;
-	char label[BUFSIZ];
-	objlabel_t  labelnode, *tnode;
-	avl_index_t	where = 0;
-
-	/*
-	 * The caller MUST provide a CKA_LABEL when deleting.
-	 */
-	(void) pthread_mutex_lock(&i_oKey->object_mutex);
-	if ((rv = kms_get_object_label(i_oKey, label, sizeof (label)))) {
-		(void) pthread_mutex_unlock(&i_oKey->object_mutex);
-		return (rv);
-	}
-
-	rv = kms_get_data_unit(session, label, &oDataUnit);
-	if (rv != CKR_OK)
-		return (rv);
-
-	status = KMSAgent_DisassociateDataUnitKeys(
-	    &session->kmsProfile, &oDataUnit);
-
-	/*
-	 * Remove the label from the label list and update
-	 * the file that tracks active keys.
-	 */
-	bzero(&labelnode, sizeof (labelnode));
-	labelnode.label = label;
-
-	if ((tnode = avl_find(&session->objlabel_tree,
-	    &labelnode, &where)) != NULL)
-		avl_remove(&session->objlabel_tree, tnode);
-
-	/* rewrite the list of labels to disk */
-	rv = kms_update_label_file(session);
-	if (rv)
-		/* Ignore error here */
-		rv = CKR_OK;
-
-	(void) pthread_mutex_unlock(&i_oKey->object_mutex);
-
-	return (GetPKCS11StatusFromAgentStatus(status));
-}
-
-void
-kms_encode_attributes(kms_object_t *pKey, char *attrstr, int len)
-{
-	char *ptr;
-
-	bzero(attrstr, len);
-
-	(void) strlcpy(attrstr, KMS_ATTR_DESC_PFX, len);
-	ptr = attrstr + strlen(attrstr);
-
-	/*
-	 * Encode as follows:
-	 * CK_OBJECT_CLASS (2 bytes)
-	 * CK_KEY_TYPE (2 bytes)
-	 * CKA_VALUE_LEN (4 bytes)
-	 * CK_CERTIFICATE_TYPE (2 bytes - not used)
-	 * CK_MECHANISM_TYPE (4 bytes)
-	 * boolean attributes (3 bytes)
-	 * extra attributes (1 byte)
-	 * non-boolean attributes
-	 */
-	(void) snprintf(ptr, len - strlen(attrstr),
-	    "%02x%02x%02x00%04x%06x00",
-	    pKey->class,
-	    pKey->key_type,
-	    32,
-	    pKey->mechanism,
-	    (pKey->bool_attr_mask & 0x00FFFFFF));
-}
-
-CK_RV
-KMS_GenerateKey(kms_session_t *session, kms_object_t *i_oKey)
-{
-	CK_RV			rv;
-	CK_ATTRIBUTE		stLabel;
-	KMSAgent_DataUnit	oDataUnit;
-	KMSAgent_Key		oKey;
-	KMS_AGENT_STATUS	status;
-	char			label[128];
-	uchar_t			externalUniqueId[SHA256_DIGEST_LENGTH];
-	char			pDescription[KMS_MAX_DESCRIPTION + 1];
-
-	(void) pthread_mutex_lock(&i_oKey->object_mutex);
-
-	stLabel.type = CKA_LABEL;
-	stLabel.pValue = label;
-	stLabel.ulValueLen = sizeof (label);
-
-	/*
-	 * The caller MUST provide a CKA_LABEL for storing in the KMS.
-	 */
-	if ((rv = kms_get_attribute(i_oKey, &stLabel)) != CKR_OK) {
-		(void) pthread_mutex_unlock(&i_oKey->object_mutex);
-		return (rv);
-	}
-
-	label[stLabel.ulValueLen] = '\0';
-
-	kms_hash_string(label, externalUniqueId);
-
-	/* Encode attributes in Description */
-	kms_encode_attributes(i_oKey, pDescription,
-	    sizeof (pDescription));
-
-	status = KMSAgent_CreateDataUnit(
-	    &session->kmsProfile,
-	    (const unsigned char *)externalUniqueId,
-	    sizeof (externalUniqueId),
-	    label,	/* externalTag */
-	    pDescription,
-	    &oDataUnit);
-
-	/*
-	 * If the DataUnit exists, check to see if it has any keys.
-	 * If it has no keys, then it is OK to continue.
-	 */
-	if (status == KMS_AGENT_STATUS_EXTERNAL_UNIQUE_ID_EXISTS) {
-		int numkeys = 0;
-
-		rv = kms_get_data_unit(session, label, &oDataUnit);
-		if (rv != CKR_OK)
-			return (rv);
-
-		rv = kms_get_data_unit_keys(session,
-		    &oDataUnit, NULL, &numkeys);
-
-		if (rv !=  CKR_OK || numkeys > 0)
-			/*
-			 * This would be better if there were PKCS#11
-			 * error codes for duplicate objects or
-			 * something like that.
-			 */
-			return (CKR_ARGUMENTS_BAD);
-
-		/* If no keys associated with data unit, continue */
-		status = KMS_AGENT_STATUS_OK;
-	}
-
-	if (status != KMS_AGENT_STATUS_OK) {
-		(void) pthread_mutex_unlock(&i_oKey->object_mutex);
-		return (GetPKCS11StatusFromAgentStatus(status));
-	}
-
-	status = KMSAgent_CreateKey(&session->kmsProfile,
-	    &oDataUnit, "", &oKey);
-
-	if (status != KMS_AGENT_STATUS_OK) {
-		/*
-		 * Clean up the old data unit.
-		 */
-		(void) pthread_mutex_unlock(&i_oKey->object_mutex);
-		return (GetPKCS11StatusFromAgentStatus(status));
-	}
-
-	/*
-	 * KMS Agent only creates AES-256 keys, so ignore what the user
-	 * requested at this point.
-	 */
-	OBJ_SEC_VALUE(i_oKey) = malloc(oKey.m_iKeyLength);
-	if (OBJ_SEC_VALUE(i_oKey) == NULL) {
-		(void) pthread_mutex_unlock(&i_oKey->object_mutex);
-		return (CKR_HOST_MEMORY);
-	}
-	(void) memcpy(OBJ_SEC_VALUE(i_oKey), oKey.m_acKey,
-	    oKey.m_iKeyLength);
-	OBJ_SEC_VALUE_LEN(i_oKey) = oKey.m_iKeyLength;
-
-	/*
-	 * Add the label to the local list of available objects
-	 */
-	add_label_node(&session->objlabel_tree, label);
-
-	rv = kms_update_label_file(session);
-
-	(void) pthread_mutex_unlock(&i_oKey->object_mutex);
-
-	return (GetPKCS11StatusFromAgentStatus(status));
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsKeystoreUtil.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#ifndef _KEYSTOREUTIL_H
-#define	_KEYSTOREUTIL_H
-
-#ifdef	__cplusplus
-extern "C"
-{
-#endif
-
-#include "kmsSession.h"
-#include "kmsObject.h"
-
-CK_RV KMS_Initialize(void);
-CK_RV KMS_Finalize();
-CK_RV KMS_LoadProfile(KMSClientProfile *, kms_cfg_info_t *,
-    const char *, size_t);
-CK_RV KMS_GenerateKey(kms_session_t *, kms_object_t *);
-CK_RV KMS_DestroyKey(kms_session_t *, kms_object_t *);
-void KMS_UnloadProfile(KMSClientProfile *);
-CK_RV KMS_RefreshObjectList(kms_session_t *, kms_slot_t *);
-CK_RV KMS_ChangeLocalPWD(kms_session_t *, const char *, const char *);
-CK_RV KMS_GetConfigInfo(kms_cfg_info_t *);
-
-CK_BBOOL kms_is_initialized();
-CK_BBOOL kms_is_pin_set();
-CK_RV kms_reload_labels(kms_session_t *);
-void kms_clear_label_list(avl_tree_t *);
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif	/* _KEYSTOREUTIL_H */
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsObject.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,664 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-
-#include <pthread.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <errno.h>
-#include <string.h>
-#include <security/cryptoki.h>
-#include "kmsGlobal.h"
-#include "kmsObject.h"
-#include "kmsSession.h"
-
-CK_RV
-C_CreateObject(CK_SESSION_HANDLE hSession,
-    CK_ATTRIBUTE_PTR pTemplate,
-    CK_ULONG ulCount,
-    CK_OBJECT_HANDLE_PTR phObject)
-{
-
-	CK_RV rv;
-	kms_session_t *session_p;
-	boolean_t ses_lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	if ((pTemplate == NULL) || (ulCount == 0) ||
-	    (phObject == NULL)) {
-		return (CKR_ARGUMENTS_BAD);
-	}
-
-	/*
-	 * Obtain the session pointer. Also, increment the session
-	 * reference count.
-	 */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/* Create a new object. */
-	rv = kms_add_object(pTemplate, ulCount, phObject, session_p);
-
-	/*
-	 * Decrement the session reference count.
-	 * We do not hold the session lock.
-	 */
-	REFRELE(session_p, ses_lock_held);
-
-	return (rv);
-}
-
-CK_RV
-C_CopyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
-    CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
-    CK_OBJECT_HANDLE_PTR phNewObject)
-{
-
-	CK_RV rv;
-	kms_session_t *session_p;
-	boolean_t ses_lock_held = B_FALSE;
-	kms_object_t *old_object;
-	kms_object_t *new_object = NULL;
-	int i;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/* Check arguments */
-	if (((ulCount > 0) && (pTemplate == NULL)) ||
-	    (phNewObject == NULL)) {
-		return (CKR_ARGUMENTS_BAD);
-	}
-
-	/*
-	 * Obtain the session pointer. Also, increment the session
-	 * reference count.
-	 */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/* Obtain the object pointer. */
-	HANDLE2OBJECT(hObject, old_object, rv);
-	if (rv != CKR_OK) {
-		/*
-		 * Decrement the session reference count.
-		 * We do not hold the session lock.
-		 */
-		REFRELE(session_p, ses_lock_held);
-		return (rv);
-	}
-
-	(void) pthread_mutex_lock(&old_object->object_mutex);
-
-	if (old_object->is_lib_obj) {
-		/*
-		 * Copy the old object to a new object.
-		 * The 3rd argument with TRUE value indicates that
-		 * everything in the object will be duplicated.
-		 */
-		rv = kms_copy_object(old_object, &new_object, B_TRUE,
-		    session_p);
-		(void) pthread_mutex_unlock(&old_object->object_mutex);
-		if ((rv != CKR_OK) || (new_object == NULL)) {
-			/*
-			 * Most likely we ran out of space.
-			 * Decrement the session reference count.
-			 * We do not hold the session lock.
-			 */
-			OBJ_REFRELE(old_object);
-			REFRELE(session_p, ses_lock_held);
-			return (rv);
-		}
-
-		new_object->is_lib_obj = B_TRUE;
-
-		/* Modify the object attribute if requested */
-		for (i = 0; i < ulCount; i++) {
-			/* Set the requested attribute into the new object. */
-			rv = kms_set_attribute(new_object, &pTemplate[i],
-			    B_TRUE);
-
-			if (rv != CKR_OK) {
-				kms_cleanup_object(new_object);
-				OBJ_REFRELE(old_object);
-				REFRELE(session_p, ses_lock_held);
-				return (rv);
-			}
-		}
-
-		/* Insert the new object into this session's object list. */
-		kms_add_object_to_session(new_object, session_p);
-
-		/*
-		 * Decrement the session reference count.
-		 * We do not hold the session lock.
-		 */
-		OBJ_REFRELE(old_object);
-		REFRELE(session_p, ses_lock_held);
-
-		/* set handle of the new object */
-		*phNewObject = (CK_ULONG)new_object;
-
-	}
-
-	return (rv);
-
-failed_cleanup:
-	if (new_object != NULL) {
-		(void) kms_free_object(new_object);
-	}
-
-	OBJ_REFRELE(old_object);
-	REFRELE(session_p, ses_lock_held);
-	return (rv);
-}
-
-CK_RV
-C_DestroyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject)
-{
-	CK_RV rv;
-	kms_object_t *object_p;
-	kms_session_t *session_p = (kms_session_t *)(hSession);
-	kms_slot_t	*pslot;
-	boolean_t ses_lock_held = B_FALSE;
-	CK_SESSION_HANDLE creating_session;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/*
-	 * The reason that we don't call handle2session is because
-	 * the argument hSession may not be the creating_session of
-	 * the object to be destroyed, and we want to avoid the lock
-	 * contention. The handle2session will be called later for
-	 * the creating_session.
-	 */
-	if ((session_p == NULL) ||
-	    (session_p->magic_marker != KMSTOKEN_SESSION_MAGIC)) {
-		return (CKR_SESSION_HANDLE_INVALID);
-	}
-	/* Obtain the object pointer without incrementing reference count. */
-	HANDLE2OBJECT_DESTROY(hObject, object_p, rv);
-	if (rv != CKR_OK) {
-		return (rv);
-	}
-
-	/* Only session objects can be destroyed at a read-only session. */
-	if ((session_p->ses_RO) &&
-	    (object_p->bool_attr_mask & TOKEN_BOOL_ON)) {
-		return (CKR_SESSION_READ_ONLY);
-	}
-
-
-	/*
-	 * If the object is a session object, obtain the session handle
-	 * which object belongs to.  For a token object, we will use the
-	 * session handle from the caller, because the session used to
-	 * create the token object may no longer exist.
-	 */
-	if (!(object_p->bool_attr_mask & TOKEN_BOOL_ON))
-		creating_session = object_p->session_handle;
-	else
-		creating_session = hSession;
-
-	rv = handle2session(creating_session, &session_p);
-	if (rv != CKR_OK) {
-		return (rv);
-	}
-
-	/*
-	 * Set OBJECT_IS_DELETING flag so any access to this
-	 * object will be rejected.
-	 */
-	(void) pthread_mutex_lock(&object_p->object_mutex);
-	if (object_p->obj_delete_sync & OBJECT_IS_DELETING) {
-		(void) pthread_mutex_unlock(&object_p->object_mutex);
-		REFRELE(session_p, ses_lock_held);
-		return (CKR_OBJECT_HANDLE_INVALID);
-	}
-	object_p->obj_delete_sync |= OBJECT_IS_DELETING;
-	(void) pthread_mutex_unlock(&object_p->object_mutex);
-
-	if (object_p->bool_attr_mask & TOKEN_BOOL_ON) {
-		/*
-		 * The first FALSE boolean argument indicates that the caller
-		 * does not hold the slot lock.  The second FALSE boolean
-		 * argument indicates that the caller wants to clean up the
-		 * object in the HW provider also.
-		 */
-		pslot = get_slotinfo();
-		rv = kms_delete_token_object(pslot, session_p, object_p,
-		    B_FALSE, B_FALSE);
-	} else {
-		/*
-		 * The first FALSE boolean argument indicates that the caller
-		 * does not hold the session lock.  The second FALSE boolean
-		 * argument indicates that the caller wants to clean the object
-		 * in the HW provider also.
-		 */
-		rv = kms_delete_object(session_p, object_p, B_FALSE,
-		    B_FALSE);
-	}
-	/*
-	 * Decrement the session reference count.
-	 * We do not hold the session lock.
-	 */
-	REFRELE(session_p, ses_lock_held);
-	return (rv);
-}
-
-CK_RV
-C_GetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
-    CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount)
-{
-
-	CK_RV rv = CKR_OK, rv1 = CKR_OK;
-	kms_object_t *object_p;
-	kms_session_t *session_p;
-	boolean_t ses_lock_held = B_FALSE;
-	int i;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	if ((pTemplate == NULL) || (ulCount == 0))
-		return (CKR_ARGUMENTS_BAD);
-
-	/*
-	 * Obtain the session pointer. Also, increment the session
-	 * reference count.
-	 */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/* Obtain the object pointer. */
-	HANDLE2OBJECT(hObject, object_p, rv);
-	if (rv != CKR_OK) {
-		/*
-		 * Decrement the session reference count.
-		 * We do not hold the session lock.
-		 */
-		REFRELE(session_p, ses_lock_held);
-		return (rv);
-	}
-
-	/* Acquire the lock on the object. */
-	(void) pthread_mutex_lock(&object_p->object_mutex);
-
-	/*
-	 * The object was created in the library. The library
-	 * contains the value information of each attribute.
-	 */
-	for (i = 0; i < ulCount; i++) {
-		/*
-		 * Get the value of each attribute in the template.
-		 * (We must process EVERY attribute in the template.)
-		 */
-		rv = kms_get_attribute(object_p, &pTemplate[i]);
-		if (rv != CKR_OK)
-			rv1 = rv;
-	}
-	(void) pthread_mutex_unlock(&object_p->object_mutex);
-
-clean_exit:
-	/*
-	 * Decrement the session reference count.
-	 * We do not hold the session lock.
-	 */
-	OBJ_REFRELE(object_p);
-	REFRELE(session_p, ses_lock_held);
-	rv = rv1;
-	return (rv);
-}
-
-CK_RV
-C_SetAttributeValue(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
-    CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount)
-{
-	CK_RV rv = CKR_OK;
-	kms_object_t *object_p;
-	kms_object_t *new_object = NULL;
-	kms_session_t *session_p;
-	boolean_t ses_lock_held = B_FALSE;
-	int i;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	if ((pTemplate == NULL) || (ulCount == 0))
-		return (CKR_ARGUMENTS_BAD);
-
-	/*
-	 * Obtain the session pointer. Also, increment the session
-	 * reference count.
-	 */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/* Obtain the object pointer. */
-	HANDLE2OBJECT(hObject, object_p, rv);
-	if (rv != CKR_OK) {
-		/*
-		 * Decrement the session reference count.
-		 * We do not hold the session lock.
-		 */
-		REFRELE(session_p, ses_lock_held);
-		return (rv);
-	}
-
-	/* lock the object */
-	(void) pthread_mutex_lock(&object_p->object_mutex);
-
-	/*
-	 * If the object was created in the HW provider, changing its
-	 * attributes' values need to be done in the provider too.
-	 */
-	if (!object_p->is_lib_obj) {
-
-		/* Cannot modify a token object with a READ-ONLY session */
-		if (session_p->ses_RO &&
-		    (object_p->bool_attr_mask & TOKEN_BOOL_ON)) {
-			(void) pthread_mutex_unlock(&object_p->object_mutex);
-			rv = CKR_SESSION_READ_ONLY;
-			goto clean_exit;
-		}
-	}
-
-	/*
-	 * if we come here, the object must have been created in the
-	 * library.  The work will be done completely in the library.
-	 *
-	 * Copy the old object to a new object. We work on the copied
-	 * version because in case of error we still keep the old one
-	 * intact.
-	 */
-	rv = kms_copy_object(object_p, &new_object, B_FALSE, NULL);
-	(void) pthread_mutex_unlock(&object_p->object_mutex);
-	if ((rv != CKR_OK) || (new_object == NULL)) {
-		/*
-		 * Most likely we ran out of space.
-		 * Decrement the session reference count.
-		 * We do not hold the session lock.
-		 */
-		goto clean_exit;
-	}
-
-	for (i = 0; i < ulCount; i++) {
-		/* Set the requested attribute into the new object. */
-		rv = kms_set_attribute(new_object, &pTemplate[i], B_FALSE);
-
-		if (rv != CKR_OK) {
-			kms_cleanup_object(new_object);
-			goto clean_exit;
-		}
-	}
-
-	/*
-	 * We've successfully set all the requested attributes.
-	 * Merge the new object with the old object, then destory
-	 * the new one. The reason to do the merging is because we
-	 * have to keep the original object handle (address of object).
-	 */
-	(void) pthread_mutex_lock(&object_p->object_mutex);
-	kms_merge_object(object_p, new_object);
-	(void) pthread_mutex_unlock(&object_p->object_mutex);
-
-clean_exit:
-	if (new_object != NULL)
-		(void) kms_free_object(new_object);
-
-	/*
-	 * Decrement the session reference count.
-	 * We do not hold the session lock.
-	 */
-	OBJ_REFRELE(object_p);
-	REFRELE(session_p, ses_lock_held);
-
-	return (rv);
-}
-
-CK_RV
-C_GetObjectSize(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
-    CK_ULONG_PTR pulSize)
-{
-
-	CK_RV rv = CKR_OK;
-	kms_object_t *object_p;
-	kms_session_t *session_p;
-	boolean_t ses_lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/* Check if pulSize is valid */
-	if (pulSize == NULL) {
-		return (CKR_ARGUMENTS_BAD);
-	}
-
-	/*
-	 * Obtain the session pointer. Also, increment the session
-	 * reference count.
-	 */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/* Obtain the object pointer. */
-	HANDLE2OBJECT(hObject, object_p, rv);
-	if (rv != CKR_OK) {
-		/*
-		 * Decrement the session reference count.
-		 * We do not hold the session lock.
-		 */
-		REFRELE(session_p, ses_lock_held);
-		return (rv);
-	}
-
-	/* Acquire the lock on the object. */
-	(void) pthread_mutex_lock(&object_p->object_mutex);
-
-	rv = kms_get_object_size(object_p, pulSize);
-
-	(void) pthread_mutex_unlock(&object_p->object_mutex);
-
-	/*
-	 * Decrement the session reference count.
-	 * We do not hold the session lock.
-	 */
-	OBJ_REFRELE(object_p);
-	REFRELE(session_p, ses_lock_held);
-	return (rv);
-}
-
-CK_RV
-C_FindObjectsInit(CK_SESSION_HANDLE sh, CK_ATTRIBUTE_PTR pTemplate,
-    CK_ULONG ulCount)
-{
-	CK_RV		rv;
-	kms_session_t	*session_p;
-	boolean_t ses_lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/* Check the arguments */
-	if ((ulCount > 0) && (pTemplate == NULL)) {
-		return (CKR_ARGUMENTS_BAD);
-	}
-
-	/*
-	 * Obtain the session pointer. Also, increment the session
-	 * reference count.
-	 */
-	rv = handle2session(sh, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/* Acquire the session lock */
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	ses_lock_held = B_TRUE;
-
-	/* Check to see if find operation is already active */
-	if (session_p->find_objects.flags & CRYPTO_OPERATION_ACTIVE) {
-		/* decrement the session count, and unlock the mutex */
-		REFRELE(session_p, ses_lock_held);
-		return (CKR_OPERATION_ACTIVE);
-	} else {
-		/*
-		 * This active flag will remain ON until application calls
-		 * C_FindObjectsFinal.
-		 */
-		session_p->find_objects.flags = CRYPTO_OPERATION_ACTIVE;
-	}
-	(void) pthread_mutex_unlock(&session_p->session_mutex);
-
-	/*
-	 * If the KMS provider supports object creation, we call the
-	 * CRYPTO_OBJECT_FIND_INIT to initialize object finding.
-	 * Otherwise, all the objects are created in the library and we
-	 * do the find objects solely in the library.
-	 */
-	rv = kms_find_objects_init(session_p, pTemplate, ulCount);
-	if (rv != CKR_OK) {
-		(void) pthread_mutex_lock(&session_p->session_mutex);
-		session_p->find_objects.flags = 0;
-		(void) pthread_mutex_unlock(&session_p->session_mutex);
-	}
-	/* decrement the session count, and unlock the mutex */
-	REFRELE(session_p, ses_lock_held);
-	return (rv);
-}
-
-CK_RV
-C_FindObjects(CK_SESSION_HANDLE sh, CK_OBJECT_HANDLE_PTR phObject,
-    CK_ULONG ulMaxObjectCount, CK_ULONG_PTR pulObjectCount)
-{
-	CK_RV rv = CKR_OK;
-	kms_slot_t		*pslot = NULL;
-	kms_session_t	*session_p;
-	boolean_t ses_lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/* check for invalid arguments */
-	if (((phObject == NULL) && (ulMaxObjectCount != 0)) ||
-	    (pulObjectCount == NULL)) {
-		return (CKR_ARGUMENTS_BAD);
-	}
-
-	if (ulMaxObjectCount == 0) {
-		/* don't need to do anything, just return */
-		*pulObjectCount = 0;
-		return (CKR_OK);
-	}
-
-	/*
-	 * Obtain the session pointer. Also, increment the session
-	 * reference count.
-	 */
-	rv = handle2session(sh, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/* Acquire the slot lock */
-	pslot = get_slotinfo();
-	(void) pthread_mutex_lock(&pslot->sl_mutex);
-
-	/* Acquire the session lock */
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	ses_lock_held = B_TRUE;
-
-	/* Check to see if find operation is active */
-	if (!(session_p->find_objects.flags & CRYPTO_OPERATION_ACTIVE)) {
-		rv = CKR_OPERATION_NOT_INITIALIZED;
-		goto clean_exit;
-	}
-
-	/*
-	 * Similar to C_FindObjectInit(), if the KMS provider supports object
-	 * creation, we need to find objects.
-	 * Otherwise, all the objects are created in the library and we do
-	 * the find objects solely in the library.
-	 */
-
-	rv = kms_find_objects(session_p, phObject,
-	    ulMaxObjectCount, pulObjectCount);
-
-clean_exit:
-	/* decrement the session count, and release the session lock */
-	REFRELE(session_p, ses_lock_held);
-
-	/* release the slot lock */
-	if (pslot)
-		(void) pthread_mutex_unlock(&pslot->sl_mutex);
-
-	return (rv);
-}
-
-CK_RV
-C_FindObjectsFinal(CK_SESSION_HANDLE sh)
-{
-	kms_session_t	*session_p;
-	CK_RV rv;
-	boolean_t ses_lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/*
-	 * Obtain the session pointer. Also, increment the session
-	 * reference count.
-	 */
-	rv = handle2session(sh, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/* Acquire the session lock */
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	ses_lock_held = B_TRUE;
-
-	/* Check to see if find operation is active */
-	if (!(session_p->find_objects.flags & CRYPTO_OPERATION_ACTIVE)) {
-		REFRELE(session_p, ses_lock_held);
-		return (CKR_OPERATION_NOT_INITIALIZED);
-	}
-
-	/*
-	 * Similar to C_FindObjectInit(), if the KMS provider supports object
-	 * creation, we need to finalize the search on the KMS side.
-	 */
-	kms_find_objects_final(session_p);
-
-	/* decrement the session count, and release the lock */
-	REFRELE(session_p, ses_lock_held);
-	return (rv);
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsObject.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,308 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#ifndef	_KMSOBJECT_H
-#define	_KMSOBJECT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <security/pkcs11t.h>
-#include "kmsSession.h"
-#include "kmsSlot.h"
-
-#define	KMSTOKEN_OBJECT_MAGIC 0xECF0B004
-
-#define	KMS_CREATE_OBJ	1
-#define	KMS_GEN_KEY	2
-
-/*
- * Secret key Struct
- */
-typedef struct secret_key_obj {
-	CK_BYTE *sk_value;
-	CK_ULONG sk_value_len;
-	void *key_sched;
-	size_t keysched_len;
-} secret_key_obj_t;
-
-/*
- * This structure is used to hold the attributes in the
- * Extra Attribute List.
- */
-typedef struct attribute_info {
-	CK_ATTRIBUTE	attr;
-	struct attribute_info *next;
-} attribute_info_t;
-
-typedef attribute_info_t *CK_ATTRIBUTE_INFO_PTR;
-
-/*
- * This is the main structure of the Objects.
- */
-typedef struct object {
-	boolean_t	is_lib_obj; /* default is TRUE */
-
-	/* Generic common fields. Always present */
-	CK_OBJECT_CLASS class;
-	CK_KEY_TYPE key_type;
-	CK_ULONG magic_marker;
-	uint64_t bool_attr_mask;
-	CK_MECHANISM_TYPE mechanism;
-
-	/* Fields for access and arbitration */
-	pthread_mutex_t object_mutex;
-	struct object *next;
-	struct object *prev;
-
-	/* Extra non-boolean attribute list */
-	CK_ATTRIBUTE_INFO_PTR extra_attrlistp;
-	CK_ULONG extra_attrcount;
-
-	/* For each object, only one object class is presented */
-	union {
-		secret_key_obj_t  *secret_key;
-	} object_class_u;
-
-	/* Session handle that the object belongs to */
-	CK_SESSION_HANDLE	session_handle;
-	uint32_t	obj_refcnt;	/* object reference count */
-	pthread_cond_t	obj_free_cond;	/* cond variable for signal and wait */
-	uint32_t	obj_delete_sync;	/* object delete sync flags */
-} kms_object_t;
-
-typedef struct find_context {
-	kms_object_t **objs_found;
-	CK_ULONG num_results;
-	CK_ULONG next_result_index; /* next result object to return */
-} find_context_t;
-
-/*
- * The following structure is used to link the to-be-freed session
- * objects into a linked list. The objects on this linked list have
- * not yet been freed via free() after C_DestroyObject() call; instead
- * they are added to this list. The actual free will take place when
- * the number of objects queued reaches MAX_OBJ_TO_BE_FREED, at which
- * time the first object in the list will be freed.
- */
-#define	MAX_OBJ_TO_BE_FREED		300
-
-typedef struct obj_to_be_freed_list {
-	kms_object_t	*first;	/* points to first obj in the list */
-	kms_object_t	*last;	/* points to last obj in the list */
-	uint32_t	count;	/* current total objs in the list */
-	pthread_mutex_t obj_to_be_free_mutex;
-} object_to_be_freed_list_t;
-
-extern object_to_be_freed_list_t obj_delay_freed;
-
-/*
- * The following definitions are the shortcuts
- */
-
-/*
- * Secret Key Object Attributes
- */
-#define	OBJ_SEC(o) \
-	((o)->object_class_u.secret_key)
-#define	OBJ_SEC_VALUE(o) \
-	((o)->object_class_u.secret_key->sk_value)
-#define	OBJ_SEC_VALUE_LEN(o) \
-	((o)->object_class_u.secret_key->sk_value_len)
-#define	OBJ_KEY_SCHED(o) \
-	((o)->object_class_u.secret_key->key_sched)
-#define	OBJ_KEY_SCHED_LEN(o) \
-	((o)->object_class_u.secret_key->keysched_len)
-
-/*
- * key related attributes with CK_BBOOL data type
- */
-#define	DERIVE_BOOL_ON			0x00000001
-#define	LOCAL_BOOL_ON			0x00000002
-#define	SENSITIVE_BOOL_ON		0x00000004
-#define	SECONDARY_AUTH_BOOL_ON		0x00000008
-#define	ENCRYPT_BOOL_ON			0x00000010
-#define	DECRYPT_BOOL_ON			0x00000020
-#define	SIGN_BOOL_ON			0x00000040
-#define	SIGN_RECOVER_BOOL_ON		0x00000080
-#define	VERIFY_BOOL_ON			0x00000100
-#define	VERIFY_RECOVER_BOOL_ON		0x00000200
-#define	WRAP_BOOL_ON			0x00000400
-#define	UNWRAP_BOOL_ON			0x00000800
-#define	TRUSTED_BOOL_ON			0x00001000
-#define	EXTRACTABLE_BOOL_ON		0x00002000
-#define	ALWAYS_SENSITIVE_BOOL_ON	0x00004000
-#define	NEVER_EXTRACTABLE_BOOL_ON	0x00008000
-#define	PRIVATE_BOOL_ON			0x00010000
-#define	TOKEN_BOOL_ON			0x00020000
-#define	MODIFIABLE_BOOL_ON		0x00040000
-
-#define	SECRET_KEY_DEFAULT	(ENCRYPT_BOOL_ON|\
-				DECRYPT_BOOL_ON|\
-				SIGN_BOOL_ON|\
-				VERIFY_BOOL_ON|\
-				WRAP_BOOL_ON|\
-				UNWRAP_BOOL_ON|\
-				EXTRACTABLE_BOOL_ON|\
-				MODIFIABLE_BOOL_ON)
-
-/*
- * Flag definitions for obj_delete_sync
- */
-#define	OBJECT_IS_DELETING	1	/* Object is in a deleting state */
-#define	OBJECT_REFCNT_WAITING	2	/* Waiting for object reference */
-					/* count to become zero */
-
-/*
- * This macro is used to type cast an object handle to a pointer to
- * the object struct. Also, it checks to see if the object struct
- * is tagged with an object magic number. This is to detect when an
- * application passes a bogus object pointer.
- * Also, it checks to see if the object is in the deleting state that
- * another thread is performing. If not, increment the object reference
- * count by one. This is to prevent this object from being deleted by
- * other thread.
- */
-#define	HANDLE2OBJECT_COMMON(hObject, object_p, rv, REFCNT_CODE) { \
-	object_p = (kms_object_t *)(hObject); \
-	if ((object_p == NULL) || \
-		(object_p->magic_marker != KMSTOKEN_OBJECT_MAGIC)) {\
-			rv = CKR_OBJECT_HANDLE_INVALID; \
-	} else { \
-		(void) pthread_mutex_lock(&object_p->object_mutex); \
-		if (!(object_p->obj_delete_sync & OBJECT_IS_DELETING)) { \
-			REFCNT_CODE; \
-			rv = CKR_OK; \
-		} else { \
-			rv = CKR_OBJECT_HANDLE_INVALID; \
-		} \
-		(void) pthread_mutex_unlock(&object_p->object_mutex); \
-	} \
-}
-
-#define	HANDLE2OBJECT(hObject, object_p, rv) \
-	HANDLE2OBJECT_COMMON(hObject, object_p, rv, object_p->obj_refcnt++)
-
-#define	HANDLE2OBJECT_DESTROY(hObject, object_p, rv) \
-	HANDLE2OBJECT_COMMON(hObject, object_p, rv, /* no refcnt increment */)
-
-
-#define	OBJ_REFRELE(object_p) { \
-	(void) pthread_mutex_lock(&object_p->object_mutex); \
-	if ((--object_p->obj_refcnt) == 0 && \
-	    (object_p->obj_delete_sync & OBJECT_REFCNT_WAITING)) { \
-		(void) pthread_cond_signal(&object_p->obj_free_cond); \
-	} \
-	(void) pthread_mutex_unlock(&object_p->object_mutex); \
-}
-
-
-/*
- * Function Prototypes.
- */
-void kms_cleanup_object(kms_object_t *objp);
-
-CK_RV kms_add_object(CK_ATTRIBUTE_PTR pTemplate,  CK_ULONG ulCount,
-    CK_ULONG *objecthandle_p, kms_session_t *sp);
-
-CK_RV kms_delete_object(kms_session_t *, kms_object_t *,
-    boolean_t, boolean_t);
-
-void kms_cleanup_extra_attr(kms_object_t *object_p);
-
-CK_RV kms_copy_extra_attr(CK_ATTRIBUTE_INFO_PTR old_attrp,
-    kms_object_t *object_p);
-
-void kms_cleanup_object_bigint_attrs(kms_object_t *object_p);
-
-CK_RV kms_build_object(CK_ATTRIBUTE_PTR, CK_ULONG, kms_object_t *);
-
-CK_RV kms_copy_object(kms_object_t *old_object,
-    kms_object_t **new_object, boolean_t copy_everything,
-    kms_session_t *sp);
-
-void kms_merge_object(kms_object_t *old_object,
-    kms_object_t *new_object);
-
-CK_RV kms_get_attribute(kms_object_t *object_p,
-    CK_ATTRIBUTE_PTR template);
-
-CK_RV kms_set_attribute(kms_object_t *, CK_ATTRIBUTE_PTR, boolean_t);
-
-void kms_add_object_to_session(kms_object_t *objp, kms_session_t *sp);
-
-CK_RV kms_copy_secret_key_attr(secret_key_obj_t *old_secret_key_obj_p,
-    secret_key_obj_t **new_secret_key_obj_p);
-
-CK_RV kms_validate_attr(CK_ATTRIBUTE_PTR template, CK_ULONG ulAttrNum,
-    CK_OBJECT_CLASS *class);
-
-CK_RV kms_find_objects_init(kms_session_t *sp,
-    CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount);
-
-void kms_find_objects_final(kms_session_t *sp);
-
-CK_RV kms_find_objects(kms_session_t *sp,
-    CK_OBJECT_HANDLE *obj_found, CK_ULONG max_obj_requested,
-    CK_ULONG *found_obj_count);
-
-void kms_process_find_attr(CK_OBJECT_CLASS *pclasses,
-    CK_ULONG *num_result_pclasses, CK_ATTRIBUTE_PTR pTemplate,
-    CK_ULONG ulCount);
-
-boolean_t kms_find_match_attrs(kms_object_t *obj,
-    CK_OBJECT_CLASS *pclasses, CK_ULONG num_pclasses,
-    CK_ATTRIBUTE *tmpl_attr, CK_ULONG num_attr);
-
-CK_ATTRIBUTE_PTR get_extra_attr(CK_ATTRIBUTE_TYPE type, kms_object_t *obj);
-
-CK_RV get_string_from_template(CK_ATTRIBUTE_PTR dest, CK_ATTRIBUTE_PTR src);
-
-void string_attr_cleanup(CK_ATTRIBUTE_PTR template);
-
-void kms_add_token_object_to_slot(kms_object_t *objp,
-    kms_slot_t *pslot);
-
-void kms_remove_token_object_from_slot(kms_slot_t *pslot,
-    kms_object_t *objp);
-
-CK_RV kms_delete_token_object(kms_slot_t *pslot, kms_session_t *sp,
-    kms_object_t *obj, boolean_t lock_held, boolean_t wrapper_only);
-
-void kms_cleanup_pri_objects_in_slot(kms_slot_t *pslot,
-    kms_session_t *sp);
-
-CK_RV kms_get_object_size(kms_object_t *objp, CK_ULONG_PTR pulSize);
-
-void kms_object_delay_free(kms_object_t *);
-
-kms_object_t *kms_new_object();
-void kms_free_object(kms_object_t *);
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif /* _KMSOBJECT_H */
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsObjectUtil.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,930 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <strings.h>
-#include <errno.h>
-#include <security/cryptoki.h>
-#include <cryptoutil.h>
-
-#include "kmsGlobal.h"
-#include "kmsObject.h"
-#include "kmsSession.h"
-#include "kmsSlot.h"
-#include "kmsKeystoreUtil.h"
-
-kms_object_t *
-kms_new_object()
-{
-	kms_object_t *obj;
-
-	obj = calloc(1, sizeof (kms_object_t));
-	if (obj == NULL)
-		return (NULL);
-
-	(void) pthread_cond_init(&obj->obj_free_cond, NULL);
-	(void) pthread_mutex_init(&obj->object_mutex, NULL);
-	obj->magic_marker = KMSTOKEN_OBJECT_MAGIC;
-
-	return (obj);
-}
-
-/*
- * Add an object to the session's object list.
- *
- * This function will acquire the lock on the session, and release
- * that lock after adding the object to the session's object list.
- */
-void
-kms_add_object_to_session(kms_object_t *objp, kms_session_t *sp)
-{
-	/* Acquire the session lock. */
-	(void) pthread_mutex_lock(&sp->session_mutex);
-
-	/* Insert the new object in front of session's object list. */
-	if (sp->object_list == NULL) {
-		sp->object_list = objp;
-		objp->next = NULL;
-		objp->prev = NULL;
-	} else {
-		sp->object_list->prev = objp;
-		objp->next = sp->object_list;
-		objp->prev = NULL;
-		sp->object_list = objp;
-	}
-
-	/* Release the session lock. */
-	(void) pthread_mutex_unlock(&sp->session_mutex);
-}
-
-/*
- * Clean up and release the storage allocated to the object.
- *
- * The function is called either with the object lock being held
- * (by caller kms_delete_object()), or there is no object lock
- * yet (by kms_build_XXX_object() during creating an object).
- */
-void
-kms_cleanup_object(kms_object_t *objp)
-{
-	/*
-	 * Free the storage allocated to a secret key object.
-	 */
-	if (objp->class == CKO_SECRET_KEY) {
-		if (OBJ_SEC(objp) != NULL && OBJ_SEC_VALUE(objp) != NULL) {
-			bzero(OBJ_SEC_VALUE(objp), OBJ_SEC_VALUE_LEN(objp));
-			free(OBJ_SEC_VALUE(objp));
-			OBJ_SEC_VALUE(objp) = NULL;
-			OBJ_SEC_VALUE_LEN(objp) = 0;
-		}
-		if (OBJ_SEC(objp) != NULL)
-			free(OBJ_SEC(objp));
-
-		OBJ_SEC(objp) = NULL;
-	}
-
-	/*
-	 * Free the storage allocated to the extra attribute list.
-	 */
-	kms_cleanup_extra_attr(objp);
-}
-
-void
-kms_free_object(kms_object_t *obj)
-{
-	(void) pthread_cond_destroy(&obj->obj_free_cond);
-	(void) pthread_mutex_destroy(&obj->object_mutex);
-
-	kms_cleanup_object(obj);
-
-	free(obj);
-}
-
-/*
- * Create a new object. Copy the attributes that can be modified
- * (in the boolean attribute mask field and extra attribute list)
- * from the old object to the new object.
- *
- * The caller of this function holds the lock on the old object.
- */
-CK_RV
-kms_copy_object(kms_object_t *old_object, kms_object_t **new_object,
-    boolean_t copy_everything, kms_session_t *sp)
-{
-	CK_RV rv = CKR_OK;
-	kms_object_t *new_objp = NULL;
-	CK_ATTRIBUTE_INFO_PTR attrp;
-
-	/* Allocate new object. */
-	new_objp = kms_new_object();
-	if (new_objp == NULL)
-		return (CKR_HOST_MEMORY);
-
-	new_objp->class = old_object->class;
-	new_objp->bool_attr_mask = old_object->bool_attr_mask;
-
-	attrp = old_object->extra_attrlistp;
-	while (attrp) {
-		/*
-		 * Copy the attribute_info struct from the old
-		 * object to a new attribute_info struct, and add
-		 * that new struct to the extra attribute list
-		 * of the new object.
-		 */
-		rv = kms_copy_extra_attr(attrp, new_objp);
-		if (rv != CKR_OK) {
-			kms_free_object(new_objp);
-			return (rv);
-		}
-		attrp = attrp->next;
-	}
-
-	*new_object = new_objp;
-
-	if (!copy_everything) {
-		/* done with copying all information that can be modified */
-		return (CKR_OK);
-	}
-
-	/*
-	 * Copy the rest of the object.
-	 * Certain fields that are not appropriate for coping will be
-	 * initialized.
-	 */
-	new_objp->key_type = old_object->key_type;
-	new_objp->magic_marker = old_object->magic_marker;
-	new_objp->mechanism = old_object->mechanism;
-	new_objp->session_handle = (CK_SESSION_HANDLE)sp;
-
-	/* copy key related information */
-	switch (new_objp->class) {
-		case CKO_SECRET_KEY:
-			rv = kms_copy_secret_key_attr(OBJ_SEC(old_object),
-			    &(OBJ_SEC(new_objp)));
-			break;
-		default:
-			/* should never be this case */
-			break;
-	}
-	if (rv != CKR_OK) {
-		kms_free_object(new_objp);
-		*new_object = NULL;
-	}
-	return (rv);
-}
-
-/*
- * Copy the attributes (in the boolean attribute mask field and
- * extra attribute list) from the new object back to the original
- * object. Also, clean up and release all the storage in the extra
- * attribute list of the original object.
- *
- * The caller of this function holds the lock on the old object.
- */
-void
-kms_merge_object(kms_object_t *old_object, kms_object_t *new_object)
-{
-	old_object->bool_attr_mask = new_object->bool_attr_mask;
-	kms_cleanup_extra_attr(old_object);
-	old_object->extra_attrlistp = new_object->extra_attrlistp;
-}
-
-/*
- * Create a new object struct.  If it is a session object, add the object to
- * the session's object list.  If it is a token object, add it to the slot's
- * token object list.  The caller does not hold the slot lock.
- */
-CK_RV
-kms_add_object(CK_ATTRIBUTE_PTR pTemplate,  CK_ULONG ulCount,
-	CK_ULONG *objecthandle_p, kms_session_t *sp)
-{
-	CK_RV rv = CKR_OK;
-	kms_object_t *new_objp = NULL;
-	kms_slot_t	*pslot;
-	CK_ATTRIBUTE	pritmpl;
-	CK_BBOOL	is_pri_obj, is_token_obj;
-
-	new_objp = kms_new_object();
-	if (new_objp == NULL)
-		return (CKR_HOST_MEMORY);
-
-	rv = kms_build_object(pTemplate, ulCount, new_objp);
-	if (rv != CKR_OK)
-		goto fail_cleanup;
-
-	/* Cannot create a token object with a READ-ONLY session */
-	pritmpl.type = CKA_TOKEN;
-	pritmpl.pValue = &is_token_obj;
-	pritmpl.ulValueLen = sizeof (is_token_obj);
-	rv = kms_get_attribute(new_objp, &pritmpl);
-	if (rv != CKR_OK)
-		goto fail_cleanup;
-
-	if (is_token_obj && sp->ses_RO) {
-		rv = CKR_SESSION_READ_ONLY;
-		goto fail_cleanup;
-	}
-
-	/*
-	 * If the KMS supports object creation, create the object
-	 * in the KMS.  Otherwise, create the object in the library.
-	 */
-
-	/* Get the CKA_PRIVATE value of this object. */
-	pritmpl.type = CKA_PRIVATE;
-	pritmpl.pValue = &is_pri_obj;
-	pritmpl.ulValueLen = sizeof (is_pri_obj);
-
-	rv = kms_get_attribute(new_objp, &pritmpl);
-	if (rv != CKR_OK) {
-		goto fail_cleanup;
-	}
-
-	/* Set the PRIVATE_BOOL_ON and TOKEN_BOOL_ON attributes */
-	if (is_pri_obj)
-		new_objp->bool_attr_mask |= PRIVATE_BOOL_ON;
-	else
-		new_objp->bool_attr_mask &= ~PRIVATE_BOOL_ON;
-
-	if (is_token_obj)
-		new_objp->bool_attr_mask |= TOKEN_BOOL_ON;
-	else
-		new_objp->bool_attr_mask &= ~TOKEN_BOOL_ON;
-
-	new_objp->session_handle = (CK_SESSION_HANDLE)sp;
-
-	if (is_token_obj) {
-		/* Add the new object to the slot's token object list. */
-		pslot = get_slotinfo();
-		kms_add_token_object_to_slot(new_objp, pslot);
-	} else {
-		/* Add the new object to the session's object list. */
-		kms_add_object_to_session(new_objp, sp);
-	}
-
-	/* Type casting the address of an object struct to an object handle. */
-	if (rv == CKR_OK)
-		*objecthandle_p = (CK_ULONG)new_objp;
-
-fail_cleanup:
-	if (rv != CKR_OK) {
-		kms_free_object(new_objp);
-	}
-	return (rv);
-}
-
-/*
- * Remove an object from the session's object list.
- *
- * The caller of this function holds the session lock.
- */
-CK_RV
-kms_remove_object_from_session(kms_object_t *objp, kms_session_t *sp)
-{
-	kms_object_t *tmp_objp;
-	boolean_t found = B_FALSE;
-
-	/*
-	 * Remove the object from the session's object list.
-	 */
-	if ((sp == NULL) ||
-	    (sp->magic_marker != KMSTOKEN_SESSION_MAGIC)) {
-		return (CKR_SESSION_HANDLE_INVALID);
-	}
-
-	if ((sp->object_list == NULL) || (objp == NULL) ||
-	    (objp->magic_marker != KMSTOKEN_OBJECT_MAGIC)) {
-		return (CKR_OBJECT_HANDLE_INVALID);
-	}
-
-	tmp_objp = sp->object_list;
-	while (tmp_objp) {
-		if (tmp_objp == objp) {
-			found = B_TRUE;
-			break;
-		}
-		tmp_objp = tmp_objp->next;
-	}
-	if (!found)
-		return (CKR_OBJECT_HANDLE_INVALID);
-
-	if (sp->object_list == objp) {
-		/* Object is the first one in the list. */
-		if (objp->next) {
-			sp->object_list = objp->next;
-			objp->next->prev = NULL;
-		} else {
-			/* Object is the only one in the list. */
-			sp->object_list = NULL;
-		}
-	} else {
-		/* Object is not the first one in the list. */
-		if (objp->next) {
-			/* Object is in the middle of the list. */
-			objp->prev->next = objp->next;
-			objp->next->prev = objp->prev;
-		} else {
-			/* Object is the last one in the list. */
-			objp->prev->next = NULL;
-		}
-	}
-	return (CKR_OK);
-}
-
-/*
- * This function adds the to-be-freed session object to a linked list.
- * When the number of objects queued in the linked list reaches the
- * maximum threshold MAX_OBJ_TO_BE_FREED, it will free the first
- * object (FIFO) in the list.
- */
-void
-kms_object_delay_free(kms_object_t *objp)
-{
-	kms_object_t *tmp;
-
-	(void) pthread_mutex_lock(&obj_delay_freed.obj_to_be_free_mutex);
-
-	/* Add the newly deleted object at the end of the list */
-	objp->next = NULL;
-	if (obj_delay_freed.first == NULL) {
-		obj_delay_freed.last = objp;
-		obj_delay_freed.first = objp;
-	} else {
-		obj_delay_freed.last->next = objp;
-		obj_delay_freed.last = objp;
-	}
-
-	if (++obj_delay_freed.count >= MAX_OBJ_TO_BE_FREED) {
-		/*
-		 * Free the first object in the list only if
-		 * the total count reaches maximum threshold.
-		 */
-		obj_delay_freed.count--;
-		tmp = obj_delay_freed.first->next;
-		kms_free_object(obj_delay_freed.first);
-		obj_delay_freed.first = tmp;
-	}
-	(void) pthread_mutex_unlock(&obj_delay_freed.obj_to_be_free_mutex);
-}
-
-static void
-kms_delete_object_cleanup(kms_object_t *objp, boolean_t force)
-{
-	/* Acquire the lock on the object. */
-	(void) pthread_mutex_lock(&objp->object_mutex);
-
-	/*
-	 * Make sure another thread hasn't freed the object.
-	 */
-	if (objp->magic_marker != KMSTOKEN_OBJECT_MAGIC) {
-		(void) pthread_mutex_unlock(&objp->object_mutex);
-		return;
-	}
-
-	/*
-	 * The deletion of an object must be blocked when the object
-	 * reference count is not zero. This means if any object related
-	 * operation starts prior to the delete object operation gets in,
-	 * the object deleting thread must wait for the non-deleting
-	 * operation to be completed before it can proceed the delete
-	 * operation.
-	 *
-	 * Unless we are being forced to shut everything down, this only
-	 * happens if the library's _fini() is running not if someone
-	 * explicitly called C_Finalize().
-	 */
-	if (force) {
-		objp->obj_refcnt = 0;
-	}
-
-	while (objp->obj_refcnt != 0) {
-		/*
-		 * We set the OBJECT_REFCNT_WAITING flag before we put
-		 * this deleting thread in a wait state, so other non-deleting
-		 * operation thread will signal to wake it up only when
-		 * the object reference count becomes zero and this flag
-		 * is set.
-		 */
-		objp->obj_delete_sync |= OBJECT_REFCNT_WAITING;
-		(void) pthread_cond_wait(&objp->obj_free_cond,
-		    &objp->object_mutex);
-	}
-
-	objp->obj_delete_sync &= ~OBJECT_REFCNT_WAITING;
-
-	/* Mark object as no longer valid. */
-	objp->magic_marker = 0;
-	kms_cleanup_object(objp);
-
-	objp->obj_delete_sync &= ~OBJECT_IS_DELETING;
-	(void) pthread_mutex_unlock(&objp->object_mutex);
-
-	if (objp->bool_attr_mask & TOKEN_BOOL_ON)
-		free(objp);
-	else
-		kms_object_delay_free(objp);
-}
-
-/*
- * Delete a session object:
- * - Remove the object from the session's object list.
- * - Release the storage allocated to the object.
- *
- * The boolean argument ses_lock_held is used to indicate that whether
- * the caller holds the session lock or not.
- * - When called by kms_delete_all_objects_in_session() or
- *   kms_delete_pri_objects_in_slot() -- ses_lock_held = TRUE.
- *
- * The boolean argument wrapper_only is used to indicate that whether
- * the caller only wants to clean up the object wrapper from the library and
- * needs not to make an call to KMS.
- * - This argument only applies to the object created in the provider level.
- * - When called by kms_cleanup_pri_objects_in_slot(), wrapper_only is TRUE.
- * - When called by C_DestroyObject(), wrapper_only is FALSE.
- * - When called by kms_delete_all_objects_in_session(), the value of
- *   wrapper_only depends on its caller.
- */
-CK_RV
-kms_delete_object(kms_session_t *sp, kms_object_t *objp,
-    boolean_t ses_lock_held, boolean_t wrapper_only)
-{
-	CK_RV rv = CKR_OK;
-
-	/*
-	 * Check to see if the caller holds the lock on the session.
-	 * If not, we need to acquire that lock in order to proceed.
-	 */
-	if (!ses_lock_held) {
-		/* Acquire the session lock. */
-		(void) pthread_mutex_lock(&sp->session_mutex);
-	}
-
-	/* Remove the object from the session's object list first. */
-	if ((rv = kms_remove_object_from_session(objp, sp))) {
-		if (!ses_lock_held)
-			(void) pthread_mutex_unlock(&sp->session_mutex);
-		return (rv);
-	}
-
-	if (!wrapper_only)
-		(void) pthread_mutex_unlock(&sp->session_mutex);
-
-	kms_delete_object_cleanup(objp, wrapper_only);
-
-	return (rv);
-}
-
-/*
- * Delete all the objects in a session. The caller holds the lock
- * on the session.   If the wrapper_only argument is TRUE, the caller only
- * want to clean up object wrappers in the library.
- */
-void
-kms_delete_all_objects_in_session(kms_session_t *sp,
-    boolean_t wrapper_only)
-{
-	kms_object_t *objp = sp->object_list;
-	kms_object_t *objp1;
-
-	/* Delete all the objects in the session. */
-	while (objp) {
-		objp1 = objp->next;
-		(void) kms_delete_object(sp, objp, B_TRUE,
-		    wrapper_only);
-
-		objp = objp1;
-	}
-}
-
-static CK_RV
-add_to_search_result(kms_object_t *obj, find_context_t *fcontext,
-    CK_ULONG *num_result_alloc)
-{
-	/*
-	 * allocate space for storing results if the currently
-	 * allocated space is not enough
-	 */
-	if (*num_result_alloc <= fcontext->num_results) {
-		fcontext->objs_found = realloc(fcontext->objs_found,
-		    sizeof (kms_object_t *) * (*num_result_alloc + BUFSIZ));
-		if (fcontext->objs_found == NULL) {
-			return (CKR_HOST_MEMORY);
-		}
-		*num_result_alloc += BUFSIZ;
-	}
-
-	(fcontext->objs_found)[(fcontext->num_results)++] = obj;
-	return (CKR_OK);
-}
-
-static CK_RV
-search_for_objects(kms_session_t *sp, CK_ATTRIBUTE_PTR pTemplate,
-    CK_ULONG ulCount, find_context_t *fcontext)
-{
-	kms_session_t *session_p;
-	kms_object_t *obj;
-	CK_OBJECT_CLASS pclasses[6]; /* classes attrs possibly exist */
-	CK_ULONG num_pclasses;	/* number of possible classes */
-	CK_ULONG num_result_alloc = 0; /* spaces allocated for results */
-	CK_RV rv = CKR_OK;
-	kms_slot_t	*pslot = NULL;
-	boolean_t token_specified = B_FALSE;
-	boolean_t token_flag_val = B_FALSE;
-	int i;
-
-	if (ulCount > 0) {
-		/* there are some search requirement */
-		kms_process_find_attr(pclasses, &num_pclasses,
-		    pTemplate, ulCount);
-	}
-
-	/*
-	 * look through template and see if it explicitly specifies
-	 * whether we need to look for token objects or not
-	 */
-	for (i = 0; i < ulCount; i++) {
-		if (pTemplate[i].type == CKA_TOKEN) {
-			token_specified = B_TRUE;
-			token_flag_val = *((CK_BBOOL *)pTemplate[i].pValue);
-			break;
-		}
-	}
-
-	pslot = get_slotinfo();
-
-	/* Acquire the slot lock */
-	if (token_flag_val || !token_specified) {
-		(void) pthread_mutex_lock(&pslot->sl_mutex);
-		/*
-		 * Make sure the object list is current.
-		 */
-		rv = KMS_RefreshObjectList(sp, pslot);
-		if (rv != CKR_OK) {
-			(void) pthread_mutex_unlock(&pslot->sl_mutex);
-			return (rv);
-		}
-
-		obj = pslot->sl_tobj_list;
-		while (obj) {
-			(void) pthread_mutex_lock(&obj->object_mutex);
-			if (((token_specified) && (ulCount > 1)) ||
-			    ((!token_specified) && (ulCount > 0))) {
-				if (kms_find_match_attrs(obj, pclasses,
-				    num_pclasses, pTemplate, ulCount)) {
-					rv = add_to_search_result(
-					    obj, fcontext, &num_result_alloc);
-				}
-			} else {
-				/* no search criteria, just record the object */
-				rv = add_to_search_result(obj, fcontext,
-				    &num_result_alloc);
-			}
-			(void) pthread_mutex_unlock(&obj->object_mutex);
-			if (rv != CKR_OK) {
-				goto cleanup;
-			}
-			obj = obj->next;
-		}
-		(void) pthread_mutex_unlock(&pslot->sl_mutex);
-	}
-
-	if (token_flag_val) {
-		return (rv);
-	}
-
-	/*
-	 * Go through all objects in each session.
-	 * Acquire individual session lock for the session
-	 * we are searching.
-	 */
-	session_p = pslot->sl_sess_list;
-	while (session_p) {
-		(void) pthread_mutex_lock(&session_p->session_mutex);
-		obj = session_p->object_list;
-		while (obj) {
-			(void) pthread_mutex_lock(&obj->object_mutex);
-			if (ulCount > 0) {
-				if (kms_find_match_attrs(obj, pclasses,
-				    num_pclasses, pTemplate, ulCount)) {
-					rv = add_to_search_result(
-					    obj, fcontext, &num_result_alloc);
-				}
-			} else {
-				/* no search criteria, just record the object */
-				rv = add_to_search_result(obj, fcontext,
-				    &num_result_alloc);
-			}
-			(void) pthread_mutex_unlock(&obj->object_mutex);
-			if (rv != CKR_OK) {
-				(void) pthread_mutex_unlock(
-				    &session_p->session_mutex);
-				goto cleanup;
-			}
-			obj = obj->next;
-		}
-		(void) pthread_mutex_unlock(&session_p->session_mutex);
-		session_p = session_p->next;
-	}
-
-cleanup:
-	/* Release the slot lock */
-	(void) pthread_mutex_unlock(&pslot->sl_mutex);
-	return (rv);
-}
-
-/*
- * Initialize the context for C_FindObjects() calls
- */
-CK_RV
-kms_find_objects_init(kms_session_t *sp, CK_ATTRIBUTE_PTR pTemplate,
-    CK_ULONG ulCount)
-{
-	CK_RV rv = CKR_OK;
-	CK_OBJECT_CLASS class; /* for kms_validate_attr(). Value unused */
-	find_context_t *fcontext;
-
-	if (ulCount) {
-		rv = kms_validate_attr(pTemplate, ulCount, &class);
-		/* Make sure all attributes in template are valid */
-		if (rv != CKR_OK) {
-			return (rv);
-		}
-	}
-
-	/* prepare the find context */
-	fcontext = calloc(1, sizeof (find_context_t));
-	if (fcontext == NULL) {
-		return (CKR_HOST_MEMORY);
-	}
-
-	rv = search_for_objects(sp, pTemplate, ulCount, fcontext);
-	if (rv != CKR_OK) {
-		free(fcontext);
-		return (rv);
-	}
-
-	/* store the find_context in the session */
-	sp->find_objects.context = (CK_VOID_PTR)fcontext;
-
-	return (rv);
-}
-
-void
-kms_find_objects_final(kms_session_t *sp)
-{
-	find_context_t *fcontext;
-
-	fcontext = sp->find_objects.context;
-	sp->find_objects.context = NULL;
-	sp->find_objects.flags = 0;
-	if (fcontext->objs_found != NULL) {
-		free(fcontext->objs_found);
-	}
-
-	free(fcontext);
-}
-
-CK_RV
-kms_find_objects(kms_session_t *sp, CK_OBJECT_HANDLE *obj_found,
-    CK_ULONG max_obj_requested, CK_ULONG *found_obj_count)
-{
-	find_context_t *fcontext;
-	CK_ULONG num_obj_found = 0;
-	CK_ULONG i;
-	kms_object_t *obj;
-
-	fcontext = sp->find_objects.context;
-
-	for (i = fcontext->next_result_index;
-	    ((num_obj_found < max_obj_requested) &&
-	    (i < fcontext->num_results));
-	    i++) {
-		obj = fcontext->objs_found[i];
-		if (obj != NULL) {
-			(void) pthread_mutex_lock(&obj->object_mutex);
-			/* a sanity check to make sure the obj is still valid */
-			if (obj->magic_marker == KMSTOKEN_OBJECT_MAGIC) {
-				obj_found[num_obj_found] =
-				    (CK_OBJECT_HANDLE)obj;
-				num_obj_found++;
-			}
-			(void) pthread_mutex_unlock(&obj->object_mutex);
-		}
-	}
-	fcontext->next_result_index = i;
-	*found_obj_count = num_obj_found;
-	return (CKR_OK);
-}
-
-/*
- * Add an token object to the token object list in slot.
- *
- * This function will acquire the lock on the slot, and release
- * that lock after adding the object to the slot's token object list.
- */
-void
-kms_add_token_object_to_slot(kms_object_t *objp, kms_slot_t *pslot)
-{
-	/* Acquire the slot lock. */
-	(void) pthread_mutex_lock(&pslot->sl_mutex);
-
-	/* Insert the new object in front of slot's token object list. */
-	if (pslot->sl_tobj_list == NULL) {
-		pslot->sl_tobj_list = objp;
-		objp->next = NULL;
-		objp->prev = NULL;
-	} else {
-		pslot->sl_tobj_list->prev = objp;
-		objp->next = pslot->sl_tobj_list;
-		objp->prev = NULL;
-		pslot->sl_tobj_list = objp;
-	}
-
-	/* Release the slot lock. */
-	(void) pthread_mutex_unlock(&pslot->sl_mutex);
-}
-
-/*
- * Remove an token object from the slot's token object list.
- * This routine is called by kms_delete_token_object().
- * The caller of this function hold the slot lock.
- */
-void
-kms_remove_token_object_from_slot(kms_slot_t *pslot,
-    kms_object_t *objp)
-{
-
-	if (pslot->sl_tobj_list == objp) {
-		/* Object is the first one in the list */
-		if (objp->next) {
-			pslot->sl_tobj_list = objp->next;
-			objp->next->prev = NULL;
-		} else {
-			/* Object is the only one in the list. */
-			pslot->sl_tobj_list = NULL;
-		}
-	} else {
-		/* Object is not the first one in the list. */
-		if (objp->next) {
-			/* Object is in the middle of the list. */
-			if (objp->prev)
-				objp->prev->next = objp->next;
-			objp->next->prev = objp->prev;
-		} else if (objp->prev) {
-			/* Object is the last one in the list. */
-			objp->prev->next = NULL;
-		}
-	}
-}
-
-/*
- * Delete a token object:
- * - Remove the object from the slot's token object list.
- * - Release the storage allocated to the object.
- *
- * The boolean argument slot_lock_held is used to indicate that whether
- * the caller holds the slot lock or not. When the caller does not hold
- * the slot lock, this function will acquire that lock in order to proceed,
- * and also release that lock before returning to caller.
- *
- * The boolean argument wrapper_only is used to indicate that whether
- * the caller only wants to the object wrapper from library.
- */
-CK_RV
-kms_delete_token_object(kms_slot_t *pslot, kms_session_t *sp,
-    kms_object_t *objp, boolean_t slot_lock_held, boolean_t wrapper_only)
-{
-	CK_RV rv = CKR_OK;
-
-	if (!slot_lock_held) {
-		(void) pthread_mutex_lock(&pslot->sl_mutex);
-	}
-	if (!wrapper_only && objp->class == CKO_SECRET_KEY) {
-		/* Delete from KMS */
-		rv = KMS_DestroyKey(sp, objp);
-	}
-
-	/* Remove the object from the slot's token object list first. */
-	kms_remove_token_object_from_slot(pslot, objp);
-
-	/* Release the slot lock if the call doesn't hold the lock. */
-	if (!slot_lock_held) {
-		(void) pthread_mutex_unlock(&pslot->sl_mutex);
-	}
-
-	kms_delete_object_cleanup(objp, wrapper_only);
-
-	return (rv);
-}
-
-/*
- * Clean up private object wrappers in this slot. The caller holds the slot
- * lock.
- */
-void
-kms_cleanup_pri_objects_in_slot(kms_slot_t *pslot,
-    kms_session_t *cur_sp)
-{
-	kms_session_t *session_p;
-	kms_object_t *objp;
-	kms_object_t *objp1;
-
-	/*
-	 * Delete every private token object from
-	 * the slot token object list.
-	 */
-	(void) pthread_mutex_lock(&pslot->sl_mutex);
-	objp = pslot->sl_tobj_list;
-	while (objp) {
-		objp1 = objp->next;
-		/*
-		 * The first TRUE boolean argument indicates that the caller
-		 * hold the slot lock.  The second TRUE boolean argument
-		 * indicates that the caller just wants to clean up the object
-		 * wrapper from the library only.
-		 */
-		if (objp->bool_attr_mask & PRIVATE_BOOL_ON) {
-			(void) kms_delete_token_object(pslot, cur_sp, objp,
-			    B_TRUE, B_TRUE);
-		}
-		objp = objp1;
-	}
-
-	(void) pthread_mutex_unlock(&pslot->sl_mutex);
-	/*
-	 * Walk through all the sessions in this slot and delete every
-	 * private object.
-	 */
-	session_p = pslot->sl_sess_list;
-	while (session_p) {
-
-		/* Delete all the objects in the session. */
-		objp = session_p->object_list;
-		while (objp) {
-			objp1 = objp->next;
-			/*
-			 * The FALSE boolean argument indicates that the
-			 * caller does not hold the session lock.  The TRUE
-			 * boolean argument indicates that the caller just
-			 * want to clean upt the object wrapper from the
-			 * library only.
-			 */
-			if (objp->bool_attr_mask & PRIVATE_BOOL_ON) {
-				(void) kms_delete_object(session_p,
-				    objp, B_FALSE, B_TRUE);
-			}
-			objp = objp1;
-		}
-
-		session_p = session_p->next;
-	}
-}
-
-/*
- * Get the object size in bytes for the objects created in the library.
- */
-CK_RV
-kms_get_object_size(kms_object_t *obj, CK_ULONG_PTR pulSize)
-{
-	CK_RV rv = CKR_OK;
-	CK_ULONG obj_size;
-
-	obj_size = sizeof (kms_object_t);
-
-	switch (obj->class) {
-	case CKO_SECRET_KEY:
-		obj_size += OBJ_SEC_VALUE_LEN(obj);
-		break;
-
-	default:
-		rv = CKR_OBJECT_HANDLE_INVALID;
-	}
-
-	if (rv == CKR_OK) {
-		*pulSize = obj_size;
-	}
-
-	return (rv);
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsRand.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include <security/cryptoki.h>
-#include "kmsGlobal.h"
-
-/*ARGSUSED*/
-CK_RV
-C_SeedRandom(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSeed, CK_ULONG ulSeedLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_GenerateRandom(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pRandomData,
-    CK_ULONG ulRandomLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsSession.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,355 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include <pthread.h>
-#include <errno.h>
-#include <security/cryptoki.h>
-#include "kmsGlobal.h"
-#include "kmsSession.h"
-#include "kmsSlot.h"
-#include "kmsKeystoreUtil.h"
-
-CK_RV
-C_OpenSession(CK_SLOT_ID slotID, CK_FLAGS flags, CK_VOID_PTR pApplication,
-    CK_NOTIFY Notify, CK_SESSION_HANDLE_PTR phSession)
-{
-	CK_RV rv = CKR_OK;
-	kms_slot_t	*pslot;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	if (!(flags & CKF_SERIAL_SESSION))
-		return (CKR_SESSION_PARALLEL_NOT_SUPPORTED);
-
-	if (phSession == NULL)
-		return (CKR_ARGUMENTS_BAD);
-
-	if (slotID != KMS_TOKEN_SLOTID) {
-		return (CKR_SLOT_ID_INVALID);
-	}
-
-	/*
-	 * Acquire the slot lock to protect sl_state and sl_sess_list.
-	 * These two fields need to be protected atomically, even though
-	 * "sl_sess_list" is updated in kms_add_session().
-	 */
-	pslot = get_slotinfo();
-	(void) pthread_mutex_lock(&pslot->sl_mutex);
-
-	/* If SO is logged in the slot, only the RW session is allowed. */
-	if ((pslot->sl_state == CKU_SO) && !(flags & CKF_RW_SESSION)) {
-		(void) pthread_mutex_unlock(&pslot->sl_mutex);
-		return (CKR_SESSION_READ_WRITE_SO_EXISTS);
-	}
-
-	/* Create a new session */
-	rv = kms_add_session(slotID, flags, pApplication, Notify,
-	    phSession);
-
-	(void) pthread_mutex_unlock(&pslot->sl_mutex);
-	return (rv);
-}
-
-CK_RV
-C_CloseSession(CK_SESSION_HANDLE hSession)
-{
-	CK_RV rv;
-
-	kms_session_t *session_p;
-	boolean_t ses_lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/*
-	 * Obtain the session pointer. Also, increment the session
-	 * reference count.
-	 */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-	ses_lock_held = B_TRUE;
-
-	/*
-	 * Set SESSION_IS_CLOSING flag so any access to this
-	 * session will be rejected.
-	 */
-	if (session_p->ses_close_sync & SESSION_IS_CLOSING) {
-		REFRELE(session_p, ses_lock_held);
-		return (CKR_SESSION_CLOSED);
-	}
-	session_p->ses_close_sync |= SESSION_IS_CLOSING;
-
-	/*
-	 * Decrement the session reference count.
-	 * We hold the session lock, and REFRELE()
-	 * will release the session lock for us.
-	 */
-	REFRELE(session_p, ses_lock_held);
-
-	/*
-	 * Delete a session by calling kms_delete_session() with
-	 * a session pointer and two boolean arguments. The 3rd argument
-	 * boolean value FALSE indicates that the caller does not
-	 * hold the slot lock.  The 4th argument boolean value B_FALSE
-	 * indicates that we want to delete all the objects completely.
-	 *
-	 * kms_delete_session() will reset SESSION_IS_CLOSING
-	 * flag after it is done.
-	 */
-	kms_delete_session(session_p, B_FALSE, B_FALSE);
-	return (rv);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_CloseAllSessions(CK_SLOT_ID slotID)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/* Delete all the sessions and release the allocated resources */
-	kms_delete_all_sessions(B_FALSE);
-
-	return (CKR_OK);
-}
-
-/*
- * Utility routine to get CK_STATE value for a session.
- * The caller should not be holding the session lock.
- */
-static CK_STATE
-get_ses_state(kms_session_t *session_p)
-{
-	CK_STATE state;
-	kms_slot_t *pslot;
-
-	pslot = get_slotinfo();
-	(void) pthread_mutex_lock(&pslot->sl_mutex);
-
-	if (pslot->sl_state == CKU_PUBLIC) {
-		state = (session_p->ses_RO) ?
-		    CKS_RO_PUBLIC_SESSION : CKS_RW_PUBLIC_SESSION;
-	} else if (pslot->sl_state == CKU_USER) {
-		state = (session_p->ses_RO) ?
-		    CKS_RO_USER_FUNCTIONS : CKS_RW_USER_FUNCTIONS;
-	} else if (pslot->sl_state == CKU_SO) {
-		state = CKS_RW_SO_FUNCTIONS;
-	}
-
-	(void) pthread_mutex_unlock(&pslot->sl_mutex);
-
-	return (state);
-}
-
-CK_RV
-C_GetSessionInfo(CK_SESSION_HANDLE hSession, CK_SESSION_INFO_PTR pInfo)
-{
-	kms_session_t *session_p;
-	CK_RV rv;
-	boolean_t ses_lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	if (pInfo == NULL)
-		return (CKR_ARGUMENTS_BAD);
-
-	/*
-	 * Obtain the session pointer. Also, increment the session
-	 * reference count.
-	 */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/* Provide information for the specified session */
-	pInfo->slotID = session_p->ses_slotid;
-	pInfo->flags = session_p->flags;
-	pInfo->ulDeviceError = 0;
-	pInfo->state = get_ses_state(session_p);
-
-	/*
-	 * Decrement the session reference count.
-	 */
-	REFRELE(session_p, ses_lock_held);
-
-	return (rv);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_GetOperationState(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pOperationState,
-    CK_ULONG_PTR pulOperationStateLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_SetOperationState(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pOperationState,
-    CK_ULONG ulOperationStateLen, CK_OBJECT_HANDLE hEncryptionKey,
-    CK_OBJECT_HANDLE hAuthenticationKey)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-CK_RV
-C_Login(CK_SESSION_HANDLE hSession, CK_USER_TYPE userType,
-    CK_UTF8CHAR_PTR pPin, CK_ULONG ulPinLen)
-{
-	CK_RV	rv = CKR_OK;
-	kms_session_t *session_p;
-	kms_slot_t	*pslot;
-	boolean_t ses_lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	if ((userType != CKU_SO) && (userType != CKU_USER)) {
-		return (CKR_USER_TYPE_INVALID);
-	}
-
-	/*
-	 * Obtain the session pointer. Also, increment the session
-	 * reference count.
-	 */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/* Acquire the slot lock */
-	pslot = get_slotinfo();
-	(void) pthread_mutex_lock(&pslot->sl_mutex);
-
-	/* Check if the slot is logged in already */
-	if ((pslot->sl_state == CKU_USER) || (pslot->sl_state == CKU_SO)) {
-		rv = CKR_USER_ALREADY_LOGGED_IN;
-		goto clean_exit;
-	}
-
-	/* To login as SO, every session in this slot needs to be R/W */
-	if (userType == CKU_SO) {
-		kms_session_t  *sp;
-		boolean_t	found;
-
-		found = B_FALSE;
-		sp = pslot->sl_sess_list;
-		while (sp) {
-			/*
-			 * Need not to lock individual sessions before
-			 * accessing their "ses_RO" and "next" fields,
-			 * because they are always accessed under the
-			 * slot's mutex protection.
-			 */
-			if (sp->ses_RO) {
-				found = B_TRUE;
-				break;
-			}
-			sp = sp->next;
-		}
-
-		if (found) {
-			rv = CKR_SESSION_READ_ONLY_EXISTS;
-			goto clean_exit;
-		}
-	}
-
-	/*
-	 * Login to KMS by attempting to load the profile using
-	 * the given password.
-	 */
-	rv = KMS_LoadProfile(
-	    &session_p->kmsProfile,
-	    &session_p->configInfo,
-	    (const char *)pPin,
-	    (size_t)ulPinLen);
-
-	if (rv == CKR_OK) {
-		/* Set the slot's session state. */
-		pslot->sl_state = userType;
-	}
-
-clean_exit:
-
-	REFRELE(session_p, ses_lock_held);
-	(void) pthread_mutex_unlock(&pslot->sl_mutex);
-	return (rv);
-}
-
-CK_RV
-C_Logout(CK_SESSION_HANDLE hSession)
-{
-	CK_RV	rv = CKR_OK;
-	kms_session_t *session_p;
-	kms_slot_t	*pslot;
-	boolean_t ses_lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/*
-	 * Obtain the session pointer. Also, increment the session
-	 * reference count.
-	 */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/* Acquire the slot lock. */
-	pslot = get_slotinfo();
-	(void) pthread_mutex_lock(&pslot->sl_mutex);
-
-	/* Check if the user or SO was logged in  */
-	if (pslot->sl_state == CKU_PUBLIC) {
-		rv = CKR_USER_NOT_LOGGED_IN;
-		goto clean_exit;
-	}
-
-	KMS_UnloadProfile(&session_p->kmsProfile);
-
-	/*
-	 * If this slot was logged in as USER previously, we need to clean up
-	 * all private object wrappers in library for this slot.
-	 */
-	kms_cleanup_pri_objects_in_slot(pslot, session_p);
-
-	if (rv == CKR_OK) {
-		/* Reset the slot's session state. */
-		pslot->sl_state = CKU_PUBLIC;
-	}
-
-clean_exit:
-	REFRELE(session_p, ses_lock_held);
-	(void) pthread_mutex_unlock(&pslot->sl_mutex);
-	return (rv);
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsSession.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,188 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#ifndef _KMSSESSION_H
-#define	_KMSSESSION_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <stdio.h>
-#include <pthread.h>
-#include <sys/avl.h>
-#include <security/pkcs11t.h>
-
-#define	K_SOLARIS_PLATFORM
-#include "KMSAgent.h"
-
-#define	KMSTOKEN_SESSION_MAGIC	0xECF00004
-
-#define	CRYPTO_OPERATION_ACTIVE 0x01
-#define	CRYPTO_OPERATION_UPDATE 0x02
-
-typedef struct {
-	CK_MECHANISM	mech;
-	void		*context;
-	uint32_t	flags;
-} kms_active_op_t;
-
-typedef struct {
-	char *label;
-	avl_node_t nodep;
-} objlabel_t;
-
-#define	KMSOFFSETOF(s, m)	((size_t)(&(((s *)0)->m)))
-
-/*
- * Data stored in the KMS profile config file.
- */
-typedef struct {
-	char	name[BUFSIZ];
-	char	agentId[BUFSIZ];
-	char	agentAddr[BUFSIZ];
-	int	transTimeout;
-	int	failoverLimit;
-	int	discoveryFreq;
-	int	securityMode;
-} kms_cfg_info_t;
-
-typedef struct session {
-	CK_ULONG	magic_marker;	/* magic # be validated for integrity */
-	pthread_mutex_t	session_mutex;	/* session's mutex lock */
-	pthread_mutex_t ses_free_mutex;	/* mutex used during closing session */
-	pthread_cond_t	ses_free_cond;	/* cond variable for signal and wait */
-	uint32_t	ses_refcnt;	/* session reference count */
-	uint32_t	ses_close_sync;	/* session closing flags */
-	boolean_t	ses_RO;		/* RO or RW session flag */
-	CK_SLOT_ID	ses_slotid;	/* slotID saved from C_OpenSession() */
-
-	/* Place holder for parameters passed in the C_OpenSession */
-	CK_FLAGS	flags;
-	CK_NOTIFY	Notify;
-	CK_VOID_PTR	pApplication;
-
-	/* Pointers to form the global session list */
-	struct session	*next;		/* points to next session on the list */
-	struct session	*prev;		/* points to prev session on the list */
-
-	struct object	*object_list;	/* points to list of objects */
-
-	kms_active_op_t	find_objects;
-	kms_active_op_t	encrypt;
-	kms_active_op_t	decrypt;
-
-	kms_cfg_info_t	configInfo;
-
-	avl_tree_t	objlabel_tree;
-	KMSClientProfile kmsProfile;
-} kms_session_t;
-
-/*
- * The following structure is used to link the to-be-freed sessions
- * into a linked list. The sessions on this linked list have
- * not yet been freed via free() after C_CloseSession() call; instead
- * they are added to this list. The actual free will take place when
- * the number of sessions queued reaches MAX_SES_TO_BE_FREED, at which
- * time the first session in the list will be freed.
- */
-#define	MAX_SES_TO_BE_FREED		300
-
-typedef struct ses_to_be_freed_list {
-	kms_session_t *first; /* points to the first session in the list */
-	kms_session_t *last;  /* points to the last session in the list */
-	uint32_t	count;   /* current total sessions in the list */
-	pthread_mutex_t ses_to_be_free_mutex;
-} ses_to_be_freed_list_t;
-
-extern ses_to_be_freed_list_t ses_delay_freed;
-extern CK_ULONG kms_session_cnt;
-extern CK_ULONG kms_session_rw_cnt;
-
-/*
- * Flag definitions for ses_close_sync
- */
-#define	SESSION_IS_CLOSING	1	/* Session is in a closing state */
-#define	SESSION_REFCNT_WAITING	2	/* Waiting for session reference */
-					/* count to become zero */
-/*
- * This macro is used to decrement the session reference count by one.
- *
- * The caller of this macro uses the argument lock_held to indicate that
- * whether the caller holds the lock on the session or not.
- *
- * REFRELE macro does the following:
- * 1) Get the session lock if the caller does not hold it.
- * 2) Decrement the session reference count by one.
- * 3) If the session reference count becomes zero after being decremented,
- *    and there is a closing session thread in the wait state, then
- *    call pthread_cond_signal() to wake up that thread who is blocked
- *    in the session deletion routine due to non-zero reference ount.
- * 4) Always release the session lock.
- */
-#define	REFRELE(s, ses_lock_held) { \
-	if (!ses_lock_held) \
-		(void) pthread_mutex_lock(&s->session_mutex);   \
-	if ((--((s)->ses_refcnt) == 0) &&    \
-	    (s->ses_close_sync & SESSION_REFCNT_WAITING)) {     \
-		(void) pthread_mutex_unlock(&s->session_mutex);   \
-		(void) pthread_cond_signal(&s->ses_free_cond); \
-	} else {        \
-		(void) pthread_mutex_unlock(&s->session_mutex);   \
-	}       \
-}
-
-
-/*
- * Function Prototypes.
- */
-CK_RV
-handle2session(CK_SESSION_HANDLE hSession, kms_session_t **session_p);
-
-void
-kms_delete_all_sessions(boolean_t wrapper_only);
-
-void
-kms_delete_all_objects_in_session(kms_session_t *sp,
-    boolean_t wrapper_only);
-
-CK_RV
-kms_add_session(CK_SLOT_ID slotID, CK_FLAGS flags,
-    CK_VOID_PTR pApplication, CK_NOTIFY notify, CK_ULONG *phSession);
-
-void
-kms_delete_session(kms_session_t *sp,
-    boolean_t lock_held, boolean_t wrapper_only);
-
-void
-kms_session_delay_free(kms_session_t *sp);
-
-void kms_acquire_all_slots_mutexes();
-void kms_release_all_slots_mutexes();
-
-#ifdef	__cplusplus
-}
-#endif
-
-#endif /* _KMSSESSION_H */
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsSessionUtil.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,491 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include <pthread.h>
-#include <syslog.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <security/cryptoki.h>
-#include "kmsGlobal.h"
-#include "kmsSession.h"
-#include "kmsSlot.h"
-#include "kmsKeystoreUtil.h"
-
-static pthread_mutex_t delete_sessions_mutex = PTHREAD_MUTEX_INITIALIZER;
-CK_ULONG kms_session_cnt = 0;
-CK_ULONG kms_session_rw_cnt = 0;
-
-/*
- * Delete all the sessions. First, obtain the slot lock.
- * Then start to delete one session at a time.  The boolean wrapper_only
- * argument indicates that whether the caller only wants to clean up the
- * session wrappers and the object wrappers in the library.
- * - When this function is called by C_CloseAllSessions or indirectly by
- *   C_Finalize, wrapper_only is FALSE.
- * - When this function is called by cleanup_child, wrapper_only is TRUE.
- */
-void
-kms_delete_all_sessions(boolean_t wrapper_only)
-{
-	kms_session_t *session_p;
-	kms_slot_t *pslot;
-
-	(void) pthread_mutex_lock(&delete_sessions_mutex);
-
-	pslot = get_slotinfo();
-
-	/*
-	 * Delete all the sessions in the slot's session list.
-	 * The routine kms_delete_session() updates the linked list.
-	 * So, we do not need to maintain the list here.
-	 */
-	for (;;) {
-		(void) pthread_mutex_lock(&pslot->sl_mutex);
-		if (pslot->sl_sess_list == NULL)
-			break;
-
-		session_p = pslot->sl_sess_list;
-		/*
-		 * Set SESSION_IS_CLOSING flag so any access to this
-		 * session will be rejected.
-		 */
-		(void) pthread_mutex_lock(&session_p->session_mutex);
-		if (session_p->ses_close_sync & SESSION_IS_CLOSING) {
-			(void) pthread_mutex_unlock(&session_p->session_mutex);
-			continue;
-		}
-		session_p->ses_close_sync |= SESSION_IS_CLOSING;
-		(void) pthread_mutex_unlock(&session_p->session_mutex);
-
-		(void) pthread_mutex_unlock(&pslot->sl_mutex);
-		kms_delete_session(session_p, B_FALSE, wrapper_only);
-	}
-	(void) pthread_mutex_unlock(&pslot->sl_mutex);
-	(void) pthread_mutex_unlock(&delete_sessions_mutex);
-}
-
-static int
-labelcmp(const void *a, const void *b)
-{
-	objlabel_t *obja = (objlabel_t *)a;
-	objlabel_t *objb = (objlabel_t *)b;
-	int n;
-
-	if (obja == NULL || obja->label == NULL)
-		return (-1);
-	if (objb == NULL || objb->label == NULL)
-		return (1);
-
-	n = strcmp((char *)obja->label, (char *)objb->label);
-	if (n == 0)
-		return (0);
-	else if (n < 0)
-		return (-1);
-	return (1);
-}
-
-/*
- * Create a new session struct, and add it to the slot's session list.
- *
- * This function is called by C_OpenSession(), which hold the slot lock.
- */
-CK_RV
-kms_add_session(CK_SLOT_ID slotID, CK_FLAGS flags, CK_VOID_PTR pApplication,
-	CK_NOTIFY notify, CK_ULONG *sessionhandle_p)
-{
-	kms_session_t *new_sp = NULL;
-	kms_slot_t	*pslot;
-	CK_RV rv;
-
-	/* Allocate a new session struct */
-	new_sp = calloc(1, sizeof (kms_session_t));
-	if (new_sp == NULL) {
-		return (CKR_HOST_MEMORY);
-	}
-
-	new_sp->magic_marker = KMSTOKEN_SESSION_MAGIC;
-	new_sp->pApplication = pApplication;
-	new_sp->Notify = notify;
-	new_sp->flags = flags;
-	new_sp->ses_RO = (flags & CKF_RW_SESSION) ? B_FALSE : B_TRUE;
-	new_sp->ses_slotid = slotID;
-	new_sp->object_list = NULL;
-	new_sp->ses_refcnt = 0;
-	new_sp->ses_close_sync = 0;
-
-	avl_create(&new_sp->objlabel_tree, labelcmp, sizeof (objlabel_t),
-	    KMSOFFSETOF(objlabel_t, nodep));
-
-	rv = kms_reload_labels(new_sp);
-	if (rv != CKR_OK) {
-		free(new_sp);
-		return (rv);
-	}
-
-	/* Initialize the lock for the newly created session */
-	if (pthread_mutex_init(&new_sp->session_mutex, NULL) != 0) {
-		free(new_sp);
-		return (CKR_CANT_LOCK);
-	}
-
-	pslot = get_slotinfo();
-
-	(void) pthread_mutex_init(&new_sp->ses_free_mutex, NULL);
-	(void) pthread_cond_init(&new_sp->ses_free_cond, NULL);
-
-	/* Insert the new session in front of the slot's session list */
-	if (pslot->sl_sess_list == NULL) {
-		pslot->sl_sess_list = new_sp;
-		new_sp->prev = NULL;
-		new_sp->next = NULL;
-	} else {
-		pslot->sl_sess_list->prev = new_sp;
-		new_sp->next = pslot->sl_sess_list;
-		new_sp->prev = NULL;
-		pslot->sl_sess_list = new_sp;
-	}
-
-	/* Type casting the address of a session struct to a session handle */
-	*sessionhandle_p =  (CK_ULONG)new_sp;
-	return (CKR_OK);
-}
-
-/*
- * Delete a session:
- * - Remove the session from the slot's session list.
- * - Release all the objects created by the session.
- *
- * The boolean argument slot_lock_held is used to indicate that whether
- * the caller of this function holds the slot lock or not.
- * - When called by kms_delete_all_sessions(), which is called by
- *   C_Finalize() or C_CloseAllSessions() -- slot_lock_held = TRUE.
- * - When called by C_CloseSession() -- slot_lock_held = FALSE.
- */
-void
-kms_delete_session(kms_session_t *session_p,
-    boolean_t slot_lock_held, boolean_t wrapper_only)
-{
-	kms_slot_t	*pslot;
-	kms_object_t *objp;
-	kms_object_t *objp1;
-
-	/*
-	 * Check to see if the caller holds the lock on the global
-	 * session list. If not, we need to acquire that lock in
-	 * order to proceed.
-	 */
-	pslot = get_slotinfo();
-	if (!slot_lock_held) {
-		/* Acquire the slot lock */
-		(void) pthread_mutex_lock(&pslot->sl_mutex);
-	}
-
-	/*
-	 * Remove the session from the slot's session list first.
-	 */
-	if (pslot->sl_sess_list == session_p) {
-		/* Session is the first one in the list */
-		if (session_p->next) {
-			pslot->sl_sess_list = session_p->next;
-			session_p->next->prev = NULL;
-		} else {
-			/* Session is the only one in the list */
-			pslot->sl_sess_list = NULL;
-		}
-	} else {
-		/* Session is not the first one in the list */
-		if (session_p->next) {
-			/* Session is in the middle of the list */
-			session_p->prev->next = session_p->next;
-			session_p->next->prev = session_p->prev;
-		} else {
-			/* Session is the last one in the list */
-			session_p->prev->next = NULL;
-		}
-	}
-
-	if (!slot_lock_held) {
-		/*
-		 * If the slot lock is obtained by
-		 * this function, then release that lock after
-		 * removing the session from session linked list.
-		 * We want the releasing of the objects of the
-		 * session, and freeing of the session itself to
-		 * be done without holding the slot's session list
-		 * lock.
-		 */
-		(void) pthread_mutex_unlock(&pslot->sl_mutex);
-	}
-
-	/* Acquire the individual session lock */
-	(void) pthread_mutex_lock(&session_p->session_mutex);
-
-	/*
-	 * Make sure another thread hasn't freed the session.
-	 */
-	if (session_p->magic_marker != KMSTOKEN_SESSION_MAGIC) {
-		(void) pthread_mutex_unlock(&session_p->session_mutex);
-		return;
-	}
-
-	/*
-	 * The deletion of a session must be blocked when the session reference
-	 * count is not zero. This means that if the thread that is attempting
-	 * to close the session must wait until the prior operations on this
-	 * session are finished.
-	 *
-	 * Unless we are being forced to shut everything down, this only
-	 * happens if the library's _fini() is running not if someone
-	 * explicitly called C_Finalize().
-	 */
-	(void) pthread_mutex_lock(&session_p->ses_free_mutex);
-
-	if (wrapper_only) {
-		session_p->ses_refcnt = 0;
-	}
-
-	while (session_p->ses_refcnt != 0) {
-		/*
-		 * We set the SESSION_REFCNT_WAITING flag before we put
-		 * this closing thread in a wait state, so other non-closing
-		 * operation thread will wake it up only when
-		 * the session reference count becomes zero and this flag
-		 * is set.
-		 */
-		session_p->ses_close_sync |= SESSION_REFCNT_WAITING;
-		(void) pthread_mutex_unlock(&session_p->session_mutex);
-		(void) pthread_cond_wait(&session_p->ses_free_cond,
-		    &session_p->ses_free_mutex);
-		(void) pthread_mutex_lock(&session_p->session_mutex);
-	}
-
-	session_p->ses_close_sync &= ~SESSION_REFCNT_WAITING;
-
-	/* Mark session as no longer valid. */
-	session_p->magic_marker = 0;
-
-	(void) pthread_mutex_unlock(&session_p->ses_free_mutex);
-	(void) pthread_mutex_destroy(&session_p->ses_free_mutex);
-	(void) pthread_cond_destroy(&session_p->ses_free_cond);
-
-	/*
-	 * Remove all the objects created in this session, waiting
-	 * until each object's refcnt is 0.
-	 */
-	kms_delete_all_objects_in_session(session_p, wrapper_only);
-
-	/* Close the KMS agent profile. */
-	KMS_UnloadProfile(&session_p->kmsProfile);
-
-	/* Reset SESSION_IS_CLOSING flag. */
-	session_p->ses_close_sync &= ~SESSION_IS_CLOSING;
-
-	kms_clear_label_list(&session_p->objlabel_tree);
-	avl_destroy(&session_p->objlabel_tree);
-
-	(void) pthread_mutex_unlock(&session_p->session_mutex);
-	/* Destroy the individual session lock */
-	(void) pthread_mutex_destroy(&session_p->session_mutex);
-
-	kms_session_delay_free(session_p);
-
-	/*
-	 * If there is no more session remained in this slot, reset the slot's
-	 * session state to CKU_PUBLIC.  Also, clean up all the token object
-	 * wrappers in the library for this slot.
-	 */
-	/* Acquire the slot lock if lock is not held */
-	if (!slot_lock_held) {
-		(void) pthread_mutex_lock(&pslot->sl_mutex);
-	}
-
-	if (pslot->sl_sess_list == NULL) {
-		/* Reset the session auth state. */
-		pslot->sl_state = CKU_PUBLIC;
-
-		/* Clean up token object wrappers. */
-		objp = pslot->sl_tobj_list;
-		while (objp) {
-			objp1 = objp->next;
-			(void) pthread_mutex_destroy(&objp->object_mutex);
-			(void) kms_cleanup_object(objp);
-			free(objp);
-			objp = objp1;
-		}
-		pslot->sl_tobj_list = NULL;
-	}
-
-	/* Release the slot lock if lock is not held */
-	if (!slot_lock_held) {
-		(void) pthread_mutex_unlock(&pslot->sl_mutex);
-	}
-}
-
-/*
- * This function is used to type cast a session handle to a pointer to
- * the session struct. Also, it does the following things:
- * 1) Check to see if the session struct is tagged with a session
- *    magic number. This is to detect when an application passes
- *    a bogus session pointer.
- * 2) Acquire the locks on the designated session.
- * 3) Check to see if the session is in the closing state that another
- *    thread is performing.
- * 4) Increment the session reference count by one. This is to prevent
- *    this session from being closed by other thread.
- * 5) Release the locks on the designated session.
- */
-CK_RV
-handle2session(CK_SESSION_HANDLE hSession, kms_session_t **session_p)
-{
-	kms_session_t *sp = (kms_session_t *)(hSession);
-	CK_RV rv;
-
-	if ((sp == NULL) ||
-	    (sp->magic_marker != KMSTOKEN_SESSION_MAGIC)) {
-		return (CKR_SESSION_HANDLE_INVALID);
-	} else {
-		(void) pthread_mutex_lock(&sp->session_mutex);
-		if (sp->ses_close_sync & SESSION_IS_CLOSING) {
-			rv = CKR_SESSION_CLOSED;
-		} else {
-			/* Increment session ref count. */
-			sp->ses_refcnt++;
-			rv = CKR_OK;
-		}
-		(void) pthread_mutex_unlock(&sp->session_mutex);
-	}
-
-	if (rv == CKR_OK)
-		*session_p = sp;
-
-	return (rv);
-}
-
-/*
- * This function adds the to-be-freed session to a linked list.
- * When the number of sessions queued in the linked list reaches the
- * maximum threshold MAX_SES_TO_BE_FREED, it will free the first
- * session (FIFO) in the list.
- */
-void
-kms_session_delay_free(kms_session_t *sp)
-{
-	kms_session_t *tmp;
-
-	(void) pthread_mutex_lock(&ses_delay_freed.ses_to_be_free_mutex);
-
-	/* Add the newly deleted session at the end of the list */
-	sp->next = NULL;
-	if (ses_delay_freed.first == NULL) {
-		ses_delay_freed.last = sp;
-		ses_delay_freed.first = sp;
-	} else {
-		ses_delay_freed.last->next = sp;
-		ses_delay_freed.last = sp;
-	}
-
-	if (++ses_delay_freed.count >= MAX_SES_TO_BE_FREED) {
-		/*
-		 * Free the first session in the list only if
-		 * the total count reaches maximum threshold.
-		 */
-		ses_delay_freed.count--;
-		tmp = ses_delay_freed.first->next;
-		free(ses_delay_freed.first);
-		ses_delay_freed.first = tmp;
-	}
-	(void) pthread_mutex_unlock(&ses_delay_freed.ses_to_be_free_mutex);
-}
-
-/*
- * Acquire all slots' mutexes and all their sessions' mutexes.
- * Order:
- * 1. delete_sessions_mutex
- * for each slot:
- *  2. pslot->sl_mutex
- *  for each session:
- *   3. session_p->session_mutex
- *   4. session_p->ses_free_mutex
- */
-void
-kms_acquire_all_slots_mutexes()
-{
-	kms_slot_t *pslot;
-	kms_session_t *session_p;
-
-	(void) pthread_mutex_lock(&delete_sessions_mutex);
-
-	pslot = get_slotinfo();
-	(void) pthread_mutex_lock(&pslot->sl_mutex);
-
-	/* Iterate through sessions acquiring all mutexes */
-	session_p = pslot->sl_sess_list;
-	while (session_p) {
-		struct object *objp;
-
-		(void) pthread_mutex_lock(&session_p->session_mutex);
-		(void) pthread_mutex_lock(&session_p->ses_free_mutex);
-
-		objp = session_p->object_list;
-		while (objp) {
-			(void) pthread_mutex_lock(&objp->object_mutex);
-			objp = objp->next;
-		}
-
-		session_p = session_p->next;
-	}
-}
-
-/* Release in opposite order to kms_acquire_all_slots_mutexes(). */
-void
-kms_release_all_slots_mutexes()
-{
-	kms_slot_t *pslot;
-	kms_session_t *session_p;
-
-	pslot = get_slotinfo();
-
-	/* Iterate through sessions releasing all mutexes */
-	session_p = pslot->sl_sess_list;
-	while (session_p) {
-		struct object *objp;
-
-		objp = session_p->object_list;
-		while (objp) {
-			(void) pthread_mutex_unlock(&objp->object_mutex);
-			objp = objp->next;
-		}
-
-		(void) pthread_mutex_unlock(&session_p->ses_free_mutex);
-		(void) pthread_mutex_unlock(&session_p->session_mutex);
-		session_p = session_p->next;
-	}
-
-	/*
-	 * acquired in "acquire_all_slots_mutexes" which only
-	 * happens just prior to a fork.
-	 */
-	(void) pthread_mutex_unlock(&pslot->sl_mutex);
-	(void) pthread_mutex_unlock(&delete_sessions_mutex);
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsSign.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,92 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include <security/cryptoki.h>
-#include "kmsGlobal.h"
-
-/*ARGSUSED*/
-CK_RV
-C_SignInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
-    CK_OBJECT_HANDLE hKey)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_Sign(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen,
-    CK_BYTE_PTR pSignature, CK_ULONG_PTR pulSignatureLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-
-/*ARGSUSED*/
-CK_RV
-C_SignUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
-    CK_ULONG ulPartLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_SignFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature,
-    CK_ULONG_PTR pulSignatureLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_SignRecoverInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
-    CK_OBJECT_HANDLE hKey)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-
-}
-
-/*ARGSUSED*/
-CK_RV
-C_SignRecover(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData,
-    CK_ULONG ulDataLen, CK_BYTE_PTR pSignature, CK_ULONG_PTR pulSignatureLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsSlot.h	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#ifndef	_KMS_SLOT_H
-#define	_KMS_SLOT_H
-
-#ifdef	__cplusplus
-extern "C" {
-#endif
-
-#include "kmsSession.h"
-
-#define	CKU_PUBLIC	2	/* default session auth. state */
-
-typedef struct kms_slot {
-	CK_SLOT_ID		sl_provider_id;	/* kernel provider ID */
-	kms_session_t 		*sl_sess_list;	/* all open sessions */
-	CK_USER_TYPE		sl_state;	/* session's auth. state */
-	struct object 		*sl_tobj_list; 	/* token object list */
-	pthread_mutex_t		sl_mutex;
-
-	/*
-	 * The valid values are defined above.
-	 */
-	uint32_t		sl_flags;
-	int			total_threshold_count;
-} kms_slot_t;
-
-#define	KMS_TOKEN_SLOTID 1
-#define	KMS_SLOTS	1
-
-/*
- * Function Prototypes.
- */
-CK_RV kms_slottable_init();
-void cleanup_slottable();
-kms_slot_t *get_slotinfo();
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _KMS_SLOT_H */
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsSlotToken.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,386 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-
-/*
- * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-
-#include <stdlib.h>
-#include <strings.h>
-#include <security/cryptoki.h>
-#include <cryptoutil.h>
-#include <errno.h>
-#include <aes_impl.h>
-
-#include "kmsGlobal.h"
-#include "kmsSlot.h"
-#include "kmsKeystoreUtil.h"
-
-/*
- * Just basic AES mechanisms (for now...)
- */
-static CK_MECHANISM_TYPE kms_mechanisms[] = {
-	CKM_AES_KEY_GEN,
-	CKM_AES_CBC,
-	CKM_AES_CBC_PAD
-};
-
-/*
- * KMS only supports 256 bit keys, so the range below is MAX-MAX
- * instead of MIN-MAX.
- */
-static CK_MECHANISM_INFO kms_mechanism_info[] = {
-	{AES_MAX_KEY_BYTES, AES_MAX_KEY_BYTES, CKF_GENERATE},
-	{AES_MAX_KEY_BYTES, AES_MAX_KEY_BYTES, CKF_ENCRYPT|CKF_DECRYPT|
-		CKF_WRAP|CKF_UNWRAP},		/* CKM_AES_CBC */
-	{AES_MAX_KEY_BYTES, AES_MAX_KEY_BYTES, CKF_ENCRYPT|CKF_DECRYPT|
-		CKF_WRAP|CKF_UNWRAP}		/* CKM_AES_CBC_PAD */
-};
-
-/* ARGSUSED */
-CK_RV
-C_GetSlotList(CK_BBOOL tokenPresent, CK_SLOT_ID_PTR pSlotList,
-    CK_ULONG_PTR pulCount)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	if (pulCount == NULL) {
-		return (CKR_ARGUMENTS_BAD);
-	}
-
-	/*
-	 * If KMS is not available or initialized, return 0 slots
-	 * but CKR_OK status.
-	 */
-	if (!kms_is_initialized()) {
-		*pulCount = 0;
-		return (CKR_OK);
-	}
-
-	if (pSlotList == NULL) {
-		*pulCount = KMS_SLOTS;
-		return (CKR_OK);
-	}
-
-	if (*pulCount < KMS_SLOTS) {
-		*pulCount = KMS_SLOTS;
-		return (CKR_BUFFER_TOO_SMALL);
-	}
-
-	*pulCount = 1;
-	pSlotList[0] = KMS_TOKEN_SLOTID;
-
-	return (CKR_OK);
-}
-
-CK_RV
-C_GetSlotInfo(CK_SLOT_ID slotID, CK_SLOT_INFO_PTR pInfo)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	if (slotID != KMS_TOKEN_SLOTID ||
-	    !kms_is_initialized()) {
-		return (CKR_SLOT_ID_INVALID);
-	}
-
-	if (pInfo == NULL)
-		return (CKR_ARGUMENTS_BAD);
-
-	/* Provide information about the slot in the provided buffer */
-	(void) strncpy((char *)pInfo->slotDescription, SLOT_DESCRIPTION,
-	    64);
-	(void) strncpy((char *)pInfo->manufacturerID, MANUFACTURER_ID, 32);
-	pInfo->flags = CKF_TOKEN_PRESENT;
-	pInfo->hardwareVersion.major = HARDWARE_VERSION_MAJOR;
-	pInfo->hardwareVersion.minor = HARDWARE_VERSION_MINOR;
-	pInfo->firmwareVersion.major = FIRMWARE_VERSION_MAJOR;
-	pInfo->firmwareVersion.minor = FIRMWARE_VERSION_MINOR;
-
-	return (CKR_OK);
-}
-
-CK_RV
-C_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo)
-{
-	kms_cfg_info_t kmscfg;
-	KMSAGENT_PROFILE_FLAGS kmsflags = 0;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	if (slotID != KMS_TOKEN_SLOTID ||
-	    !kms_is_initialized())
-		return (CKR_SLOT_ID_INVALID);
-
-	if (pInfo == NULL)
-		return (CKR_ARGUMENTS_BAD);
-
-	/* Provide information about a token in the provided buffer */
-	(void) strncpy((char *)pInfo->label, KMS_TOKEN_LABEL, 32);
-	(void) strncpy((char *)pInfo->manufacturerID, MANUFACTURER_ID, 32);
-	(void) strncpy((char *)pInfo->model, KMS_TOKEN_MODEL, 16);
-	(void) strncpy((char *)pInfo->serialNumber, KMS_TOKEN_SERIAL, 16);
-
-	pInfo->flags = KMS_TOKEN_FLAGS;
-	pInfo->ulMaxSessionCount = CK_EFFECTIVELY_INFINITE;
-	pInfo->ulSessionCount = kms_session_cnt;
-	pInfo->ulMaxRwSessionCount = CK_EFFECTIVELY_INFINITE;
-	pInfo->ulRwSessionCount = kms_session_rw_cnt;
-	pInfo->ulMaxPinLen = MAX_PIN_LEN;
-	pInfo->ulMinPinLen = MIN_PIN_LEN;
-	pInfo->ulTotalPublicMemory = CK_UNAVAILABLE_INFORMATION;
-	pInfo->ulFreePublicMemory = CK_UNAVAILABLE_INFORMATION;
-	pInfo->ulTotalPrivateMemory = CK_UNAVAILABLE_INFORMATION;
-	pInfo->ulFreePrivateMemory = CK_UNAVAILABLE_INFORMATION;
-	pInfo->hardwareVersion.major = HARDWARE_VERSION_MAJOR;
-	pInfo->hardwareVersion.minor = HARDWARE_VERSION_MINOR;
-	pInfo->firmwareVersion.major = FIRMWARE_VERSION_MAJOR;
-	pInfo->firmwareVersion.minor = FIRMWARE_VERSION_MINOR;
-	(void) memset(pInfo->utcTime, ' ', 16);
-
-	if (KMS_GetConfigInfo(&kmscfg) == CKR_OK &&
-	    KMSAgent_GetProfileStatus(kmscfg.name, &kmsflags) ==
-	    KMS_AGENT_STATUS_OK) {
-
-		if ((kmsflags & KMSAGENT_PROFILE_EXISTS_FLAG) &&
-		    (kmsflags & KMSAGENT_CLIENTKEY_EXISTS_FLAG))
-			pInfo->flags |= CKF_TOKEN_INITIALIZED;
-		else
-			pInfo->flags &= ~CKF_TOKEN_INITIALIZED;
-	}
-	return (CKR_OK);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_WaitForSlotEvent(CK_FLAGS flags, CK_SLOT_ID_PTR pSlot, CK_VOID_PTR pReserved)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-
-CK_RV
-C_GetMechanismList(CK_SLOT_ID slotID,
-	CK_MECHANISM_TYPE_PTR pMechanismList,
-	CK_ULONG_PTR pulCount)
-{
-	int i;
-	ulong_t mechnum;
-
-	/*
-	 * Just check to see if the library has been
-	 * properly initialized.
-	 */
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/*
-	 * This is different from above check, this verifies that
-	 * the KMS token is actually configured.
-	 */
-	if (slotID != KMS_TOKEN_SLOTID ||
-	    !kms_is_initialized())
-		return (CKR_SLOT_ID_INVALID);
-
-	mechnum = sizeof (kms_mechanisms) / sizeof (CK_MECHANISM_TYPE);
-	if (pMechanismList == NULL) {
-		*pulCount = mechnum;
-		return (CKR_OK);
-	}
-	if (*pulCount < mechnum) {
-		*pulCount = mechnum;
-		return (CKR_BUFFER_TOO_SMALL);
-	}
-	for (i = 0; i < mechnum; i++)
-		pMechanismList[i] = kms_mechanisms[i];
-
-	*pulCount = mechnum;
-
-	return (CKR_OK);
-}
-
-CK_RV
-C_GetMechanismInfo(CK_SLOT_ID slotID, CK_MECHANISM_TYPE type,
-    CK_MECHANISM_INFO_PTR pInfo)
-{
-	CK_ULONG mechnum, i;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	if (slotID != KMS_TOKEN_SLOTID ||
-	    !kms_is_initialized())
-		return (CKR_SLOT_ID_INVALID);
-
-	if (pInfo == NULL) {
-		return (CKR_ARGUMENTS_BAD);
-	}
-
-	mechnum = sizeof (kms_mechanisms) / sizeof (CK_MECHANISM_TYPE);
-	for (i = 0; i < mechnum; i++) {
-		if (kms_mechanisms[i] == type)
-			break;
-	}
-
-	if (i == mechnum)
-		/* unsupported mechanism */
-		return (CKR_MECHANISM_INVALID);
-
-	pInfo->ulMinKeySize = kms_mechanism_info[i].ulMinKeySize;
-	pInfo->ulMaxKeySize = kms_mechanism_info[i].ulMaxKeySize;
-	pInfo->flags = kms_mechanism_info[i].flags;
-
-	return (CKR_OK);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_InitToken(CK_SLOT_ID slotID, CK_UTF8CHAR_PTR pPin, CK_ULONG ulPinLen,
-    CK_UTF8CHAR_PTR pLabel)
-{
-	CK_RV rv = CKR_FUNCTION_FAILED;
-	kms_cfg_info_t kmscfg;
-	KMSAGENT_PROFILE_FLAGS kmsflags;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	if (slotID != KMS_TOKEN_SLOTID ||
-	    !kms_is_initialized())
-		return (CKR_SLOT_ID_INVALID);
-
-	if (KMS_GetConfigInfo(&kmscfg) != CKR_OK ||
-	    KMSAgent_GetProfileStatus(kmscfg.name, &kmsflags) !=
-	    KMS_AGENT_STATUS_OK)
-		return (CKR_FUNCTION_FAILED);
-
-	if (!(kmsflags & KMSAGENT_PROFILE_EXISTS_FLAG) ||
-	    !(kmsflags & KMSAGENT_CLIENTKEY_EXISTS_FLAG)) {
-		KMSClientProfile kmsProfile;
-		/*
-		 * Attempt to enroll and load a KMS profile.
-		 * This will force the KMSAgent library to fetch
-		 * the profile, the CA certificate, and the
-		 * client private key and store them locally so that
-		 * the KMS agent API can be used later.
-		 */
-		rv = KMS_LoadProfile(
-		    &kmsProfile,
-		    &kmscfg,
-		    (const char *)pPin,
-		    (size_t)ulPinLen);
-
-		if (rv == CKR_OK)
-			KMS_UnloadProfile(&kmsProfile);
-	}
-	return (rv);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_InitPIN(CK_SESSION_HANDLE hSession, CK_UTF8CHAR_PTR pPin, CK_ULONG ulPinLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/*
-	 * Could be supported once the agent library supports
-	 * storing the client certificate in a PKCS#12 file.
-	 */
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-CK_RV
-C_SetPIN(CK_SESSION_HANDLE hSession, CK_UTF8CHAR_PTR pOldPin,
-    CK_ULONG ulOldLen, CK_UTF8CHAR_PTR pNewPin, CK_ULONG ulNewLen)
-{
-	CK_RV	rv = CKR_OK;
-	kms_session_t *session_p;
-	boolean_t ses_lock_held = B_FALSE;
-
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	/*
-	 * Obtain the session pointer. Also, increment the session
-	 * reference count.
-	 */
-	rv = handle2session(hSession, &session_p);
-	if (rv != CKR_OK)
-		return (rv);
-
-	/* Make sure it is a RW session. */
-	if (session_p->ses_RO) {
-		rv = CKR_SESSION_READ_ONLY;
-		REFRELE(session_p, ses_lock_held);
-		return (rv);
-	}
-
-	/*
-	 * If the token is not yet initialized, we cannot set the pin.
-	 */
-	if (!kms_is_initialized()) {
-		REFRELE(session_p, ses_lock_held);
-		return (CKR_FUNCTION_FAILED);
-	}
-
-	if (pOldPin == NULL || ulOldLen == 0 ||
-	    pNewPin == NULL || ulNewLen == 0) {
-		REFRELE(session_p, ses_lock_held);
-		return (CKR_ARGUMENTS_BAD);
-	}
-
-	if (!kms_is_pin_set()) {
-		/*
-		 * We don't yet support this mode since
-		 * the KMS private key file will automatically
-		 * be generated using the KMS Agent passphrase
-		 * which is initialized out-of-band.
-		 */
-		rv = CKR_FUNCTION_NOT_SUPPORTED;
-
-	} else {
-		/*
-		 * Login to KMS by attempting to load the profile using
-		 * the given password.
-		 */
-		rv = KMS_LoadProfile(&session_p->kmsProfile,
-		    &session_p->configInfo,
-		    (const char *)pOldPin,
-		    (size_t)ulOldLen);
-		if (rv == CKR_USER_ANOTHER_ALREADY_LOGGED_IN)
-			rv = CKR_OK;
-
-		if (rv == CKR_OK)
-			rv = KMS_ChangeLocalPWD(session_p,
-			    (const char *)pOldPin,
-			    (const char *)pNewPin);
-	}
-
-	REFRELE(session_p, ses_lock_held);
-	return (rv);
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsSlottable.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- */
-/*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include <errno.h>
-#include <security/cryptoki.h>
-#include "kmsGlobal.h"
-#include "kmsSlot.h"
-
-static kms_slot_t	*slotinfo = NULL;
-
-/*
- * Initialize the slotinfo record.
- *
- * This function is called from C_Initialize() only.  Since C_Initialize()
- * holds the global mutex lock, there is no need to acquire another lock
- * in this routine to protect the slot table.
- */
-CK_RV
-kms_slottable_init()
-{
-	CK_RV rv = CKR_OK;
-
-	/* Allocate space for the slot table */
-	slotinfo = calloc(KMS_SLOTS, sizeof (kms_slot_t));
-	if (slotinfo == NULL)
-		return (CKR_HOST_MEMORY);
-
-	slotinfo->sl_sess_list = NULL;
-	slotinfo->sl_tobj_list = NULL;
-	slotinfo->sl_state = CKU_PUBLIC;
-
-	/* Initialize this slot's mutex */
-	if (pthread_mutex_init(&slotinfo->sl_mutex, NULL) != 0) {
-		(void) free(slotinfo);
-		slotinfo = NULL;
-		return (CKR_FUNCTION_FAILED);
-	}
-
-	return (rv);
-}
-
-void
-cleanup_slottable()
-{
-	if (slotinfo != NULL) {
-		(void) pthread_mutex_destroy(&slotinfo->sl_mutex);
-		(void) free(slotinfo);
-		slotinfo = NULL;
-	}
-}
-
-kms_slot_t *
-get_slotinfo()
-{
-	return (slotinfo);
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/kmsVerify.c	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,91 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License (the "License").
- * You may not use this file except in compliance with the License.
- *
- * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
- * or http://www.opensolaris.org/os/licensing.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information: Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include <security/cryptoki.h>
-#include "kmsGlobal.h"
-
-/*ARGSUSED*/
-CK_RV
-C_VerifyInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
-    CK_OBJECT_HANDLE hKey)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_Verify(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pData, CK_ULONG ulDataLen,
-    CK_BYTE_PTR pSignature, CK_ULONG ulSignatureLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_VerifyUpdate(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pPart,
-    CK_ULONG ulPartLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_VerifyFinal(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature,
-    CK_ULONG ulSignatureLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_VerifyRecoverInit(CK_SESSION_HANDLE hSession, CK_MECHANISM_PTR pMechanism,
-    CK_OBJECT_HANDLE hKey)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
-
-/*ARGSUSED*/
-CK_RV
-C_VerifyRecover(CK_SESSION_HANDLE hSession, CK_BYTE_PTR pSignature,
-    CK_ULONG ulSignatureLen, CK_BYTE_PTR pData, CK_ULONG_PTR pulDataLen)
-{
-	if (!kms_initialized)
-		return (CKR_CRYPTOKI_NOT_INITIALIZED);
-
-	return (CKR_FUNCTION_NOT_SUPPORTED);
-}
--- a/usr/src/lib/pkcs11/pkcs11_kms/common/mapfile-vers	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,98 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-#
-
-$mapfile_version 2
-
-SYMBOL_VERSION SUNW_1.1 {
-    global:
-	C_CancelFunction;
-	C_CloseAllSessions;
-	C_CloseSession;
-	C_CopyObject;
-	C_CreateObject;
-	C_Decrypt;
-	C_DecryptDigestUpdate;
-	C_DecryptFinal;
-	C_DecryptInit;
-	C_DecryptUpdate;
-	C_DecryptVerifyUpdate;
-	C_DeriveKey;
-	C_DestroyObject;
-	C_Digest;
-	C_DigestEncryptUpdate;
-	C_DigestFinal;
-	C_DigestInit;
-	C_DigestKey;
-	C_DigestUpdate;
-	C_Encrypt;
-	C_EncryptFinal;
-	C_EncryptInit;
-	C_EncryptUpdate;
-	C_Finalize;
-	C_FindObjects;
-	C_FindObjectsFinal;
-	C_FindObjectsInit;
-	C_GenerateKey;
-	C_GenerateKeyPair;
-	C_GenerateRandom;
-	C_GetAttributeValue;
-	C_GetFunctionList;
-	C_GetFunctionStatus;
-	C_GetInfo;
-	C_GetMechanismInfo;
-	C_GetMechanismList;
-	C_GetObjectSize;
-	C_GetOperationState;
-	C_GetSessionInfo;
-	C_GetSlotInfo;
-	C_GetSlotList;
-	C_GetTokenInfo;
-	C_Initialize;
-	C_InitPIN;
-	C_InitToken;
-	C_Login;
-	C_Logout;
-	C_OpenSession;
-	C_SeedRandom;
-	C_SetAttributeValue;
-	C_SetOperationState;
-	C_SetPIN;
-	C_Sign;
-	C_SignEncryptUpdate;
-	C_SignFinal;
-	C_SignInit;
-	C_SignRecover;
-	C_SignRecoverInit;
-	C_SignUpdate;
-	C_UnwrapKey;
-	C_Verify;
-	C_VerifyFinal;
-	C_VerifyInit;
-	C_VerifyRecover;
-	C_VerifyRecoverInit;
-	C_VerifyUpdate;
-	C_WaitForSlotEvent;
-	C_WrapKey;
-   local:
-       *;
-};
--- a/usr/src/lib/pkcs11/pkcs11_kms/i386/Makefile	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-#
-
-
-include ../Makefile.com
-
-install: all $(ROOTLIBS) $(ROOTLINKS)
--- a/usr/src/lib/pkcs11/pkcs11_kms/sparc/Makefile	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-#
-include ../Makefile.com
-
-install: all $(ROOTLIBS) $(ROOTLINKS)
--- a/usr/src/lib/pkcs11/pkcs11_kms/sparcv9/Makefile	Sun Mar 11 22:00:47 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-#
-# CDDL HEADER START
-#
-# The contents of this file are subject to the terms of the
-# Common Development and Distribution License (the "License").
-# You may not use this file except in compliance with the License.
-#
-# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
-# or http://www.opensolaris.org/os/licensing.
-# See the License for the specific language governing permissions
-# and limitations under the License.
-#
-# When distributing Covered Code, include this CDDL HEADER in each
-# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
-# If applicable, add the following below this CDDL HEADER, with the
-# fields enclosed by brackets "[]" replaced with your own identifying
-# information: Portions Copyright [yyyy] [name of copyright owner]
-#
-# CDDL HEADER END
-#
-
-#
-# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
-#
-
-
-include ../Makefile.com
-include ../../../Makefile.lib.64
-
-LINTCHECKFLAGS += -erroff=E_INCONS_ARG_DECL2 \
-		-erroff=E_INCONS_ARG_USED2 \
-		-erroff=E_INCONS_VAL_TYPE_DECL2 \
-		-erroff=E_INCONS_VAL_TYPE_USED2 \
-		-erroff=E_FUNC_DECL_VAR_ARG2
-
-install: all $(ROOTLIBS64) $(ROOTLINKS64)
--- a/usr/src/pkg/manifests/system-library-security-crypto-pkcs11_kms.mf	Sun Mar 11 22:00:47 2012 -0700
+++ b/usr/src/pkg/manifests/system-library-security-crypto-pkcs11_kms.mf	Thu Feb 02 20:16:51 2012 +1100
@@ -23,25 +23,5 @@
 
 set name=pkg.fmri \
     value=pkg:/system/library/security/crypto/pkcs11_kms@$(PKGVERS)
-set name=pkg.description value="PKCS#11 KMS Provider"
-set name=pkg.summary value=pkcs11_kms
-set name=info.classification \
-    value=org.opensolaris.category.2008:System/Security
+set name=pkg.obsolete value=true
 set name=variant.arch value=$(ARCH)
-dir path=usr group=sys
-dir path=usr/bin
-dir path=usr/lib
-dir path=usr/lib/$(ARCH64)
-dir path=usr/lib/security
-dir path=usr/lib/security/$(ARCH64)
-file path=usr/bin/kmscfg group=sys mode=0555
-file path=usr/lib/$(ARCH64)/libkmsagent.so.1
-file path=usr/lib/libkmsagent.so.1
-file path=usr/lib/security/$(ARCH64)/pkcs11_kms.so.1
-file path=usr/lib/security/pkcs11_kms.so.1
-license cr_Sun license=cr_Sun
-license lic_CDDL license=lic_CDDL
-license usr/src/lib/libkmsagent/THIRDPARTYLICENSE \
-    license=usr/src/lib/libkmsagent/THIRDPARTYLICENSE
-link path=usr/lib/security/$(ARCH64)/pkcs11_kms.so target=pkcs11_kms.so.1
-link path=usr/lib/security/pkcs11_kms.so target=pkcs11_kms.so.1